diff --git a/._.DS_Store b/$common/fragments/__init__.py similarity index 100% rename from ._.DS_Store rename to $common/fragments/__init__.py diff --git a/$common/fragments/config.py b/$common/fragments/config.py new file mode 100644 index 00000000..8d93a8e6 --- /dev/null +++ b/$common/fragments/config.py @@ -0,0 +1,45 @@ +import yaml +from pathlib import Path + + +# Using a yaml file, we can extract the kind of exercise/feedback +def config_file_to_dict(file_path): + # Check github wiki for more information + default_values = { + "has_feedback": False, + "quorum": 1.0, + "feedback_kind": None, + "coverage_stats": None, + "prohibited": {}, + "plagiarism": False, + "external_libraries": None, + "status_message": { + 0: "Your code has successfully passed all tests for this mission.", + 1: "Your code failed all tests for this mission.", + 2: "You used prohibited instructions (such as System.exit) : read carefully the assignment.", + 3: "Your tests don't cover all cases.", + 252: "The memory limit of your program is exceeded.", + 253: "The time limit for running your program has been exceeded." + } + } + + # no config file so use basic settings + if not Path(file_path).exists(): + return default_values + else: + + with open(file_path, "r") as stream: + # File must not be empty + load_config = yaml.load(stream) + # If no file given + if load_config is None: + return default_values + else: + # Merge dictionaries + # The ** operator doesn't correctly merged the dictionary "status_message", so monkey patching this + load_config["status_message"] = { + **default_values["status_message"], + **(load_config["status_message"] if "status_message" in load_config else {}) + } + + return {**default_values, **load_config} diff --git a/$common/fragments/constants.py b/$common/fragments/constants.py new file mode 100644 index 00000000..6eb4c5cc --- /dev/null +++ b/$common/fragments/constants.py @@ -0,0 +1,57 @@ +from pathlib import Path + +##################################### +# CONSTANTS # +##################################### + +# Current path of the run script of the task (/task) +CWD = Path.cwd() + +# File extension +FILE_EXTENSION = ".java" + +# Our code +# For Python 3.5 , we cannot use Path like object directly yet ( fixed in 3.6) +# we have to do : str(PathLibObject) + +# Where we keep the good and wrong implementations +PATH_FLAVOUR = str(CWD / "flavour") + +# Our templates +PATH_TEMPLATES = str(CWD / "templates") + +# Source code to be tested +PATH_SRC = str(CWD / "src") + +# .class storage path +PATH_CLASSES = str(CWD / "classes") + +# Test runner +RUNNER_PATH = str(CWD / "src" / "StudentTestRunner.java") + +# Runner name as expected from java (Java wants a package name and not the full path so) +RUNNER_JAVA_NAME = str(Path(RUNNER_PATH).relative_to(CWD)).replace("/", ".") + +# Config file to generate feedback for every kind of exercises +FEEDBACK_REVIEW_PATH = str(CWD / "feedback_settings.yaml") + +# JaCoCo needs a jar to execute its stuff +JAR_FILE = str(CWD / "task_evaluation.jar") + +# Manifest for JAR FILE (since it ignores -cp option) +MANIFEST_FILE = str(CWD / "MANIFEST.MF") + +# JaCoCo coverage file path +JACOCO_EXEC_FILE = str(CWD / "jacoco.exec") + +# JaCoCo classfiles for report ( only take the useful one in flavour) +JACOCO_CLASS_FILES = [str(Path(PATH_CLASSES) / "flavour")] + +# JaCoCo result file in xml +JACOCO_RESULT_FILE = str(CWD / "coverage_result.xml") + +# Libraries folder +LIBS_FOLDER = "/course/common/libs" + +# Default Libraries used in the runscript ( stored in LIBS_FOLDER ) +DEFAULT_LIBRARIES = ["junit-4.12.jar", "hamcrest-core-1.3.jar", "JavaGrading.jar"] diff --git a/$common/fragments/coverage.py b/$common/fragments/coverage.py new file mode 100644 index 00000000..d3fdf345 --- /dev/null +++ b/$common/fragments/coverage.py @@ -0,0 +1,31 @@ +from xml.etree import ElementTree as ET +from fragments.constants import * + + +# https://docs.python.org/3/library/xml.etree.elementtree.html +# Extract the stats given by Jacoco into a list so that we can use that later +def extract_stats(path_to_xml_file=JACOCO_RESULT_FILE): + tree = ET.parse(path_to_xml_file) + root = tree.getroot() + return [ + { + "covered": int(coverage_data.get("covered")), + "missed": int(coverage_data.get("missed")), + "type": coverage_data.get("type") + } + for coverage_data in root.findall("./counter") + ] + + +# Command to generate the result as a xml file from JaCoCo +# https://stackoverflow.com/questions/47717538/usage-of-jacococli-jar-with-multiple-classfiles +def generate_coverage_report(exec_file=JACOCO_EXEC_FILE, + classes_path=JACOCO_CLASS_FILES, + xml_output=JACOCO_RESULT_FILE): + return "{} -jar {} report {} {} --xml {}".format( + "java", + str(Path(LIBS_FOLDER) / "jacococli.jar"), + exec_file, + ' '.join(["--classfiles {}".format(str(c)) for c in classes_path]), + xml_output + ) \ No newline at end of file diff --git a/$common/fragments/extraction.py b/$common/fragments/extraction.py new file mode 100644 index 00000000..49b68bfc --- /dev/null +++ b/$common/fragments/extraction.py @@ -0,0 +1,77 @@ +import re + +from fragments import coverage, helper + + +# Extract score and message that use JavaGrading +def extract_java_grading_result(result, feedback_settings): + # we have a feedback from JavaGrading + # Fetch total for INGInious + + # WARNING : there could be multiple TOTAL in the stdout + # So we must merge everything + + # Strips not useful things of JavaGrading + + # Display array of test suite results only if student didn't use prohib' instruction + display = False if result.returncode == 2 else True + + result_string = result.stdout.replace("--- GRADE ---", "").replace("--- END GRADE ---", "") + regex_strip = r"TOTAL \d*[.]?\d*\/\d*[.]?\d*" + regex_strip2 = r"TOTAL WITHOUT IGNORED \d*[.]?\d*\/\d*[.]?\d*" + + # Remove match + result_string = re.sub(regex_strip, '', result_string) + result_string = re.sub(regex_strip2, '', result_string) + + regex = '\*\*TOTAL\*\*",,\*\*(\d*[.]?\d*\/\d*[.]?\d*)\*\*' + matches = re.findall(regex, result.stdout) + + # convert everything in float + converted_results = [ + [ + float(item) + for item in match.split("/") + ] + for match in matches + ] + + student_result, total_result = [sum(i) for i in zip(*converted_results)] + + return student_result / total_result, result_string if display \ + else feedback_settings["status_message"].get(result.returncode, "Uncommon Failure") + + +# Extract result from JaCoCo +def extract_jacoco_result(feedback_settings): + coverage_stats = feedback_settings["coverage_stats"] + # No coverage stats , cannot evaluate this + if not coverage_stats: + return 0.0, "NO COVERAGE CRITERIA WERE GIVEN" + else: + # Generate the xml report file + gen_report = coverage.generate_coverage_report() + print("GENERATING THE EXEC FILE : {}".format(gen_report)) + helper.run_command(gen_report) + + # extract stats + coverage_result = coverage.extract_stats() + filtered_coverage_result = [x for x in coverage_result if x["type"] in coverage_stats] + print(filtered_coverage_result) + + # generate score and message + + covered = sum(x["covered"] for x in filtered_coverage_result) + total = covered + sum(x["missed"] for x in filtered_coverage_result) + + msg = '\n'.join( + [ + "{}:\t{}/{}".format(c["type"], c["covered"], c["covered"] + c["missed"]) + for c in filtered_coverage_result + ] + ) + + # For security (if report gives 0 at total, don't try to apply division) + ratio = covered / total if total > 0 else 0.0 + + return ratio, msg diff --git a/$common/fragments/feedback.py b/$common/fragments/feedback.py new file mode 100644 index 00000000..99db3346 --- /dev/null +++ b/$common/fragments/feedback.py @@ -0,0 +1,72 @@ +import sys + +from inginious import feedback, rst + +from fragments import helper +from fragments.extraction import * + + +# Throw a fatal error if the given code doesn't compile +def compilation_feedback(result): + if result.returncode != 0: + msg = "Your file did not compile : please don't use INGINIOUS as an IDE ..." + print(result.stderr) + feedback.set_global_feedback(msg) + feedback.set_global_result("failed") + feedback.set_grade(0.0) + sys.exit(0) + + +# Generate the final message(s) to student +def result_feedback(result, feedback_settings): + # Top level message + msg = "{}\n".format(feedback_settings["status_message"].get(result.returncode, "Uncommon Failure")) + + # if we have a feedback, use it + if feedback_settings["has_feedback"]: + + # JavaGrading + if feedback_settings["feedback_kind"] == "JavaGrading": + score_ratio, msg = extract_java_grading_result(result, feedback_settings) + # To prevent some genius to have success grade with a prohibited + score_ratio = 0.0 if result.returncode == 2 else score_ratio + feedback_result(score_ratio, feedback_settings) + feedback.set_global_feedback(msg, True) + + # JaCoCo + if feedback_settings["feedback_kind"] == "JaCoCo": + if result.returncode == 0: + score_ratio, msg = extract_jacoco_result(feedback_settings) + feedback_result(score_ratio, feedback_settings) + message_index = 0 if score_ratio >= feedback_settings["quorum"] else 3 + msg2 = "{}\n".format(feedback_settings["status_message"].get(message_index, "Uncommon Failure")) + feedback.set_global_feedback(msg2, True) + feedback.set_global_feedback(rst.get_codeblock("java", msg), True) + else: + feedback.set_global_feedback(msg, True) + feedback_result(0.0, feedback_settings) + + # For exercises with binary result : 0 or 100 + else: + feedback.set_global_feedback(msg, True) + score_ratio = 1.0 if result.returncode == 0 else 0.0 + feedback_result(score_ratio, feedback_settings) + + +# Decision function to decide if the student pass the required level for this task +def feedback_result(score_ratio, feedback_settings): + result = "success" if score_ratio >= feedback_settings["quorum"] else "failed" + feedback.set_global_result(result) + # If coverage exercise, give him 100% if >= quorum else the basic score + updated_score_ratio = 1.0 if result == "success" and feedback_settings["feedback_kind"] == "JaCoCo" else score_ratio + feedback.set_grade(updated_score_ratio * 100) + + +def handle_prohibited_statements(feedback_settings): + result = helper.contains_prohibited_statement(feedback_settings) + if result: + msg = feedback_settings["status_message"].get(2, "Uncommon Failure") + feedback.set_global_feedback(msg) + feedback.set_global_result("failed") + feedback.set_grade(0.0) + sys.exit(0) diff --git a/$common/fragments/helper.py b/$common/fragments/helper.py new file mode 100644 index 00000000..636287ef --- /dev/null +++ b/$common/fragments/helper.py @@ -0,0 +1,183 @@ +#!/bin/python3 + +# les imports +import subprocess +from inginious import input +from collections import namedtuple +from pathlib import Path + +from fragments.constants import * + +ProcessOutput = namedtuple('ProcessOutput', ['returncode', 'stdout', 'stderr']) + + +# Libraries to be add to run/compile via option -cp of java(c) +def libraries(external_libraries): + + # Current folder (not really used but why not) + libs = '.' + + # other librarires if provided + libs += ":{}".format( + ':'.join([ + str(Path(LIBS_FOLDER) / lib) + for lib in DEFAULT_LIBRARIES + ]) + ) if DEFAULT_LIBRARIES else "" + + # We want to include specific libraries for this task + if external_libraries: + libs += ":{}".format( + ':'.join([ + str(CWD / lib) + for lib in external_libraries + ]) + ) + + return libs + + +# Wrapper to execute system commands and easily get stdout, stderr steams and return code +def run_command(cmd, cwd=None, universal_newlines=None): + proc = subprocess.Popen(cmd, cwd=cwd, shell=True, + stderr=subprocess.PIPE, + stdout=subprocess.PIPE, + universal_newlines=universal_newlines) + proc.wait() # waiting the child process to finish + + stdout = proc.stdout.read().decode('utf-8') + stderr = proc.stderr.read().decode('utf-8') + + return ProcessOutput(proc.returncode, stdout, stderr) + + +# Store the given problemid code into the base_path folder ( "student" by default) and return the filename +# Warning : this function is not used in the runfile but I keep it just to remember how to deal with get_input +def store_uploaded_file(problem_id, base_path): + student_upload = input.get_input(problem_id) + filename = input.get_input("{}:filename".format(problem_id)) + filename_with_path = Path(base_path) / filename + + # Stores a copy of this file inside "student" folder + with open(filename_with_path, 'w+') as fileUpload: + fileUpload.write(student_upload.decode('utf-8')) + fileUpload.close() + + return filename_with_path + + +# Find all java packages folder inside path recursively ( useful for javac ) +def find_files_folder_in_path(path): + base_folder = Path(path) + files = Path(path).rglob("*{}".format(FILE_EXTENSION)) if base_folder.exists() else [] + return { + str(Path(relative_path(file)).parent) + for file in files + } + + +# Find all java files +def find_files_in_path(path): + base_folder = Path(path) + files = Path(path).rglob("*{}".format(FILE_EXTENSION)) if base_folder.exists() else [] + return { + relative_path(file) + for file in files + } + + +# Apply parse_template on each file stored in base_path +def apply_templates(base_path): + basepath = Path(base_path) + files = basepath.rglob("*{}".format(FILE_EXTENSION)) + + for file in files: + src = str(file) + input.parse_template(src) + + +# Generate compile/run command for given file +# the files_input argument is either an array of string or a string : +# 1. If it is a string, it means we want to run "java" command with only one file +# 2. Else , it means we want to run "javac" command (possible to use globing characters * ) +def generate_java_command_string(files_input, libs, command="java", coverage=False, is_jar=False): + # file(s) to compile or to execute + files = ' '.join([str(v) for v in files_input]) if command == "javac" else without_extension(files_input) + + # options to be used + # space in key is needed as we simply concat key/value strings + options = [ + # Only add the coverage option when needed + ("-javaagent:", str(Path(LIBS_FOLDER) / "jacocoagent.jar") if coverage else None), + # Include libraries if not a jar file + # See N°2 : https://javarevisited.blogspot.com/2012/10/5-ways-to-add-multiple-jar-to-classpath-java.html + ("-cp ", libs if not is_jar else None), + # enable assertions + ("-ea", "" if command == "java" else None), + # If we use a jar file for coverage + ("-jar ", "{}.jar".format(files) if is_jar else None), + # If javac , stores classes into one folder + ("-d ", PATH_CLASSES if command == "javac" else None) + ] + + # only include not null options values + str_options = ' '.join( + ["{}{}".format(option, value) for (option, value) in options if value is not None] + ) + + # If jar, no need to format the last argument + if is_jar: + return "{} {}".format(command, str_options) + else: + return "{} {} {}".format(command, str_options, files) + + +# to append ccommand with args +def append_args_to_command(cmd, args): + return "{} {}".format(cmd, ' '.join([str(v) for v in args])) + + +# filename without extension +def without_extension(path): + return path.replace(Path(path).suffix, "") + + +# Give relative path : Java interpret /task as package ( when it's not be the case) +def relative_path(path, base_path=CWD): + return str(Path(path).relative_to(base_path)) + + +# Since using a jar simply ignore -cp option, we have no other choice to create a manifest to add the libraries +def create_manifest(libraries): + with open(MANIFEST_FILE, 'w+') as manifest: + libs = libraries.split(":") + libs_str = "{} {}\n".format("Class-Path:", ' '.join(libs)) + manifest.write(libs_str) + manifest.close() + + +# Create a jar file using the class files inside the PATH_CLASSES +def generate_jar_file(main_class=RUNNER_JAVA_NAME, dst=JAR_FILE, manifest=MANIFEST_FILE): + return "jar -cmvfe {} {} {} {}".format(manifest, dst, without_extension(main_class), ".") + + +# Check out if any statment of the prohibited array is contained in the @problem input +def contains_prohibited_statement_in_input(prohibited_array, problem_id): + student_upload = input.get_input(problem_id) + # Extract the given code into a single String file with no space, leading stuff, etc... + # FYI: It is done to simplify the verification as statements in java could be on multiple lines + source_code_as_string = student_upload.strip().replace("\n", '').replace("\t", '').replace(" ", '') + + # if any match , student tried to cheat + return any( + prohibited_statment.strip().replace(" ", '') in source_code_as_string + for prohibited_statment in prohibited_array + ) + + +# Main method that will be invoked by runfile.py to check all given problem inputs for prohibited instructions +def contains_prohibited_statement(feedback_settings): + return any( + contains_prohibited_statement_in_input(statements, problem_id) + for (problem_id, statements) in feedback_settings["prohibited"].items() + ) diff --git a/$common/libs/JavaGrading.jar b/$common/libs/JavaGrading.jar new file mode 100644 index 00000000..d4dfba57 Binary files /dev/null and b/$common/libs/JavaGrading.jar differ diff --git a/m1stack/student/hamcrest-core-1.3.jar b/$common/libs/hamcrest-core-1.3.jar similarity index 100% rename from m1stack/student/hamcrest-core-1.3.jar rename to $common/libs/hamcrest-core-1.3.jar diff --git a/$common/libs/jacocoagent.jar b/$common/libs/jacocoagent.jar new file mode 100644 index 00000000..1a9e96db Binary files /dev/null and b/$common/libs/jacocoagent.jar differ diff --git a/$common/libs/jacococli.jar b/$common/libs/jacococli.jar new file mode 100644 index 00000000..78a57e7c Binary files /dev/null and b/$common/libs/jacococli.jar differ diff --git a/m1stack/student/junit-4.12.jar b/$common/libs/junit-4.12.jar similarity index 100% rename from m1stack/student/junit-4.12.jar rename to $common/libs/junit-4.12.jar diff --git a/$common/runfile.py b/$common/runfile.py new file mode 100644 index 00000000..90f5192c --- /dev/null +++ b/$common/runfile.py @@ -0,0 +1,135 @@ +#!/bin/python3 +from pathlib import Path +from inginious import input + +##################################### +# Our import for common function # +##################################### + +from fragments import helper, feedback, config +from fragments.constants import * + + +def main(): + ##################################### + # Load feedback task settings # + ##################################### + + feedback_settings = config.config_file_to_dict(FEEDBACK_REVIEW_PATH) + print("FEEDBACK SETTINGS LOADED") + + ##################################### + # Check prohibited statements # + ##################################### + + feedback.handle_prohibited_statements(feedback_settings) + print("NO PROHIBITED STATMENT(S) DETECTED") + + ##################################### + # Apply templates # + ##################################### + + # we have a folder where we have only these files + helper.apply_templates(PATH_TEMPLATES) + print("TEMPLATE(S) APPLIED") + + ##################################### + # CREATE A CLASSES FOLDER # + ##################################### + + Path(PATH_CLASSES).mkdir(parents=True, exist_ok=True) + print("SET UP CLASSES FOLDER FOR COMPILATION") + + ##################################### + # EXTERNAL LIBRARIES TO USE ? # + ##################################### + + libs = helper.libraries(feedback_settings["external_libraries"]) + + ##################################### + # COMPILE ALL CODE IN SRC # + ##################################### + + # Possible paths where we could keep source code : src, templates and flavour (optional) + folders_to_compile = [PATH_SRC, PATH_TEMPLATES, PATH_FLAVOUR] + + # For custom structure, for example many packages in folders_to_compile + # we need a generic way to find all files to compiles + all_folders_to_compile = [ + item + for sublist in + [ + helper.find_files_folder_in_path(folder) + for folder in folders_to_compile + ] + for item in sublist + ] + + # Files that must be compiled by javac + files_to_compile = [ + "{}/{}{}".format(folder, "*", FILE_EXTENSION) + for folder in all_folders_to_compile + ] + + compile_cmd = helper.generate_java_command_string(files_to_compile, libs, "javac") + print("COMPILING CODE : {}".format(compile_cmd)) + result = helper.run_command(compile_cmd) + + # handle compilation errors + feedback.compilation_feedback(result) + + ##################################### + # GENERATE A JAR FILE # + ##################################### + + # We need a manifest in order to make the created jar runnable + helper.create_manifest(libs) + + # Create a jar file + create_jar = helper.generate_jar_file() + print("GENERATING JAR : {}".format(create_jar)) + + # WARNING ; JUST FOR JAVA TO NOT MISUNDERSTAND OUR STRUCTURE, we have to change the CWD in the command + result = helper.run_command(create_jar, PATH_CLASSES) + + # For debug the jar construction + # print(result.stdout) + + # handle compilation errors + feedback.compilation_feedback(result) + + ##################################### + # RUN TEST RUNNER # + ##################################### + + # invoke runner with classes as arg + # in the case of code coverage ( Jacoco ) , we need to generate also the report file (exec ) by the JaCoco agent + coverage_required = True if feedback_settings["feedback_kind"] == "JaCoCo" else False + + run_code = helper.generate_java_command_string(JAR_FILE, libs, coverage=coverage_required, is_jar=True) + print("RUNNING CODE : {}".format(run_code)) + result = helper.run_command(run_code) + + ##################################### + # Show and handle results # + ##################################### + feedback.result_feedback(result, feedback_settings) + + ##################################### + # Prepare archive for JPlag # + ##################################### + if feedback_settings["plagiarism"]: + + student_name = input.get_input("@username") + + # The files filled by the student are all inside PATH_TEMPLATES + files_to_be_tested = helper.find_files_in_path(PATH_TEMPLATES) + + # Creates the archive like expected by JPlag + for student_file in files_to_be_tested: + command = "archive -a {} -o {}".format(student_file, student_name) + helper.run_command(command, universal_newlines=True) + + +if __name__ == "__main__": + main() diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 9184acd6..00000000 Binary files a/.DS_Store and /dev/null differ diff --git a/._p1circularlinkedlist b/._p1circularlinkedlist deleted file mode 100644 index acb92c01..00000000 Binary files a/._p1circularlinkedlist and /dev/null differ diff --git a/p1circularlinkedlist/public/.DS_Store b/EXAM0119LinearProbing/.DS_Store similarity index 100% rename from p1circularlinkedlist/public/.DS_Store rename to EXAM0119LinearProbing/.DS_Store diff --git a/EXAM0119LinearProbing/._.DS_Store b/EXAM0119LinearProbing/._.DS_Store new file mode 100644 index 00000000..49f02e40 Binary files /dev/null and b/EXAM0119LinearProbing/._.DS_Store differ diff --git a/EXAM0119LinearProbing/data/hash-attack.txt b/EXAM0119LinearProbing/data/hash-attack.txt new file mode 100644 index 00000000..8609eda0 --- /dev/null +++ b/EXAM0119LinearProbing/data/hash-attack.txt @@ -0,0 +1,10000 @@ +aoffckzdaoffckzdaoffckzd +aoffckzdaoffckzdatafwjsh +aoffckzdaoffckzdbhlijevx +aoffckzdaoffckzdbrbjscia +aoffckzdaoffckzdcyxowxpb +aoffckzdaoffckzdddnqavbj +aoffckzdaoffckzddiiqutzn +aoffckzdaoffckzddndrjssr +aoffckzdaoffckzddwyssqez +aoffckzdaoffckzdegjuqmpg +aoffckzdaoffckzdelevflik +aoffckzdaoffckzdeuzwoizs +aoffckzdaoffckzdezuxdhsw +aoffckzdaoffckzdfoazvcwh +aoffckzdaoffckzdhanbdvpq +aoffckzdaoffckzdhfibxuiu +aoffckzdaoffckzdhkdcmtby +aoffckzdaoffckzdhtydvqtb +aoffckzdaoffckzdhytekpmf +aoffckzdaoffckzdiiegilwr +aoffckzdaoffckzdirzhrjiz +aoffckzdaoffckzdjbkjpftg +aoffckzdaoffckzdjgfkeemk +aoffckzdaoffckzdjlakydfo +aoffckzdaoffckzdjuvmcaww +aoffckzdaoffckzdkxrqrxft +aoffckzdaoffckzdlhcsptqa +aoffckzdaoffckzdlqxtyrci +aoffckzdaoffckzdmaivwnmu +aoffckzdaoffckzdmfdwlmfy +aoffckzdaoffckzdmoyxujxb +aoffckzdaoffckzdmttyjiqf +aoffckzdaoffckzdpssfqqjt +aoffckzdaoffckzdpxngfpcx +aoffckzdaoffckzdqcdhomua +aoffckzdaoffckzdqlyixkgi +aoffckzdaoffckzdqvokbhxq +aoffckzdaoffckzdraelkfjy +aoffckzdaoffckzdrounibuf +aoffckzdatafwjshaoffckzd +aoffckzdatafwjshatafwjsh +aoffckzdatafwjshbhlijevx +aoffckzdatafwjshbrbjscia +aoffckzdatafwjshcyxowxpb +aoffckzdatafwjshddnqavbj +aoffckzdatafwjshdiiqutzn +aoffckzdatafwjshdndrjssr +aoffckzdatafwjshdwyssqez +aoffckzdatafwjshegjuqmpg +aoffckzdatafwjshelevflik +aoffckzdatafwjsheuzwoizs +aoffckzdatafwjshezuxdhsw +aoffckzdatafwjshfoazvcwh +aoffckzdatafwjshhanbdvpq +aoffckzdatafwjshhfibxuiu +aoffckzdatafwjshhkdcmtby +aoffckzdatafwjshhtydvqtb +aoffckzdatafwjshhytekpmf +aoffckzdatafwjshiiegilwr +aoffckzdatafwjshirzhrjiz +aoffckzdatafwjshjbkjpftg +aoffckzdatafwjshjgfkeemk +aoffckzdatafwjshjlakydfo +aoffckzdatafwjshjuvmcaww +aoffckzdatafwjshkxrqrxft +aoffckzdatafwjshlhcsptqa +aoffckzdatafwjshlqxtyrci +aoffckzdatafwjshmaivwnmu +aoffckzdatafwjshmfdwlmfy +aoffckzdatafwjshmoyxujxb +aoffckzdatafwjshmttyjiqf +aoffckzdatafwjshpssfqqjt +aoffckzdatafwjshpxngfpcx +aoffckzdatafwjshqcdhomua +aoffckzdatafwjshqlyixkgi +aoffckzdatafwjshqvokbhxq +aoffckzdatafwjshraelkfjy +aoffckzdatafwjshrounibuf +aoffckzdbhlijevxaoffckzd +aoffckzdbhlijevxatafwjsh +aoffckzdbhlijevxbhlijevx +aoffckzdbhlijevxbrbjscia +aoffckzdbhlijevxcyxowxpb +aoffckzdbhlijevxddnqavbj +aoffckzdbhlijevxdiiqutzn +aoffckzdbhlijevxdndrjssr +aoffckzdbhlijevxdwyssqez +aoffckzdbhlijevxegjuqmpg +aoffckzdbhlijevxelevflik +aoffckzdbhlijevxeuzwoizs +aoffckzdbhlijevxezuxdhsw +aoffckzdbhlijevxfoazvcwh +aoffckzdbhlijevxhanbdvpq +aoffckzdbhlijevxhfibxuiu +aoffckzdbhlijevxhkdcmtby +aoffckzdbhlijevxhtydvqtb +aoffckzdbhlijevxhytekpmf +aoffckzdbhlijevxiiegilwr +aoffckzdbhlijevxirzhrjiz +aoffckzdbhlijevxjbkjpftg +aoffckzdbhlijevxjgfkeemk +aoffckzdbhlijevxjlakydfo +aoffckzdbhlijevxjuvmcaww +aoffckzdbhlijevxkxrqrxft +aoffckzdbhlijevxlhcsptqa +aoffckzdbhlijevxlqxtyrci +aoffckzdbhlijevxmaivwnmu +aoffckzdbhlijevxmfdwlmfy +aoffckzdbhlijevxmoyxujxb +aoffckzdbhlijevxmttyjiqf +aoffckzdbhlijevxpssfqqjt +aoffckzdbhlijevxpxngfpcx +aoffckzdbhlijevxqcdhomua +aoffckzdbhlijevxqlyixkgi +aoffckzdbhlijevxqvokbhxq +aoffckzdbhlijevxraelkfjy +aoffckzdbhlijevxrounibuf +aoffckzdbrbjsciaaoffckzd +aoffckzdbrbjsciaatafwjsh +aoffckzdbrbjsciabhlijevx +aoffckzdbrbjsciabrbjscia +aoffckzdbrbjsciacyxowxpb +aoffckzdbrbjsciaddnqavbj +aoffckzdbrbjsciadiiqutzn +aoffckzdbrbjsciadndrjssr +aoffckzdbrbjsciadwyssqez +aoffckzdbrbjsciaegjuqmpg +aoffckzdbrbjsciaelevflik +aoffckzdbrbjsciaeuzwoizs +aoffckzdbrbjsciaezuxdhsw +aoffckzdbrbjsciafoazvcwh +aoffckzdbrbjsciahanbdvpq +aoffckzdbrbjsciahfibxuiu +aoffckzdbrbjsciahkdcmtby +aoffckzdbrbjsciahtydvqtb +aoffckzdbrbjsciahytekpmf +aoffckzdbrbjsciaiiegilwr +aoffckzdbrbjsciairzhrjiz +aoffckzdbrbjsciajbkjpftg +aoffckzdbrbjsciajgfkeemk +aoffckzdbrbjsciajlakydfo +aoffckzdbrbjsciajuvmcaww +aoffckzdbrbjsciakxrqrxft +aoffckzdbrbjscialhcsptqa +aoffckzdbrbjscialqxtyrci +aoffckzdbrbjsciamaivwnmu +aoffckzdbrbjsciamfdwlmfy +aoffckzdbrbjsciamoyxujxb +aoffckzdbrbjsciamttyjiqf +aoffckzdbrbjsciapssfqqjt +aoffckzdbrbjsciapxngfpcx +aoffckzdbrbjsciaqcdhomua +aoffckzdbrbjsciaqlyixkgi +aoffckzdbrbjsciaqvokbhxq +aoffckzdbrbjsciaraelkfjy +aoffckzdbrbjsciarounibuf +aoffckzdcyxowxpbaoffckzd +aoffckzdcyxowxpbatafwjsh +aoffckzdcyxowxpbbhlijevx +aoffckzdcyxowxpbbrbjscia +aoffckzdcyxowxpbcyxowxpb +aoffckzdcyxowxpbddnqavbj +aoffckzdcyxowxpbdiiqutzn +aoffckzdcyxowxpbdndrjssr +aoffckzdcyxowxpbdwyssqez +aoffckzdcyxowxpbegjuqmpg +aoffckzdcyxowxpbelevflik +aoffckzdcyxowxpbeuzwoizs +aoffckzdcyxowxpbezuxdhsw +aoffckzdcyxowxpbfoazvcwh +aoffckzdcyxowxpbhanbdvpq +aoffckzdcyxowxpbhfibxuiu +aoffckzdcyxowxpbhkdcmtby +aoffckzdcyxowxpbhtydvqtb +aoffckzdcyxowxpbhytekpmf +aoffckzdcyxowxpbiiegilwr +aoffckzdcyxowxpbirzhrjiz +aoffckzdcyxowxpbjbkjpftg +aoffckzdcyxowxpbjgfkeemk +aoffckzdcyxowxpbjlakydfo +aoffckzdcyxowxpbjuvmcaww +aoffckzdcyxowxpbkxrqrxft +aoffckzdcyxowxpblhcsptqa +aoffckzdcyxowxpblqxtyrci +aoffckzdcyxowxpbmaivwnmu +aoffckzdcyxowxpbmfdwlmfy +aoffckzdcyxowxpbmoyxujxb +aoffckzdcyxowxpbmttyjiqf +aoffckzdcyxowxpbpssfqqjt +aoffckzdcyxowxpbpxngfpcx +aoffckzdcyxowxpbqcdhomua +aoffckzdcyxowxpbqlyixkgi +aoffckzdcyxowxpbqvokbhxq +aoffckzdcyxowxpbraelkfjy +aoffckzdcyxowxpbrounibuf +aoffckzdddnqavbjaoffckzd +aoffckzdddnqavbjatafwjsh +aoffckzdddnqavbjbhlijevx +aoffckzdddnqavbjbrbjscia +aoffckzdddnqavbjcyxowxpb +aoffckzdddnqavbjddnqavbj +aoffckzdddnqavbjdiiqutzn +aoffckzdddnqavbjdndrjssr +aoffckzdddnqavbjdwyssqez +aoffckzdddnqavbjegjuqmpg +aoffckzdddnqavbjelevflik +aoffckzdddnqavbjeuzwoizs +aoffckzdddnqavbjezuxdhsw +aoffckzdddnqavbjfoazvcwh +aoffckzdddnqavbjhanbdvpq +aoffckzdddnqavbjhfibxuiu +aoffckzdddnqavbjhkdcmtby +aoffckzdddnqavbjhtydvqtb +aoffckzdddnqavbjhytekpmf +aoffckzdddnqavbjiiegilwr +aoffckzdddnqavbjirzhrjiz +aoffckzdddnqavbjjbkjpftg +aoffckzdddnqavbjjgfkeemk +aoffckzdddnqavbjjlakydfo +aoffckzdddnqavbjjuvmcaww +aoffckzdddnqavbjkxrqrxft +aoffckzdddnqavbjlhcsptqa +aoffckzdddnqavbjlqxtyrci +aoffckzdddnqavbjmaivwnmu +aoffckzdddnqavbjmfdwlmfy +aoffckzdddnqavbjmoyxujxb +aoffckzdddnqavbjmttyjiqf +aoffckzdddnqavbjpssfqqjt +aoffckzdddnqavbjpxngfpcx +aoffckzdddnqavbjqcdhomua +aoffckzdddnqavbjqlyixkgi +aoffckzdddnqavbjqvokbhxq +aoffckzdddnqavbjraelkfjy +aoffckzdddnqavbjrounibuf +aoffckzddiiqutznaoffckzd +aoffckzddiiqutznatafwjsh +aoffckzddiiqutznbhlijevx +aoffckzddiiqutznbrbjscia +aoffckzddiiqutzncyxowxpb +aoffckzddiiqutznddnqavbj +aoffckzddiiqutzndiiqutzn +aoffckzddiiqutzndndrjssr +aoffckzddiiqutzndwyssqez +aoffckzddiiqutznegjuqmpg +aoffckzddiiqutznelevflik +aoffckzddiiqutzneuzwoizs +aoffckzddiiqutznezuxdhsw +aoffckzddiiqutznfoazvcwh +aoffckzddiiqutznhanbdvpq +aoffckzddiiqutznhfibxuiu +aoffckzddiiqutznhkdcmtby +aoffckzddiiqutznhtydvqtb +aoffckzddiiqutznhytekpmf +aoffckzddiiqutzniiegilwr +aoffckzddiiqutznirzhrjiz +aoffckzddiiqutznjbkjpftg +aoffckzddiiqutznjgfkeemk +aoffckzddiiqutznjlakydfo +aoffckzddiiqutznjuvmcaww +aoffckzddiiqutznkxrqrxft +aoffckzddiiqutznlhcsptqa +aoffckzddiiqutznlqxtyrci +aoffckzddiiqutznmaivwnmu +aoffckzddiiqutznmfdwlmfy +aoffckzddiiqutznmoyxujxb +aoffckzddiiqutznmttyjiqf +aoffckzddiiqutznpssfqqjt +aoffckzddiiqutznpxngfpcx +aoffckzddiiqutznqcdhomua +aoffckzddiiqutznqlyixkgi +aoffckzddiiqutznqvokbhxq +aoffckzddiiqutznraelkfjy +aoffckzddiiqutznrounibuf +aoffckzddndrjssraoffckzd +aoffckzddndrjssratafwjsh +aoffckzddndrjssrbhlijevx +aoffckzddndrjssrbrbjscia +aoffckzddndrjssrcyxowxpb +aoffckzddndrjssrddnqavbj +aoffckzddndrjssrdiiqutzn +aoffckzddndrjssrdndrjssr +aoffckzddndrjssrdwyssqez +aoffckzddndrjssregjuqmpg +aoffckzddndrjssrelevflik +aoffckzddndrjssreuzwoizs +aoffckzddndrjssrezuxdhsw +aoffckzddndrjssrfoazvcwh +aoffckzddndrjssrhanbdvpq +aoffckzddndrjssrhfibxuiu +aoffckzddndrjssrhkdcmtby +aoffckzddndrjssrhtydvqtb +aoffckzddndrjssrhytekpmf +aoffckzddndrjssriiegilwr +aoffckzddndrjssrirzhrjiz +aoffckzddndrjssrjbkjpftg +aoffckzddndrjssrjgfkeemk +aoffckzddndrjssrjlakydfo +aoffckzddndrjssrjuvmcaww +aoffckzddndrjssrkxrqrxft +aoffckzddndrjssrlhcsptqa +aoffckzddndrjssrlqxtyrci +aoffckzddndrjssrmaivwnmu +aoffckzddndrjssrmfdwlmfy +aoffckzddndrjssrmoyxujxb +aoffckzddndrjssrmttyjiqf +aoffckzddndrjssrpssfqqjt +aoffckzddndrjssrpxngfpcx +aoffckzddndrjssrqcdhomua +aoffckzddndrjssrqlyixkgi +aoffckzddndrjssrqvokbhxq +aoffckzddndrjssrraelkfjy +aoffckzddndrjssrrounibuf +aoffckzddwyssqezaoffckzd +aoffckzddwyssqezatafwjsh +aoffckzddwyssqezbhlijevx +aoffckzddwyssqezbrbjscia +aoffckzddwyssqezcyxowxpb +aoffckzddwyssqezddnqavbj +aoffckzddwyssqezdiiqutzn +aoffckzddwyssqezdndrjssr +aoffckzddwyssqezdwyssqez +aoffckzddwyssqezegjuqmpg +aoffckzddwyssqezelevflik +aoffckzddwyssqezeuzwoizs +aoffckzddwyssqezezuxdhsw +aoffckzddwyssqezfoazvcwh +aoffckzddwyssqezhanbdvpq +aoffckzddwyssqezhfibxuiu +aoffckzddwyssqezhkdcmtby +aoffckzddwyssqezhtydvqtb +aoffckzddwyssqezhytekpmf +aoffckzddwyssqeziiegilwr +aoffckzddwyssqezirzhrjiz +aoffckzddwyssqezjbkjpftg +aoffckzddwyssqezjgfkeemk +aoffckzddwyssqezjlakydfo +aoffckzddwyssqezjuvmcaww +aoffckzddwyssqezkxrqrxft +aoffckzddwyssqezlhcsptqa +aoffckzddwyssqezlqxtyrci +aoffckzddwyssqezmaivwnmu +aoffckzddwyssqezmfdwlmfy +aoffckzddwyssqezmoyxujxb +aoffckzddwyssqezmttyjiqf +aoffckzddwyssqezpssfqqjt +aoffckzddwyssqezpxngfpcx +aoffckzddwyssqezqcdhomua +aoffckzddwyssqezqlyixkgi +aoffckzddwyssqezqvokbhxq +aoffckzddwyssqezraelkfjy +aoffckzddwyssqezrounibuf +aoffckzdegjuqmpgaoffckzd +aoffckzdegjuqmpgatafwjsh +aoffckzdegjuqmpgbhlijevx +aoffckzdegjuqmpgbrbjscia +aoffckzdegjuqmpgcyxowxpb +aoffckzdegjuqmpgddnqavbj +aoffckzdegjuqmpgdiiqutzn +aoffckzdegjuqmpgdndrjssr +aoffckzdegjuqmpgdwyssqez +aoffckzdegjuqmpgegjuqmpg +aoffckzdegjuqmpgelevflik +aoffckzdegjuqmpgeuzwoizs +aoffckzdegjuqmpgezuxdhsw +aoffckzdegjuqmpgfoazvcwh +aoffckzdegjuqmpghanbdvpq +aoffckzdegjuqmpghfibxuiu +aoffckzdegjuqmpghkdcmtby +aoffckzdegjuqmpghtydvqtb +aoffckzdegjuqmpghytekpmf +aoffckzdegjuqmpgiiegilwr +aoffckzdegjuqmpgirzhrjiz +aoffckzdegjuqmpgjbkjpftg +aoffckzdegjuqmpgjgfkeemk +aoffckzdegjuqmpgjlakydfo +aoffckzdegjuqmpgjuvmcaww +aoffckzdegjuqmpgkxrqrxft +aoffckzdegjuqmpglhcsptqa +aoffckzdegjuqmpglqxtyrci +aoffckzdegjuqmpgmaivwnmu +aoffckzdegjuqmpgmfdwlmfy +aoffckzdegjuqmpgmoyxujxb +aoffckzdegjuqmpgmttyjiqf +aoffckzdegjuqmpgpssfqqjt +aoffckzdegjuqmpgpxngfpcx +aoffckzdegjuqmpgqcdhomua +aoffckzdegjuqmpgqlyixkgi +aoffckzdegjuqmpgqvokbhxq +aoffckzdegjuqmpgraelkfjy +aoffckzdegjuqmpgrounibuf +aoffckzdelevflikaoffckzd +aoffckzdelevflikatafwjsh +aoffckzdelevflikbhlijevx +aoffckzdelevflikbrbjscia +aoffckzdelevflikcyxowxpb +aoffckzdelevflikddnqavbj +aoffckzdelevflikdiiqutzn +aoffckzdelevflikdndrjssr +aoffckzdelevflikdwyssqez +aoffckzdelevflikegjuqmpg +aoffckzdelevflikelevflik +aoffckzdelevflikeuzwoizs +aoffckzdelevflikezuxdhsw +aoffckzdelevflikfoazvcwh +aoffckzdelevflikhanbdvpq +aoffckzdelevflikhfibxuiu +aoffckzdelevflikhkdcmtby +aoffckzdelevflikhtydvqtb +aoffckzdelevflikhytekpmf +aoffckzdelevflikiiegilwr +aoffckzdelevflikirzhrjiz +aoffckzdelevflikjbkjpftg +aoffckzdelevflikjgfkeemk +aoffckzdelevflikjlakydfo +aoffckzdelevflikjuvmcaww +aoffckzdelevflikkxrqrxft +aoffckzdelevfliklhcsptqa +aoffckzdelevfliklqxtyrci +aoffckzdelevflikmaivwnmu +aoffckzdelevflikmfdwlmfy +aoffckzdelevflikmoyxujxb +aoffckzdelevflikmttyjiqf +aoffckzdelevflikpssfqqjt +aoffckzdelevflikpxngfpcx +aoffckzdelevflikqcdhomua +aoffckzdelevflikqlyixkgi +aoffckzdelevflikqvokbhxq +aoffckzdelevflikraelkfjy +aoffckzdelevflikrounibuf +aoffckzdeuzwoizsaoffckzd +aoffckzdeuzwoizsatafwjsh +aoffckzdeuzwoizsbhlijevx +aoffckzdeuzwoizsbrbjscia +aoffckzdeuzwoizscyxowxpb +aoffckzdeuzwoizsddnqavbj +aoffckzdeuzwoizsdiiqutzn +aoffckzdeuzwoizsdndrjssr +aoffckzdeuzwoizsdwyssqez +aoffckzdeuzwoizsegjuqmpg +aoffckzdeuzwoizselevflik +aoffckzdeuzwoizseuzwoizs +aoffckzdeuzwoizsezuxdhsw +aoffckzdeuzwoizsfoazvcwh +aoffckzdeuzwoizshanbdvpq +aoffckzdeuzwoizshfibxuiu +aoffckzdeuzwoizshkdcmtby +aoffckzdeuzwoizshtydvqtb +aoffckzdeuzwoizshytekpmf +aoffckzdeuzwoizsiiegilwr +aoffckzdeuzwoizsirzhrjiz +aoffckzdeuzwoizsjbkjpftg +aoffckzdeuzwoizsjgfkeemk +aoffckzdeuzwoizsjlakydfo +aoffckzdeuzwoizsjuvmcaww +aoffckzdeuzwoizskxrqrxft +aoffckzdeuzwoizslhcsptqa +aoffckzdeuzwoizslqxtyrci +aoffckzdeuzwoizsmaivwnmu +aoffckzdeuzwoizsmfdwlmfy +aoffckzdeuzwoizsmoyxujxb +aoffckzdeuzwoizsmttyjiqf +aoffckzdeuzwoizspssfqqjt +aoffckzdeuzwoizspxngfpcx +aoffckzdeuzwoizsqcdhomua +aoffckzdeuzwoizsqlyixkgi +aoffckzdeuzwoizsqvokbhxq +aoffckzdeuzwoizsraelkfjy +aoffckzdeuzwoizsrounibuf +aoffckzdezuxdhswaoffckzd +aoffckzdezuxdhswatafwjsh +aoffckzdezuxdhswbhlijevx +aoffckzdezuxdhswbrbjscia +aoffckzdezuxdhswcyxowxpb +aoffckzdezuxdhswddnqavbj +aoffckzdezuxdhswdiiqutzn +aoffckzdezuxdhswdndrjssr +aoffckzdezuxdhswdwyssqez +aoffckzdezuxdhswegjuqmpg +aoffckzdezuxdhswelevflik +aoffckzdezuxdhsweuzwoizs +aoffckzdezuxdhswezuxdhsw +aoffckzdezuxdhswfoazvcwh +aoffckzdezuxdhswhanbdvpq +aoffckzdezuxdhswhfibxuiu +aoffckzdezuxdhswhkdcmtby +aoffckzdezuxdhswhtydvqtb +aoffckzdezuxdhswhytekpmf +aoffckzdezuxdhswiiegilwr +aoffckzdezuxdhswirzhrjiz +aoffckzdezuxdhswjbkjpftg +aoffckzdezuxdhswjgfkeemk +aoffckzdezuxdhswjlakydfo +aoffckzdezuxdhswjuvmcaww +aoffckzdezuxdhswkxrqrxft +aoffckzdezuxdhswlhcsptqa +aoffckzdezuxdhswlqxtyrci +aoffckzdezuxdhswmaivwnmu +aoffckzdezuxdhswmfdwlmfy +aoffckzdezuxdhswmoyxujxb +aoffckzdezuxdhswmttyjiqf +aoffckzdezuxdhswpssfqqjt +aoffckzdezuxdhswpxngfpcx +aoffckzdezuxdhswqcdhomua +aoffckzdezuxdhswqlyixkgi +aoffckzdezuxdhswqvokbhxq +aoffckzdezuxdhswraelkfjy +aoffckzdezuxdhswrounibuf +aoffckzdfoazvcwhaoffckzd +aoffckzdfoazvcwhatafwjsh +aoffckzdfoazvcwhbhlijevx +aoffckzdfoazvcwhbrbjscia +aoffckzdfoazvcwhcyxowxpb +aoffckzdfoazvcwhddnqavbj +aoffckzdfoazvcwhdiiqutzn +aoffckzdfoazvcwhdndrjssr +aoffckzdfoazvcwhdwyssqez +aoffckzdfoazvcwhegjuqmpg +aoffckzdfoazvcwhelevflik +aoffckzdfoazvcwheuzwoizs +aoffckzdfoazvcwhezuxdhsw +aoffckzdfoazvcwhfoazvcwh +aoffckzdfoazvcwhhanbdvpq +aoffckzdfoazvcwhhfibxuiu +aoffckzdfoazvcwhhkdcmtby +aoffckzdfoazvcwhhtydvqtb +aoffckzdfoazvcwhhytekpmf +aoffckzdfoazvcwhiiegilwr +aoffckzdfoazvcwhirzhrjiz +aoffckzdfoazvcwhjbkjpftg +aoffckzdfoazvcwhjgfkeemk +aoffckzdfoazvcwhjlakydfo +aoffckzdfoazvcwhjuvmcaww +aoffckzdfoazvcwhkxrqrxft +aoffckzdfoazvcwhlhcsptqa +aoffckzdfoazvcwhlqxtyrci +aoffckzdfoazvcwhmaivwnmu +aoffckzdfoazvcwhmfdwlmfy +aoffckzdfoazvcwhmoyxujxb +aoffckzdfoazvcwhmttyjiqf +aoffckzdfoazvcwhpssfqqjt +aoffckzdfoazvcwhpxngfpcx +aoffckzdfoazvcwhqcdhomua +aoffckzdfoazvcwhqlyixkgi +aoffckzdfoazvcwhqvokbhxq +aoffckzdfoazvcwhraelkfjy +aoffckzdfoazvcwhrounibuf +aoffckzdhanbdvpqaoffckzd +aoffckzdhanbdvpqatafwjsh +aoffckzdhanbdvpqbhlijevx +aoffckzdhanbdvpqbrbjscia +aoffckzdhanbdvpqcyxowxpb +aoffckzdhanbdvpqddnqavbj +aoffckzdhanbdvpqdiiqutzn +aoffckzdhanbdvpqdndrjssr +aoffckzdhanbdvpqdwyssqez +aoffckzdhanbdvpqegjuqmpg +aoffckzdhanbdvpqelevflik +aoffckzdhanbdvpqeuzwoizs +aoffckzdhanbdvpqezuxdhsw +aoffckzdhanbdvpqfoazvcwh +aoffckzdhanbdvpqhanbdvpq +aoffckzdhanbdvpqhfibxuiu +aoffckzdhanbdvpqhkdcmtby +aoffckzdhanbdvpqhtydvqtb +aoffckzdhanbdvpqhytekpmf +aoffckzdhanbdvpqiiegilwr +aoffckzdhanbdvpqirzhrjiz +aoffckzdhanbdvpqjbkjpftg +aoffckzdhanbdvpqjgfkeemk +aoffckzdhanbdvpqjlakydfo +aoffckzdhanbdvpqjuvmcaww +aoffckzdhanbdvpqkxrqrxft +aoffckzdhanbdvpqlhcsptqa +aoffckzdhanbdvpqlqxtyrci +aoffckzdhanbdvpqmaivwnmu +aoffckzdhanbdvpqmfdwlmfy +aoffckzdhanbdvpqmoyxujxb +aoffckzdhanbdvpqmttyjiqf +aoffckzdhanbdvpqpssfqqjt +aoffckzdhanbdvpqpxngfpcx +aoffckzdhanbdvpqqcdhomua +aoffckzdhanbdvpqqlyixkgi +aoffckzdhanbdvpqqvokbhxq +aoffckzdhanbdvpqraelkfjy +aoffckzdhanbdvpqrounibuf +aoffckzdhfibxuiuaoffckzd +aoffckzdhfibxuiuatafwjsh +aoffckzdhfibxuiubhlijevx +aoffckzdhfibxuiubrbjscia +aoffckzdhfibxuiucyxowxpb +aoffckzdhfibxuiuddnqavbj +aoffckzdhfibxuiudiiqutzn +aoffckzdhfibxuiudndrjssr +aoffckzdhfibxuiudwyssqez +aoffckzdhfibxuiuegjuqmpg +aoffckzdhfibxuiuelevflik +aoffckzdhfibxuiueuzwoizs +aoffckzdhfibxuiuezuxdhsw +aoffckzdhfibxuiufoazvcwh +aoffckzdhfibxuiuhanbdvpq +aoffckzdhfibxuiuhfibxuiu +aoffckzdhfibxuiuhkdcmtby +aoffckzdhfibxuiuhtydvqtb +aoffckzdhfibxuiuhytekpmf +aoffckzdhfibxuiuiiegilwr +aoffckzdhfibxuiuirzhrjiz +aoffckzdhfibxuiujbkjpftg +aoffckzdhfibxuiujgfkeemk +aoffckzdhfibxuiujlakydfo +aoffckzdhfibxuiujuvmcaww +aoffckzdhfibxuiukxrqrxft +aoffckzdhfibxuiulhcsptqa +aoffckzdhfibxuiulqxtyrci +aoffckzdhfibxuiumaivwnmu +aoffckzdhfibxuiumfdwlmfy +aoffckzdhfibxuiumoyxujxb +aoffckzdhfibxuiumttyjiqf +aoffckzdhfibxuiupssfqqjt +aoffckzdhfibxuiupxngfpcx +aoffckzdhfibxuiuqcdhomua +aoffckzdhfibxuiuqlyixkgi +aoffckzdhfibxuiuqvokbhxq +aoffckzdhfibxuiuraelkfjy +aoffckzdhfibxuiurounibuf +aoffckzdhkdcmtbyaoffckzd +aoffckzdhkdcmtbyatafwjsh +aoffckzdhkdcmtbybhlijevx +aoffckzdhkdcmtbybrbjscia +aoffckzdhkdcmtbycyxowxpb +aoffckzdhkdcmtbyddnqavbj +aoffckzdhkdcmtbydiiqutzn +aoffckzdhkdcmtbydndrjssr +aoffckzdhkdcmtbydwyssqez +aoffckzdhkdcmtbyegjuqmpg +aoffckzdhkdcmtbyelevflik +aoffckzdhkdcmtbyeuzwoizs +aoffckzdhkdcmtbyezuxdhsw +aoffckzdhkdcmtbyfoazvcwh +aoffckzdhkdcmtbyhanbdvpq +aoffckzdhkdcmtbyhfibxuiu +aoffckzdhkdcmtbyhkdcmtby +aoffckzdhkdcmtbyhtydvqtb +aoffckzdhkdcmtbyhytekpmf +aoffckzdhkdcmtbyiiegilwr +aoffckzdhkdcmtbyirzhrjiz +aoffckzdhkdcmtbyjbkjpftg +aoffckzdhkdcmtbyjgfkeemk +aoffckzdhkdcmtbyjlakydfo +aoffckzdhkdcmtbyjuvmcaww +aoffckzdhkdcmtbykxrqrxft +aoffckzdhkdcmtbylhcsptqa +aoffckzdhkdcmtbylqxtyrci +aoffckzdhkdcmtbymaivwnmu +aoffckzdhkdcmtbymfdwlmfy +aoffckzdhkdcmtbymoyxujxb +aoffckzdhkdcmtbymttyjiqf +aoffckzdhkdcmtbypssfqqjt +aoffckzdhkdcmtbypxngfpcx +aoffckzdhkdcmtbyqcdhomua +aoffckzdhkdcmtbyqlyixkgi +aoffckzdhkdcmtbyqvokbhxq +aoffckzdhkdcmtbyraelkfjy +aoffckzdhkdcmtbyrounibuf +aoffckzdhtydvqtbaoffckzd +aoffckzdhtydvqtbatafwjsh +aoffckzdhtydvqtbbhlijevx +aoffckzdhtydvqtbbrbjscia +aoffckzdhtydvqtbcyxowxpb +aoffckzdhtydvqtbddnqavbj +aoffckzdhtydvqtbdiiqutzn +aoffckzdhtydvqtbdndrjssr +aoffckzdhtydvqtbdwyssqez +aoffckzdhtydvqtbegjuqmpg +aoffckzdhtydvqtbelevflik +aoffckzdhtydvqtbeuzwoizs +aoffckzdhtydvqtbezuxdhsw +aoffckzdhtydvqtbfoazvcwh +aoffckzdhtydvqtbhanbdvpq +aoffckzdhtydvqtbhfibxuiu +aoffckzdhtydvqtbhkdcmtby +aoffckzdhtydvqtbhtydvqtb +aoffckzdhtydvqtbhytekpmf +aoffckzdhtydvqtbiiegilwr +aoffckzdhtydvqtbirzhrjiz +aoffckzdhtydvqtbjbkjpftg +aoffckzdhtydvqtbjgfkeemk +aoffckzdhtydvqtbjlakydfo +aoffckzdhtydvqtbjuvmcaww +aoffckzdhtydvqtbkxrqrxft +aoffckzdhtydvqtblhcsptqa +aoffckzdhtydvqtblqxtyrci +aoffckzdhtydvqtbmaivwnmu +aoffckzdhtydvqtbmfdwlmfy +aoffckzdhtydvqtbmoyxujxb +aoffckzdhtydvqtbmttyjiqf +aoffckzdhtydvqtbpssfqqjt +aoffckzdhtydvqtbpxngfpcx +aoffckzdhtydvqtbqcdhomua +aoffckzdhtydvqtbqlyixkgi +aoffckzdhtydvqtbqvokbhxq +aoffckzdhtydvqtbraelkfjy +aoffckzdhtydvqtbrounibuf +aoffckzdhytekpmfaoffckzd +aoffckzdhytekpmfatafwjsh +aoffckzdhytekpmfbhlijevx +aoffckzdhytekpmfbrbjscia +aoffckzdhytekpmfcyxowxpb +aoffckzdhytekpmfddnqavbj +aoffckzdhytekpmfdiiqutzn +aoffckzdhytekpmfdndrjssr +aoffckzdhytekpmfdwyssqez +aoffckzdhytekpmfegjuqmpg +aoffckzdhytekpmfelevflik +aoffckzdhytekpmfeuzwoizs +aoffckzdhytekpmfezuxdhsw +aoffckzdhytekpmffoazvcwh +aoffckzdhytekpmfhanbdvpq +aoffckzdhytekpmfhfibxuiu +aoffckzdhytekpmfhkdcmtby +aoffckzdhytekpmfhtydvqtb +aoffckzdhytekpmfhytekpmf +aoffckzdhytekpmfiiegilwr +aoffckzdhytekpmfirzhrjiz +aoffckzdhytekpmfjbkjpftg +aoffckzdhytekpmfjgfkeemk +aoffckzdhytekpmfjlakydfo +aoffckzdhytekpmfjuvmcaww +aoffckzdhytekpmfkxrqrxft +aoffckzdhytekpmflhcsptqa +aoffckzdhytekpmflqxtyrci +aoffckzdhytekpmfmaivwnmu +aoffckzdhytekpmfmfdwlmfy +aoffckzdhytekpmfmoyxujxb +aoffckzdhytekpmfmttyjiqf +aoffckzdhytekpmfpssfqqjt +aoffckzdhytekpmfpxngfpcx +aoffckzdhytekpmfqcdhomua +aoffckzdhytekpmfqlyixkgi +aoffckzdhytekpmfqvokbhxq +aoffckzdhytekpmfraelkfjy +aoffckzdhytekpmfrounibuf +aoffckzdiiegilwraoffckzd +aoffckzdiiegilwratafwjsh +aoffckzdiiegilwrbhlijevx +aoffckzdiiegilwrbrbjscia +aoffckzdiiegilwrcyxowxpb +aoffckzdiiegilwrddnqavbj +aoffckzdiiegilwrdiiqutzn +aoffckzdiiegilwrdndrjssr +aoffckzdiiegilwrdwyssqez +aoffckzdiiegilwregjuqmpg +aoffckzdiiegilwrelevflik +aoffckzdiiegilwreuzwoizs +aoffckzdiiegilwrezuxdhsw +aoffckzdiiegilwrfoazvcwh +aoffckzdiiegilwrhanbdvpq +aoffckzdiiegilwrhfibxuiu +aoffckzdiiegilwrhkdcmtby +aoffckzdiiegilwrhtydvqtb +aoffckzdiiegilwrhytekpmf +aoffckzdiiegilwriiegilwr +aoffckzdiiegilwrirzhrjiz +aoffckzdiiegilwrjbkjpftg +aoffckzdiiegilwrjgfkeemk +aoffckzdiiegilwrjlakydfo +aoffckzdiiegilwrjuvmcaww +aoffckzdiiegilwrkxrqrxft +aoffckzdiiegilwrlhcsptqa +aoffckzdiiegilwrlqxtyrci +aoffckzdiiegilwrmaivwnmu +aoffckzdiiegilwrmfdwlmfy +aoffckzdiiegilwrmoyxujxb +aoffckzdiiegilwrmttyjiqf +aoffckzdiiegilwrpssfqqjt +aoffckzdiiegilwrpxngfpcx +aoffckzdiiegilwrqcdhomua +aoffckzdiiegilwrqlyixkgi +aoffckzdiiegilwrqvokbhxq +aoffckzdiiegilwrraelkfjy +aoffckzdiiegilwrrounibuf +aoffckzdirzhrjizaoffckzd +aoffckzdirzhrjizatafwjsh +aoffckzdirzhrjizbhlijevx +aoffckzdirzhrjizbrbjscia +aoffckzdirzhrjizcyxowxpb +aoffckzdirzhrjizddnqavbj +aoffckzdirzhrjizdiiqutzn +aoffckzdirzhrjizdndrjssr +aoffckzdirzhrjizdwyssqez +aoffckzdirzhrjizegjuqmpg +aoffckzdirzhrjizelevflik +aoffckzdirzhrjizeuzwoizs +aoffckzdirzhrjizezuxdhsw +aoffckzdirzhrjizfoazvcwh +aoffckzdirzhrjizhanbdvpq +aoffckzdirzhrjizhfibxuiu +aoffckzdirzhrjizhkdcmtby +aoffckzdirzhrjizhtydvqtb +aoffckzdirzhrjizhytekpmf +aoffckzdirzhrjiziiegilwr +aoffckzdirzhrjizirzhrjiz +aoffckzdirzhrjizjbkjpftg +aoffckzdirzhrjizjgfkeemk +aoffckzdirzhrjizjlakydfo +aoffckzdirzhrjizjuvmcaww +aoffckzdirzhrjizkxrqrxft +aoffckzdirzhrjizlhcsptqa +aoffckzdirzhrjizlqxtyrci +aoffckzdirzhrjizmaivwnmu +aoffckzdirzhrjizmfdwlmfy +aoffckzdirzhrjizmoyxujxb +aoffckzdirzhrjizmttyjiqf +aoffckzdirzhrjizpssfqqjt +aoffckzdirzhrjizpxngfpcx +aoffckzdirzhrjizqcdhomua +aoffckzdirzhrjizqlyixkgi +aoffckzdirzhrjizqvokbhxq +aoffckzdirzhrjizraelkfjy +aoffckzdirzhrjizrounibuf +aoffckzdjbkjpftgaoffckzd +aoffckzdjbkjpftgatafwjsh +aoffckzdjbkjpftgbhlijevx +aoffckzdjbkjpftgbrbjscia +aoffckzdjbkjpftgcyxowxpb +aoffckzdjbkjpftgddnqavbj +aoffckzdjbkjpftgdiiqutzn +aoffckzdjbkjpftgdndrjssr +aoffckzdjbkjpftgdwyssqez +aoffckzdjbkjpftgegjuqmpg +aoffckzdjbkjpftgelevflik +aoffckzdjbkjpftgeuzwoizs +aoffckzdjbkjpftgezuxdhsw +aoffckzdjbkjpftgfoazvcwh +aoffckzdjbkjpftghanbdvpq +aoffckzdjbkjpftghfibxuiu +aoffckzdjbkjpftghkdcmtby +aoffckzdjbkjpftghtydvqtb +aoffckzdjbkjpftghytekpmf +aoffckzdjbkjpftgiiegilwr +aoffckzdjbkjpftgirzhrjiz +aoffckzdjbkjpftgjbkjpftg +aoffckzdjbkjpftgjgfkeemk +aoffckzdjbkjpftgjlakydfo +aoffckzdjbkjpftgjuvmcaww +aoffckzdjbkjpftgkxrqrxft +aoffckzdjbkjpftglhcsptqa +aoffckzdjbkjpftglqxtyrci +aoffckzdjbkjpftgmaivwnmu +aoffckzdjbkjpftgmfdwlmfy +aoffckzdjbkjpftgmoyxujxb +aoffckzdjbkjpftgmttyjiqf +aoffckzdjbkjpftgpssfqqjt +aoffckzdjbkjpftgpxngfpcx +aoffckzdjbkjpftgqcdhomua +aoffckzdjbkjpftgqlyixkgi +aoffckzdjbkjpftgqvokbhxq +aoffckzdjbkjpftgraelkfjy +aoffckzdjbkjpftgrounibuf +aoffckzdjgfkeemkaoffckzd +aoffckzdjgfkeemkatafwjsh +aoffckzdjgfkeemkbhlijevx +aoffckzdjgfkeemkbrbjscia +aoffckzdjgfkeemkcyxowxpb +aoffckzdjgfkeemkddnqavbj +aoffckzdjgfkeemkdiiqutzn +aoffckzdjgfkeemkdndrjssr +aoffckzdjgfkeemkdwyssqez +aoffckzdjgfkeemkegjuqmpg +aoffckzdjgfkeemkelevflik +aoffckzdjgfkeemkeuzwoizs +aoffckzdjgfkeemkezuxdhsw +aoffckzdjgfkeemkfoazvcwh +aoffckzdjgfkeemkhanbdvpq +aoffckzdjgfkeemkhfibxuiu +aoffckzdjgfkeemkhkdcmtby +aoffckzdjgfkeemkhtydvqtb +aoffckzdjgfkeemkhytekpmf +aoffckzdjgfkeemkiiegilwr +aoffckzdjgfkeemkirzhrjiz +aoffckzdjgfkeemkjbkjpftg +aoffckzdjgfkeemkjgfkeemk +aoffckzdjgfkeemkjlakydfo +aoffckzdjgfkeemkjuvmcaww +aoffckzdjgfkeemkkxrqrxft +aoffckzdjgfkeemklhcsptqa +aoffckzdjgfkeemklqxtyrci +aoffckzdjgfkeemkmaivwnmu +aoffckzdjgfkeemkmfdwlmfy +aoffckzdjgfkeemkmoyxujxb +aoffckzdjgfkeemkmttyjiqf +aoffckzdjgfkeemkpssfqqjt +aoffckzdjgfkeemkpxngfpcx +aoffckzdjgfkeemkqcdhomua +aoffckzdjgfkeemkqlyixkgi +aoffckzdjgfkeemkqvokbhxq +aoffckzdjgfkeemkraelkfjy +aoffckzdjgfkeemkrounibuf +aoffckzdjlakydfoaoffckzd +aoffckzdjlakydfoatafwjsh +aoffckzdjlakydfobhlijevx +aoffckzdjlakydfobrbjscia +aoffckzdjlakydfocyxowxpb +aoffckzdjlakydfoddnqavbj +aoffckzdjlakydfodiiqutzn +aoffckzdjlakydfodndrjssr +aoffckzdjlakydfodwyssqez +aoffckzdjlakydfoegjuqmpg +aoffckzdjlakydfoelevflik +aoffckzdjlakydfoeuzwoizs +aoffckzdjlakydfoezuxdhsw +aoffckzdjlakydfofoazvcwh +aoffckzdjlakydfohanbdvpq +aoffckzdjlakydfohfibxuiu +aoffckzdjlakydfohkdcmtby +aoffckzdjlakydfohtydvqtb +aoffckzdjlakydfohytekpmf +aoffckzdjlakydfoiiegilwr +aoffckzdjlakydfoirzhrjiz +aoffckzdjlakydfojbkjpftg +aoffckzdjlakydfojgfkeemk +aoffckzdjlakydfojlakydfo +aoffckzdjlakydfojuvmcaww +aoffckzdjlakydfokxrqrxft +aoffckzdjlakydfolhcsptqa +aoffckzdjlakydfolqxtyrci +aoffckzdjlakydfomaivwnmu +aoffckzdjlakydfomfdwlmfy +aoffckzdjlakydfomoyxujxb +aoffckzdjlakydfomttyjiqf +aoffckzdjlakydfopssfqqjt +aoffckzdjlakydfopxngfpcx +aoffckzdjlakydfoqcdhomua +aoffckzdjlakydfoqlyixkgi +aoffckzdjlakydfoqvokbhxq +aoffckzdjlakydforaelkfjy +aoffckzdjlakydforounibuf +aoffckzdjuvmcawwaoffckzd +aoffckzdjuvmcawwatafwjsh +aoffckzdjuvmcawwbhlijevx +aoffckzdjuvmcawwbrbjscia +aoffckzdjuvmcawwcyxowxpb +aoffckzdjuvmcawwddnqavbj +aoffckzdjuvmcawwdiiqutzn +aoffckzdjuvmcawwdndrjssr +aoffckzdjuvmcawwdwyssqez +aoffckzdjuvmcawwegjuqmpg +aoffckzdjuvmcawwelevflik +aoffckzdjuvmcawweuzwoizs +aoffckzdjuvmcawwezuxdhsw +aoffckzdjuvmcawwfoazvcwh +aoffckzdjuvmcawwhanbdvpq +aoffckzdjuvmcawwhfibxuiu +aoffckzdjuvmcawwhkdcmtby +aoffckzdjuvmcawwhtydvqtb +aoffckzdjuvmcawwhytekpmf +aoffckzdjuvmcawwiiegilwr +aoffckzdjuvmcawwirzhrjiz +aoffckzdjuvmcawwjbkjpftg +aoffckzdjuvmcawwjgfkeemk +aoffckzdjuvmcawwjlakydfo +aoffckzdjuvmcawwjuvmcaww +aoffckzdjuvmcawwkxrqrxft +aoffckzdjuvmcawwlhcsptqa +aoffckzdjuvmcawwlqxtyrci +aoffckzdjuvmcawwmaivwnmu +aoffckzdjuvmcawwmfdwlmfy +aoffckzdjuvmcawwmoyxujxb +aoffckzdjuvmcawwmttyjiqf +aoffckzdjuvmcawwpssfqqjt +aoffckzdjuvmcawwpxngfpcx +aoffckzdjuvmcawwqcdhomua +aoffckzdjuvmcawwqlyixkgi +aoffckzdjuvmcawwqvokbhxq +aoffckzdjuvmcawwraelkfjy +aoffckzdjuvmcawwrounibuf +aoffckzdkxrqrxftaoffckzd +aoffckzdkxrqrxftatafwjsh +aoffckzdkxrqrxftbhlijevx +aoffckzdkxrqrxftbrbjscia +aoffckzdkxrqrxftcyxowxpb +aoffckzdkxrqrxftddnqavbj +aoffckzdkxrqrxftdiiqutzn +aoffckzdkxrqrxftdndrjssr +aoffckzdkxrqrxftdwyssqez +aoffckzdkxrqrxftegjuqmpg +aoffckzdkxrqrxftelevflik +aoffckzdkxrqrxfteuzwoizs +aoffckzdkxrqrxftezuxdhsw +aoffckzdkxrqrxftfoazvcwh +aoffckzdkxrqrxfthanbdvpq +aoffckzdkxrqrxfthfibxuiu +aoffckzdkxrqrxfthkdcmtby +aoffckzdkxrqrxfthtydvqtb +aoffckzdkxrqrxfthytekpmf +aoffckzdkxrqrxftiiegilwr +aoffckzdkxrqrxftirzhrjiz +aoffckzdkxrqrxftjbkjpftg +aoffckzdkxrqrxftjgfkeemk +aoffckzdkxrqrxftjlakydfo +aoffckzdkxrqrxftjuvmcaww +aoffckzdkxrqrxftkxrqrxft +aoffckzdkxrqrxftlhcsptqa +aoffckzdkxrqrxftlqxtyrci +aoffckzdkxrqrxftmaivwnmu +aoffckzdkxrqrxftmfdwlmfy +aoffckzdkxrqrxftmoyxujxb +aoffckzdkxrqrxftmttyjiqf +aoffckzdkxrqrxftpssfqqjt +aoffckzdkxrqrxftpxngfpcx +aoffckzdkxrqrxftqcdhomua +aoffckzdkxrqrxftqlyixkgi +aoffckzdkxrqrxftqvokbhxq +aoffckzdkxrqrxftraelkfjy +aoffckzdkxrqrxftrounibuf +aoffckzdlhcsptqaaoffckzd +aoffckzdlhcsptqaatafwjsh +aoffckzdlhcsptqabhlijevx +aoffckzdlhcsptqabrbjscia +aoffckzdlhcsptqacyxowxpb +aoffckzdlhcsptqaddnqavbj +aoffckzdlhcsptqadiiqutzn +aoffckzdlhcsptqadndrjssr +aoffckzdlhcsptqadwyssqez +aoffckzdlhcsptqaegjuqmpg +aoffckzdlhcsptqaelevflik +aoffckzdlhcsptqaeuzwoizs +aoffckzdlhcsptqaezuxdhsw +aoffckzdlhcsptqafoazvcwh +aoffckzdlhcsptqahanbdvpq +aoffckzdlhcsptqahfibxuiu +aoffckzdlhcsptqahkdcmtby +aoffckzdlhcsptqahtydvqtb +aoffckzdlhcsptqahytekpmf +aoffckzdlhcsptqaiiegilwr +aoffckzdlhcsptqairzhrjiz +aoffckzdlhcsptqajbkjpftg +aoffckzdlhcsptqajgfkeemk +aoffckzdlhcsptqajlakydfo +aoffckzdlhcsptqajuvmcaww +aoffckzdlhcsptqakxrqrxft +aoffckzdlhcsptqalhcsptqa +aoffckzdlhcsptqalqxtyrci +aoffckzdlhcsptqamaivwnmu +aoffckzdlhcsptqamfdwlmfy +aoffckzdlhcsptqamoyxujxb +aoffckzdlhcsptqamttyjiqf +aoffckzdlhcsptqapssfqqjt +aoffckzdlhcsptqapxngfpcx +aoffckzdlhcsptqaqcdhomua +aoffckzdlhcsptqaqlyixkgi +aoffckzdlhcsptqaqvokbhxq +aoffckzdlhcsptqaraelkfjy +aoffckzdlhcsptqarounibuf +aoffckzdlqxtyrciaoffckzd +aoffckzdlqxtyrciatafwjsh +aoffckzdlqxtyrcibhlijevx +aoffckzdlqxtyrcibrbjscia +aoffckzdlqxtyrcicyxowxpb +aoffckzdlqxtyrciddnqavbj +aoffckzdlqxtyrcidiiqutzn +aoffckzdlqxtyrcidndrjssr +aoffckzdlqxtyrcidwyssqez +aoffckzdlqxtyrciegjuqmpg +aoffckzdlqxtyrcielevflik +aoffckzdlqxtyrcieuzwoizs +aoffckzdlqxtyrciezuxdhsw +aoffckzdlqxtyrcifoazvcwh +aoffckzdlqxtyrcihanbdvpq +aoffckzdlqxtyrcihfibxuiu +aoffckzdlqxtyrcihkdcmtby +aoffckzdlqxtyrcihtydvqtb +aoffckzdlqxtyrcihytekpmf +aoffckzdlqxtyrciiiegilwr +aoffckzdlqxtyrciirzhrjiz +aoffckzdlqxtyrcijbkjpftg +aoffckzdlqxtyrcijgfkeemk +aoffckzdlqxtyrcijlakydfo +aoffckzdlqxtyrcijuvmcaww +aoffckzdlqxtyrcikxrqrxft +aoffckzdlqxtyrcilhcsptqa +aoffckzdlqxtyrcilqxtyrci +aoffckzdlqxtyrcimaivwnmu +aoffckzdlqxtyrcimfdwlmfy +aoffckzdlqxtyrcimoyxujxb +aoffckzdlqxtyrcimttyjiqf +aoffckzdlqxtyrcipssfqqjt +aoffckzdlqxtyrcipxngfpcx +aoffckzdlqxtyrciqcdhomua +aoffckzdlqxtyrciqlyixkgi +aoffckzdlqxtyrciqvokbhxq +aoffckzdlqxtyrciraelkfjy +aoffckzdlqxtyrcirounibuf +aoffckzdmaivwnmuaoffckzd +aoffckzdmaivwnmuatafwjsh +aoffckzdmaivwnmubhlijevx +aoffckzdmaivwnmubrbjscia +aoffckzdmaivwnmucyxowxpb +aoffckzdmaivwnmuddnqavbj +aoffckzdmaivwnmudiiqutzn +aoffckzdmaivwnmudndrjssr +aoffckzdmaivwnmudwyssqez +aoffckzdmaivwnmuegjuqmpg +aoffckzdmaivwnmuelevflik +aoffckzdmaivwnmueuzwoizs +aoffckzdmaivwnmuezuxdhsw +aoffckzdmaivwnmufoazvcwh +aoffckzdmaivwnmuhanbdvpq +aoffckzdmaivwnmuhfibxuiu +aoffckzdmaivwnmuhkdcmtby +aoffckzdmaivwnmuhtydvqtb +aoffckzdmaivwnmuhytekpmf +aoffckzdmaivwnmuiiegilwr +aoffckzdmaivwnmuirzhrjiz +aoffckzdmaivwnmujbkjpftg +aoffckzdmaivwnmujgfkeemk +aoffckzdmaivwnmujlakydfo +aoffckzdmaivwnmujuvmcaww +aoffckzdmaivwnmukxrqrxft +aoffckzdmaivwnmulhcsptqa +aoffckzdmaivwnmulqxtyrci +aoffckzdmaivwnmumaivwnmu +aoffckzdmaivwnmumfdwlmfy +aoffckzdmaivwnmumoyxujxb +aoffckzdmaivwnmumttyjiqf +aoffckzdmaivwnmupssfqqjt +aoffckzdmaivwnmupxngfpcx +aoffckzdmaivwnmuqcdhomua +aoffckzdmaivwnmuqlyixkgi +aoffckzdmaivwnmuqvokbhxq +aoffckzdmaivwnmuraelkfjy +aoffckzdmaivwnmurounibuf +aoffckzdmfdwlmfyaoffckzd +aoffckzdmfdwlmfyatafwjsh +aoffckzdmfdwlmfybhlijevx +aoffckzdmfdwlmfybrbjscia +aoffckzdmfdwlmfycyxowxpb +aoffckzdmfdwlmfyddnqavbj +aoffckzdmfdwlmfydiiqutzn +aoffckzdmfdwlmfydndrjssr +aoffckzdmfdwlmfydwyssqez +aoffckzdmfdwlmfyegjuqmpg +aoffckzdmfdwlmfyelevflik +aoffckzdmfdwlmfyeuzwoizs +aoffckzdmfdwlmfyezuxdhsw +aoffckzdmfdwlmfyfoazvcwh +aoffckzdmfdwlmfyhanbdvpq +aoffckzdmfdwlmfyhfibxuiu +aoffckzdmfdwlmfyhkdcmtby +aoffckzdmfdwlmfyhtydvqtb +aoffckzdmfdwlmfyhytekpmf +aoffckzdmfdwlmfyiiegilwr +aoffckzdmfdwlmfyirzhrjiz +aoffckzdmfdwlmfyjbkjpftg +aoffckzdmfdwlmfyjgfkeemk +aoffckzdmfdwlmfyjlakydfo +aoffckzdmfdwlmfyjuvmcaww +aoffckzdmfdwlmfykxrqrxft +aoffckzdmfdwlmfylhcsptqa +aoffckzdmfdwlmfylqxtyrci +aoffckzdmfdwlmfymaivwnmu +aoffckzdmfdwlmfymfdwlmfy +aoffckzdmfdwlmfymoyxujxb +aoffckzdmfdwlmfymttyjiqf +aoffckzdmfdwlmfypssfqqjt +aoffckzdmfdwlmfypxngfpcx +aoffckzdmfdwlmfyqcdhomua +aoffckzdmfdwlmfyqlyixkgi +aoffckzdmfdwlmfyqvokbhxq +aoffckzdmfdwlmfyraelkfjy +aoffckzdmfdwlmfyrounibuf +aoffckzdmoyxujxbaoffckzd +aoffckzdmoyxujxbatafwjsh +aoffckzdmoyxujxbbhlijevx +aoffckzdmoyxujxbbrbjscia +aoffckzdmoyxujxbcyxowxpb +aoffckzdmoyxujxbddnqavbj +aoffckzdmoyxujxbdiiqutzn +aoffckzdmoyxujxbdndrjssr +aoffckzdmoyxujxbdwyssqez +aoffckzdmoyxujxbegjuqmpg +aoffckzdmoyxujxbelevflik +aoffckzdmoyxujxbeuzwoizs +aoffckzdmoyxujxbezuxdhsw +aoffckzdmoyxujxbfoazvcwh +aoffckzdmoyxujxbhanbdvpq +aoffckzdmoyxujxbhfibxuiu +aoffckzdmoyxujxbhkdcmtby +aoffckzdmoyxujxbhtydvqtb +aoffckzdmoyxujxbhytekpmf +aoffckzdmoyxujxbiiegilwr +aoffckzdmoyxujxbirzhrjiz +aoffckzdmoyxujxbjbkjpftg +aoffckzdmoyxujxbjgfkeemk +aoffckzdmoyxujxbjlakydfo +aoffckzdmoyxujxbjuvmcaww +aoffckzdmoyxujxbkxrqrxft +aoffckzdmoyxujxblhcsptqa +aoffckzdmoyxujxblqxtyrci +aoffckzdmoyxujxbmaivwnmu +aoffckzdmoyxujxbmfdwlmfy +aoffckzdmoyxujxbmoyxujxb +aoffckzdmoyxujxbmttyjiqf +aoffckzdmoyxujxbpssfqqjt +aoffckzdmoyxujxbpxngfpcx +aoffckzdmoyxujxbqcdhomua +aoffckzdmoyxujxbqlyixkgi +aoffckzdmoyxujxbqvokbhxq +aoffckzdmoyxujxbraelkfjy +aoffckzdmoyxujxbrounibuf +aoffckzdmttyjiqfaoffckzd +aoffckzdmttyjiqfatafwjsh +aoffckzdmttyjiqfbhlijevx +aoffckzdmttyjiqfbrbjscia +aoffckzdmttyjiqfcyxowxpb +aoffckzdmttyjiqfddnqavbj +aoffckzdmttyjiqfdiiqutzn +aoffckzdmttyjiqfdndrjssr +aoffckzdmttyjiqfdwyssqez +aoffckzdmttyjiqfegjuqmpg +aoffckzdmttyjiqfelevflik +aoffckzdmttyjiqfeuzwoizs +aoffckzdmttyjiqfezuxdhsw +aoffckzdmttyjiqffoazvcwh +aoffckzdmttyjiqfhanbdvpq +aoffckzdmttyjiqfhfibxuiu +aoffckzdmttyjiqfhkdcmtby +aoffckzdmttyjiqfhtydvqtb +aoffckzdmttyjiqfhytekpmf +aoffckzdmttyjiqfiiegilwr +aoffckzdmttyjiqfirzhrjiz +aoffckzdmttyjiqfjbkjpftg +aoffckzdmttyjiqfjgfkeemk +aoffckzdmttyjiqfjlakydfo +aoffckzdmttyjiqfjuvmcaww +aoffckzdmttyjiqfkxrqrxft +aoffckzdmttyjiqflhcsptqa +aoffckzdmttyjiqflqxtyrci +aoffckzdmttyjiqfmaivwnmu +aoffckzdmttyjiqfmfdwlmfy +aoffckzdmttyjiqfmoyxujxb +aoffckzdmttyjiqfmttyjiqf +aoffckzdmttyjiqfpssfqqjt +aoffckzdmttyjiqfpxngfpcx +aoffckzdmttyjiqfqcdhomua +aoffckzdmttyjiqfqlyixkgi +aoffckzdmttyjiqfqvokbhxq +aoffckzdmttyjiqfraelkfjy +aoffckzdmttyjiqfrounibuf +aoffckzdpssfqqjtaoffckzd +aoffckzdpssfqqjtatafwjsh +aoffckzdpssfqqjtbhlijevx +aoffckzdpssfqqjtbrbjscia +aoffckzdpssfqqjtcyxowxpb +aoffckzdpssfqqjtddnqavbj +aoffckzdpssfqqjtdiiqutzn +aoffckzdpssfqqjtdndrjssr +aoffckzdpssfqqjtdwyssqez +aoffckzdpssfqqjtegjuqmpg +aoffckzdpssfqqjtelevflik +aoffckzdpssfqqjteuzwoizs +aoffckzdpssfqqjtezuxdhsw +aoffckzdpssfqqjtfoazvcwh +aoffckzdpssfqqjthanbdvpq +aoffckzdpssfqqjthfibxuiu +aoffckzdpssfqqjthkdcmtby +aoffckzdpssfqqjthtydvqtb +aoffckzdpssfqqjthytekpmf +aoffckzdpssfqqjtiiegilwr +aoffckzdpssfqqjtirzhrjiz +aoffckzdpssfqqjtjbkjpftg +aoffckzdpssfqqjtjgfkeemk +aoffckzdpssfqqjtjlakydfo +aoffckzdpssfqqjtjuvmcaww +aoffckzdpssfqqjtkxrqrxft +aoffckzdpssfqqjtlhcsptqa +aoffckzdpssfqqjtlqxtyrci +aoffckzdpssfqqjtmaivwnmu +aoffckzdpssfqqjtmfdwlmfy +aoffckzdpssfqqjtmoyxujxb +aoffckzdpssfqqjtmttyjiqf +aoffckzdpssfqqjtpssfqqjt +aoffckzdpssfqqjtpxngfpcx +aoffckzdpssfqqjtqcdhomua +aoffckzdpssfqqjtqlyixkgi +aoffckzdpssfqqjtqvokbhxq +aoffckzdpssfqqjtraelkfjy +aoffckzdpssfqqjtrounibuf +aoffckzdpxngfpcxaoffckzd +aoffckzdpxngfpcxatafwjsh +aoffckzdpxngfpcxbhlijevx +aoffckzdpxngfpcxbrbjscia +aoffckzdpxngfpcxcyxowxpb +aoffckzdpxngfpcxddnqavbj +aoffckzdpxngfpcxdiiqutzn +aoffckzdpxngfpcxdndrjssr +aoffckzdpxngfpcxdwyssqez +aoffckzdpxngfpcxegjuqmpg +aoffckzdpxngfpcxelevflik +aoffckzdpxngfpcxeuzwoizs +aoffckzdpxngfpcxezuxdhsw +aoffckzdpxngfpcxfoazvcwh +aoffckzdpxngfpcxhanbdvpq +aoffckzdpxngfpcxhfibxuiu +aoffckzdpxngfpcxhkdcmtby +aoffckzdpxngfpcxhtydvqtb +aoffckzdpxngfpcxhytekpmf +aoffckzdpxngfpcxiiegilwr +aoffckzdpxngfpcxirzhrjiz +aoffckzdpxngfpcxjbkjpftg +aoffckzdpxngfpcxjgfkeemk +aoffckzdpxngfpcxjlakydfo +aoffckzdpxngfpcxjuvmcaww +aoffckzdpxngfpcxkxrqrxft +aoffckzdpxngfpcxlhcsptqa +aoffckzdpxngfpcxlqxtyrci +aoffckzdpxngfpcxmaivwnmu +aoffckzdpxngfpcxmfdwlmfy +aoffckzdpxngfpcxmoyxujxb +aoffckzdpxngfpcxmttyjiqf +aoffckzdpxngfpcxpssfqqjt +aoffckzdpxngfpcxpxngfpcx +aoffckzdpxngfpcxqcdhomua +aoffckzdpxngfpcxqlyixkgi +aoffckzdpxngfpcxqvokbhxq +aoffckzdpxngfpcxraelkfjy +aoffckzdpxngfpcxrounibuf +aoffckzdqcdhomuaaoffckzd +aoffckzdqcdhomuaatafwjsh +aoffckzdqcdhomuabhlijevx +aoffckzdqcdhomuabrbjscia +aoffckzdqcdhomuacyxowxpb +aoffckzdqcdhomuaddnqavbj +aoffckzdqcdhomuadiiqutzn +aoffckzdqcdhomuadndrjssr +aoffckzdqcdhomuadwyssqez +aoffckzdqcdhomuaegjuqmpg +aoffckzdqcdhomuaelevflik +aoffckzdqcdhomuaeuzwoizs +aoffckzdqcdhomuaezuxdhsw +aoffckzdqcdhomuafoazvcwh +aoffckzdqcdhomuahanbdvpq +aoffckzdqcdhomuahfibxuiu +aoffckzdqcdhomuahkdcmtby +aoffckzdqcdhomuahtydvqtb +aoffckzdqcdhomuahytekpmf +aoffckzdqcdhomuaiiegilwr +aoffckzdqcdhomuairzhrjiz +aoffckzdqcdhomuajbkjpftg +aoffckzdqcdhomuajgfkeemk +aoffckzdqcdhomuajlakydfo +aoffckzdqcdhomuajuvmcaww +aoffckzdqcdhomuakxrqrxft +aoffckzdqcdhomualhcsptqa +aoffckzdqcdhomualqxtyrci +aoffckzdqcdhomuamaivwnmu +aoffckzdqcdhomuamfdwlmfy +aoffckzdqcdhomuamoyxujxb +aoffckzdqcdhomuamttyjiqf +aoffckzdqcdhomuapssfqqjt +aoffckzdqcdhomuapxngfpcx +aoffckzdqcdhomuaqcdhomua +aoffckzdqcdhomuaqlyixkgi +aoffckzdqcdhomuaqvokbhxq +aoffckzdqcdhomuaraelkfjy +aoffckzdqcdhomuarounibuf +aoffckzdqlyixkgiaoffckzd +aoffckzdqlyixkgiatafwjsh +aoffckzdqlyixkgibhlijevx +aoffckzdqlyixkgibrbjscia +aoffckzdqlyixkgicyxowxpb +aoffckzdqlyixkgiddnqavbj +aoffckzdqlyixkgidiiqutzn +aoffckzdqlyixkgidndrjssr +aoffckzdqlyixkgidwyssqez +aoffckzdqlyixkgiegjuqmpg +aoffckzdqlyixkgielevflik +aoffckzdqlyixkgieuzwoizs +aoffckzdqlyixkgiezuxdhsw +aoffckzdqlyixkgifoazvcwh +aoffckzdqlyixkgihanbdvpq +aoffckzdqlyixkgihfibxuiu +aoffckzdqlyixkgihkdcmtby +aoffckzdqlyixkgihtydvqtb +aoffckzdqlyixkgihytekpmf +aoffckzdqlyixkgiiiegilwr +aoffckzdqlyixkgiirzhrjiz +aoffckzdqlyixkgijbkjpftg +aoffckzdqlyixkgijgfkeemk +aoffckzdqlyixkgijlakydfo +aoffckzdqlyixkgijuvmcaww +aoffckzdqlyixkgikxrqrxft +aoffckzdqlyixkgilhcsptqa +aoffckzdqlyixkgilqxtyrci +aoffckzdqlyixkgimaivwnmu +aoffckzdqlyixkgimfdwlmfy +aoffckzdqlyixkgimoyxujxb +aoffckzdqlyixkgimttyjiqf +aoffckzdqlyixkgipssfqqjt +aoffckzdqlyixkgipxngfpcx +aoffckzdqlyixkgiqcdhomua +aoffckzdqlyixkgiqlyixkgi +aoffckzdqlyixkgiqvokbhxq +aoffckzdqlyixkgiraelkfjy +aoffckzdqlyixkgirounibuf +aoffckzdqvokbhxqaoffckzd +aoffckzdqvokbhxqatafwjsh +aoffckzdqvokbhxqbhlijevx +aoffckzdqvokbhxqbrbjscia +aoffckzdqvokbhxqcyxowxpb +aoffckzdqvokbhxqddnqavbj +aoffckzdqvokbhxqdiiqutzn +aoffckzdqvokbhxqdndrjssr +aoffckzdqvokbhxqdwyssqez +aoffckzdqvokbhxqegjuqmpg +aoffckzdqvokbhxqelevflik +aoffckzdqvokbhxqeuzwoizs +aoffckzdqvokbhxqezuxdhsw +aoffckzdqvokbhxqfoazvcwh +aoffckzdqvokbhxqhanbdvpq +aoffckzdqvokbhxqhfibxuiu +aoffckzdqvokbhxqhkdcmtby +aoffckzdqvokbhxqhtydvqtb +aoffckzdqvokbhxqhytekpmf +aoffckzdqvokbhxqiiegilwr +aoffckzdqvokbhxqirzhrjiz +aoffckzdqvokbhxqjbkjpftg +aoffckzdqvokbhxqjgfkeemk +aoffckzdqvokbhxqjlakydfo +aoffckzdqvokbhxqjuvmcaww +aoffckzdqvokbhxqkxrqrxft +aoffckzdqvokbhxqlhcsptqa +aoffckzdqvokbhxqlqxtyrci +aoffckzdqvokbhxqmaivwnmu +aoffckzdqvokbhxqmfdwlmfy +aoffckzdqvokbhxqmoyxujxb +aoffckzdqvokbhxqmttyjiqf +aoffckzdqvokbhxqpssfqqjt +aoffckzdqvokbhxqpxngfpcx +aoffckzdqvokbhxqqcdhomua +aoffckzdqvokbhxqqlyixkgi +aoffckzdqvokbhxqqvokbhxq +aoffckzdqvokbhxqraelkfjy +aoffckzdqvokbhxqrounibuf +aoffckzdraelkfjyaoffckzd +aoffckzdraelkfjyatafwjsh +aoffckzdraelkfjybhlijevx +aoffckzdraelkfjybrbjscia +aoffckzdraelkfjycyxowxpb +aoffckzdraelkfjyddnqavbj +aoffckzdraelkfjydiiqutzn +aoffckzdraelkfjydndrjssr +aoffckzdraelkfjydwyssqez +aoffckzdraelkfjyegjuqmpg +aoffckzdraelkfjyelevflik +aoffckzdraelkfjyeuzwoizs +aoffckzdraelkfjyezuxdhsw +aoffckzdraelkfjyfoazvcwh +aoffckzdraelkfjyhanbdvpq +aoffckzdraelkfjyhfibxuiu +aoffckzdraelkfjyhkdcmtby +aoffckzdraelkfjyhtydvqtb +aoffckzdraelkfjyhytekpmf +aoffckzdraelkfjyiiegilwr +aoffckzdraelkfjyirzhrjiz +aoffckzdraelkfjyjbkjpftg +aoffckzdraelkfjyjgfkeemk +aoffckzdraelkfjyjlakydfo +aoffckzdraelkfjyjuvmcaww +aoffckzdraelkfjykxrqrxft +aoffckzdraelkfjylhcsptqa +aoffckzdraelkfjylqxtyrci +aoffckzdraelkfjymaivwnmu +aoffckzdraelkfjymfdwlmfy +aoffckzdraelkfjymoyxujxb +aoffckzdraelkfjymttyjiqf +aoffckzdraelkfjypssfqqjt +aoffckzdraelkfjypxngfpcx +aoffckzdraelkfjyqcdhomua +aoffckzdraelkfjyqlyixkgi +aoffckzdraelkfjyqvokbhxq +aoffckzdraelkfjyraelkfjy +aoffckzdraelkfjyrounibuf +aoffckzdrounibufaoffckzd +aoffckzdrounibufatafwjsh +aoffckzdrounibufbhlijevx +aoffckzdrounibufbrbjscia +aoffckzdrounibufcyxowxpb +aoffckzdrounibufddnqavbj +aoffckzdrounibufdiiqutzn +aoffckzdrounibufdndrjssr +aoffckzdrounibufdwyssqez +aoffckzdrounibufegjuqmpg +aoffckzdrounibufelevflik +aoffckzdrounibufeuzwoizs +aoffckzdrounibufezuxdhsw +aoffckzdrounibuffoazvcwh +aoffckzdrounibufhanbdvpq +aoffckzdrounibufhfibxuiu +aoffckzdrounibufhkdcmtby +aoffckzdrounibufhtydvqtb +aoffckzdrounibufhytekpmf +aoffckzdrounibufiiegilwr +aoffckzdrounibufirzhrjiz +aoffckzdrounibufjbkjpftg +aoffckzdrounibufjgfkeemk +aoffckzdrounibufjlakydfo +aoffckzdrounibufjuvmcaww +aoffckzdrounibufkxrqrxft +aoffckzdrounibuflhcsptqa +aoffckzdrounibuflqxtyrci +aoffckzdrounibufmaivwnmu +aoffckzdrounibufmfdwlmfy +aoffckzdrounibufmoyxujxb +aoffckzdrounibufmttyjiqf +aoffckzdrounibufpssfqqjt +aoffckzdrounibufpxngfpcx +aoffckzdrounibufqcdhomua +aoffckzdrounibufqlyixkgi +aoffckzdrounibufqvokbhxq +aoffckzdrounibufraelkfjy +aoffckzdrounibufrounibuf +atafwjshaoffckzdaoffckzd +atafwjshaoffckzdatafwjsh +atafwjshaoffckzdbhlijevx +atafwjshaoffckzdbrbjscia +atafwjshaoffckzdcyxowxpb +atafwjshaoffckzdddnqavbj +atafwjshaoffckzddiiqutzn +atafwjshaoffckzddndrjssr +atafwjshaoffckzddwyssqez +atafwjshaoffckzdegjuqmpg +atafwjshaoffckzdelevflik +atafwjshaoffckzdeuzwoizs +atafwjshaoffckzdezuxdhsw +atafwjshaoffckzdfoazvcwh +atafwjshaoffckzdhanbdvpq +atafwjshaoffckzdhfibxuiu +atafwjshaoffckzdhkdcmtby +atafwjshaoffckzdhtydvqtb +atafwjshaoffckzdhytekpmf +atafwjshaoffckzdiiegilwr +atafwjshaoffckzdirzhrjiz +atafwjshaoffckzdjbkjpftg +atafwjshaoffckzdjgfkeemk +atafwjshaoffckzdjlakydfo +atafwjshaoffckzdjuvmcaww +atafwjshaoffckzdkxrqrxft +atafwjshaoffckzdlhcsptqa +atafwjshaoffckzdlqxtyrci +atafwjshaoffckzdmaivwnmu +atafwjshaoffckzdmfdwlmfy +atafwjshaoffckzdmoyxujxb +atafwjshaoffckzdmttyjiqf +atafwjshaoffckzdpssfqqjt +atafwjshaoffckzdpxngfpcx +atafwjshaoffckzdqcdhomua +atafwjshaoffckzdqlyixkgi +atafwjshaoffckzdqvokbhxq +atafwjshaoffckzdraelkfjy +atafwjshaoffckzdrounibuf +atafwjshatafwjshaoffckzd +atafwjshatafwjshatafwjsh +atafwjshatafwjshbhlijevx +atafwjshatafwjshbrbjscia +atafwjshatafwjshcyxowxpb +atafwjshatafwjshddnqavbj +atafwjshatafwjshdiiqutzn +atafwjshatafwjshdndrjssr +atafwjshatafwjshdwyssqez +atafwjshatafwjshegjuqmpg +atafwjshatafwjshelevflik +atafwjshatafwjsheuzwoizs +atafwjshatafwjshezuxdhsw +atafwjshatafwjshfoazvcwh +atafwjshatafwjshhanbdvpq +atafwjshatafwjshhfibxuiu +atafwjshatafwjshhkdcmtby +atafwjshatafwjshhtydvqtb +atafwjshatafwjshhytekpmf +atafwjshatafwjshiiegilwr +atafwjshatafwjshirzhrjiz +atafwjshatafwjshjbkjpftg +atafwjshatafwjshjgfkeemk +atafwjshatafwjshjlakydfo +atafwjshatafwjshjuvmcaww +atafwjshatafwjshkxrqrxft +atafwjshatafwjshlhcsptqa +atafwjshatafwjshlqxtyrci +atafwjshatafwjshmaivwnmu +atafwjshatafwjshmfdwlmfy +atafwjshatafwjshmoyxujxb +atafwjshatafwjshmttyjiqf +atafwjshatafwjshpssfqqjt +atafwjshatafwjshpxngfpcx +atafwjshatafwjshqcdhomua +atafwjshatafwjshqlyixkgi +atafwjshatafwjshqvokbhxq +atafwjshatafwjshraelkfjy +atafwjshatafwjshrounibuf +atafwjshbhlijevxaoffckzd +atafwjshbhlijevxatafwjsh +atafwjshbhlijevxbhlijevx +atafwjshbhlijevxbrbjscia +atafwjshbhlijevxcyxowxpb +atafwjshbhlijevxddnqavbj +atafwjshbhlijevxdiiqutzn +atafwjshbhlijevxdndrjssr +atafwjshbhlijevxdwyssqez +atafwjshbhlijevxegjuqmpg +atafwjshbhlijevxelevflik +atafwjshbhlijevxeuzwoizs +atafwjshbhlijevxezuxdhsw +atafwjshbhlijevxfoazvcwh +atafwjshbhlijevxhanbdvpq +atafwjshbhlijevxhfibxuiu +atafwjshbhlijevxhkdcmtby +atafwjshbhlijevxhtydvqtb +atafwjshbhlijevxhytekpmf +atafwjshbhlijevxiiegilwr +atafwjshbhlijevxirzhrjiz +atafwjshbhlijevxjbkjpftg +atafwjshbhlijevxjgfkeemk +atafwjshbhlijevxjlakydfo +atafwjshbhlijevxjuvmcaww +atafwjshbhlijevxkxrqrxft +atafwjshbhlijevxlhcsptqa +atafwjshbhlijevxlqxtyrci +atafwjshbhlijevxmaivwnmu +atafwjshbhlijevxmfdwlmfy +atafwjshbhlijevxmoyxujxb +atafwjshbhlijevxmttyjiqf +atafwjshbhlijevxpssfqqjt +atafwjshbhlijevxpxngfpcx +atafwjshbhlijevxqcdhomua +atafwjshbhlijevxqlyixkgi +atafwjshbhlijevxqvokbhxq +atafwjshbhlijevxraelkfjy +atafwjshbhlijevxrounibuf +atafwjshbrbjsciaaoffckzd +atafwjshbrbjsciaatafwjsh +atafwjshbrbjsciabhlijevx +atafwjshbrbjsciabrbjscia +atafwjshbrbjsciacyxowxpb +atafwjshbrbjsciaddnqavbj +atafwjshbrbjsciadiiqutzn +atafwjshbrbjsciadndrjssr +atafwjshbrbjsciadwyssqez +atafwjshbrbjsciaegjuqmpg +atafwjshbrbjsciaelevflik +atafwjshbrbjsciaeuzwoizs +atafwjshbrbjsciaezuxdhsw +atafwjshbrbjsciafoazvcwh +atafwjshbrbjsciahanbdvpq +atafwjshbrbjsciahfibxuiu +atafwjshbrbjsciahkdcmtby +atafwjshbrbjsciahtydvqtb +atafwjshbrbjsciahytekpmf +atafwjshbrbjsciaiiegilwr +atafwjshbrbjsciairzhrjiz +atafwjshbrbjsciajbkjpftg +atafwjshbrbjsciajgfkeemk +atafwjshbrbjsciajlakydfo +atafwjshbrbjsciajuvmcaww +atafwjshbrbjsciakxrqrxft +atafwjshbrbjscialhcsptqa +atafwjshbrbjscialqxtyrci +atafwjshbrbjsciamaivwnmu +atafwjshbrbjsciamfdwlmfy +atafwjshbrbjsciamoyxujxb +atafwjshbrbjsciamttyjiqf +atafwjshbrbjsciapssfqqjt +atafwjshbrbjsciapxngfpcx +atafwjshbrbjsciaqcdhomua +atafwjshbrbjsciaqlyixkgi +atafwjshbrbjsciaqvokbhxq +atafwjshbrbjsciaraelkfjy +atafwjshbrbjsciarounibuf +atafwjshcyxowxpbaoffckzd +atafwjshcyxowxpbatafwjsh +atafwjshcyxowxpbbhlijevx +atafwjshcyxowxpbbrbjscia +atafwjshcyxowxpbcyxowxpb +atafwjshcyxowxpbddnqavbj +atafwjshcyxowxpbdiiqutzn +atafwjshcyxowxpbdndrjssr +atafwjshcyxowxpbdwyssqez +atafwjshcyxowxpbegjuqmpg +atafwjshcyxowxpbelevflik +atafwjshcyxowxpbeuzwoizs +atafwjshcyxowxpbezuxdhsw +atafwjshcyxowxpbfoazvcwh +atafwjshcyxowxpbhanbdvpq +atafwjshcyxowxpbhfibxuiu +atafwjshcyxowxpbhkdcmtby +atafwjshcyxowxpbhtydvqtb +atafwjshcyxowxpbhytekpmf +atafwjshcyxowxpbiiegilwr +atafwjshcyxowxpbirzhrjiz +atafwjshcyxowxpbjbkjpftg +atafwjshcyxowxpbjgfkeemk +atafwjshcyxowxpbjlakydfo +atafwjshcyxowxpbjuvmcaww +atafwjshcyxowxpbkxrqrxft +atafwjshcyxowxpblhcsptqa +atafwjshcyxowxpblqxtyrci +atafwjshcyxowxpbmaivwnmu +atafwjshcyxowxpbmfdwlmfy +atafwjshcyxowxpbmoyxujxb +atafwjshcyxowxpbmttyjiqf +atafwjshcyxowxpbpssfqqjt +atafwjshcyxowxpbpxngfpcx +atafwjshcyxowxpbqcdhomua +atafwjshcyxowxpbqlyixkgi +atafwjshcyxowxpbqvokbhxq +atafwjshcyxowxpbraelkfjy +atafwjshcyxowxpbrounibuf +atafwjshddnqavbjaoffckzd +atafwjshddnqavbjatafwjsh +atafwjshddnqavbjbhlijevx +atafwjshddnqavbjbrbjscia +atafwjshddnqavbjcyxowxpb +atafwjshddnqavbjddnqavbj +atafwjshddnqavbjdiiqutzn +atafwjshddnqavbjdndrjssr +atafwjshddnqavbjdwyssqez +atafwjshddnqavbjegjuqmpg +atafwjshddnqavbjelevflik +atafwjshddnqavbjeuzwoizs +atafwjshddnqavbjezuxdhsw +atafwjshddnqavbjfoazvcwh +atafwjshddnqavbjhanbdvpq +atafwjshddnqavbjhfibxuiu +atafwjshddnqavbjhkdcmtby +atafwjshddnqavbjhtydvqtb +atafwjshddnqavbjhytekpmf +atafwjshddnqavbjiiegilwr +atafwjshddnqavbjirzhrjiz +atafwjshddnqavbjjbkjpftg +atafwjshddnqavbjjgfkeemk +atafwjshddnqavbjjlakydfo +atafwjshddnqavbjjuvmcaww +atafwjshddnqavbjkxrqrxft +atafwjshddnqavbjlhcsptqa +atafwjshddnqavbjlqxtyrci +atafwjshddnqavbjmaivwnmu +atafwjshddnqavbjmfdwlmfy +atafwjshddnqavbjmoyxujxb +atafwjshddnqavbjmttyjiqf +atafwjshddnqavbjpssfqqjt +atafwjshddnqavbjpxngfpcx +atafwjshddnqavbjqcdhomua +atafwjshddnqavbjqlyixkgi +atafwjshddnqavbjqvokbhxq +atafwjshddnqavbjraelkfjy +atafwjshddnqavbjrounibuf +atafwjshdiiqutznaoffckzd +atafwjshdiiqutznatafwjsh +atafwjshdiiqutznbhlijevx +atafwjshdiiqutznbrbjscia +atafwjshdiiqutzncyxowxpb +atafwjshdiiqutznddnqavbj +atafwjshdiiqutzndiiqutzn +atafwjshdiiqutzndndrjssr +atafwjshdiiqutzndwyssqez +atafwjshdiiqutznegjuqmpg +atafwjshdiiqutznelevflik +atafwjshdiiqutzneuzwoizs +atafwjshdiiqutznezuxdhsw +atafwjshdiiqutznfoazvcwh +atafwjshdiiqutznhanbdvpq +atafwjshdiiqutznhfibxuiu +atafwjshdiiqutznhkdcmtby +atafwjshdiiqutznhtydvqtb +atafwjshdiiqutznhytekpmf +atafwjshdiiqutzniiegilwr +atafwjshdiiqutznirzhrjiz +atafwjshdiiqutznjbkjpftg +atafwjshdiiqutznjgfkeemk +atafwjshdiiqutznjlakydfo +atafwjshdiiqutznjuvmcaww +atafwjshdiiqutznkxrqrxft +atafwjshdiiqutznlhcsptqa +atafwjshdiiqutznlqxtyrci +atafwjshdiiqutznmaivwnmu +atafwjshdiiqutznmfdwlmfy +atafwjshdiiqutznmoyxujxb +atafwjshdiiqutznmttyjiqf +atafwjshdiiqutznpssfqqjt +atafwjshdiiqutznpxngfpcx +atafwjshdiiqutznqcdhomua +atafwjshdiiqutznqlyixkgi +atafwjshdiiqutznqvokbhxq +atafwjshdiiqutznraelkfjy +atafwjshdiiqutznrounibuf +atafwjshdndrjssraoffckzd +atafwjshdndrjssratafwjsh +atafwjshdndrjssrbhlijevx +atafwjshdndrjssrbrbjscia +atafwjshdndrjssrcyxowxpb +atafwjshdndrjssrddnqavbj +atafwjshdndrjssrdiiqutzn +atafwjshdndrjssrdndrjssr +atafwjshdndrjssrdwyssqez +atafwjshdndrjssregjuqmpg +atafwjshdndrjssrelevflik +atafwjshdndrjssreuzwoizs +atafwjshdndrjssrezuxdhsw +atafwjshdndrjssrfoazvcwh +atafwjshdndrjssrhanbdvpq +atafwjshdndrjssrhfibxuiu +atafwjshdndrjssrhkdcmtby +atafwjshdndrjssrhtydvqtb +atafwjshdndrjssrhytekpmf +atafwjshdndrjssriiegilwr +atafwjshdndrjssrirzhrjiz +atafwjshdndrjssrjbkjpftg +atafwjshdndrjssrjgfkeemk +atafwjshdndrjssrjlakydfo +atafwjshdndrjssrjuvmcaww +atafwjshdndrjssrkxrqrxft +atafwjshdndrjssrlhcsptqa +atafwjshdndrjssrlqxtyrci +atafwjshdndrjssrmaivwnmu +atafwjshdndrjssrmfdwlmfy +atafwjshdndrjssrmoyxujxb +atafwjshdndrjssrmttyjiqf +atafwjshdndrjssrpssfqqjt +atafwjshdndrjssrpxngfpcx +atafwjshdndrjssrqcdhomua +atafwjshdndrjssrqlyixkgi +atafwjshdndrjssrqvokbhxq +atafwjshdndrjssrraelkfjy +atafwjshdndrjssrrounibuf +atafwjshdwyssqezaoffckzd +atafwjshdwyssqezatafwjsh +atafwjshdwyssqezbhlijevx +atafwjshdwyssqezbrbjscia +atafwjshdwyssqezcyxowxpb +atafwjshdwyssqezddnqavbj +atafwjshdwyssqezdiiqutzn +atafwjshdwyssqezdndrjssr +atafwjshdwyssqezdwyssqez +atafwjshdwyssqezegjuqmpg +atafwjshdwyssqezelevflik +atafwjshdwyssqezeuzwoizs +atafwjshdwyssqezezuxdhsw +atafwjshdwyssqezfoazvcwh +atafwjshdwyssqezhanbdvpq +atafwjshdwyssqezhfibxuiu +atafwjshdwyssqezhkdcmtby +atafwjshdwyssqezhtydvqtb +atafwjshdwyssqezhytekpmf +atafwjshdwyssqeziiegilwr +atafwjshdwyssqezirzhrjiz +atafwjshdwyssqezjbkjpftg +atafwjshdwyssqezjgfkeemk +atafwjshdwyssqezjlakydfo +atafwjshdwyssqezjuvmcaww +atafwjshdwyssqezkxrqrxft +atafwjshdwyssqezlhcsptqa +atafwjshdwyssqezlqxtyrci +atafwjshdwyssqezmaivwnmu +atafwjshdwyssqezmfdwlmfy +atafwjshdwyssqezmoyxujxb +atafwjshdwyssqezmttyjiqf +atafwjshdwyssqezpssfqqjt +atafwjshdwyssqezpxngfpcx +atafwjshdwyssqezqcdhomua +atafwjshdwyssqezqlyixkgi +atafwjshdwyssqezqvokbhxq +atafwjshdwyssqezraelkfjy +atafwjshdwyssqezrounibuf +atafwjshegjuqmpgaoffckzd +atafwjshegjuqmpgatafwjsh +atafwjshegjuqmpgbhlijevx +atafwjshegjuqmpgbrbjscia +atafwjshegjuqmpgcyxowxpb +atafwjshegjuqmpgddnqavbj +atafwjshegjuqmpgdiiqutzn +atafwjshegjuqmpgdndrjssr +atafwjshegjuqmpgdwyssqez +atafwjshegjuqmpgegjuqmpg +atafwjshegjuqmpgelevflik +atafwjshegjuqmpgeuzwoizs +atafwjshegjuqmpgezuxdhsw +atafwjshegjuqmpgfoazvcwh +atafwjshegjuqmpghanbdvpq +atafwjshegjuqmpghfibxuiu +atafwjshegjuqmpghkdcmtby +atafwjshegjuqmpghtydvqtb +atafwjshegjuqmpghytekpmf +atafwjshegjuqmpgiiegilwr +atafwjshegjuqmpgirzhrjiz +atafwjshegjuqmpgjbkjpftg +atafwjshegjuqmpgjgfkeemk +atafwjshegjuqmpgjlakydfo +atafwjshegjuqmpgjuvmcaww +atafwjshegjuqmpgkxrqrxft +atafwjshegjuqmpglhcsptqa +atafwjshegjuqmpglqxtyrci +atafwjshegjuqmpgmaivwnmu +atafwjshegjuqmpgmfdwlmfy +atafwjshegjuqmpgmoyxujxb +atafwjshegjuqmpgmttyjiqf +atafwjshegjuqmpgpssfqqjt +atafwjshegjuqmpgpxngfpcx +atafwjshegjuqmpgqcdhomua +atafwjshegjuqmpgqlyixkgi +atafwjshegjuqmpgqvokbhxq +atafwjshegjuqmpgraelkfjy +atafwjshegjuqmpgrounibuf +atafwjshelevflikaoffckzd +atafwjshelevflikatafwjsh +atafwjshelevflikbhlijevx +atafwjshelevflikbrbjscia +atafwjshelevflikcyxowxpb +atafwjshelevflikddnqavbj +atafwjshelevflikdiiqutzn +atafwjshelevflikdndrjssr +atafwjshelevflikdwyssqez +atafwjshelevflikegjuqmpg +atafwjshelevflikelevflik +atafwjshelevflikeuzwoizs +atafwjshelevflikezuxdhsw +atafwjshelevflikfoazvcwh +atafwjshelevflikhanbdvpq +atafwjshelevflikhfibxuiu +atafwjshelevflikhkdcmtby +atafwjshelevflikhtydvqtb +atafwjshelevflikhytekpmf +atafwjshelevflikiiegilwr +atafwjshelevflikirzhrjiz +atafwjshelevflikjbkjpftg +atafwjshelevflikjgfkeemk +atafwjshelevflikjlakydfo +atafwjshelevflikjuvmcaww +atafwjshelevflikkxrqrxft +atafwjshelevfliklhcsptqa +atafwjshelevfliklqxtyrci +atafwjshelevflikmaivwnmu +atafwjshelevflikmfdwlmfy +atafwjshelevflikmoyxujxb +atafwjshelevflikmttyjiqf +atafwjshelevflikpssfqqjt +atafwjshelevflikpxngfpcx +atafwjshelevflikqcdhomua +atafwjshelevflikqlyixkgi +atafwjshelevflikqvokbhxq +atafwjshelevflikraelkfjy +atafwjshelevflikrounibuf +atafwjsheuzwoizsaoffckzd +atafwjsheuzwoizsatafwjsh +atafwjsheuzwoizsbhlijevx +atafwjsheuzwoizsbrbjscia +atafwjsheuzwoizscyxowxpb +atafwjsheuzwoizsddnqavbj +atafwjsheuzwoizsdiiqutzn +atafwjsheuzwoizsdndrjssr +atafwjsheuzwoizsdwyssqez +atafwjsheuzwoizsegjuqmpg +atafwjsheuzwoizselevflik +atafwjsheuzwoizseuzwoizs +atafwjsheuzwoizsezuxdhsw +atafwjsheuzwoizsfoazvcwh +atafwjsheuzwoizshanbdvpq +atafwjsheuzwoizshfibxuiu +atafwjsheuzwoizshkdcmtby +atafwjsheuzwoizshtydvqtb +atafwjsheuzwoizshytekpmf +atafwjsheuzwoizsiiegilwr +atafwjsheuzwoizsirzhrjiz +atafwjsheuzwoizsjbkjpftg +atafwjsheuzwoizsjgfkeemk +atafwjsheuzwoizsjlakydfo +atafwjsheuzwoizsjuvmcaww +atafwjsheuzwoizskxrqrxft +atafwjsheuzwoizslhcsptqa +atafwjsheuzwoizslqxtyrci +atafwjsheuzwoizsmaivwnmu +atafwjsheuzwoizsmfdwlmfy +atafwjsheuzwoizsmoyxujxb +atafwjsheuzwoizsmttyjiqf +atafwjsheuzwoizspssfqqjt +atafwjsheuzwoizspxngfpcx +atafwjsheuzwoizsqcdhomua +atafwjsheuzwoizsqlyixkgi +atafwjsheuzwoizsqvokbhxq +atafwjsheuzwoizsraelkfjy +atafwjsheuzwoizsrounibuf +atafwjshezuxdhswaoffckzd +atafwjshezuxdhswatafwjsh +atafwjshezuxdhswbhlijevx +atafwjshezuxdhswbrbjscia +atafwjshezuxdhswcyxowxpb +atafwjshezuxdhswddnqavbj +atafwjshezuxdhswdiiqutzn +atafwjshezuxdhswdndrjssr +atafwjshezuxdhswdwyssqez +atafwjshezuxdhswegjuqmpg +atafwjshezuxdhswelevflik +atafwjshezuxdhsweuzwoizs +atafwjshezuxdhswezuxdhsw +atafwjshezuxdhswfoazvcwh +atafwjshezuxdhswhanbdvpq +atafwjshezuxdhswhfibxuiu +atafwjshezuxdhswhkdcmtby +atafwjshezuxdhswhtydvqtb +atafwjshezuxdhswhytekpmf +atafwjshezuxdhswiiegilwr +atafwjshezuxdhswirzhrjiz +atafwjshezuxdhswjbkjpftg +atafwjshezuxdhswjgfkeemk +atafwjshezuxdhswjlakydfo +atafwjshezuxdhswjuvmcaww +atafwjshezuxdhswkxrqrxft +atafwjshezuxdhswlhcsptqa +atafwjshezuxdhswlqxtyrci +atafwjshezuxdhswmaivwnmu +atafwjshezuxdhswmfdwlmfy +atafwjshezuxdhswmoyxujxb +atafwjshezuxdhswmttyjiqf +atafwjshezuxdhswpssfqqjt +atafwjshezuxdhswpxngfpcx +atafwjshezuxdhswqcdhomua +atafwjshezuxdhswqlyixkgi +atafwjshezuxdhswqvokbhxq +atafwjshezuxdhswraelkfjy +atafwjshezuxdhswrounibuf +atafwjshfoazvcwhaoffckzd +atafwjshfoazvcwhatafwjsh +atafwjshfoazvcwhbhlijevx +atafwjshfoazvcwhbrbjscia +atafwjshfoazvcwhcyxowxpb +atafwjshfoazvcwhddnqavbj +atafwjshfoazvcwhdiiqutzn +atafwjshfoazvcwhdndrjssr +atafwjshfoazvcwhdwyssqez +atafwjshfoazvcwhegjuqmpg +atafwjshfoazvcwhelevflik +atafwjshfoazvcwheuzwoizs +atafwjshfoazvcwhezuxdhsw +atafwjshfoazvcwhfoazvcwh +atafwjshfoazvcwhhanbdvpq +atafwjshfoazvcwhhfibxuiu +atafwjshfoazvcwhhkdcmtby +atafwjshfoazvcwhhtydvqtb +atafwjshfoazvcwhhytekpmf +atafwjshfoazvcwhiiegilwr +atafwjshfoazvcwhirzhrjiz +atafwjshfoazvcwhjbkjpftg +atafwjshfoazvcwhjgfkeemk +atafwjshfoazvcwhjlakydfo +atafwjshfoazvcwhjuvmcaww +atafwjshfoazvcwhkxrqrxft +atafwjshfoazvcwhlhcsptqa +atafwjshfoazvcwhlqxtyrci +atafwjshfoazvcwhmaivwnmu +atafwjshfoazvcwhmfdwlmfy +atafwjshfoazvcwhmoyxujxb +atafwjshfoazvcwhmttyjiqf +atafwjshfoazvcwhpssfqqjt +atafwjshfoazvcwhpxngfpcx +atafwjshfoazvcwhqcdhomua +atafwjshfoazvcwhqlyixkgi +atafwjshfoazvcwhqvokbhxq +atafwjshfoazvcwhraelkfjy +atafwjshfoazvcwhrounibuf +atafwjshhanbdvpqaoffckzd +atafwjshhanbdvpqatafwjsh +atafwjshhanbdvpqbhlijevx +atafwjshhanbdvpqbrbjscia +atafwjshhanbdvpqcyxowxpb +atafwjshhanbdvpqddnqavbj +atafwjshhanbdvpqdiiqutzn +atafwjshhanbdvpqdndrjssr +atafwjshhanbdvpqdwyssqez +atafwjshhanbdvpqegjuqmpg +atafwjshhanbdvpqelevflik +atafwjshhanbdvpqeuzwoizs +atafwjshhanbdvpqezuxdhsw +atafwjshhanbdvpqfoazvcwh +atafwjshhanbdvpqhanbdvpq +atafwjshhanbdvpqhfibxuiu +atafwjshhanbdvpqhkdcmtby +atafwjshhanbdvpqhtydvqtb +atafwjshhanbdvpqhytekpmf +atafwjshhanbdvpqiiegilwr +atafwjshhanbdvpqirzhrjiz +atafwjshhanbdvpqjbkjpftg +atafwjshhanbdvpqjgfkeemk +atafwjshhanbdvpqjlakydfo +atafwjshhanbdvpqjuvmcaww +atafwjshhanbdvpqkxrqrxft +atafwjshhanbdvpqlhcsptqa +atafwjshhanbdvpqlqxtyrci +atafwjshhanbdvpqmaivwnmu +atafwjshhanbdvpqmfdwlmfy +atafwjshhanbdvpqmoyxujxb +atafwjshhanbdvpqmttyjiqf +atafwjshhanbdvpqpssfqqjt +atafwjshhanbdvpqpxngfpcx +atafwjshhanbdvpqqcdhomua +atafwjshhanbdvpqqlyixkgi +atafwjshhanbdvpqqvokbhxq +atafwjshhanbdvpqraelkfjy +atafwjshhanbdvpqrounibuf +atafwjshhfibxuiuaoffckzd +atafwjshhfibxuiuatafwjsh +atafwjshhfibxuiubhlijevx +atafwjshhfibxuiubrbjscia +atafwjshhfibxuiucyxowxpb +atafwjshhfibxuiuddnqavbj +atafwjshhfibxuiudiiqutzn +atafwjshhfibxuiudndrjssr +atafwjshhfibxuiudwyssqez +atafwjshhfibxuiuegjuqmpg +atafwjshhfibxuiuelevflik +atafwjshhfibxuiueuzwoizs +atafwjshhfibxuiuezuxdhsw +atafwjshhfibxuiufoazvcwh +atafwjshhfibxuiuhanbdvpq +atafwjshhfibxuiuhfibxuiu +atafwjshhfibxuiuhkdcmtby +atafwjshhfibxuiuhtydvqtb +atafwjshhfibxuiuhytekpmf +atafwjshhfibxuiuiiegilwr +atafwjshhfibxuiuirzhrjiz +atafwjshhfibxuiujbkjpftg +atafwjshhfibxuiujgfkeemk +atafwjshhfibxuiujlakydfo +atafwjshhfibxuiujuvmcaww +atafwjshhfibxuiukxrqrxft +atafwjshhfibxuiulhcsptqa +atafwjshhfibxuiulqxtyrci +atafwjshhfibxuiumaivwnmu +atafwjshhfibxuiumfdwlmfy +atafwjshhfibxuiumoyxujxb +atafwjshhfibxuiumttyjiqf +atafwjshhfibxuiupssfqqjt +atafwjshhfibxuiupxngfpcx +atafwjshhfibxuiuqcdhomua +atafwjshhfibxuiuqlyixkgi +atafwjshhfibxuiuqvokbhxq +atafwjshhfibxuiuraelkfjy +atafwjshhfibxuiurounibuf +atafwjshhkdcmtbyaoffckzd +atafwjshhkdcmtbyatafwjsh +atafwjshhkdcmtbybhlijevx +atafwjshhkdcmtbybrbjscia +atafwjshhkdcmtbycyxowxpb +atafwjshhkdcmtbyddnqavbj +atafwjshhkdcmtbydiiqutzn +atafwjshhkdcmtbydndrjssr +atafwjshhkdcmtbydwyssqez +atafwjshhkdcmtbyegjuqmpg +atafwjshhkdcmtbyelevflik +atafwjshhkdcmtbyeuzwoizs +atafwjshhkdcmtbyezuxdhsw +atafwjshhkdcmtbyfoazvcwh +atafwjshhkdcmtbyhanbdvpq +atafwjshhkdcmtbyhfibxuiu +atafwjshhkdcmtbyhkdcmtby +atafwjshhkdcmtbyhtydvqtb +atafwjshhkdcmtbyhytekpmf +atafwjshhkdcmtbyiiegilwr +atafwjshhkdcmtbyirzhrjiz +atafwjshhkdcmtbyjbkjpftg +atafwjshhkdcmtbyjgfkeemk +atafwjshhkdcmtbyjlakydfo +atafwjshhkdcmtbyjuvmcaww +atafwjshhkdcmtbykxrqrxft +atafwjshhkdcmtbylhcsptqa +atafwjshhkdcmtbylqxtyrci +atafwjshhkdcmtbymaivwnmu +atafwjshhkdcmtbymfdwlmfy +atafwjshhkdcmtbymoyxujxb +atafwjshhkdcmtbymttyjiqf +atafwjshhkdcmtbypssfqqjt +atafwjshhkdcmtbypxngfpcx +atafwjshhkdcmtbyqcdhomua +atafwjshhkdcmtbyqlyixkgi +atafwjshhkdcmtbyqvokbhxq +atafwjshhkdcmtbyraelkfjy +atafwjshhkdcmtbyrounibuf +atafwjshhtydvqtbaoffckzd +atafwjshhtydvqtbatafwjsh +atafwjshhtydvqtbbhlijevx +atafwjshhtydvqtbbrbjscia +atafwjshhtydvqtbcyxowxpb +atafwjshhtydvqtbddnqavbj +atafwjshhtydvqtbdiiqutzn +atafwjshhtydvqtbdndrjssr +atafwjshhtydvqtbdwyssqez +atafwjshhtydvqtbegjuqmpg +atafwjshhtydvqtbelevflik +atafwjshhtydvqtbeuzwoizs +atafwjshhtydvqtbezuxdhsw +atafwjshhtydvqtbfoazvcwh +atafwjshhtydvqtbhanbdvpq +atafwjshhtydvqtbhfibxuiu +atafwjshhtydvqtbhkdcmtby +atafwjshhtydvqtbhtydvqtb +atafwjshhtydvqtbhytekpmf +atafwjshhtydvqtbiiegilwr +atafwjshhtydvqtbirzhrjiz +atafwjshhtydvqtbjbkjpftg +atafwjshhtydvqtbjgfkeemk +atafwjshhtydvqtbjlakydfo +atafwjshhtydvqtbjuvmcaww +atafwjshhtydvqtbkxrqrxft +atafwjshhtydvqtblhcsptqa +atafwjshhtydvqtblqxtyrci +atafwjshhtydvqtbmaivwnmu +atafwjshhtydvqtbmfdwlmfy +atafwjshhtydvqtbmoyxujxb +atafwjshhtydvqtbmttyjiqf +atafwjshhtydvqtbpssfqqjt +atafwjshhtydvqtbpxngfpcx +atafwjshhtydvqtbqcdhomua +atafwjshhtydvqtbqlyixkgi +atafwjshhtydvqtbqvokbhxq +atafwjshhtydvqtbraelkfjy +atafwjshhtydvqtbrounibuf +atafwjshhytekpmfaoffckzd +atafwjshhytekpmfatafwjsh +atafwjshhytekpmfbhlijevx +atafwjshhytekpmfbrbjscia +atafwjshhytekpmfcyxowxpb +atafwjshhytekpmfddnqavbj +atafwjshhytekpmfdiiqutzn +atafwjshhytekpmfdndrjssr +atafwjshhytekpmfdwyssqez +atafwjshhytekpmfegjuqmpg +atafwjshhytekpmfelevflik +atafwjshhytekpmfeuzwoizs +atafwjshhytekpmfezuxdhsw +atafwjshhytekpmffoazvcwh +atafwjshhytekpmfhanbdvpq +atafwjshhytekpmfhfibxuiu +atafwjshhytekpmfhkdcmtby +atafwjshhytekpmfhtydvqtb +atafwjshhytekpmfhytekpmf +atafwjshhytekpmfiiegilwr +atafwjshhytekpmfirzhrjiz +atafwjshhytekpmfjbkjpftg +atafwjshhytekpmfjgfkeemk +atafwjshhytekpmfjlakydfo +atafwjshhytekpmfjuvmcaww +atafwjshhytekpmfkxrqrxft +atafwjshhytekpmflhcsptqa +atafwjshhytekpmflqxtyrci +atafwjshhytekpmfmaivwnmu +atafwjshhytekpmfmfdwlmfy +atafwjshhytekpmfmoyxujxb +atafwjshhytekpmfmttyjiqf +atafwjshhytekpmfpssfqqjt +atafwjshhytekpmfpxngfpcx +atafwjshhytekpmfqcdhomua +atafwjshhytekpmfqlyixkgi +atafwjshhytekpmfqvokbhxq +atafwjshhytekpmfraelkfjy +atafwjshhytekpmfrounibuf +atafwjshiiegilwraoffckzd +atafwjshiiegilwratafwjsh +atafwjshiiegilwrbhlijevx +atafwjshiiegilwrbrbjscia +atafwjshiiegilwrcyxowxpb +atafwjshiiegilwrddnqavbj +atafwjshiiegilwrdiiqutzn +atafwjshiiegilwrdndrjssr +atafwjshiiegilwrdwyssqez +atafwjshiiegilwregjuqmpg +atafwjshiiegilwrelevflik +atafwjshiiegilwreuzwoizs +atafwjshiiegilwrezuxdhsw +atafwjshiiegilwrfoazvcwh +atafwjshiiegilwrhanbdvpq +atafwjshiiegilwrhfibxuiu +atafwjshiiegilwrhkdcmtby +atafwjshiiegilwrhtydvqtb +atafwjshiiegilwrhytekpmf +atafwjshiiegilwriiegilwr +atafwjshiiegilwrirzhrjiz +atafwjshiiegilwrjbkjpftg +atafwjshiiegilwrjgfkeemk +atafwjshiiegilwrjlakydfo +atafwjshiiegilwrjuvmcaww +atafwjshiiegilwrkxrqrxft +atafwjshiiegilwrlhcsptqa +atafwjshiiegilwrlqxtyrci +atafwjshiiegilwrmaivwnmu +atafwjshiiegilwrmfdwlmfy +atafwjshiiegilwrmoyxujxb +atafwjshiiegilwrmttyjiqf +atafwjshiiegilwrpssfqqjt +atafwjshiiegilwrpxngfpcx +atafwjshiiegilwrqcdhomua +atafwjshiiegilwrqlyixkgi +atafwjshiiegilwrqvokbhxq +atafwjshiiegilwrraelkfjy +atafwjshiiegilwrrounibuf +atafwjshirzhrjizaoffckzd +atafwjshirzhrjizatafwjsh +atafwjshirzhrjizbhlijevx +atafwjshirzhrjizbrbjscia +atafwjshirzhrjizcyxowxpb +atafwjshirzhrjizddnqavbj +atafwjshirzhrjizdiiqutzn +atafwjshirzhrjizdndrjssr +atafwjshirzhrjizdwyssqez +atafwjshirzhrjizegjuqmpg +atafwjshirzhrjizelevflik +atafwjshirzhrjizeuzwoizs +atafwjshirzhrjizezuxdhsw +atafwjshirzhrjizfoazvcwh +atafwjshirzhrjizhanbdvpq +atafwjshirzhrjizhfibxuiu +atafwjshirzhrjizhkdcmtby +atafwjshirzhrjizhtydvqtb +atafwjshirzhrjizhytekpmf +atafwjshirzhrjiziiegilwr +atafwjshirzhrjizirzhrjiz +atafwjshirzhrjizjbkjpftg +atafwjshirzhrjizjgfkeemk +atafwjshirzhrjizjlakydfo +atafwjshirzhrjizjuvmcaww +atafwjshirzhrjizkxrqrxft +atafwjshirzhrjizlhcsptqa +atafwjshirzhrjizlqxtyrci +atafwjshirzhrjizmaivwnmu +atafwjshirzhrjizmfdwlmfy +atafwjshirzhrjizmoyxujxb +atafwjshirzhrjizmttyjiqf +atafwjshirzhrjizpssfqqjt +atafwjshirzhrjizpxngfpcx +atafwjshirzhrjizqcdhomua +atafwjshirzhrjizqlyixkgi +atafwjshirzhrjizqvokbhxq +atafwjshirzhrjizraelkfjy +atafwjshirzhrjizrounibuf +atafwjshjbkjpftgaoffckzd +atafwjshjbkjpftgatafwjsh +atafwjshjbkjpftgbhlijevx +atafwjshjbkjpftgbrbjscia +atafwjshjbkjpftgcyxowxpb +atafwjshjbkjpftgddnqavbj +atafwjshjbkjpftgdiiqutzn +atafwjshjbkjpftgdndrjssr +atafwjshjbkjpftgdwyssqez +atafwjshjbkjpftgegjuqmpg +atafwjshjbkjpftgelevflik +atafwjshjbkjpftgeuzwoizs +atafwjshjbkjpftgezuxdhsw +atafwjshjbkjpftgfoazvcwh +atafwjshjbkjpftghanbdvpq +atafwjshjbkjpftghfibxuiu +atafwjshjbkjpftghkdcmtby +atafwjshjbkjpftghtydvqtb +atafwjshjbkjpftghytekpmf +atafwjshjbkjpftgiiegilwr +atafwjshjbkjpftgirzhrjiz +atafwjshjbkjpftgjbkjpftg +atafwjshjbkjpftgjgfkeemk +atafwjshjbkjpftgjlakydfo +atafwjshjbkjpftgjuvmcaww +atafwjshjbkjpftgkxrqrxft +atafwjshjbkjpftglhcsptqa +atafwjshjbkjpftglqxtyrci +atafwjshjbkjpftgmaivwnmu +atafwjshjbkjpftgmfdwlmfy +atafwjshjbkjpftgmoyxujxb +atafwjshjbkjpftgmttyjiqf +atafwjshjbkjpftgpssfqqjt +atafwjshjbkjpftgpxngfpcx +atafwjshjbkjpftgqcdhomua +atafwjshjbkjpftgqlyixkgi +atafwjshjbkjpftgqvokbhxq +atafwjshjbkjpftgraelkfjy +atafwjshjbkjpftgrounibuf +atafwjshjgfkeemkaoffckzd +atafwjshjgfkeemkatafwjsh +atafwjshjgfkeemkbhlijevx +atafwjshjgfkeemkbrbjscia +atafwjshjgfkeemkcyxowxpb +atafwjshjgfkeemkddnqavbj +atafwjshjgfkeemkdiiqutzn +atafwjshjgfkeemkdndrjssr +atafwjshjgfkeemkdwyssqez +atafwjshjgfkeemkegjuqmpg +atafwjshjgfkeemkelevflik +atafwjshjgfkeemkeuzwoizs +atafwjshjgfkeemkezuxdhsw +atafwjshjgfkeemkfoazvcwh +atafwjshjgfkeemkhanbdvpq +atafwjshjgfkeemkhfibxuiu +atafwjshjgfkeemkhkdcmtby +atafwjshjgfkeemkhtydvqtb +atafwjshjgfkeemkhytekpmf +atafwjshjgfkeemkiiegilwr +atafwjshjgfkeemkirzhrjiz +atafwjshjgfkeemkjbkjpftg +atafwjshjgfkeemkjgfkeemk +atafwjshjgfkeemkjlakydfo +atafwjshjgfkeemkjuvmcaww +atafwjshjgfkeemkkxrqrxft +atafwjshjgfkeemklhcsptqa +atafwjshjgfkeemklqxtyrci +atafwjshjgfkeemkmaivwnmu +atafwjshjgfkeemkmfdwlmfy +atafwjshjgfkeemkmoyxujxb +atafwjshjgfkeemkmttyjiqf +atafwjshjgfkeemkpssfqqjt +atafwjshjgfkeemkpxngfpcx +atafwjshjgfkeemkqcdhomua +atafwjshjgfkeemkqlyixkgi +atafwjshjgfkeemkqvokbhxq +atafwjshjgfkeemkraelkfjy +atafwjshjgfkeemkrounibuf +atafwjshjlakydfoaoffckzd +atafwjshjlakydfoatafwjsh +atafwjshjlakydfobhlijevx +atafwjshjlakydfobrbjscia +atafwjshjlakydfocyxowxpb +atafwjshjlakydfoddnqavbj +atafwjshjlakydfodiiqutzn +atafwjshjlakydfodndrjssr +atafwjshjlakydfodwyssqez +atafwjshjlakydfoegjuqmpg +atafwjshjlakydfoelevflik +atafwjshjlakydfoeuzwoizs +atafwjshjlakydfoezuxdhsw +atafwjshjlakydfofoazvcwh +atafwjshjlakydfohanbdvpq +atafwjshjlakydfohfibxuiu +atafwjshjlakydfohkdcmtby +atafwjshjlakydfohtydvqtb +atafwjshjlakydfohytekpmf +atafwjshjlakydfoiiegilwr +atafwjshjlakydfoirzhrjiz +atafwjshjlakydfojbkjpftg +atafwjshjlakydfojgfkeemk +atafwjshjlakydfojlakydfo +atafwjshjlakydfojuvmcaww +atafwjshjlakydfokxrqrxft +atafwjshjlakydfolhcsptqa +atafwjshjlakydfolqxtyrci +atafwjshjlakydfomaivwnmu +atafwjshjlakydfomfdwlmfy +atafwjshjlakydfomoyxujxb +atafwjshjlakydfomttyjiqf +atafwjshjlakydfopssfqqjt +atafwjshjlakydfopxngfpcx +atafwjshjlakydfoqcdhomua +atafwjshjlakydfoqlyixkgi +atafwjshjlakydfoqvokbhxq +atafwjshjlakydforaelkfjy +atafwjshjlakydforounibuf +atafwjshjuvmcawwaoffckzd +atafwjshjuvmcawwatafwjsh +atafwjshjuvmcawwbhlijevx +atafwjshjuvmcawwbrbjscia +atafwjshjuvmcawwcyxowxpb +atafwjshjuvmcawwddnqavbj +atafwjshjuvmcawwdiiqutzn +atafwjshjuvmcawwdndrjssr +atafwjshjuvmcawwdwyssqez +atafwjshjuvmcawwegjuqmpg +atafwjshjuvmcawwelevflik +atafwjshjuvmcawweuzwoizs +atafwjshjuvmcawwezuxdhsw +atafwjshjuvmcawwfoazvcwh +atafwjshjuvmcawwhanbdvpq +atafwjshjuvmcawwhfibxuiu +atafwjshjuvmcawwhkdcmtby +atafwjshjuvmcawwhtydvqtb +atafwjshjuvmcawwhytekpmf +atafwjshjuvmcawwiiegilwr +atafwjshjuvmcawwirzhrjiz +atafwjshjuvmcawwjbkjpftg +atafwjshjuvmcawwjgfkeemk +atafwjshjuvmcawwjlakydfo +atafwjshjuvmcawwjuvmcaww +atafwjshjuvmcawwkxrqrxft +atafwjshjuvmcawwlhcsptqa +atafwjshjuvmcawwlqxtyrci +atafwjshjuvmcawwmaivwnmu +atafwjshjuvmcawwmfdwlmfy +atafwjshjuvmcawwmoyxujxb +atafwjshjuvmcawwmttyjiqf +atafwjshjuvmcawwpssfqqjt +atafwjshjuvmcawwpxngfpcx +atafwjshjuvmcawwqcdhomua +atafwjshjuvmcawwqlyixkgi +atafwjshjuvmcawwqvokbhxq +atafwjshjuvmcawwraelkfjy +atafwjshjuvmcawwrounibuf +atafwjshkxrqrxftaoffckzd +atafwjshkxrqrxftatafwjsh +atafwjshkxrqrxftbhlijevx +atafwjshkxrqrxftbrbjscia +atafwjshkxrqrxftcyxowxpb +atafwjshkxrqrxftddnqavbj +atafwjshkxrqrxftdiiqutzn +atafwjshkxrqrxftdndrjssr +atafwjshkxrqrxftdwyssqez +atafwjshkxrqrxftegjuqmpg +atafwjshkxrqrxftelevflik +atafwjshkxrqrxfteuzwoizs +atafwjshkxrqrxftezuxdhsw +atafwjshkxrqrxftfoazvcwh +atafwjshkxrqrxfthanbdvpq +atafwjshkxrqrxfthfibxuiu +atafwjshkxrqrxfthkdcmtby +atafwjshkxrqrxfthtydvqtb +atafwjshkxrqrxfthytekpmf +atafwjshkxrqrxftiiegilwr +atafwjshkxrqrxftirzhrjiz +atafwjshkxrqrxftjbkjpftg +atafwjshkxrqrxftjgfkeemk +atafwjshkxrqrxftjlakydfo +atafwjshkxrqrxftjuvmcaww +atafwjshkxrqrxftkxrqrxft +atafwjshkxrqrxftlhcsptqa +atafwjshkxrqrxftlqxtyrci +atafwjshkxrqrxftmaivwnmu +atafwjshkxrqrxftmfdwlmfy +atafwjshkxrqrxftmoyxujxb +atafwjshkxrqrxftmttyjiqf +atafwjshkxrqrxftpssfqqjt +atafwjshkxrqrxftpxngfpcx +atafwjshkxrqrxftqcdhomua +atafwjshkxrqrxftqlyixkgi +atafwjshkxrqrxftqvokbhxq +atafwjshkxrqrxftraelkfjy +atafwjshkxrqrxftrounibuf +atafwjshlhcsptqaaoffckzd +atafwjshlhcsptqaatafwjsh +atafwjshlhcsptqabhlijevx +atafwjshlhcsptqabrbjscia +atafwjshlhcsptqacyxowxpb +atafwjshlhcsptqaddnqavbj +atafwjshlhcsptqadiiqutzn +atafwjshlhcsptqadndrjssr +atafwjshlhcsptqadwyssqez +atafwjshlhcsptqaegjuqmpg +atafwjshlhcsptqaelevflik +atafwjshlhcsptqaeuzwoizs +atafwjshlhcsptqaezuxdhsw +atafwjshlhcsptqafoazvcwh +atafwjshlhcsptqahanbdvpq +atafwjshlhcsptqahfibxuiu +atafwjshlhcsptqahkdcmtby +atafwjshlhcsptqahtydvqtb +atafwjshlhcsptqahytekpmf +atafwjshlhcsptqaiiegilwr +atafwjshlhcsptqairzhrjiz +atafwjshlhcsptqajbkjpftg +atafwjshlhcsptqajgfkeemk +atafwjshlhcsptqajlakydfo +atafwjshlhcsptqajuvmcaww +atafwjshlhcsptqakxrqrxft +atafwjshlhcsptqalhcsptqa +atafwjshlhcsptqalqxtyrci +atafwjshlhcsptqamaivwnmu +atafwjshlhcsptqamfdwlmfy +atafwjshlhcsptqamoyxujxb +atafwjshlhcsptqamttyjiqf +atafwjshlhcsptqapssfqqjt +atafwjshlhcsptqapxngfpcx +atafwjshlhcsptqaqcdhomua +atafwjshlhcsptqaqlyixkgi +atafwjshlhcsptqaqvokbhxq +atafwjshlhcsptqaraelkfjy +atafwjshlhcsptqarounibuf +atafwjshlqxtyrciaoffckzd +atafwjshlqxtyrciatafwjsh +atafwjshlqxtyrcibhlijevx +atafwjshlqxtyrcibrbjscia +atafwjshlqxtyrcicyxowxpb +atafwjshlqxtyrciddnqavbj +atafwjshlqxtyrcidiiqutzn +atafwjshlqxtyrcidndrjssr +atafwjshlqxtyrcidwyssqez +atafwjshlqxtyrciegjuqmpg +atafwjshlqxtyrcielevflik +atafwjshlqxtyrcieuzwoizs +atafwjshlqxtyrciezuxdhsw +atafwjshlqxtyrcifoazvcwh +atafwjshlqxtyrcihanbdvpq +atafwjshlqxtyrcihfibxuiu +atafwjshlqxtyrcihkdcmtby +atafwjshlqxtyrcihtydvqtb +atafwjshlqxtyrcihytekpmf +atafwjshlqxtyrciiiegilwr +atafwjshlqxtyrciirzhrjiz +atafwjshlqxtyrcijbkjpftg +atafwjshlqxtyrcijgfkeemk +atafwjshlqxtyrcijlakydfo +atafwjshlqxtyrcijuvmcaww +atafwjshlqxtyrcikxrqrxft +atafwjshlqxtyrcilhcsptqa +atafwjshlqxtyrcilqxtyrci +atafwjshlqxtyrcimaivwnmu +atafwjshlqxtyrcimfdwlmfy +atafwjshlqxtyrcimoyxujxb +atafwjshlqxtyrcimttyjiqf +atafwjshlqxtyrcipssfqqjt +atafwjshlqxtyrcipxngfpcx +atafwjshlqxtyrciqcdhomua +atafwjshlqxtyrciqlyixkgi +atafwjshlqxtyrciqvokbhxq +atafwjshlqxtyrciraelkfjy +atafwjshlqxtyrcirounibuf +atafwjshmaivwnmuaoffckzd +atafwjshmaivwnmuatafwjsh +atafwjshmaivwnmubhlijevx +atafwjshmaivwnmubrbjscia +atafwjshmaivwnmucyxowxpb +atafwjshmaivwnmuddnqavbj +atafwjshmaivwnmudiiqutzn +atafwjshmaivwnmudndrjssr +atafwjshmaivwnmudwyssqez +atafwjshmaivwnmuegjuqmpg +atafwjshmaivwnmuelevflik +atafwjshmaivwnmueuzwoizs +atafwjshmaivwnmuezuxdhsw +atafwjshmaivwnmufoazvcwh +atafwjshmaivwnmuhanbdvpq +atafwjshmaivwnmuhfibxuiu +atafwjshmaivwnmuhkdcmtby +atafwjshmaivwnmuhtydvqtb +atafwjshmaivwnmuhytekpmf +atafwjshmaivwnmuiiegilwr +atafwjshmaivwnmuirzhrjiz +atafwjshmaivwnmujbkjpftg +atafwjshmaivwnmujgfkeemk +atafwjshmaivwnmujlakydfo +atafwjshmaivwnmujuvmcaww +atafwjshmaivwnmukxrqrxft +atafwjshmaivwnmulhcsptqa +atafwjshmaivwnmulqxtyrci +atafwjshmaivwnmumaivwnmu +atafwjshmaivwnmumfdwlmfy +atafwjshmaivwnmumoyxujxb +atafwjshmaivwnmumttyjiqf +atafwjshmaivwnmupssfqqjt +atafwjshmaivwnmupxngfpcx +atafwjshmaivwnmuqcdhomua +atafwjshmaivwnmuqlyixkgi +atafwjshmaivwnmuqvokbhxq +atafwjshmaivwnmuraelkfjy +atafwjshmaivwnmurounibuf +atafwjshmfdwlmfyaoffckzd +atafwjshmfdwlmfyatafwjsh +atafwjshmfdwlmfybhlijevx +atafwjshmfdwlmfybrbjscia +atafwjshmfdwlmfycyxowxpb +atafwjshmfdwlmfyddnqavbj +atafwjshmfdwlmfydiiqutzn +atafwjshmfdwlmfydndrjssr +atafwjshmfdwlmfydwyssqez +atafwjshmfdwlmfyegjuqmpg +atafwjshmfdwlmfyelevflik +atafwjshmfdwlmfyeuzwoizs +atafwjshmfdwlmfyezuxdhsw +atafwjshmfdwlmfyfoazvcwh +atafwjshmfdwlmfyhanbdvpq +atafwjshmfdwlmfyhfibxuiu +atafwjshmfdwlmfyhkdcmtby +atafwjshmfdwlmfyhtydvqtb +atafwjshmfdwlmfyhytekpmf +atafwjshmfdwlmfyiiegilwr +atafwjshmfdwlmfyirzhrjiz +atafwjshmfdwlmfyjbkjpftg +atafwjshmfdwlmfyjgfkeemk +atafwjshmfdwlmfyjlakydfo +atafwjshmfdwlmfyjuvmcaww +atafwjshmfdwlmfykxrqrxft +atafwjshmfdwlmfylhcsptqa +atafwjshmfdwlmfylqxtyrci +atafwjshmfdwlmfymaivwnmu +atafwjshmfdwlmfymfdwlmfy +atafwjshmfdwlmfymoyxujxb +atafwjshmfdwlmfymttyjiqf +atafwjshmfdwlmfypssfqqjt +atafwjshmfdwlmfypxngfpcx +atafwjshmfdwlmfyqcdhomua +atafwjshmfdwlmfyqlyixkgi +atafwjshmfdwlmfyqvokbhxq +atafwjshmfdwlmfyraelkfjy +atafwjshmfdwlmfyrounibuf +atafwjshmoyxujxbaoffckzd +atafwjshmoyxujxbatafwjsh +atafwjshmoyxujxbbhlijevx +atafwjshmoyxujxbbrbjscia +atafwjshmoyxujxbcyxowxpb +atafwjshmoyxujxbddnqavbj +atafwjshmoyxujxbdiiqutzn +atafwjshmoyxujxbdndrjssr +atafwjshmoyxujxbdwyssqez +atafwjshmoyxujxbegjuqmpg +atafwjshmoyxujxbelevflik +atafwjshmoyxujxbeuzwoizs +atafwjshmoyxujxbezuxdhsw +atafwjshmoyxujxbfoazvcwh +atafwjshmoyxujxbhanbdvpq +atafwjshmoyxujxbhfibxuiu +atafwjshmoyxujxbhkdcmtby +atafwjshmoyxujxbhtydvqtb +atafwjshmoyxujxbhytekpmf +atafwjshmoyxujxbiiegilwr +atafwjshmoyxujxbirzhrjiz +atafwjshmoyxujxbjbkjpftg +atafwjshmoyxujxbjgfkeemk +atafwjshmoyxujxbjlakydfo +atafwjshmoyxujxbjuvmcaww +atafwjshmoyxujxbkxrqrxft +atafwjshmoyxujxblhcsptqa +atafwjshmoyxujxblqxtyrci +atafwjshmoyxujxbmaivwnmu +atafwjshmoyxujxbmfdwlmfy +atafwjshmoyxujxbmoyxujxb +atafwjshmoyxujxbmttyjiqf +atafwjshmoyxujxbpssfqqjt +atafwjshmoyxujxbpxngfpcx +atafwjshmoyxujxbqcdhomua +atafwjshmoyxujxbqlyixkgi +atafwjshmoyxujxbqvokbhxq +atafwjshmoyxujxbraelkfjy +atafwjshmoyxujxbrounibuf +atafwjshmttyjiqfaoffckzd +atafwjshmttyjiqfatafwjsh +atafwjshmttyjiqfbhlijevx +atafwjshmttyjiqfbrbjscia +atafwjshmttyjiqfcyxowxpb +atafwjshmttyjiqfddnqavbj +atafwjshmttyjiqfdiiqutzn +atafwjshmttyjiqfdndrjssr +atafwjshmttyjiqfdwyssqez +atafwjshmttyjiqfegjuqmpg +atafwjshmttyjiqfelevflik +atafwjshmttyjiqfeuzwoizs +atafwjshmttyjiqfezuxdhsw +atafwjshmttyjiqffoazvcwh +atafwjshmttyjiqfhanbdvpq +atafwjshmttyjiqfhfibxuiu +atafwjshmttyjiqfhkdcmtby +atafwjshmttyjiqfhtydvqtb +atafwjshmttyjiqfhytekpmf +atafwjshmttyjiqfiiegilwr +atafwjshmttyjiqfirzhrjiz +atafwjshmttyjiqfjbkjpftg +atafwjshmttyjiqfjgfkeemk +atafwjshmttyjiqfjlakydfo +atafwjshmttyjiqfjuvmcaww +atafwjshmttyjiqfkxrqrxft +atafwjshmttyjiqflhcsptqa +atafwjshmttyjiqflqxtyrci +atafwjshmttyjiqfmaivwnmu +atafwjshmttyjiqfmfdwlmfy +atafwjshmttyjiqfmoyxujxb +atafwjshmttyjiqfmttyjiqf +atafwjshmttyjiqfpssfqqjt +atafwjshmttyjiqfpxngfpcx +atafwjshmttyjiqfqcdhomua +atafwjshmttyjiqfqlyixkgi +atafwjshmttyjiqfqvokbhxq +atafwjshmttyjiqfraelkfjy +atafwjshmttyjiqfrounibuf +atafwjshpssfqqjtaoffckzd +atafwjshpssfqqjtatafwjsh +atafwjshpssfqqjtbhlijevx +atafwjshpssfqqjtbrbjscia +atafwjshpssfqqjtcyxowxpb +atafwjshpssfqqjtddnqavbj +atafwjshpssfqqjtdiiqutzn +atafwjshpssfqqjtdndrjssr +atafwjshpssfqqjtdwyssqez +atafwjshpssfqqjtegjuqmpg +atafwjshpssfqqjtelevflik +atafwjshpssfqqjteuzwoizs +atafwjshpssfqqjtezuxdhsw +atafwjshpssfqqjtfoazvcwh +atafwjshpssfqqjthanbdvpq +atafwjshpssfqqjthfibxuiu +atafwjshpssfqqjthkdcmtby +atafwjshpssfqqjthtydvqtb +atafwjshpssfqqjthytekpmf +atafwjshpssfqqjtiiegilwr +atafwjshpssfqqjtirzhrjiz +atafwjshpssfqqjtjbkjpftg +atafwjshpssfqqjtjgfkeemk +atafwjshpssfqqjtjlakydfo +atafwjshpssfqqjtjuvmcaww +atafwjshpssfqqjtkxrqrxft +atafwjshpssfqqjtlhcsptqa +atafwjshpssfqqjtlqxtyrci +atafwjshpssfqqjtmaivwnmu +atafwjshpssfqqjtmfdwlmfy +atafwjshpssfqqjtmoyxujxb +atafwjshpssfqqjtmttyjiqf +atafwjshpssfqqjtpssfqqjt +atafwjshpssfqqjtpxngfpcx +atafwjshpssfqqjtqcdhomua +atafwjshpssfqqjtqlyixkgi +atafwjshpssfqqjtqvokbhxq +atafwjshpssfqqjtraelkfjy +atafwjshpssfqqjtrounibuf +atafwjshpxngfpcxaoffckzd +atafwjshpxngfpcxatafwjsh +atafwjshpxngfpcxbhlijevx +atafwjshpxngfpcxbrbjscia +atafwjshpxngfpcxcyxowxpb +atafwjshpxngfpcxddnqavbj +atafwjshpxngfpcxdiiqutzn +atafwjshpxngfpcxdndrjssr +atafwjshpxngfpcxdwyssqez +atafwjshpxngfpcxegjuqmpg +atafwjshpxngfpcxelevflik +atafwjshpxngfpcxeuzwoizs +atafwjshpxngfpcxezuxdhsw +atafwjshpxngfpcxfoazvcwh +atafwjshpxngfpcxhanbdvpq +atafwjshpxngfpcxhfibxuiu +atafwjshpxngfpcxhkdcmtby +atafwjshpxngfpcxhtydvqtb +atafwjshpxngfpcxhytekpmf +atafwjshpxngfpcxiiegilwr +atafwjshpxngfpcxirzhrjiz +atafwjshpxngfpcxjbkjpftg +atafwjshpxngfpcxjgfkeemk +atafwjshpxngfpcxjlakydfo +atafwjshpxngfpcxjuvmcaww +atafwjshpxngfpcxkxrqrxft +atafwjshpxngfpcxlhcsptqa +atafwjshpxngfpcxlqxtyrci +atafwjshpxngfpcxmaivwnmu +atafwjshpxngfpcxmfdwlmfy +atafwjshpxngfpcxmoyxujxb +atafwjshpxngfpcxmttyjiqf +atafwjshpxngfpcxpssfqqjt +atafwjshpxngfpcxpxngfpcx +atafwjshpxngfpcxqcdhomua +atafwjshpxngfpcxqlyixkgi +atafwjshpxngfpcxqvokbhxq +atafwjshpxngfpcxraelkfjy +atafwjshpxngfpcxrounibuf +atafwjshqcdhomuaaoffckzd +atafwjshqcdhomuaatafwjsh +atafwjshqcdhomuabhlijevx +atafwjshqcdhomuabrbjscia +atafwjshqcdhomuacyxowxpb +atafwjshqcdhomuaddnqavbj +atafwjshqcdhomuadiiqutzn +atafwjshqcdhomuadndrjssr +atafwjshqcdhomuadwyssqez +atafwjshqcdhomuaegjuqmpg +atafwjshqcdhomuaelevflik +atafwjshqcdhomuaeuzwoizs +atafwjshqcdhomuaezuxdhsw +atafwjshqcdhomuafoazvcwh +atafwjshqcdhomuahanbdvpq +atafwjshqcdhomuahfibxuiu +atafwjshqcdhomuahkdcmtby +atafwjshqcdhomuahtydvqtb +atafwjshqcdhomuahytekpmf +atafwjshqcdhomuaiiegilwr +atafwjshqcdhomuairzhrjiz +atafwjshqcdhomuajbkjpftg +atafwjshqcdhomuajgfkeemk +atafwjshqcdhomuajlakydfo +atafwjshqcdhomuajuvmcaww +atafwjshqcdhomuakxrqrxft +atafwjshqcdhomualhcsptqa +atafwjshqcdhomualqxtyrci +atafwjshqcdhomuamaivwnmu +atafwjshqcdhomuamfdwlmfy +atafwjshqcdhomuamoyxujxb +atafwjshqcdhomuamttyjiqf +atafwjshqcdhomuapssfqqjt +atafwjshqcdhomuapxngfpcx +atafwjshqcdhomuaqcdhomua +atafwjshqcdhomuaqlyixkgi +atafwjshqcdhomuaqvokbhxq +atafwjshqcdhomuaraelkfjy +atafwjshqcdhomuarounibuf +atafwjshqlyixkgiaoffckzd +atafwjshqlyixkgiatafwjsh +atafwjshqlyixkgibhlijevx +atafwjshqlyixkgibrbjscia +atafwjshqlyixkgicyxowxpb +atafwjshqlyixkgiddnqavbj +atafwjshqlyixkgidiiqutzn +atafwjshqlyixkgidndrjssr +atafwjshqlyixkgidwyssqez +atafwjshqlyixkgiegjuqmpg +atafwjshqlyixkgielevflik +atafwjshqlyixkgieuzwoizs +atafwjshqlyixkgiezuxdhsw +atafwjshqlyixkgifoazvcwh +atafwjshqlyixkgihanbdvpq +atafwjshqlyixkgihfibxuiu +atafwjshqlyixkgihkdcmtby +atafwjshqlyixkgihtydvqtb +atafwjshqlyixkgihytekpmf +atafwjshqlyixkgiiiegilwr +atafwjshqlyixkgiirzhrjiz +atafwjshqlyixkgijbkjpftg +atafwjshqlyixkgijgfkeemk +atafwjshqlyixkgijlakydfo +atafwjshqlyixkgijuvmcaww +atafwjshqlyixkgikxrqrxft +atafwjshqlyixkgilhcsptqa +atafwjshqlyixkgilqxtyrci +atafwjshqlyixkgimaivwnmu +atafwjshqlyixkgimfdwlmfy +atafwjshqlyixkgimoyxujxb +atafwjshqlyixkgimttyjiqf +atafwjshqlyixkgipssfqqjt +atafwjshqlyixkgipxngfpcx +atafwjshqlyixkgiqcdhomua +atafwjshqlyixkgiqlyixkgi +atafwjshqlyixkgiqvokbhxq +atafwjshqlyixkgiraelkfjy +atafwjshqlyixkgirounibuf +atafwjshqvokbhxqaoffckzd +atafwjshqvokbhxqatafwjsh +atafwjshqvokbhxqbhlijevx +atafwjshqvokbhxqbrbjscia +atafwjshqvokbhxqcyxowxpb +atafwjshqvokbhxqddnqavbj +atafwjshqvokbhxqdiiqutzn +atafwjshqvokbhxqdndrjssr +atafwjshqvokbhxqdwyssqez +atafwjshqvokbhxqegjuqmpg +atafwjshqvokbhxqelevflik +atafwjshqvokbhxqeuzwoizs +atafwjshqvokbhxqezuxdhsw +atafwjshqvokbhxqfoazvcwh +atafwjshqvokbhxqhanbdvpq +atafwjshqvokbhxqhfibxuiu +atafwjshqvokbhxqhkdcmtby +atafwjshqvokbhxqhtydvqtb +atafwjshqvokbhxqhytekpmf +atafwjshqvokbhxqiiegilwr +atafwjshqvokbhxqirzhrjiz +atafwjshqvokbhxqjbkjpftg +atafwjshqvokbhxqjgfkeemk +atafwjshqvokbhxqjlakydfo +atafwjshqvokbhxqjuvmcaww +atafwjshqvokbhxqkxrqrxft +atafwjshqvokbhxqlhcsptqa +atafwjshqvokbhxqlqxtyrci +atafwjshqvokbhxqmaivwnmu +atafwjshqvokbhxqmfdwlmfy +atafwjshqvokbhxqmoyxujxb +atafwjshqvokbhxqmttyjiqf +atafwjshqvokbhxqpssfqqjt +atafwjshqvokbhxqpxngfpcx +atafwjshqvokbhxqqcdhomua +atafwjshqvokbhxqqlyixkgi +atafwjshqvokbhxqqvokbhxq +atafwjshqvokbhxqraelkfjy +atafwjshqvokbhxqrounibuf +atafwjshraelkfjyaoffckzd +atafwjshraelkfjyatafwjsh +atafwjshraelkfjybhlijevx +atafwjshraelkfjybrbjscia +atafwjshraelkfjycyxowxpb +atafwjshraelkfjyddnqavbj +atafwjshraelkfjydiiqutzn +atafwjshraelkfjydndrjssr +atafwjshraelkfjydwyssqez +atafwjshraelkfjyegjuqmpg +atafwjshraelkfjyelevflik +atafwjshraelkfjyeuzwoizs +atafwjshraelkfjyezuxdhsw +atafwjshraelkfjyfoazvcwh +atafwjshraelkfjyhanbdvpq +atafwjshraelkfjyhfibxuiu +atafwjshraelkfjyhkdcmtby +atafwjshraelkfjyhtydvqtb +atafwjshraelkfjyhytekpmf +atafwjshraelkfjyiiegilwr +atafwjshraelkfjyirzhrjiz +atafwjshraelkfjyjbkjpftg +atafwjshraelkfjyjgfkeemk +atafwjshraelkfjyjlakydfo +atafwjshraelkfjyjuvmcaww +atafwjshraelkfjykxrqrxft +atafwjshraelkfjylhcsptqa +atafwjshraelkfjylqxtyrci +atafwjshraelkfjymaivwnmu +atafwjshraelkfjymfdwlmfy +atafwjshraelkfjymoyxujxb +atafwjshraelkfjymttyjiqf +atafwjshraelkfjypssfqqjt +atafwjshraelkfjypxngfpcx +atafwjshraelkfjyqcdhomua +atafwjshraelkfjyqlyixkgi +atafwjshraelkfjyqvokbhxq +atafwjshraelkfjyraelkfjy +atafwjshraelkfjyrounibuf +atafwjshrounibufaoffckzd +atafwjshrounibufatafwjsh +atafwjshrounibufbhlijevx +atafwjshrounibufbrbjscia +atafwjshrounibufcyxowxpb +atafwjshrounibufddnqavbj +atafwjshrounibufdiiqutzn +atafwjshrounibufdndrjssr +atafwjshrounibufdwyssqez +atafwjshrounibufegjuqmpg +atafwjshrounibufelevflik +atafwjshrounibufeuzwoizs +atafwjshrounibufezuxdhsw +atafwjshrounibuffoazvcwh +atafwjshrounibufhanbdvpq +atafwjshrounibufhfibxuiu +atafwjshrounibufhkdcmtby +atafwjshrounibufhtydvqtb +atafwjshrounibufhytekpmf +atafwjshrounibufiiegilwr +atafwjshrounibufirzhrjiz +atafwjshrounibufjbkjpftg +atafwjshrounibufjgfkeemk +atafwjshrounibufjlakydfo +atafwjshrounibufjuvmcaww +atafwjshrounibufkxrqrxft +atafwjshrounibuflhcsptqa +atafwjshrounibuflqxtyrci +atafwjshrounibufmaivwnmu +atafwjshrounibufmfdwlmfy +atafwjshrounibufmoyxujxb +atafwjshrounibufmttyjiqf +atafwjshrounibufpssfqqjt +atafwjshrounibufpxngfpcx +atafwjshrounibufqcdhomua +atafwjshrounibufqlyixkgi +atafwjshrounibufqvokbhxq +atafwjshrounibufraelkfjy +atafwjshrounibufrounibuf +bhlijevxaoffckzdaoffckzd +bhlijevxaoffckzdatafwjsh +bhlijevxaoffckzdbhlijevx +bhlijevxaoffckzdbrbjscia +bhlijevxaoffckzdcyxowxpb +bhlijevxaoffckzdddnqavbj +bhlijevxaoffckzddiiqutzn +bhlijevxaoffckzddndrjssr +bhlijevxaoffckzddwyssqez +bhlijevxaoffckzdegjuqmpg +bhlijevxaoffckzdelevflik +bhlijevxaoffckzdeuzwoizs +bhlijevxaoffckzdezuxdhsw +bhlijevxaoffckzdfoazvcwh +bhlijevxaoffckzdhanbdvpq +bhlijevxaoffckzdhfibxuiu +bhlijevxaoffckzdhkdcmtby +bhlijevxaoffckzdhtydvqtb +bhlijevxaoffckzdhytekpmf +bhlijevxaoffckzdiiegilwr +bhlijevxaoffckzdirzhrjiz +bhlijevxaoffckzdjbkjpftg +bhlijevxaoffckzdjgfkeemk +bhlijevxaoffckzdjlakydfo +bhlijevxaoffckzdjuvmcaww +bhlijevxaoffckzdkxrqrxft +bhlijevxaoffckzdlhcsptqa +bhlijevxaoffckzdlqxtyrci +bhlijevxaoffckzdmaivwnmu +bhlijevxaoffckzdmfdwlmfy +bhlijevxaoffckzdmoyxujxb +bhlijevxaoffckzdmttyjiqf +bhlijevxaoffckzdpssfqqjt +bhlijevxaoffckzdpxngfpcx +bhlijevxaoffckzdqcdhomua +bhlijevxaoffckzdqlyixkgi +bhlijevxaoffckzdqvokbhxq +bhlijevxaoffckzdraelkfjy +bhlijevxaoffckzdrounibuf +bhlijevxatafwjshaoffckzd +bhlijevxatafwjshatafwjsh +bhlijevxatafwjshbhlijevx +bhlijevxatafwjshbrbjscia +bhlijevxatafwjshcyxowxpb +bhlijevxatafwjshddnqavbj +bhlijevxatafwjshdiiqutzn +bhlijevxatafwjshdndrjssr +bhlijevxatafwjshdwyssqez +bhlijevxatafwjshegjuqmpg +bhlijevxatafwjshelevflik +bhlijevxatafwjsheuzwoizs +bhlijevxatafwjshezuxdhsw +bhlijevxatafwjshfoazvcwh +bhlijevxatafwjshhanbdvpq +bhlijevxatafwjshhfibxuiu +bhlijevxatafwjshhkdcmtby +bhlijevxatafwjshhtydvqtb +bhlijevxatafwjshhytekpmf +bhlijevxatafwjshiiegilwr +bhlijevxatafwjshirzhrjiz +bhlijevxatafwjshjbkjpftg +bhlijevxatafwjshjgfkeemk +bhlijevxatafwjshjlakydfo +bhlijevxatafwjshjuvmcaww +bhlijevxatafwjshkxrqrxft +bhlijevxatafwjshlhcsptqa +bhlijevxatafwjshlqxtyrci +bhlijevxatafwjshmaivwnmu +bhlijevxatafwjshmfdwlmfy +bhlijevxatafwjshmoyxujxb +bhlijevxatafwjshmttyjiqf +bhlijevxatafwjshpssfqqjt +bhlijevxatafwjshpxngfpcx +bhlijevxatafwjshqcdhomua +bhlijevxatafwjshqlyixkgi +bhlijevxatafwjshqvokbhxq +bhlijevxatafwjshraelkfjy +bhlijevxatafwjshrounibuf +bhlijevxbhlijevxaoffckzd +bhlijevxbhlijevxatafwjsh +bhlijevxbhlijevxbhlijevx +bhlijevxbhlijevxbrbjscia +bhlijevxbhlijevxcyxowxpb +bhlijevxbhlijevxddnqavbj +bhlijevxbhlijevxdiiqutzn +bhlijevxbhlijevxdndrjssr +bhlijevxbhlijevxdwyssqez +bhlijevxbhlijevxegjuqmpg +bhlijevxbhlijevxelevflik +bhlijevxbhlijevxeuzwoizs +bhlijevxbhlijevxezuxdhsw +bhlijevxbhlijevxfoazvcwh +bhlijevxbhlijevxhanbdvpq +bhlijevxbhlijevxhfibxuiu +bhlijevxbhlijevxhkdcmtby +bhlijevxbhlijevxhtydvqtb +bhlijevxbhlijevxhytekpmf +bhlijevxbhlijevxiiegilwr +bhlijevxbhlijevxirzhrjiz +bhlijevxbhlijevxjbkjpftg +bhlijevxbhlijevxjgfkeemk +bhlijevxbhlijevxjlakydfo +bhlijevxbhlijevxjuvmcaww +bhlijevxbhlijevxkxrqrxft +bhlijevxbhlijevxlhcsptqa +bhlijevxbhlijevxlqxtyrci +bhlijevxbhlijevxmaivwnmu +bhlijevxbhlijevxmfdwlmfy +bhlijevxbhlijevxmoyxujxb +bhlijevxbhlijevxmttyjiqf +bhlijevxbhlijevxpssfqqjt +bhlijevxbhlijevxpxngfpcx +bhlijevxbhlijevxqcdhomua +bhlijevxbhlijevxqlyixkgi +bhlijevxbhlijevxqvokbhxq +bhlijevxbhlijevxraelkfjy +bhlijevxbhlijevxrounibuf +bhlijevxbrbjsciaaoffckzd +bhlijevxbrbjsciaatafwjsh +bhlijevxbrbjsciabhlijevx +bhlijevxbrbjsciabrbjscia +bhlijevxbrbjsciacyxowxpb +bhlijevxbrbjsciaddnqavbj +bhlijevxbrbjsciadiiqutzn +bhlijevxbrbjsciadndrjssr +bhlijevxbrbjsciadwyssqez +bhlijevxbrbjsciaegjuqmpg +bhlijevxbrbjsciaelevflik +bhlijevxbrbjsciaeuzwoizs +bhlijevxbrbjsciaezuxdhsw +bhlijevxbrbjsciafoazvcwh +bhlijevxbrbjsciahanbdvpq +bhlijevxbrbjsciahfibxuiu +bhlijevxbrbjsciahkdcmtby +bhlijevxbrbjsciahtydvqtb +bhlijevxbrbjsciahytekpmf +bhlijevxbrbjsciaiiegilwr +bhlijevxbrbjsciairzhrjiz +bhlijevxbrbjsciajbkjpftg +bhlijevxbrbjsciajgfkeemk +bhlijevxbrbjsciajlakydfo +bhlijevxbrbjsciajuvmcaww +bhlijevxbrbjsciakxrqrxft +bhlijevxbrbjscialhcsptqa +bhlijevxbrbjscialqxtyrci +bhlijevxbrbjsciamaivwnmu +bhlijevxbrbjsciamfdwlmfy +bhlijevxbrbjsciamoyxujxb +bhlijevxbrbjsciamttyjiqf +bhlijevxbrbjsciapssfqqjt +bhlijevxbrbjsciapxngfpcx +bhlijevxbrbjsciaqcdhomua +bhlijevxbrbjsciaqlyixkgi +bhlijevxbrbjsciaqvokbhxq +bhlijevxbrbjsciaraelkfjy +bhlijevxbrbjsciarounibuf +bhlijevxcyxowxpbaoffckzd +bhlijevxcyxowxpbatafwjsh +bhlijevxcyxowxpbbhlijevx +bhlijevxcyxowxpbbrbjscia +bhlijevxcyxowxpbcyxowxpb +bhlijevxcyxowxpbddnqavbj +bhlijevxcyxowxpbdiiqutzn +bhlijevxcyxowxpbdndrjssr +bhlijevxcyxowxpbdwyssqez +bhlijevxcyxowxpbegjuqmpg +bhlijevxcyxowxpbelevflik +bhlijevxcyxowxpbeuzwoizs +bhlijevxcyxowxpbezuxdhsw +bhlijevxcyxowxpbfoazvcwh +bhlijevxcyxowxpbhanbdvpq +bhlijevxcyxowxpbhfibxuiu +bhlijevxcyxowxpbhkdcmtby +bhlijevxcyxowxpbhtydvqtb +bhlijevxcyxowxpbhytekpmf +bhlijevxcyxowxpbiiegilwr +bhlijevxcyxowxpbirzhrjiz +bhlijevxcyxowxpbjbkjpftg +bhlijevxcyxowxpbjgfkeemk +bhlijevxcyxowxpbjlakydfo +bhlijevxcyxowxpbjuvmcaww +bhlijevxcyxowxpbkxrqrxft +bhlijevxcyxowxpblhcsptqa +bhlijevxcyxowxpblqxtyrci +bhlijevxcyxowxpbmaivwnmu +bhlijevxcyxowxpbmfdwlmfy +bhlijevxcyxowxpbmoyxujxb +bhlijevxcyxowxpbmttyjiqf +bhlijevxcyxowxpbpssfqqjt +bhlijevxcyxowxpbpxngfpcx +bhlijevxcyxowxpbqcdhomua +bhlijevxcyxowxpbqlyixkgi +bhlijevxcyxowxpbqvokbhxq +bhlijevxcyxowxpbraelkfjy +bhlijevxcyxowxpbrounibuf +bhlijevxddnqavbjaoffckzd +bhlijevxddnqavbjatafwjsh +bhlijevxddnqavbjbhlijevx +bhlijevxddnqavbjbrbjscia +bhlijevxddnqavbjcyxowxpb +bhlijevxddnqavbjddnqavbj +bhlijevxddnqavbjdiiqutzn +bhlijevxddnqavbjdndrjssr +bhlijevxddnqavbjdwyssqez +bhlijevxddnqavbjegjuqmpg +bhlijevxddnqavbjelevflik +bhlijevxddnqavbjeuzwoizs +bhlijevxddnqavbjezuxdhsw +bhlijevxddnqavbjfoazvcwh +bhlijevxddnqavbjhanbdvpq +bhlijevxddnqavbjhfibxuiu +bhlijevxddnqavbjhkdcmtby +bhlijevxddnqavbjhtydvqtb +bhlijevxddnqavbjhytekpmf +bhlijevxddnqavbjiiegilwr +bhlijevxddnqavbjirzhrjiz +bhlijevxddnqavbjjbkjpftg +bhlijevxddnqavbjjgfkeemk +bhlijevxddnqavbjjlakydfo +bhlijevxddnqavbjjuvmcaww +bhlijevxddnqavbjkxrqrxft +bhlijevxddnqavbjlhcsptqa +bhlijevxddnqavbjlqxtyrci +bhlijevxddnqavbjmaivwnmu +bhlijevxddnqavbjmfdwlmfy +bhlijevxddnqavbjmoyxujxb +bhlijevxddnqavbjmttyjiqf +bhlijevxddnqavbjpssfqqjt +bhlijevxddnqavbjpxngfpcx +bhlijevxddnqavbjqcdhomua +bhlijevxddnqavbjqlyixkgi +bhlijevxddnqavbjqvokbhxq +bhlijevxddnqavbjraelkfjy +bhlijevxddnqavbjrounibuf +bhlijevxdiiqutznaoffckzd +bhlijevxdiiqutznatafwjsh +bhlijevxdiiqutznbhlijevx +bhlijevxdiiqutznbrbjscia +bhlijevxdiiqutzncyxowxpb +bhlijevxdiiqutznddnqavbj +bhlijevxdiiqutzndiiqutzn +bhlijevxdiiqutzndndrjssr +bhlijevxdiiqutzndwyssqez +bhlijevxdiiqutznegjuqmpg +bhlijevxdiiqutznelevflik +bhlijevxdiiqutzneuzwoizs +bhlijevxdiiqutznezuxdhsw +bhlijevxdiiqutznfoazvcwh +bhlijevxdiiqutznhanbdvpq +bhlijevxdiiqutznhfibxuiu +bhlijevxdiiqutznhkdcmtby +bhlijevxdiiqutznhtydvqtb +bhlijevxdiiqutznhytekpmf +bhlijevxdiiqutzniiegilwr +bhlijevxdiiqutznirzhrjiz +bhlijevxdiiqutznjbkjpftg +bhlijevxdiiqutznjgfkeemk +bhlijevxdiiqutznjlakydfo +bhlijevxdiiqutznjuvmcaww +bhlijevxdiiqutznkxrqrxft +bhlijevxdiiqutznlhcsptqa +bhlijevxdiiqutznlqxtyrci +bhlijevxdiiqutznmaivwnmu +bhlijevxdiiqutznmfdwlmfy +bhlijevxdiiqutznmoyxujxb +bhlijevxdiiqutznmttyjiqf +bhlijevxdiiqutznpssfqqjt +bhlijevxdiiqutznpxngfpcx +bhlijevxdiiqutznqcdhomua +bhlijevxdiiqutznqlyixkgi +bhlijevxdiiqutznqvokbhxq +bhlijevxdiiqutznraelkfjy +bhlijevxdiiqutznrounibuf +bhlijevxdndrjssraoffckzd +bhlijevxdndrjssratafwjsh +bhlijevxdndrjssrbhlijevx +bhlijevxdndrjssrbrbjscia +bhlijevxdndrjssrcyxowxpb +bhlijevxdndrjssrddnqavbj +bhlijevxdndrjssrdiiqutzn +bhlijevxdndrjssrdndrjssr +bhlijevxdndrjssrdwyssqez +bhlijevxdndrjssregjuqmpg +bhlijevxdndrjssrelevflik +bhlijevxdndrjssreuzwoizs +bhlijevxdndrjssrezuxdhsw +bhlijevxdndrjssrfoazvcwh +bhlijevxdndrjssrhanbdvpq +bhlijevxdndrjssrhfibxuiu +bhlijevxdndrjssrhkdcmtby +bhlijevxdndrjssrhtydvqtb +bhlijevxdndrjssrhytekpmf +bhlijevxdndrjssriiegilwr +bhlijevxdndrjssrirzhrjiz +bhlijevxdndrjssrjbkjpftg +bhlijevxdndrjssrjgfkeemk +bhlijevxdndrjssrjlakydfo +bhlijevxdndrjssrjuvmcaww +bhlijevxdndrjssrkxrqrxft +bhlijevxdndrjssrlhcsptqa +bhlijevxdndrjssrlqxtyrci +bhlijevxdndrjssrmaivwnmu +bhlijevxdndrjssrmfdwlmfy +bhlijevxdndrjssrmoyxujxb +bhlijevxdndrjssrmttyjiqf +bhlijevxdndrjssrpssfqqjt +bhlijevxdndrjssrpxngfpcx +bhlijevxdndrjssrqcdhomua +bhlijevxdndrjssrqlyixkgi +bhlijevxdndrjssrqvokbhxq +bhlijevxdndrjssrraelkfjy +bhlijevxdndrjssrrounibuf +bhlijevxdwyssqezaoffckzd +bhlijevxdwyssqezatafwjsh +bhlijevxdwyssqezbhlijevx +bhlijevxdwyssqezbrbjscia +bhlijevxdwyssqezcyxowxpb +bhlijevxdwyssqezddnqavbj +bhlijevxdwyssqezdiiqutzn +bhlijevxdwyssqezdndrjssr +bhlijevxdwyssqezdwyssqez +bhlijevxdwyssqezegjuqmpg +bhlijevxdwyssqezelevflik +bhlijevxdwyssqezeuzwoizs +bhlijevxdwyssqezezuxdhsw +bhlijevxdwyssqezfoazvcwh +bhlijevxdwyssqezhanbdvpq +bhlijevxdwyssqezhfibxuiu +bhlijevxdwyssqezhkdcmtby +bhlijevxdwyssqezhtydvqtb +bhlijevxdwyssqezhytekpmf +bhlijevxdwyssqeziiegilwr +bhlijevxdwyssqezirzhrjiz +bhlijevxdwyssqezjbkjpftg +bhlijevxdwyssqezjgfkeemk +bhlijevxdwyssqezjlakydfo +bhlijevxdwyssqezjuvmcaww +bhlijevxdwyssqezkxrqrxft +bhlijevxdwyssqezlhcsptqa +bhlijevxdwyssqezlqxtyrci +bhlijevxdwyssqezmaivwnmu +bhlijevxdwyssqezmfdwlmfy +bhlijevxdwyssqezmoyxujxb +bhlijevxdwyssqezmttyjiqf +bhlijevxdwyssqezpssfqqjt +bhlijevxdwyssqezpxngfpcx +bhlijevxdwyssqezqcdhomua +bhlijevxdwyssqezqlyixkgi +bhlijevxdwyssqezqvokbhxq +bhlijevxdwyssqezraelkfjy +bhlijevxdwyssqezrounibuf +bhlijevxegjuqmpgaoffckzd +bhlijevxegjuqmpgatafwjsh +bhlijevxegjuqmpgbhlijevx +bhlijevxegjuqmpgbrbjscia +bhlijevxegjuqmpgcyxowxpb +bhlijevxegjuqmpgddnqavbj +bhlijevxegjuqmpgdiiqutzn +bhlijevxegjuqmpgdndrjssr +bhlijevxegjuqmpgdwyssqez +bhlijevxegjuqmpgegjuqmpg +bhlijevxegjuqmpgelevflik +bhlijevxegjuqmpgeuzwoizs +bhlijevxegjuqmpgezuxdhsw +bhlijevxegjuqmpgfoazvcwh +bhlijevxegjuqmpghanbdvpq +bhlijevxegjuqmpghfibxuiu +bhlijevxegjuqmpghkdcmtby +bhlijevxegjuqmpghtydvqtb +bhlijevxegjuqmpghytekpmf +bhlijevxegjuqmpgiiegilwr +bhlijevxegjuqmpgirzhrjiz +bhlijevxegjuqmpgjbkjpftg +bhlijevxegjuqmpgjgfkeemk +bhlijevxegjuqmpgjlakydfo +bhlijevxegjuqmpgjuvmcaww +bhlijevxegjuqmpgkxrqrxft +bhlijevxegjuqmpglhcsptqa +bhlijevxegjuqmpglqxtyrci +bhlijevxegjuqmpgmaivwnmu +bhlijevxegjuqmpgmfdwlmfy +bhlijevxegjuqmpgmoyxujxb +bhlijevxegjuqmpgmttyjiqf +bhlijevxegjuqmpgpssfqqjt +bhlijevxegjuqmpgpxngfpcx +bhlijevxegjuqmpgqcdhomua +bhlijevxegjuqmpgqlyixkgi +bhlijevxegjuqmpgqvokbhxq +bhlijevxegjuqmpgraelkfjy +bhlijevxegjuqmpgrounibuf +bhlijevxelevflikaoffckzd +bhlijevxelevflikatafwjsh +bhlijevxelevflikbhlijevx +bhlijevxelevflikbrbjscia +bhlijevxelevflikcyxowxpb +bhlijevxelevflikddnqavbj +bhlijevxelevflikdiiqutzn +bhlijevxelevflikdndrjssr +bhlijevxelevflikdwyssqez +bhlijevxelevflikegjuqmpg +bhlijevxelevflikelevflik +bhlijevxelevflikeuzwoizs +bhlijevxelevflikezuxdhsw +bhlijevxelevflikfoazvcwh +bhlijevxelevflikhanbdvpq +bhlijevxelevflikhfibxuiu +bhlijevxelevflikhkdcmtby +bhlijevxelevflikhtydvqtb +bhlijevxelevflikhytekpmf +bhlijevxelevflikiiegilwr +bhlijevxelevflikirzhrjiz +bhlijevxelevflikjbkjpftg +bhlijevxelevflikjgfkeemk +bhlijevxelevflikjlakydfo +bhlijevxelevflikjuvmcaww +bhlijevxelevflikkxrqrxft +bhlijevxelevfliklhcsptqa +bhlijevxelevfliklqxtyrci +bhlijevxelevflikmaivwnmu +bhlijevxelevflikmfdwlmfy +bhlijevxelevflikmoyxujxb +bhlijevxelevflikmttyjiqf +bhlijevxelevflikpssfqqjt +bhlijevxelevflikpxngfpcx +bhlijevxelevflikqcdhomua +bhlijevxelevflikqlyixkgi +bhlijevxelevflikqvokbhxq +bhlijevxelevflikraelkfjy +bhlijevxelevflikrounibuf +bhlijevxeuzwoizsaoffckzd +bhlijevxeuzwoizsatafwjsh +bhlijevxeuzwoizsbhlijevx +bhlijevxeuzwoizsbrbjscia +bhlijevxeuzwoizscyxowxpb +bhlijevxeuzwoizsddnqavbj +bhlijevxeuzwoizsdiiqutzn +bhlijevxeuzwoizsdndrjssr +bhlijevxeuzwoizsdwyssqez +bhlijevxeuzwoizsegjuqmpg +bhlijevxeuzwoizselevflik +bhlijevxeuzwoizseuzwoizs +bhlijevxeuzwoizsezuxdhsw +bhlijevxeuzwoizsfoazvcwh +bhlijevxeuzwoizshanbdvpq +bhlijevxeuzwoizshfibxuiu +bhlijevxeuzwoizshkdcmtby +bhlijevxeuzwoizshtydvqtb +bhlijevxeuzwoizshytekpmf +bhlijevxeuzwoizsiiegilwr +bhlijevxeuzwoizsirzhrjiz +bhlijevxeuzwoizsjbkjpftg +bhlijevxeuzwoizsjgfkeemk +bhlijevxeuzwoizsjlakydfo +bhlijevxeuzwoizsjuvmcaww +bhlijevxeuzwoizskxrqrxft +bhlijevxeuzwoizslhcsptqa +bhlijevxeuzwoizslqxtyrci +bhlijevxeuzwoizsmaivwnmu +bhlijevxeuzwoizsmfdwlmfy +bhlijevxeuzwoizsmoyxujxb +bhlijevxeuzwoizsmttyjiqf +bhlijevxeuzwoizspssfqqjt +bhlijevxeuzwoizspxngfpcx +bhlijevxeuzwoizsqcdhomua +bhlijevxeuzwoizsqlyixkgi +bhlijevxeuzwoizsqvokbhxq +bhlijevxeuzwoizsraelkfjy +bhlijevxeuzwoizsrounibuf +bhlijevxezuxdhswaoffckzd +bhlijevxezuxdhswatafwjsh +bhlijevxezuxdhswbhlijevx +bhlijevxezuxdhswbrbjscia +bhlijevxezuxdhswcyxowxpb +bhlijevxezuxdhswddnqavbj +bhlijevxezuxdhswdiiqutzn +bhlijevxezuxdhswdndrjssr +bhlijevxezuxdhswdwyssqez +bhlijevxezuxdhswegjuqmpg +bhlijevxezuxdhswelevflik +bhlijevxezuxdhsweuzwoizs +bhlijevxezuxdhswezuxdhsw +bhlijevxezuxdhswfoazvcwh +bhlijevxezuxdhswhanbdvpq +bhlijevxezuxdhswhfibxuiu +bhlijevxezuxdhswhkdcmtby +bhlijevxezuxdhswhtydvqtb +bhlijevxezuxdhswhytekpmf +bhlijevxezuxdhswiiegilwr +bhlijevxezuxdhswirzhrjiz +bhlijevxezuxdhswjbkjpftg +bhlijevxezuxdhswjgfkeemk +bhlijevxezuxdhswjlakydfo +bhlijevxezuxdhswjuvmcaww +bhlijevxezuxdhswkxrqrxft +bhlijevxezuxdhswlhcsptqa +bhlijevxezuxdhswlqxtyrci +bhlijevxezuxdhswmaivwnmu +bhlijevxezuxdhswmfdwlmfy +bhlijevxezuxdhswmoyxujxb +bhlijevxezuxdhswmttyjiqf +bhlijevxezuxdhswpssfqqjt +bhlijevxezuxdhswpxngfpcx +bhlijevxezuxdhswqcdhomua +bhlijevxezuxdhswqlyixkgi +bhlijevxezuxdhswqvokbhxq +bhlijevxezuxdhswraelkfjy +bhlijevxezuxdhswrounibuf +bhlijevxfoazvcwhaoffckzd +bhlijevxfoazvcwhatafwjsh +bhlijevxfoazvcwhbhlijevx +bhlijevxfoazvcwhbrbjscia +bhlijevxfoazvcwhcyxowxpb +bhlijevxfoazvcwhddnqavbj +bhlijevxfoazvcwhdiiqutzn +bhlijevxfoazvcwhdndrjssr +bhlijevxfoazvcwhdwyssqez +bhlijevxfoazvcwhegjuqmpg +bhlijevxfoazvcwhelevflik +bhlijevxfoazvcwheuzwoizs +bhlijevxfoazvcwhezuxdhsw +bhlijevxfoazvcwhfoazvcwh +bhlijevxfoazvcwhhanbdvpq +bhlijevxfoazvcwhhfibxuiu +bhlijevxfoazvcwhhkdcmtby +bhlijevxfoazvcwhhtydvqtb +bhlijevxfoazvcwhhytekpmf +bhlijevxfoazvcwhiiegilwr +bhlijevxfoazvcwhirzhrjiz +bhlijevxfoazvcwhjbkjpftg +bhlijevxfoazvcwhjgfkeemk +bhlijevxfoazvcwhjlakydfo +bhlijevxfoazvcwhjuvmcaww +bhlijevxfoazvcwhkxrqrxft +bhlijevxfoazvcwhlhcsptqa +bhlijevxfoazvcwhlqxtyrci +bhlijevxfoazvcwhmaivwnmu +bhlijevxfoazvcwhmfdwlmfy +bhlijevxfoazvcwhmoyxujxb +bhlijevxfoazvcwhmttyjiqf +bhlijevxfoazvcwhpssfqqjt +bhlijevxfoazvcwhpxngfpcx +bhlijevxfoazvcwhqcdhomua +bhlijevxfoazvcwhqlyixkgi +bhlijevxfoazvcwhqvokbhxq +bhlijevxfoazvcwhraelkfjy +bhlijevxfoazvcwhrounibuf +bhlijevxhanbdvpqaoffckzd +bhlijevxhanbdvpqatafwjsh +bhlijevxhanbdvpqbhlijevx +bhlijevxhanbdvpqbrbjscia +bhlijevxhanbdvpqcyxowxpb +bhlijevxhanbdvpqddnqavbj +bhlijevxhanbdvpqdiiqutzn +bhlijevxhanbdvpqdndrjssr +bhlijevxhanbdvpqdwyssqez +bhlijevxhanbdvpqegjuqmpg +bhlijevxhanbdvpqelevflik +bhlijevxhanbdvpqeuzwoizs +bhlijevxhanbdvpqezuxdhsw +bhlijevxhanbdvpqfoazvcwh +bhlijevxhanbdvpqhanbdvpq +bhlijevxhanbdvpqhfibxuiu +bhlijevxhanbdvpqhkdcmtby +bhlijevxhanbdvpqhtydvqtb +bhlijevxhanbdvpqhytekpmf +bhlijevxhanbdvpqiiegilwr +bhlijevxhanbdvpqirzhrjiz +bhlijevxhanbdvpqjbkjpftg +bhlijevxhanbdvpqjgfkeemk +bhlijevxhanbdvpqjlakydfo +bhlijevxhanbdvpqjuvmcaww +bhlijevxhanbdvpqkxrqrxft +bhlijevxhanbdvpqlhcsptqa +bhlijevxhanbdvpqlqxtyrci +bhlijevxhanbdvpqmaivwnmu +bhlijevxhanbdvpqmfdwlmfy +bhlijevxhanbdvpqmoyxujxb +bhlijevxhanbdvpqmttyjiqf +bhlijevxhanbdvpqpssfqqjt +bhlijevxhanbdvpqpxngfpcx +bhlijevxhanbdvpqqcdhomua +bhlijevxhanbdvpqqlyixkgi +bhlijevxhanbdvpqqvokbhxq +bhlijevxhanbdvpqraelkfjy +bhlijevxhanbdvpqrounibuf +bhlijevxhfibxuiuaoffckzd +bhlijevxhfibxuiuatafwjsh +bhlijevxhfibxuiubhlijevx +bhlijevxhfibxuiubrbjscia +bhlijevxhfibxuiucyxowxpb +bhlijevxhfibxuiuddnqavbj +bhlijevxhfibxuiudiiqutzn +bhlijevxhfibxuiudndrjssr +bhlijevxhfibxuiudwyssqez +bhlijevxhfibxuiuegjuqmpg +bhlijevxhfibxuiuelevflik +bhlijevxhfibxuiueuzwoizs +bhlijevxhfibxuiuezuxdhsw +bhlijevxhfibxuiufoazvcwh +bhlijevxhfibxuiuhanbdvpq +bhlijevxhfibxuiuhfibxuiu +bhlijevxhfibxuiuhkdcmtby +bhlijevxhfibxuiuhtydvqtb +bhlijevxhfibxuiuhytekpmf +bhlijevxhfibxuiuiiegilwr +bhlijevxhfibxuiuirzhrjiz +bhlijevxhfibxuiujbkjpftg +bhlijevxhfibxuiujgfkeemk +bhlijevxhfibxuiujlakydfo +bhlijevxhfibxuiujuvmcaww +bhlijevxhfibxuiukxrqrxft +bhlijevxhfibxuiulhcsptqa +bhlijevxhfibxuiulqxtyrci +bhlijevxhfibxuiumaivwnmu +bhlijevxhfibxuiumfdwlmfy +bhlijevxhfibxuiumoyxujxb +bhlijevxhfibxuiumttyjiqf +bhlijevxhfibxuiupssfqqjt +bhlijevxhfibxuiupxngfpcx +bhlijevxhfibxuiuqcdhomua +bhlijevxhfibxuiuqlyixkgi +bhlijevxhfibxuiuqvokbhxq +bhlijevxhfibxuiuraelkfjy +bhlijevxhfibxuiurounibuf +bhlijevxhkdcmtbyaoffckzd +bhlijevxhkdcmtbyatafwjsh +bhlijevxhkdcmtbybhlijevx +bhlijevxhkdcmtbybrbjscia +bhlijevxhkdcmtbycyxowxpb +bhlijevxhkdcmtbyddnqavbj +bhlijevxhkdcmtbydiiqutzn +bhlijevxhkdcmtbydndrjssr +bhlijevxhkdcmtbydwyssqez +bhlijevxhkdcmtbyegjuqmpg +bhlijevxhkdcmtbyelevflik +bhlijevxhkdcmtbyeuzwoizs +bhlijevxhkdcmtbyezuxdhsw +bhlijevxhkdcmtbyfoazvcwh +bhlijevxhkdcmtbyhanbdvpq +bhlijevxhkdcmtbyhfibxuiu +bhlijevxhkdcmtbyhkdcmtby +bhlijevxhkdcmtbyhtydvqtb +bhlijevxhkdcmtbyhytekpmf +bhlijevxhkdcmtbyiiegilwr +bhlijevxhkdcmtbyirzhrjiz +bhlijevxhkdcmtbyjbkjpftg +bhlijevxhkdcmtbyjgfkeemk +bhlijevxhkdcmtbyjlakydfo +bhlijevxhkdcmtbyjuvmcaww +bhlijevxhkdcmtbykxrqrxft +bhlijevxhkdcmtbylhcsptqa +bhlijevxhkdcmtbylqxtyrci +bhlijevxhkdcmtbymaivwnmu +bhlijevxhkdcmtbymfdwlmfy +bhlijevxhkdcmtbymoyxujxb +bhlijevxhkdcmtbymttyjiqf +bhlijevxhkdcmtbypssfqqjt +bhlijevxhkdcmtbypxngfpcx +bhlijevxhkdcmtbyqcdhomua +bhlijevxhkdcmtbyqlyixkgi +bhlijevxhkdcmtbyqvokbhxq +bhlijevxhkdcmtbyraelkfjy +bhlijevxhkdcmtbyrounibuf +bhlijevxhtydvqtbaoffckzd +bhlijevxhtydvqtbatafwjsh +bhlijevxhtydvqtbbhlijevx +bhlijevxhtydvqtbbrbjscia +bhlijevxhtydvqtbcyxowxpb +bhlijevxhtydvqtbddnqavbj +bhlijevxhtydvqtbdiiqutzn +bhlijevxhtydvqtbdndrjssr +bhlijevxhtydvqtbdwyssqez +bhlijevxhtydvqtbegjuqmpg +bhlijevxhtydvqtbelevflik +bhlijevxhtydvqtbeuzwoizs +bhlijevxhtydvqtbezuxdhsw +bhlijevxhtydvqtbfoazvcwh +bhlijevxhtydvqtbhanbdvpq +bhlijevxhtydvqtbhfibxuiu +bhlijevxhtydvqtbhkdcmtby +bhlijevxhtydvqtbhtydvqtb +bhlijevxhtydvqtbhytekpmf +bhlijevxhtydvqtbiiegilwr +bhlijevxhtydvqtbirzhrjiz +bhlijevxhtydvqtbjbkjpftg +bhlijevxhtydvqtbjgfkeemk +bhlijevxhtydvqtbjlakydfo +bhlijevxhtydvqtbjuvmcaww +bhlijevxhtydvqtbkxrqrxft +bhlijevxhtydvqtblhcsptqa +bhlijevxhtydvqtblqxtyrci +bhlijevxhtydvqtbmaivwnmu +bhlijevxhtydvqtbmfdwlmfy +bhlijevxhtydvqtbmoyxujxb +bhlijevxhtydvqtbmttyjiqf +bhlijevxhtydvqtbpssfqqjt +bhlijevxhtydvqtbpxngfpcx +bhlijevxhtydvqtbqcdhomua +bhlijevxhtydvqtbqlyixkgi +bhlijevxhtydvqtbqvokbhxq +bhlijevxhtydvqtbraelkfjy +bhlijevxhtydvqtbrounibuf +bhlijevxhytekpmfaoffckzd +bhlijevxhytekpmfatafwjsh +bhlijevxhytekpmfbhlijevx +bhlijevxhytekpmfbrbjscia +bhlijevxhytekpmfcyxowxpb +bhlijevxhytekpmfddnqavbj +bhlijevxhytekpmfdiiqutzn +bhlijevxhytekpmfdndrjssr +bhlijevxhytekpmfdwyssqez +bhlijevxhytekpmfegjuqmpg +bhlijevxhytekpmfelevflik +bhlijevxhytekpmfeuzwoizs +bhlijevxhytekpmfezuxdhsw +bhlijevxhytekpmffoazvcwh +bhlijevxhytekpmfhanbdvpq +bhlijevxhytekpmfhfibxuiu +bhlijevxhytekpmfhkdcmtby +bhlijevxhytekpmfhtydvqtb +bhlijevxhytekpmfhytekpmf +bhlijevxhytekpmfiiegilwr +bhlijevxhytekpmfirzhrjiz +bhlijevxhytekpmfjbkjpftg +bhlijevxhytekpmfjgfkeemk +bhlijevxhytekpmfjlakydfo +bhlijevxhytekpmfjuvmcaww +bhlijevxhytekpmfkxrqrxft +bhlijevxhytekpmflhcsptqa +bhlijevxhytekpmflqxtyrci +bhlijevxhytekpmfmaivwnmu +bhlijevxhytekpmfmfdwlmfy +bhlijevxhytekpmfmoyxujxb +bhlijevxhytekpmfmttyjiqf +bhlijevxhytekpmfpssfqqjt +bhlijevxhytekpmfpxngfpcx +bhlijevxhytekpmfqcdhomua +bhlijevxhytekpmfqlyixkgi +bhlijevxhytekpmfqvokbhxq +bhlijevxhytekpmfraelkfjy +bhlijevxhytekpmfrounibuf +bhlijevxiiegilwraoffckzd +bhlijevxiiegilwratafwjsh +bhlijevxiiegilwrbhlijevx +bhlijevxiiegilwrbrbjscia +bhlijevxiiegilwrcyxowxpb +bhlijevxiiegilwrddnqavbj +bhlijevxiiegilwrdiiqutzn +bhlijevxiiegilwrdndrjssr +bhlijevxiiegilwrdwyssqez +bhlijevxiiegilwregjuqmpg +bhlijevxiiegilwrelevflik +bhlijevxiiegilwreuzwoizs +bhlijevxiiegilwrezuxdhsw +bhlijevxiiegilwrfoazvcwh +bhlijevxiiegilwrhanbdvpq +bhlijevxiiegilwrhfibxuiu +bhlijevxiiegilwrhkdcmtby +bhlijevxiiegilwrhtydvqtb +bhlijevxiiegilwrhytekpmf +bhlijevxiiegilwriiegilwr +bhlijevxiiegilwrirzhrjiz +bhlijevxiiegilwrjbkjpftg +bhlijevxiiegilwrjgfkeemk +bhlijevxiiegilwrjlakydfo +bhlijevxiiegilwrjuvmcaww +bhlijevxiiegilwrkxrqrxft +bhlijevxiiegilwrlhcsptqa +bhlijevxiiegilwrlqxtyrci +bhlijevxiiegilwrmaivwnmu +bhlijevxiiegilwrmfdwlmfy +bhlijevxiiegilwrmoyxujxb +bhlijevxiiegilwrmttyjiqf +bhlijevxiiegilwrpssfqqjt +bhlijevxiiegilwrpxngfpcx +bhlijevxiiegilwrqcdhomua +bhlijevxiiegilwrqlyixkgi +bhlijevxiiegilwrqvokbhxq +bhlijevxiiegilwrraelkfjy +bhlijevxiiegilwrrounibuf +bhlijevxirzhrjizaoffckzd +bhlijevxirzhrjizatafwjsh +bhlijevxirzhrjizbhlijevx +bhlijevxirzhrjizbrbjscia +bhlijevxirzhrjizcyxowxpb +bhlijevxirzhrjizddnqavbj +bhlijevxirzhrjizdiiqutzn +bhlijevxirzhrjizdndrjssr +bhlijevxirzhrjizdwyssqez +bhlijevxirzhrjizegjuqmpg +bhlijevxirzhrjizelevflik +bhlijevxirzhrjizeuzwoizs +bhlijevxirzhrjizezuxdhsw +bhlijevxirzhrjizfoazvcwh +bhlijevxirzhrjizhanbdvpq +bhlijevxirzhrjizhfibxuiu +bhlijevxirzhrjizhkdcmtby +bhlijevxirzhrjizhtydvqtb +bhlijevxirzhrjizhytekpmf +bhlijevxirzhrjiziiegilwr +bhlijevxirzhrjizirzhrjiz +bhlijevxirzhrjizjbkjpftg +bhlijevxirzhrjizjgfkeemk +bhlijevxirzhrjizjlakydfo +bhlijevxirzhrjizjuvmcaww +bhlijevxirzhrjizkxrqrxft +bhlijevxirzhrjizlhcsptqa +bhlijevxirzhrjizlqxtyrci +bhlijevxirzhrjizmaivwnmu +bhlijevxirzhrjizmfdwlmfy +bhlijevxirzhrjizmoyxujxb +bhlijevxirzhrjizmttyjiqf +bhlijevxirzhrjizpssfqqjt +bhlijevxirzhrjizpxngfpcx +bhlijevxirzhrjizqcdhomua +bhlijevxirzhrjizqlyixkgi +bhlijevxirzhrjizqvokbhxq +bhlijevxirzhrjizraelkfjy +bhlijevxirzhrjizrounibuf +bhlijevxjbkjpftgaoffckzd +bhlijevxjbkjpftgatafwjsh +bhlijevxjbkjpftgbhlijevx +bhlijevxjbkjpftgbrbjscia +bhlijevxjbkjpftgcyxowxpb +bhlijevxjbkjpftgddnqavbj +bhlijevxjbkjpftgdiiqutzn +bhlijevxjbkjpftgdndrjssr +bhlijevxjbkjpftgdwyssqez +bhlijevxjbkjpftgegjuqmpg +bhlijevxjbkjpftgelevflik +bhlijevxjbkjpftgeuzwoizs +bhlijevxjbkjpftgezuxdhsw +bhlijevxjbkjpftgfoazvcwh +bhlijevxjbkjpftghanbdvpq +bhlijevxjbkjpftghfibxuiu +bhlijevxjbkjpftghkdcmtby +bhlijevxjbkjpftghtydvqtb +bhlijevxjbkjpftghytekpmf +bhlijevxjbkjpftgiiegilwr +bhlijevxjbkjpftgirzhrjiz +bhlijevxjbkjpftgjbkjpftg +bhlijevxjbkjpftgjgfkeemk +bhlijevxjbkjpftgjlakydfo +bhlijevxjbkjpftgjuvmcaww +bhlijevxjbkjpftgkxrqrxft +bhlijevxjbkjpftglhcsptqa +bhlijevxjbkjpftglqxtyrci +bhlijevxjbkjpftgmaivwnmu +bhlijevxjbkjpftgmfdwlmfy +bhlijevxjbkjpftgmoyxujxb +bhlijevxjbkjpftgmttyjiqf +bhlijevxjbkjpftgpssfqqjt +bhlijevxjbkjpftgpxngfpcx +bhlijevxjbkjpftgqcdhomua +bhlijevxjbkjpftgqlyixkgi +bhlijevxjbkjpftgqvokbhxq +bhlijevxjbkjpftgraelkfjy +bhlijevxjbkjpftgrounibuf +bhlijevxjgfkeemkaoffckzd +bhlijevxjgfkeemkatafwjsh +bhlijevxjgfkeemkbhlijevx +bhlijevxjgfkeemkbrbjscia +bhlijevxjgfkeemkcyxowxpb +bhlijevxjgfkeemkddnqavbj +bhlijevxjgfkeemkdiiqutzn +bhlijevxjgfkeemkdndrjssr +bhlijevxjgfkeemkdwyssqez +bhlijevxjgfkeemkegjuqmpg +bhlijevxjgfkeemkelevflik +bhlijevxjgfkeemkeuzwoizs +bhlijevxjgfkeemkezuxdhsw +bhlijevxjgfkeemkfoazvcwh +bhlijevxjgfkeemkhanbdvpq +bhlijevxjgfkeemkhfibxuiu +bhlijevxjgfkeemkhkdcmtby +bhlijevxjgfkeemkhtydvqtb +bhlijevxjgfkeemkhytekpmf +bhlijevxjgfkeemkiiegilwr +bhlijevxjgfkeemkirzhrjiz +bhlijevxjgfkeemkjbkjpftg +bhlijevxjgfkeemkjgfkeemk +bhlijevxjgfkeemkjlakydfo +bhlijevxjgfkeemkjuvmcaww +bhlijevxjgfkeemkkxrqrxft +bhlijevxjgfkeemklhcsptqa +bhlijevxjgfkeemklqxtyrci +bhlijevxjgfkeemkmaivwnmu +bhlijevxjgfkeemkmfdwlmfy +bhlijevxjgfkeemkmoyxujxb +bhlijevxjgfkeemkmttyjiqf +bhlijevxjgfkeemkpssfqqjt +bhlijevxjgfkeemkpxngfpcx +bhlijevxjgfkeemkqcdhomua +bhlijevxjgfkeemkqlyixkgi +bhlijevxjgfkeemkqvokbhxq +bhlijevxjgfkeemkraelkfjy +bhlijevxjgfkeemkrounibuf +bhlijevxjlakydfoaoffckzd +bhlijevxjlakydfoatafwjsh +bhlijevxjlakydfobhlijevx +bhlijevxjlakydfobrbjscia +bhlijevxjlakydfocyxowxpb +bhlijevxjlakydfoddnqavbj +bhlijevxjlakydfodiiqutzn +bhlijevxjlakydfodndrjssr +bhlijevxjlakydfodwyssqez +bhlijevxjlakydfoegjuqmpg +bhlijevxjlakydfoelevflik +bhlijevxjlakydfoeuzwoizs +bhlijevxjlakydfoezuxdhsw +bhlijevxjlakydfofoazvcwh +bhlijevxjlakydfohanbdvpq +bhlijevxjlakydfohfibxuiu +bhlijevxjlakydfohkdcmtby +bhlijevxjlakydfohtydvqtb +bhlijevxjlakydfohytekpmf +bhlijevxjlakydfoiiegilwr +bhlijevxjlakydfoirzhrjiz +bhlijevxjlakydfojbkjpftg +bhlijevxjlakydfojgfkeemk +bhlijevxjlakydfojlakydfo +bhlijevxjlakydfojuvmcaww +bhlijevxjlakydfokxrqrxft +bhlijevxjlakydfolhcsptqa +bhlijevxjlakydfolqxtyrci +bhlijevxjlakydfomaivwnmu +bhlijevxjlakydfomfdwlmfy +bhlijevxjlakydfomoyxujxb +bhlijevxjlakydfomttyjiqf +bhlijevxjlakydfopssfqqjt +bhlijevxjlakydfopxngfpcx +bhlijevxjlakydfoqcdhomua +bhlijevxjlakydfoqlyixkgi +bhlijevxjlakydfoqvokbhxq +bhlijevxjlakydforaelkfjy +bhlijevxjlakydforounibuf +bhlijevxjuvmcawwaoffckzd +bhlijevxjuvmcawwatafwjsh +bhlijevxjuvmcawwbhlijevx +bhlijevxjuvmcawwbrbjscia +bhlijevxjuvmcawwcyxowxpb +bhlijevxjuvmcawwddnqavbj +bhlijevxjuvmcawwdiiqutzn +bhlijevxjuvmcawwdndrjssr +bhlijevxjuvmcawwdwyssqez +bhlijevxjuvmcawwegjuqmpg +bhlijevxjuvmcawwelevflik +bhlijevxjuvmcawweuzwoizs +bhlijevxjuvmcawwezuxdhsw +bhlijevxjuvmcawwfoazvcwh +bhlijevxjuvmcawwhanbdvpq +bhlijevxjuvmcawwhfibxuiu +bhlijevxjuvmcawwhkdcmtby +bhlijevxjuvmcawwhtydvqtb +bhlijevxjuvmcawwhytekpmf +bhlijevxjuvmcawwiiegilwr +bhlijevxjuvmcawwirzhrjiz +bhlijevxjuvmcawwjbkjpftg +bhlijevxjuvmcawwjgfkeemk +bhlijevxjuvmcawwjlakydfo +bhlijevxjuvmcawwjuvmcaww +bhlijevxjuvmcawwkxrqrxft +bhlijevxjuvmcawwlhcsptqa +bhlijevxjuvmcawwlqxtyrci +bhlijevxjuvmcawwmaivwnmu +bhlijevxjuvmcawwmfdwlmfy +bhlijevxjuvmcawwmoyxujxb +bhlijevxjuvmcawwmttyjiqf +bhlijevxjuvmcawwpssfqqjt +bhlijevxjuvmcawwpxngfpcx +bhlijevxjuvmcawwqcdhomua +bhlijevxjuvmcawwqlyixkgi +bhlijevxjuvmcawwqvokbhxq +bhlijevxjuvmcawwraelkfjy +bhlijevxjuvmcawwrounibuf +bhlijevxkxrqrxftaoffckzd +bhlijevxkxrqrxftatafwjsh +bhlijevxkxrqrxftbhlijevx +bhlijevxkxrqrxftbrbjscia +bhlijevxkxrqrxftcyxowxpb +bhlijevxkxrqrxftddnqavbj +bhlijevxkxrqrxftdiiqutzn +bhlijevxkxrqrxftdndrjssr +bhlijevxkxrqrxftdwyssqez +bhlijevxkxrqrxftegjuqmpg +bhlijevxkxrqrxftelevflik +bhlijevxkxrqrxfteuzwoizs +bhlijevxkxrqrxftezuxdhsw +bhlijevxkxrqrxftfoazvcwh +bhlijevxkxrqrxfthanbdvpq +bhlijevxkxrqrxfthfibxuiu +bhlijevxkxrqrxfthkdcmtby +bhlijevxkxrqrxfthtydvqtb +bhlijevxkxrqrxfthytekpmf +bhlijevxkxrqrxftiiegilwr +bhlijevxkxrqrxftirzhrjiz +bhlijevxkxrqrxftjbkjpftg +bhlijevxkxrqrxftjgfkeemk +bhlijevxkxrqrxftjlakydfo +bhlijevxkxrqrxftjuvmcaww +bhlijevxkxrqrxftkxrqrxft +bhlijevxkxrqrxftlhcsptqa +bhlijevxkxrqrxftlqxtyrci +bhlijevxkxrqrxftmaivwnmu +bhlijevxkxrqrxftmfdwlmfy +bhlijevxkxrqrxftmoyxujxb +bhlijevxkxrqrxftmttyjiqf +bhlijevxkxrqrxftpssfqqjt +bhlijevxkxrqrxftpxngfpcx +bhlijevxkxrqrxftqcdhomua +bhlijevxkxrqrxftqlyixkgi +bhlijevxkxrqrxftqvokbhxq +bhlijevxkxrqrxftraelkfjy +bhlijevxkxrqrxftrounibuf +bhlijevxlhcsptqaaoffckzd +bhlijevxlhcsptqaatafwjsh +bhlijevxlhcsptqabhlijevx +bhlijevxlhcsptqabrbjscia +bhlijevxlhcsptqacyxowxpb +bhlijevxlhcsptqaddnqavbj +bhlijevxlhcsptqadiiqutzn +bhlijevxlhcsptqadndrjssr +bhlijevxlhcsptqadwyssqez +bhlijevxlhcsptqaegjuqmpg +bhlijevxlhcsptqaelevflik +bhlijevxlhcsptqaeuzwoizs +bhlijevxlhcsptqaezuxdhsw +bhlijevxlhcsptqafoazvcwh +bhlijevxlhcsptqahanbdvpq +bhlijevxlhcsptqahfibxuiu +bhlijevxlhcsptqahkdcmtby +bhlijevxlhcsptqahtydvqtb +bhlijevxlhcsptqahytekpmf +bhlijevxlhcsptqaiiegilwr +bhlijevxlhcsptqairzhrjiz +bhlijevxlhcsptqajbkjpftg +bhlijevxlhcsptqajgfkeemk +bhlijevxlhcsptqajlakydfo +bhlijevxlhcsptqajuvmcaww +bhlijevxlhcsptqakxrqrxft +bhlijevxlhcsptqalhcsptqa +bhlijevxlhcsptqalqxtyrci +bhlijevxlhcsptqamaivwnmu +bhlijevxlhcsptqamfdwlmfy +bhlijevxlhcsptqamoyxujxb +bhlijevxlhcsptqamttyjiqf +bhlijevxlhcsptqapssfqqjt +bhlijevxlhcsptqapxngfpcx +bhlijevxlhcsptqaqcdhomua +bhlijevxlhcsptqaqlyixkgi +bhlijevxlhcsptqaqvokbhxq +bhlijevxlhcsptqaraelkfjy +bhlijevxlhcsptqarounibuf +bhlijevxlqxtyrciaoffckzd +bhlijevxlqxtyrciatafwjsh +bhlijevxlqxtyrcibhlijevx +bhlijevxlqxtyrcibrbjscia +bhlijevxlqxtyrcicyxowxpb +bhlijevxlqxtyrciddnqavbj +bhlijevxlqxtyrcidiiqutzn +bhlijevxlqxtyrcidndrjssr +bhlijevxlqxtyrcidwyssqez +bhlijevxlqxtyrciegjuqmpg +bhlijevxlqxtyrcielevflik +bhlijevxlqxtyrcieuzwoizs +bhlijevxlqxtyrciezuxdhsw +bhlijevxlqxtyrcifoazvcwh +bhlijevxlqxtyrcihanbdvpq +bhlijevxlqxtyrcihfibxuiu +bhlijevxlqxtyrcihkdcmtby +bhlijevxlqxtyrcihtydvqtb +bhlijevxlqxtyrcihytekpmf +bhlijevxlqxtyrciiiegilwr +bhlijevxlqxtyrciirzhrjiz +bhlijevxlqxtyrcijbkjpftg +bhlijevxlqxtyrcijgfkeemk +bhlijevxlqxtyrcijlakydfo +bhlijevxlqxtyrcijuvmcaww +bhlijevxlqxtyrcikxrqrxft +bhlijevxlqxtyrcilhcsptqa +bhlijevxlqxtyrcilqxtyrci +bhlijevxlqxtyrcimaivwnmu +bhlijevxlqxtyrcimfdwlmfy +bhlijevxlqxtyrcimoyxujxb +bhlijevxlqxtyrcimttyjiqf +bhlijevxlqxtyrcipssfqqjt +bhlijevxlqxtyrcipxngfpcx +bhlijevxlqxtyrciqcdhomua +bhlijevxlqxtyrciqlyixkgi +bhlijevxlqxtyrciqvokbhxq +bhlijevxlqxtyrciraelkfjy +bhlijevxlqxtyrcirounibuf +bhlijevxmaivwnmuaoffckzd +bhlijevxmaivwnmuatafwjsh +bhlijevxmaivwnmubhlijevx +bhlijevxmaivwnmubrbjscia +bhlijevxmaivwnmucyxowxpb +bhlijevxmaivwnmuddnqavbj +bhlijevxmaivwnmudiiqutzn +bhlijevxmaivwnmudndrjssr +bhlijevxmaivwnmudwyssqez +bhlijevxmaivwnmuegjuqmpg +bhlijevxmaivwnmuelevflik +bhlijevxmaivwnmueuzwoizs +bhlijevxmaivwnmuezuxdhsw +bhlijevxmaivwnmufoazvcwh +bhlijevxmaivwnmuhanbdvpq +bhlijevxmaivwnmuhfibxuiu +bhlijevxmaivwnmuhkdcmtby +bhlijevxmaivwnmuhtydvqtb +bhlijevxmaivwnmuhytekpmf +bhlijevxmaivwnmuiiegilwr +bhlijevxmaivwnmuirzhrjiz +bhlijevxmaivwnmujbkjpftg +bhlijevxmaivwnmujgfkeemk +bhlijevxmaivwnmujlakydfo +bhlijevxmaivwnmujuvmcaww +bhlijevxmaivwnmukxrqrxft +bhlijevxmaivwnmulhcsptqa +bhlijevxmaivwnmulqxtyrci +bhlijevxmaivwnmumaivwnmu +bhlijevxmaivwnmumfdwlmfy +bhlijevxmaivwnmumoyxujxb +bhlijevxmaivwnmumttyjiqf +bhlijevxmaivwnmupssfqqjt +bhlijevxmaivwnmupxngfpcx +bhlijevxmaivwnmuqcdhomua +bhlijevxmaivwnmuqlyixkgi +bhlijevxmaivwnmuqvokbhxq +bhlijevxmaivwnmuraelkfjy +bhlijevxmaivwnmurounibuf +bhlijevxmfdwlmfyaoffckzd +bhlijevxmfdwlmfyatafwjsh +bhlijevxmfdwlmfybhlijevx +bhlijevxmfdwlmfybrbjscia +bhlijevxmfdwlmfycyxowxpb +bhlijevxmfdwlmfyddnqavbj +bhlijevxmfdwlmfydiiqutzn +bhlijevxmfdwlmfydndrjssr +bhlijevxmfdwlmfydwyssqez +bhlijevxmfdwlmfyegjuqmpg +bhlijevxmfdwlmfyelevflik +bhlijevxmfdwlmfyeuzwoizs +bhlijevxmfdwlmfyezuxdhsw +bhlijevxmfdwlmfyfoazvcwh +bhlijevxmfdwlmfyhanbdvpq +bhlijevxmfdwlmfyhfibxuiu +bhlijevxmfdwlmfyhkdcmtby +bhlijevxmfdwlmfyhtydvqtb +bhlijevxmfdwlmfyhytekpmf +bhlijevxmfdwlmfyiiegilwr +bhlijevxmfdwlmfyirzhrjiz +bhlijevxmfdwlmfyjbkjpftg +bhlijevxmfdwlmfyjgfkeemk +bhlijevxmfdwlmfyjlakydfo +bhlijevxmfdwlmfyjuvmcaww +bhlijevxmfdwlmfykxrqrxft +bhlijevxmfdwlmfylhcsptqa +bhlijevxmfdwlmfylqxtyrci +bhlijevxmfdwlmfymaivwnmu +bhlijevxmfdwlmfymfdwlmfy +bhlijevxmfdwlmfymoyxujxb +bhlijevxmfdwlmfymttyjiqf +bhlijevxmfdwlmfypssfqqjt +bhlijevxmfdwlmfypxngfpcx +bhlijevxmfdwlmfyqcdhomua +bhlijevxmfdwlmfyqlyixkgi +bhlijevxmfdwlmfyqvokbhxq +bhlijevxmfdwlmfyraelkfjy +bhlijevxmfdwlmfyrounibuf +bhlijevxmoyxujxbaoffckzd +bhlijevxmoyxujxbatafwjsh +bhlijevxmoyxujxbbhlijevx +bhlijevxmoyxujxbbrbjscia +bhlijevxmoyxujxbcyxowxpb +bhlijevxmoyxujxbddnqavbj +bhlijevxmoyxujxbdiiqutzn +bhlijevxmoyxujxbdndrjssr +bhlijevxmoyxujxbdwyssqez +bhlijevxmoyxujxbegjuqmpg +bhlijevxmoyxujxbelevflik +bhlijevxmoyxujxbeuzwoizs +bhlijevxmoyxujxbezuxdhsw +bhlijevxmoyxujxbfoazvcwh +bhlijevxmoyxujxbhanbdvpq +bhlijevxmoyxujxbhfibxuiu +bhlijevxmoyxujxbhkdcmtby +bhlijevxmoyxujxbhtydvqtb +bhlijevxmoyxujxbhytekpmf +bhlijevxmoyxujxbiiegilwr +bhlijevxmoyxujxbirzhrjiz +bhlijevxmoyxujxbjbkjpftg +bhlijevxmoyxujxbjgfkeemk +bhlijevxmoyxujxbjlakydfo +bhlijevxmoyxujxbjuvmcaww +bhlijevxmoyxujxbkxrqrxft +bhlijevxmoyxujxblhcsptqa +bhlijevxmoyxujxblqxtyrci +bhlijevxmoyxujxbmaivwnmu +bhlijevxmoyxujxbmfdwlmfy +bhlijevxmoyxujxbmoyxujxb +bhlijevxmoyxujxbmttyjiqf +bhlijevxmoyxujxbpssfqqjt +bhlijevxmoyxujxbpxngfpcx +bhlijevxmoyxujxbqcdhomua +bhlijevxmoyxujxbqlyixkgi +bhlijevxmoyxujxbqvokbhxq +bhlijevxmoyxujxbraelkfjy +bhlijevxmoyxujxbrounibuf +bhlijevxmttyjiqfaoffckzd +bhlijevxmttyjiqfatafwjsh +bhlijevxmttyjiqfbhlijevx +bhlijevxmttyjiqfbrbjscia +bhlijevxmttyjiqfcyxowxpb +bhlijevxmttyjiqfddnqavbj +bhlijevxmttyjiqfdiiqutzn +bhlijevxmttyjiqfdndrjssr +bhlijevxmttyjiqfdwyssqez +bhlijevxmttyjiqfegjuqmpg +bhlijevxmttyjiqfelevflik +bhlijevxmttyjiqfeuzwoizs +bhlijevxmttyjiqfezuxdhsw +bhlijevxmttyjiqffoazvcwh +bhlijevxmttyjiqfhanbdvpq +bhlijevxmttyjiqfhfibxuiu +bhlijevxmttyjiqfhkdcmtby +bhlijevxmttyjiqfhtydvqtb +bhlijevxmttyjiqfhytekpmf +bhlijevxmttyjiqfiiegilwr +bhlijevxmttyjiqfirzhrjiz +bhlijevxmttyjiqfjbkjpftg +bhlijevxmttyjiqfjgfkeemk +bhlijevxmttyjiqfjlakydfo +bhlijevxmttyjiqfjuvmcaww +bhlijevxmttyjiqfkxrqrxft +bhlijevxmttyjiqflhcsptqa +bhlijevxmttyjiqflqxtyrci +bhlijevxmttyjiqfmaivwnmu +bhlijevxmttyjiqfmfdwlmfy +bhlijevxmttyjiqfmoyxujxb +bhlijevxmttyjiqfmttyjiqf +bhlijevxmttyjiqfpssfqqjt +bhlijevxmttyjiqfpxngfpcx +bhlijevxmttyjiqfqcdhomua +bhlijevxmttyjiqfqlyixkgi +bhlijevxmttyjiqfqvokbhxq +bhlijevxmttyjiqfraelkfjy +bhlijevxmttyjiqfrounibuf +bhlijevxpssfqqjtaoffckzd +bhlijevxpssfqqjtatafwjsh +bhlijevxpssfqqjtbhlijevx +bhlijevxpssfqqjtbrbjscia +bhlijevxpssfqqjtcyxowxpb +bhlijevxpssfqqjtddnqavbj +bhlijevxpssfqqjtdiiqutzn +bhlijevxpssfqqjtdndrjssr +bhlijevxpssfqqjtdwyssqez +bhlijevxpssfqqjtegjuqmpg +bhlijevxpssfqqjtelevflik +bhlijevxpssfqqjteuzwoizs +bhlijevxpssfqqjtezuxdhsw +bhlijevxpssfqqjtfoazvcwh +bhlijevxpssfqqjthanbdvpq +bhlijevxpssfqqjthfibxuiu +bhlijevxpssfqqjthkdcmtby +bhlijevxpssfqqjthtydvqtb +bhlijevxpssfqqjthytekpmf +bhlijevxpssfqqjtiiegilwr +bhlijevxpssfqqjtirzhrjiz +bhlijevxpssfqqjtjbkjpftg +bhlijevxpssfqqjtjgfkeemk +bhlijevxpssfqqjtjlakydfo +bhlijevxpssfqqjtjuvmcaww +bhlijevxpssfqqjtkxrqrxft +bhlijevxpssfqqjtlhcsptqa +bhlijevxpssfqqjtlqxtyrci +bhlijevxpssfqqjtmaivwnmu +bhlijevxpssfqqjtmfdwlmfy +bhlijevxpssfqqjtmoyxujxb +bhlijevxpssfqqjtmttyjiqf +bhlijevxpssfqqjtpssfqqjt +bhlijevxpssfqqjtpxngfpcx +bhlijevxpssfqqjtqcdhomua +bhlijevxpssfqqjtqlyixkgi +bhlijevxpssfqqjtqvokbhxq +bhlijevxpssfqqjtraelkfjy +bhlijevxpssfqqjtrounibuf +bhlijevxpxngfpcxaoffckzd +bhlijevxpxngfpcxatafwjsh +bhlijevxpxngfpcxbhlijevx +bhlijevxpxngfpcxbrbjscia +bhlijevxpxngfpcxcyxowxpb +bhlijevxpxngfpcxddnqavbj +bhlijevxpxngfpcxdiiqutzn +bhlijevxpxngfpcxdndrjssr +bhlijevxpxngfpcxdwyssqez +bhlijevxpxngfpcxegjuqmpg +bhlijevxpxngfpcxelevflik +bhlijevxpxngfpcxeuzwoizs +bhlijevxpxngfpcxezuxdhsw +bhlijevxpxngfpcxfoazvcwh +bhlijevxpxngfpcxhanbdvpq +bhlijevxpxngfpcxhfibxuiu +bhlijevxpxngfpcxhkdcmtby +bhlijevxpxngfpcxhtydvqtb +bhlijevxpxngfpcxhytekpmf +bhlijevxpxngfpcxiiegilwr +bhlijevxpxngfpcxirzhrjiz +bhlijevxpxngfpcxjbkjpftg +bhlijevxpxngfpcxjgfkeemk +bhlijevxpxngfpcxjlakydfo +bhlijevxpxngfpcxjuvmcaww +bhlijevxpxngfpcxkxrqrxft +bhlijevxpxngfpcxlhcsptqa +bhlijevxpxngfpcxlqxtyrci +bhlijevxpxngfpcxmaivwnmu +bhlijevxpxngfpcxmfdwlmfy +bhlijevxpxngfpcxmoyxujxb +bhlijevxpxngfpcxmttyjiqf +bhlijevxpxngfpcxpssfqqjt +bhlijevxpxngfpcxpxngfpcx +bhlijevxpxngfpcxqcdhomua +bhlijevxpxngfpcxqlyixkgi +bhlijevxpxngfpcxqvokbhxq +bhlijevxpxngfpcxraelkfjy +bhlijevxpxngfpcxrounibuf +bhlijevxqcdhomuaaoffckzd +bhlijevxqcdhomuaatafwjsh +bhlijevxqcdhomuabhlijevx +bhlijevxqcdhomuabrbjscia +bhlijevxqcdhomuacyxowxpb +bhlijevxqcdhomuaddnqavbj +bhlijevxqcdhomuadiiqutzn +bhlijevxqcdhomuadndrjssr +bhlijevxqcdhomuadwyssqez +bhlijevxqcdhomuaegjuqmpg +bhlijevxqcdhomuaelevflik +bhlijevxqcdhomuaeuzwoizs +bhlijevxqcdhomuaezuxdhsw +bhlijevxqcdhomuafoazvcwh +bhlijevxqcdhomuahanbdvpq +bhlijevxqcdhomuahfibxuiu +bhlijevxqcdhomuahkdcmtby +bhlijevxqcdhomuahtydvqtb +bhlijevxqcdhomuahytekpmf +bhlijevxqcdhomuaiiegilwr +bhlijevxqcdhomuairzhrjiz +bhlijevxqcdhomuajbkjpftg +bhlijevxqcdhomuajgfkeemk +bhlijevxqcdhomuajlakydfo +bhlijevxqcdhomuajuvmcaww +bhlijevxqcdhomuakxrqrxft +bhlijevxqcdhomualhcsptqa +bhlijevxqcdhomualqxtyrci +bhlijevxqcdhomuamaivwnmu +bhlijevxqcdhomuamfdwlmfy +bhlijevxqcdhomuamoyxujxb +bhlijevxqcdhomuamttyjiqf +bhlijevxqcdhomuapssfqqjt +bhlijevxqcdhomuapxngfpcx +bhlijevxqcdhomuaqcdhomua +bhlijevxqcdhomuaqlyixkgi +bhlijevxqcdhomuaqvokbhxq +bhlijevxqcdhomuaraelkfjy +bhlijevxqcdhomuarounibuf +bhlijevxqlyixkgiaoffckzd +bhlijevxqlyixkgiatafwjsh +bhlijevxqlyixkgibhlijevx +bhlijevxqlyixkgibrbjscia +bhlijevxqlyixkgicyxowxpb +bhlijevxqlyixkgiddnqavbj +bhlijevxqlyixkgidiiqutzn +bhlijevxqlyixkgidndrjssr +bhlijevxqlyixkgidwyssqez +bhlijevxqlyixkgiegjuqmpg +bhlijevxqlyixkgielevflik +bhlijevxqlyixkgieuzwoizs +bhlijevxqlyixkgiezuxdhsw +bhlijevxqlyixkgifoazvcwh +bhlijevxqlyixkgihanbdvpq +bhlijevxqlyixkgihfibxuiu +bhlijevxqlyixkgihkdcmtby +bhlijevxqlyixkgihtydvqtb +bhlijevxqlyixkgihytekpmf +bhlijevxqlyixkgiiiegilwr +bhlijevxqlyixkgiirzhrjiz +bhlijevxqlyixkgijbkjpftg +bhlijevxqlyixkgijgfkeemk +bhlijevxqlyixkgijlakydfo +bhlijevxqlyixkgijuvmcaww +bhlijevxqlyixkgikxrqrxft +bhlijevxqlyixkgilhcsptqa +bhlijevxqlyixkgilqxtyrci +bhlijevxqlyixkgimaivwnmu +bhlijevxqlyixkgimfdwlmfy +bhlijevxqlyixkgimoyxujxb +bhlijevxqlyixkgimttyjiqf +bhlijevxqlyixkgipssfqqjt +bhlijevxqlyixkgipxngfpcx +bhlijevxqlyixkgiqcdhomua +bhlijevxqlyixkgiqlyixkgi +bhlijevxqlyixkgiqvokbhxq +bhlijevxqlyixkgiraelkfjy +bhlijevxqlyixkgirounibuf +bhlijevxqvokbhxqaoffckzd +bhlijevxqvokbhxqatafwjsh +bhlijevxqvokbhxqbhlijevx +bhlijevxqvokbhxqbrbjscia +bhlijevxqvokbhxqcyxowxpb +bhlijevxqvokbhxqddnqavbj +bhlijevxqvokbhxqdiiqutzn +bhlijevxqvokbhxqdndrjssr +bhlijevxqvokbhxqdwyssqez +bhlijevxqvokbhxqegjuqmpg +bhlijevxqvokbhxqelevflik +bhlijevxqvokbhxqeuzwoizs +bhlijevxqvokbhxqezuxdhsw +bhlijevxqvokbhxqfoazvcwh +bhlijevxqvokbhxqhanbdvpq +bhlijevxqvokbhxqhfibxuiu +bhlijevxqvokbhxqhkdcmtby +bhlijevxqvokbhxqhtydvqtb +bhlijevxqvokbhxqhytekpmf +bhlijevxqvokbhxqiiegilwr +bhlijevxqvokbhxqirzhrjiz +bhlijevxqvokbhxqjbkjpftg +bhlijevxqvokbhxqjgfkeemk +bhlijevxqvokbhxqjlakydfo +bhlijevxqvokbhxqjuvmcaww +bhlijevxqvokbhxqkxrqrxft +bhlijevxqvokbhxqlhcsptqa +bhlijevxqvokbhxqlqxtyrci +bhlijevxqvokbhxqmaivwnmu +bhlijevxqvokbhxqmfdwlmfy +bhlijevxqvokbhxqmoyxujxb +bhlijevxqvokbhxqmttyjiqf +bhlijevxqvokbhxqpssfqqjt +bhlijevxqvokbhxqpxngfpcx +bhlijevxqvokbhxqqcdhomua +bhlijevxqvokbhxqqlyixkgi +bhlijevxqvokbhxqqvokbhxq +bhlijevxqvokbhxqraelkfjy +bhlijevxqvokbhxqrounibuf +bhlijevxraelkfjyaoffckzd +bhlijevxraelkfjyatafwjsh +bhlijevxraelkfjybhlijevx +bhlijevxraelkfjybrbjscia +bhlijevxraelkfjycyxowxpb +bhlijevxraelkfjyddnqavbj +bhlijevxraelkfjydiiqutzn +bhlijevxraelkfjydndrjssr +bhlijevxraelkfjydwyssqez +bhlijevxraelkfjyegjuqmpg +bhlijevxraelkfjyelevflik +bhlijevxraelkfjyeuzwoizs +bhlijevxraelkfjyezuxdhsw +bhlijevxraelkfjyfoazvcwh +bhlijevxraelkfjyhanbdvpq +bhlijevxraelkfjyhfibxuiu +bhlijevxraelkfjyhkdcmtby +bhlijevxraelkfjyhtydvqtb +bhlijevxraelkfjyhytekpmf +bhlijevxraelkfjyiiegilwr +bhlijevxraelkfjyirzhrjiz +bhlijevxraelkfjyjbkjpftg +bhlijevxraelkfjyjgfkeemk +bhlijevxraelkfjyjlakydfo +bhlijevxraelkfjyjuvmcaww +bhlijevxraelkfjykxrqrxft +bhlijevxraelkfjylhcsptqa +bhlijevxraelkfjylqxtyrci +bhlijevxraelkfjymaivwnmu +bhlijevxraelkfjymfdwlmfy +bhlijevxraelkfjymoyxujxb +bhlijevxraelkfjymttyjiqf +bhlijevxraelkfjypssfqqjt +bhlijevxraelkfjypxngfpcx +bhlijevxraelkfjyqcdhomua +bhlijevxraelkfjyqlyixkgi +bhlijevxraelkfjyqvokbhxq +bhlijevxraelkfjyraelkfjy +bhlijevxraelkfjyrounibuf +bhlijevxrounibufaoffckzd +bhlijevxrounibufatafwjsh +bhlijevxrounibufbhlijevx +bhlijevxrounibufbrbjscia +bhlijevxrounibufcyxowxpb +bhlijevxrounibufddnqavbj +bhlijevxrounibufdiiqutzn +bhlijevxrounibufdndrjssr +bhlijevxrounibufdwyssqez +bhlijevxrounibufegjuqmpg +bhlijevxrounibufelevflik +bhlijevxrounibufeuzwoizs +bhlijevxrounibufezuxdhsw +bhlijevxrounibuffoazvcwh +bhlijevxrounibufhanbdvpq +bhlijevxrounibufhfibxuiu +bhlijevxrounibufhkdcmtby +bhlijevxrounibufhtydvqtb +bhlijevxrounibufhytekpmf +bhlijevxrounibufiiegilwr +bhlijevxrounibufirzhrjiz +bhlijevxrounibufjbkjpftg +bhlijevxrounibufjgfkeemk +bhlijevxrounibufjlakydfo +bhlijevxrounibufjuvmcaww +bhlijevxrounibufkxrqrxft +bhlijevxrounibuflhcsptqa +bhlijevxrounibuflqxtyrci +bhlijevxrounibufmaivwnmu +bhlijevxrounibufmfdwlmfy +bhlijevxrounibufmoyxujxb +bhlijevxrounibufmttyjiqf +bhlijevxrounibufpssfqqjt +bhlijevxrounibufpxngfpcx +bhlijevxrounibufqcdhomua +bhlijevxrounibufqlyixkgi +bhlijevxrounibufqvokbhxq +bhlijevxrounibufraelkfjy +bhlijevxrounibufrounibuf +brbjsciaaoffckzdaoffckzd +brbjsciaaoffckzdatafwjsh +brbjsciaaoffckzdbhlijevx +brbjsciaaoffckzdbrbjscia +brbjsciaaoffckzdcyxowxpb +brbjsciaaoffckzdddnqavbj +brbjsciaaoffckzddiiqutzn +brbjsciaaoffckzddndrjssr +brbjsciaaoffckzddwyssqez +brbjsciaaoffckzdegjuqmpg +brbjsciaaoffckzdelevflik +brbjsciaaoffckzdeuzwoizs +brbjsciaaoffckzdezuxdhsw +brbjsciaaoffckzdfoazvcwh +brbjsciaaoffckzdhanbdvpq +brbjsciaaoffckzdhfibxuiu +brbjsciaaoffckzdhkdcmtby +brbjsciaaoffckzdhtydvqtb +brbjsciaaoffckzdhytekpmf +brbjsciaaoffckzdiiegilwr +brbjsciaaoffckzdirzhrjiz +brbjsciaaoffckzdjbkjpftg +brbjsciaaoffckzdjgfkeemk +brbjsciaaoffckzdjlakydfo +brbjsciaaoffckzdjuvmcaww +brbjsciaaoffckzdkxrqrxft +brbjsciaaoffckzdlhcsptqa +brbjsciaaoffckzdlqxtyrci +brbjsciaaoffckzdmaivwnmu +brbjsciaaoffckzdmfdwlmfy +brbjsciaaoffckzdmoyxujxb +brbjsciaaoffckzdmttyjiqf +brbjsciaaoffckzdpssfqqjt +brbjsciaaoffckzdpxngfpcx +brbjsciaaoffckzdqcdhomua +brbjsciaaoffckzdqlyixkgi +brbjsciaaoffckzdqvokbhxq +brbjsciaaoffckzdraelkfjy +brbjsciaaoffckzdrounibuf +brbjsciaatafwjshaoffckzd +brbjsciaatafwjshatafwjsh +brbjsciaatafwjshbhlijevx +brbjsciaatafwjshbrbjscia +brbjsciaatafwjshcyxowxpb +brbjsciaatafwjshddnqavbj +brbjsciaatafwjshdiiqutzn +brbjsciaatafwjshdndrjssr +brbjsciaatafwjshdwyssqez +brbjsciaatafwjshegjuqmpg +brbjsciaatafwjshelevflik +brbjsciaatafwjsheuzwoizs +brbjsciaatafwjshezuxdhsw +brbjsciaatafwjshfoazvcwh +brbjsciaatafwjshhanbdvpq +brbjsciaatafwjshhfibxuiu +brbjsciaatafwjshhkdcmtby +brbjsciaatafwjshhtydvqtb +brbjsciaatafwjshhytekpmf +brbjsciaatafwjshiiegilwr +brbjsciaatafwjshirzhrjiz +brbjsciaatafwjshjbkjpftg +brbjsciaatafwjshjgfkeemk +brbjsciaatafwjshjlakydfo +brbjsciaatafwjshjuvmcaww +brbjsciaatafwjshkxrqrxft +brbjsciaatafwjshlhcsptqa +brbjsciaatafwjshlqxtyrci +brbjsciaatafwjshmaivwnmu +brbjsciaatafwjshmfdwlmfy +brbjsciaatafwjshmoyxujxb +brbjsciaatafwjshmttyjiqf +brbjsciaatafwjshpssfqqjt +brbjsciaatafwjshpxngfpcx +brbjsciaatafwjshqcdhomua +brbjsciaatafwjshqlyixkgi +brbjsciaatafwjshqvokbhxq +brbjsciaatafwjshraelkfjy +brbjsciaatafwjshrounibuf +brbjsciabhlijevxaoffckzd +brbjsciabhlijevxatafwjsh +brbjsciabhlijevxbhlijevx +brbjsciabhlijevxbrbjscia +brbjsciabhlijevxcyxowxpb +brbjsciabhlijevxddnqavbj +brbjsciabhlijevxdiiqutzn +brbjsciabhlijevxdndrjssr +brbjsciabhlijevxdwyssqez +brbjsciabhlijevxegjuqmpg +brbjsciabhlijevxelevflik +brbjsciabhlijevxeuzwoizs +brbjsciabhlijevxezuxdhsw +brbjsciabhlijevxfoazvcwh +brbjsciabhlijevxhanbdvpq +brbjsciabhlijevxhfibxuiu +brbjsciabhlijevxhkdcmtby +brbjsciabhlijevxhtydvqtb +brbjsciabhlijevxhytekpmf +brbjsciabhlijevxiiegilwr +brbjsciabhlijevxirzhrjiz +brbjsciabhlijevxjbkjpftg +brbjsciabhlijevxjgfkeemk +brbjsciabhlijevxjlakydfo +brbjsciabhlijevxjuvmcaww +brbjsciabhlijevxkxrqrxft +brbjsciabhlijevxlhcsptqa +brbjsciabhlijevxlqxtyrci +brbjsciabhlijevxmaivwnmu +brbjsciabhlijevxmfdwlmfy +brbjsciabhlijevxmoyxujxb +brbjsciabhlijevxmttyjiqf +brbjsciabhlijevxpssfqqjt +brbjsciabhlijevxpxngfpcx +brbjsciabhlijevxqcdhomua +brbjsciabhlijevxqlyixkgi +brbjsciabhlijevxqvokbhxq +brbjsciabhlijevxraelkfjy +brbjsciabhlijevxrounibuf +brbjsciabrbjsciaaoffckzd +brbjsciabrbjsciaatafwjsh +brbjsciabrbjsciabhlijevx +brbjsciabrbjsciabrbjscia +brbjsciabrbjsciacyxowxpb +brbjsciabrbjsciaddnqavbj +brbjsciabrbjsciadiiqutzn +brbjsciabrbjsciadndrjssr +brbjsciabrbjsciadwyssqez +brbjsciabrbjsciaegjuqmpg +brbjsciabrbjsciaelevflik +brbjsciabrbjsciaeuzwoizs +brbjsciabrbjsciaezuxdhsw +brbjsciabrbjsciafoazvcwh +brbjsciabrbjsciahanbdvpq +brbjsciabrbjsciahfibxuiu +brbjsciabrbjsciahkdcmtby +brbjsciabrbjsciahtydvqtb +brbjsciabrbjsciahytekpmf +brbjsciabrbjsciaiiegilwr +brbjsciabrbjsciairzhrjiz +brbjsciabrbjsciajbkjpftg +brbjsciabrbjsciajgfkeemk +brbjsciabrbjsciajlakydfo +brbjsciabrbjsciajuvmcaww +brbjsciabrbjsciakxrqrxft +brbjsciabrbjscialhcsptqa +brbjsciabrbjscialqxtyrci +brbjsciabrbjsciamaivwnmu +brbjsciabrbjsciamfdwlmfy +brbjsciabrbjsciamoyxujxb +brbjsciabrbjsciamttyjiqf +brbjsciabrbjsciapssfqqjt +brbjsciabrbjsciapxngfpcx +brbjsciabrbjsciaqcdhomua +brbjsciabrbjsciaqlyixkgi +brbjsciabrbjsciaqvokbhxq +brbjsciabrbjsciaraelkfjy +brbjsciabrbjsciarounibuf +brbjsciacyxowxpbaoffckzd +brbjsciacyxowxpbatafwjsh +brbjsciacyxowxpbbhlijevx +brbjsciacyxowxpbbrbjscia +brbjsciacyxowxpbcyxowxpb +brbjsciacyxowxpbddnqavbj +brbjsciacyxowxpbdiiqutzn +brbjsciacyxowxpbdndrjssr +brbjsciacyxowxpbdwyssqez +brbjsciacyxowxpbegjuqmpg +brbjsciacyxowxpbelevflik +brbjsciacyxowxpbeuzwoizs +brbjsciacyxowxpbezuxdhsw +brbjsciacyxowxpbfoazvcwh +brbjsciacyxowxpbhanbdvpq +brbjsciacyxowxpbhfibxuiu +brbjsciacyxowxpbhkdcmtby +brbjsciacyxowxpbhtydvqtb +brbjsciacyxowxpbhytekpmf +brbjsciacyxowxpbiiegilwr +brbjsciacyxowxpbirzhrjiz +brbjsciacyxowxpbjbkjpftg +brbjsciacyxowxpbjgfkeemk +brbjsciacyxowxpbjlakydfo +brbjsciacyxowxpbjuvmcaww +brbjsciacyxowxpbkxrqrxft +brbjsciacyxowxpblhcsptqa +brbjsciacyxowxpblqxtyrci +brbjsciacyxowxpbmaivwnmu +brbjsciacyxowxpbmfdwlmfy +brbjsciacyxowxpbmoyxujxb +brbjsciacyxowxpbmttyjiqf +brbjsciacyxowxpbpssfqqjt +brbjsciacyxowxpbpxngfpcx +brbjsciacyxowxpbqcdhomua +brbjsciacyxowxpbqlyixkgi +brbjsciacyxowxpbqvokbhxq +brbjsciacyxowxpbraelkfjy +brbjsciacyxowxpbrounibuf +brbjsciaddnqavbjaoffckzd +brbjsciaddnqavbjatafwjsh +brbjsciaddnqavbjbhlijevx +brbjsciaddnqavbjbrbjscia +brbjsciaddnqavbjcyxowxpb +brbjsciaddnqavbjddnqavbj +brbjsciaddnqavbjdiiqutzn +brbjsciaddnqavbjdndrjssr +brbjsciaddnqavbjdwyssqez +brbjsciaddnqavbjegjuqmpg +brbjsciaddnqavbjelevflik +brbjsciaddnqavbjeuzwoizs +brbjsciaddnqavbjezuxdhsw +brbjsciaddnqavbjfoazvcwh +brbjsciaddnqavbjhanbdvpq +brbjsciaddnqavbjhfibxuiu +brbjsciaddnqavbjhkdcmtby +brbjsciaddnqavbjhtydvqtb +brbjsciaddnqavbjhytekpmf +brbjsciaddnqavbjiiegilwr +brbjsciaddnqavbjirzhrjiz +brbjsciaddnqavbjjbkjpftg +brbjsciaddnqavbjjgfkeemk +brbjsciaddnqavbjjlakydfo +brbjsciaddnqavbjjuvmcaww +brbjsciaddnqavbjkxrqrxft +brbjsciaddnqavbjlhcsptqa +brbjsciaddnqavbjlqxtyrci +brbjsciaddnqavbjmaivwnmu +brbjsciaddnqavbjmfdwlmfy +brbjsciaddnqavbjmoyxujxb +brbjsciaddnqavbjmttyjiqf +brbjsciaddnqavbjpssfqqjt +brbjsciaddnqavbjpxngfpcx +brbjsciaddnqavbjqcdhomua +brbjsciaddnqavbjqlyixkgi +brbjsciaddnqavbjqvokbhxq +brbjsciaddnqavbjraelkfjy +brbjsciaddnqavbjrounibuf +brbjsciadiiqutznaoffckzd +brbjsciadiiqutznatafwjsh +brbjsciadiiqutznbhlijevx +brbjsciadiiqutznbrbjscia +brbjsciadiiqutzncyxowxpb +brbjsciadiiqutznddnqavbj +brbjsciadiiqutzndiiqutzn +brbjsciadiiqutzndndrjssr +brbjsciadiiqutzndwyssqez +brbjsciadiiqutznegjuqmpg +brbjsciadiiqutznelevflik +brbjsciadiiqutzneuzwoizs +brbjsciadiiqutznezuxdhsw +brbjsciadiiqutznfoazvcwh +brbjsciadiiqutznhanbdvpq +brbjsciadiiqutznhfibxuiu +brbjsciadiiqutznhkdcmtby +brbjsciadiiqutznhtydvqtb +brbjsciadiiqutznhytekpmf +brbjsciadiiqutzniiegilwr +brbjsciadiiqutznirzhrjiz +brbjsciadiiqutznjbkjpftg +brbjsciadiiqutznjgfkeemk +brbjsciadiiqutznjlakydfo +brbjsciadiiqutznjuvmcaww +brbjsciadiiqutznkxrqrxft +brbjsciadiiqutznlhcsptqa +brbjsciadiiqutznlqxtyrci +brbjsciadiiqutznmaivwnmu +brbjsciadiiqutznmfdwlmfy +brbjsciadiiqutznmoyxujxb +brbjsciadiiqutznmttyjiqf +brbjsciadiiqutznpssfqqjt +brbjsciadiiqutznpxngfpcx +brbjsciadiiqutznqcdhomua +brbjsciadiiqutznqlyixkgi +brbjsciadiiqutznqvokbhxq +brbjsciadiiqutznraelkfjy +brbjsciadiiqutznrounibuf +brbjsciadndrjssraoffckzd +brbjsciadndrjssratafwjsh +brbjsciadndrjssrbhlijevx +brbjsciadndrjssrbrbjscia +brbjsciadndrjssrcyxowxpb +brbjsciadndrjssrddnqavbj +brbjsciadndrjssrdiiqutzn +brbjsciadndrjssrdndrjssr +brbjsciadndrjssrdwyssqez +brbjsciadndrjssregjuqmpg +brbjsciadndrjssrelevflik +brbjsciadndrjssreuzwoizs +brbjsciadndrjssrezuxdhsw +brbjsciadndrjssrfoazvcwh +brbjsciadndrjssrhanbdvpq +brbjsciadndrjssrhfibxuiu +brbjsciadndrjssrhkdcmtby +brbjsciadndrjssrhtydvqtb +brbjsciadndrjssrhytekpmf +brbjsciadndrjssriiegilwr +brbjsciadndrjssrirzhrjiz +brbjsciadndrjssrjbkjpftg +brbjsciadndrjssrjgfkeemk +brbjsciadndrjssrjlakydfo +brbjsciadndrjssrjuvmcaww +brbjsciadndrjssrkxrqrxft +brbjsciadndrjssrlhcsptqa +brbjsciadndrjssrlqxtyrci +brbjsciadndrjssrmaivwnmu +brbjsciadndrjssrmfdwlmfy +brbjsciadndrjssrmoyxujxb +brbjsciadndrjssrmttyjiqf +brbjsciadndrjssrpssfqqjt +brbjsciadndrjssrpxngfpcx +brbjsciadndrjssrqcdhomua +brbjsciadndrjssrqlyixkgi +brbjsciadndrjssrqvokbhxq +brbjsciadndrjssrraelkfjy +brbjsciadndrjssrrounibuf +brbjsciadwyssqezaoffckzd +brbjsciadwyssqezatafwjsh +brbjsciadwyssqezbhlijevx +brbjsciadwyssqezbrbjscia +brbjsciadwyssqezcyxowxpb +brbjsciadwyssqezddnqavbj +brbjsciadwyssqezdiiqutzn +brbjsciadwyssqezdndrjssr +brbjsciadwyssqezdwyssqez +brbjsciadwyssqezegjuqmpg +brbjsciadwyssqezelevflik +brbjsciadwyssqezeuzwoizs +brbjsciadwyssqezezuxdhsw +brbjsciadwyssqezfoazvcwh +brbjsciadwyssqezhanbdvpq +brbjsciadwyssqezhfibxuiu +brbjsciadwyssqezhkdcmtby +brbjsciadwyssqezhtydvqtb +brbjsciadwyssqezhytekpmf +brbjsciadwyssqeziiegilwr +brbjsciadwyssqezirzhrjiz +brbjsciadwyssqezjbkjpftg +brbjsciadwyssqezjgfkeemk +brbjsciadwyssqezjlakydfo +brbjsciadwyssqezjuvmcaww +brbjsciadwyssqezkxrqrxft +brbjsciadwyssqezlhcsptqa +brbjsciadwyssqezlqxtyrci +brbjsciadwyssqezmaivwnmu +brbjsciadwyssqezmfdwlmfy +brbjsciadwyssqezmoyxujxb +brbjsciadwyssqezmttyjiqf +brbjsciadwyssqezpssfqqjt +brbjsciadwyssqezpxngfpcx +brbjsciadwyssqezqcdhomua +brbjsciadwyssqezqlyixkgi +brbjsciadwyssqezqvokbhxq +brbjsciadwyssqezraelkfjy +brbjsciadwyssqezrounibuf +brbjsciaegjuqmpgaoffckzd +brbjsciaegjuqmpgatafwjsh +brbjsciaegjuqmpgbhlijevx +brbjsciaegjuqmpgbrbjscia +brbjsciaegjuqmpgcyxowxpb +brbjsciaegjuqmpgddnqavbj +brbjsciaegjuqmpgdiiqutzn +brbjsciaegjuqmpgdndrjssr +brbjsciaegjuqmpgdwyssqez +brbjsciaegjuqmpgegjuqmpg +brbjsciaegjuqmpgelevflik +brbjsciaegjuqmpgeuzwoizs +brbjsciaegjuqmpgezuxdhsw +brbjsciaegjuqmpgfoazvcwh +brbjsciaegjuqmpghanbdvpq +brbjsciaegjuqmpghfibxuiu +brbjsciaegjuqmpghkdcmtby +brbjsciaegjuqmpghtydvqtb +brbjsciaegjuqmpghytekpmf +brbjsciaegjuqmpgiiegilwr +brbjsciaegjuqmpgirzhrjiz +brbjsciaegjuqmpgjbkjpftg +brbjsciaegjuqmpgjgfkeemk +brbjsciaegjuqmpgjlakydfo +brbjsciaegjuqmpgjuvmcaww +brbjsciaegjuqmpgkxrqrxft +brbjsciaegjuqmpglhcsptqa +brbjsciaegjuqmpglqxtyrci +brbjsciaegjuqmpgmaivwnmu +brbjsciaegjuqmpgmfdwlmfy +brbjsciaegjuqmpgmoyxujxb +brbjsciaegjuqmpgmttyjiqf +brbjsciaegjuqmpgpssfqqjt +brbjsciaegjuqmpgpxngfpcx +brbjsciaegjuqmpgqcdhomua +brbjsciaegjuqmpgqlyixkgi +brbjsciaegjuqmpgqvokbhxq +brbjsciaegjuqmpgraelkfjy +brbjsciaegjuqmpgrounibuf +brbjsciaelevflikaoffckzd +brbjsciaelevflikatafwjsh +brbjsciaelevflikbhlijevx +brbjsciaelevflikbrbjscia +brbjsciaelevflikcyxowxpb +brbjsciaelevflikddnqavbj +brbjsciaelevflikdiiqutzn +brbjsciaelevflikdndrjssr +brbjsciaelevflikdwyssqez +brbjsciaelevflikegjuqmpg +brbjsciaelevflikelevflik +brbjsciaelevflikeuzwoizs +brbjsciaelevflikezuxdhsw +brbjsciaelevflikfoazvcwh +brbjsciaelevflikhanbdvpq +brbjsciaelevflikhfibxuiu +brbjsciaelevflikhkdcmtby +brbjsciaelevflikhtydvqtb +brbjsciaelevflikhytekpmf +brbjsciaelevflikiiegilwr +brbjsciaelevflikirzhrjiz +brbjsciaelevflikjbkjpftg +brbjsciaelevflikjgfkeemk +brbjsciaelevflikjlakydfo +brbjsciaelevflikjuvmcaww +brbjsciaelevflikkxrqrxft +brbjsciaelevfliklhcsptqa +brbjsciaelevfliklqxtyrci +brbjsciaelevflikmaivwnmu +brbjsciaelevflikmfdwlmfy +brbjsciaelevflikmoyxujxb +brbjsciaelevflikmttyjiqf +brbjsciaelevflikpssfqqjt +brbjsciaelevflikpxngfpcx +brbjsciaelevflikqcdhomua +brbjsciaelevflikqlyixkgi +brbjsciaelevflikqvokbhxq +brbjsciaelevflikraelkfjy +brbjsciaelevflikrounibuf +brbjsciaeuzwoizsaoffckzd +brbjsciaeuzwoizsatafwjsh +brbjsciaeuzwoizsbhlijevx +brbjsciaeuzwoizsbrbjscia +brbjsciaeuzwoizscyxowxpb +brbjsciaeuzwoizsddnqavbj +brbjsciaeuzwoizsdiiqutzn +brbjsciaeuzwoizsdndrjssr +brbjsciaeuzwoizsdwyssqez +brbjsciaeuzwoizsegjuqmpg +brbjsciaeuzwoizselevflik +brbjsciaeuzwoizseuzwoizs +brbjsciaeuzwoizsezuxdhsw +brbjsciaeuzwoizsfoazvcwh +brbjsciaeuzwoizshanbdvpq +brbjsciaeuzwoizshfibxuiu +brbjsciaeuzwoizshkdcmtby +brbjsciaeuzwoizshtydvqtb +brbjsciaeuzwoizshytekpmf +brbjsciaeuzwoizsiiegilwr +brbjsciaeuzwoizsirzhrjiz +brbjsciaeuzwoizsjbkjpftg +brbjsciaeuzwoizsjgfkeemk +brbjsciaeuzwoizsjlakydfo +brbjsciaeuzwoizsjuvmcaww +brbjsciaeuzwoizskxrqrxft +brbjsciaeuzwoizslhcsptqa +brbjsciaeuzwoizslqxtyrci +brbjsciaeuzwoizsmaivwnmu +brbjsciaeuzwoizsmfdwlmfy +brbjsciaeuzwoizsmoyxujxb +brbjsciaeuzwoizsmttyjiqf +brbjsciaeuzwoizspssfqqjt +brbjsciaeuzwoizspxngfpcx +brbjsciaeuzwoizsqcdhomua +brbjsciaeuzwoizsqlyixkgi +brbjsciaeuzwoizsqvokbhxq +brbjsciaeuzwoizsraelkfjy +brbjsciaeuzwoizsrounibuf +brbjsciaezuxdhswaoffckzd +brbjsciaezuxdhswatafwjsh +brbjsciaezuxdhswbhlijevx +brbjsciaezuxdhswbrbjscia +brbjsciaezuxdhswcyxowxpb +brbjsciaezuxdhswddnqavbj +brbjsciaezuxdhswdiiqutzn +brbjsciaezuxdhswdndrjssr +brbjsciaezuxdhswdwyssqez +brbjsciaezuxdhswegjuqmpg +brbjsciaezuxdhswelevflik +brbjsciaezuxdhsweuzwoizs +brbjsciaezuxdhswezuxdhsw +brbjsciaezuxdhswfoazvcwh +brbjsciaezuxdhswhanbdvpq +brbjsciaezuxdhswhfibxuiu +brbjsciaezuxdhswhkdcmtby +brbjsciaezuxdhswhtydvqtb +brbjsciaezuxdhswhytekpmf +brbjsciaezuxdhswiiegilwr +brbjsciaezuxdhswirzhrjiz +brbjsciaezuxdhswjbkjpftg +brbjsciaezuxdhswjgfkeemk +brbjsciaezuxdhswjlakydfo +brbjsciaezuxdhswjuvmcaww +brbjsciaezuxdhswkxrqrxft +brbjsciaezuxdhswlhcsptqa +brbjsciaezuxdhswlqxtyrci +brbjsciaezuxdhswmaivwnmu +brbjsciaezuxdhswmfdwlmfy +brbjsciaezuxdhswmoyxujxb +brbjsciaezuxdhswmttyjiqf +brbjsciaezuxdhswpssfqqjt +brbjsciaezuxdhswpxngfpcx +brbjsciaezuxdhswqcdhomua +brbjsciaezuxdhswqlyixkgi +brbjsciaezuxdhswqvokbhxq +brbjsciaezuxdhswraelkfjy +brbjsciaezuxdhswrounibuf +brbjsciafoazvcwhaoffckzd +brbjsciafoazvcwhatafwjsh +brbjsciafoazvcwhbhlijevx +brbjsciafoazvcwhbrbjscia +brbjsciafoazvcwhcyxowxpb +brbjsciafoazvcwhddnqavbj +brbjsciafoazvcwhdiiqutzn +brbjsciafoazvcwhdndrjssr +brbjsciafoazvcwhdwyssqez +brbjsciafoazvcwhegjuqmpg +brbjsciafoazvcwhelevflik +brbjsciafoazvcwheuzwoizs +brbjsciafoazvcwhezuxdhsw +brbjsciafoazvcwhfoazvcwh +brbjsciafoazvcwhhanbdvpq +brbjsciafoazvcwhhfibxuiu +brbjsciafoazvcwhhkdcmtby +brbjsciafoazvcwhhtydvqtb +brbjsciafoazvcwhhytekpmf +brbjsciafoazvcwhiiegilwr +brbjsciafoazvcwhirzhrjiz +brbjsciafoazvcwhjbkjpftg +brbjsciafoazvcwhjgfkeemk +brbjsciafoazvcwhjlakydfo +brbjsciafoazvcwhjuvmcaww +brbjsciafoazvcwhkxrqrxft +brbjsciafoazvcwhlhcsptqa +brbjsciafoazvcwhlqxtyrci +brbjsciafoazvcwhmaivwnmu +brbjsciafoazvcwhmfdwlmfy +brbjsciafoazvcwhmoyxujxb +brbjsciafoazvcwhmttyjiqf +brbjsciafoazvcwhpssfqqjt +brbjsciafoazvcwhpxngfpcx +brbjsciafoazvcwhqcdhomua +brbjsciafoazvcwhqlyixkgi +brbjsciafoazvcwhqvokbhxq +brbjsciafoazvcwhraelkfjy +brbjsciafoazvcwhrounibuf +brbjsciahanbdvpqaoffckzd +brbjsciahanbdvpqatafwjsh +brbjsciahanbdvpqbhlijevx +brbjsciahanbdvpqbrbjscia +brbjsciahanbdvpqcyxowxpb +brbjsciahanbdvpqddnqavbj +brbjsciahanbdvpqdiiqutzn +brbjsciahanbdvpqdndrjssr +brbjsciahanbdvpqdwyssqez +brbjsciahanbdvpqegjuqmpg +brbjsciahanbdvpqelevflik +brbjsciahanbdvpqeuzwoizs +brbjsciahanbdvpqezuxdhsw +brbjsciahanbdvpqfoazvcwh +brbjsciahanbdvpqhanbdvpq +brbjsciahanbdvpqhfibxuiu +brbjsciahanbdvpqhkdcmtby +brbjsciahanbdvpqhtydvqtb +brbjsciahanbdvpqhytekpmf +brbjsciahanbdvpqiiegilwr +brbjsciahanbdvpqirzhrjiz +brbjsciahanbdvpqjbkjpftg +brbjsciahanbdvpqjgfkeemk +brbjsciahanbdvpqjlakydfo +brbjsciahanbdvpqjuvmcaww +brbjsciahanbdvpqkxrqrxft +brbjsciahanbdvpqlhcsptqa +brbjsciahanbdvpqlqxtyrci +brbjsciahanbdvpqmaivwnmu +brbjsciahanbdvpqmfdwlmfy +brbjsciahanbdvpqmoyxujxb +brbjsciahanbdvpqmttyjiqf +brbjsciahanbdvpqpssfqqjt +brbjsciahanbdvpqpxngfpcx +brbjsciahanbdvpqqcdhomua +brbjsciahanbdvpqqlyixkgi +brbjsciahanbdvpqqvokbhxq +brbjsciahanbdvpqraelkfjy +brbjsciahanbdvpqrounibuf +brbjsciahfibxuiuaoffckzd +brbjsciahfibxuiuatafwjsh +brbjsciahfibxuiubhlijevx +brbjsciahfibxuiubrbjscia +brbjsciahfibxuiucyxowxpb +brbjsciahfibxuiuddnqavbj +brbjsciahfibxuiudiiqutzn +brbjsciahfibxuiudndrjssr +brbjsciahfibxuiudwyssqez +brbjsciahfibxuiuegjuqmpg +brbjsciahfibxuiuelevflik +brbjsciahfibxuiueuzwoizs +brbjsciahfibxuiuezuxdhsw +brbjsciahfibxuiufoazvcwh +brbjsciahfibxuiuhanbdvpq +brbjsciahfibxuiuhfibxuiu +brbjsciahfibxuiuhkdcmtby +brbjsciahfibxuiuhtydvqtb +brbjsciahfibxuiuhytekpmf +brbjsciahfibxuiuiiegilwr +brbjsciahfibxuiuirzhrjiz +brbjsciahfibxuiujbkjpftg +brbjsciahfibxuiujgfkeemk +brbjsciahfibxuiujlakydfo +brbjsciahfibxuiujuvmcaww +brbjsciahfibxuiukxrqrxft +brbjsciahfibxuiulhcsptqa +brbjsciahfibxuiulqxtyrci +brbjsciahfibxuiumaivwnmu +brbjsciahfibxuiumfdwlmfy +brbjsciahfibxuiumoyxujxb +brbjsciahfibxuiumttyjiqf +brbjsciahfibxuiupssfqqjt +brbjsciahfibxuiupxngfpcx +brbjsciahfibxuiuqcdhomua +brbjsciahfibxuiuqlyixkgi +brbjsciahfibxuiuqvokbhxq +brbjsciahfibxuiuraelkfjy +brbjsciahfibxuiurounibuf +brbjsciahkdcmtbyaoffckzd +brbjsciahkdcmtbyatafwjsh +brbjsciahkdcmtbybhlijevx +brbjsciahkdcmtbybrbjscia +brbjsciahkdcmtbycyxowxpb +brbjsciahkdcmtbyddnqavbj +brbjsciahkdcmtbydiiqutzn +brbjsciahkdcmtbydndrjssr +brbjsciahkdcmtbydwyssqez +brbjsciahkdcmtbyegjuqmpg +brbjsciahkdcmtbyelevflik +brbjsciahkdcmtbyeuzwoizs +brbjsciahkdcmtbyezuxdhsw +brbjsciahkdcmtbyfoazvcwh +brbjsciahkdcmtbyhanbdvpq +brbjsciahkdcmtbyhfibxuiu +brbjsciahkdcmtbyhkdcmtby +brbjsciahkdcmtbyhtydvqtb +brbjsciahkdcmtbyhytekpmf +brbjsciahkdcmtbyiiegilwr +brbjsciahkdcmtbyirzhrjiz +brbjsciahkdcmtbyjbkjpftg +brbjsciahkdcmtbyjgfkeemk +brbjsciahkdcmtbyjlakydfo +brbjsciahkdcmtbyjuvmcaww +brbjsciahkdcmtbykxrqrxft +brbjsciahkdcmtbylhcsptqa +brbjsciahkdcmtbylqxtyrci +brbjsciahkdcmtbymaivwnmu +brbjsciahkdcmtbymfdwlmfy +brbjsciahkdcmtbymoyxujxb +brbjsciahkdcmtbymttyjiqf +brbjsciahkdcmtbypssfqqjt +brbjsciahkdcmtbypxngfpcx +brbjsciahkdcmtbyqcdhomua +brbjsciahkdcmtbyqlyixkgi +brbjsciahkdcmtbyqvokbhxq +brbjsciahkdcmtbyraelkfjy +brbjsciahkdcmtbyrounibuf +brbjsciahtydvqtbaoffckzd +brbjsciahtydvqtbatafwjsh +brbjsciahtydvqtbbhlijevx +brbjsciahtydvqtbbrbjscia +brbjsciahtydvqtbcyxowxpb +brbjsciahtydvqtbddnqavbj +brbjsciahtydvqtbdiiqutzn +brbjsciahtydvqtbdndrjssr +brbjsciahtydvqtbdwyssqez +brbjsciahtydvqtbegjuqmpg +brbjsciahtydvqtbelevflik +brbjsciahtydvqtbeuzwoizs +brbjsciahtydvqtbezuxdhsw +brbjsciahtydvqtbfoazvcwh +brbjsciahtydvqtbhanbdvpq +brbjsciahtydvqtbhfibxuiu +brbjsciahtydvqtbhkdcmtby +brbjsciahtydvqtbhtydvqtb +brbjsciahtydvqtbhytekpmf +brbjsciahtydvqtbiiegilwr +brbjsciahtydvqtbirzhrjiz +brbjsciahtydvqtbjbkjpftg +brbjsciahtydvqtbjgfkeemk +brbjsciahtydvqtbjlakydfo +brbjsciahtydvqtbjuvmcaww +brbjsciahtydvqtbkxrqrxft +brbjsciahtydvqtblhcsptqa +brbjsciahtydvqtblqxtyrci +brbjsciahtydvqtbmaivwnmu +brbjsciahtydvqtbmfdwlmfy +brbjsciahtydvqtbmoyxujxb +brbjsciahtydvqtbmttyjiqf +brbjsciahtydvqtbpssfqqjt +brbjsciahtydvqtbpxngfpcx +brbjsciahtydvqtbqcdhomua +brbjsciahtydvqtbqlyixkgi +brbjsciahtydvqtbqvokbhxq +brbjsciahtydvqtbraelkfjy +brbjsciahtydvqtbrounibuf +brbjsciahytekpmfaoffckzd +brbjsciahytekpmfatafwjsh +brbjsciahytekpmfbhlijevx +brbjsciahytekpmfbrbjscia +brbjsciahytekpmfcyxowxpb +brbjsciahytekpmfddnqavbj +brbjsciahytekpmfdiiqutzn +brbjsciahytekpmfdndrjssr +brbjsciahytekpmfdwyssqez +brbjsciahytekpmfegjuqmpg +brbjsciahytekpmfelevflik +brbjsciahytekpmfeuzwoizs +brbjsciahytekpmfezuxdhsw +brbjsciahytekpmffoazvcwh +brbjsciahytekpmfhanbdvpq +brbjsciahytekpmfhfibxuiu +brbjsciahytekpmfhkdcmtby +brbjsciahytekpmfhtydvqtb +brbjsciahytekpmfhytekpmf +brbjsciahytekpmfiiegilwr +brbjsciahytekpmfirzhrjiz +brbjsciahytekpmfjbkjpftg +brbjsciahytekpmfjgfkeemk +brbjsciahytekpmfjlakydfo +brbjsciahytekpmfjuvmcaww +brbjsciahytekpmfkxrqrxft +brbjsciahytekpmflhcsptqa +brbjsciahytekpmflqxtyrci +brbjsciahytekpmfmaivwnmu +brbjsciahytekpmfmfdwlmfy +brbjsciahytekpmfmoyxujxb +brbjsciahytekpmfmttyjiqf +brbjsciahytekpmfpssfqqjt +brbjsciahytekpmfpxngfpcx +brbjsciahytekpmfqcdhomua +brbjsciahytekpmfqlyixkgi +brbjsciahytekpmfqvokbhxq +brbjsciahytekpmfraelkfjy +brbjsciahytekpmfrounibuf +brbjsciaiiegilwraoffckzd +brbjsciaiiegilwratafwjsh +brbjsciaiiegilwrbhlijevx +brbjsciaiiegilwrbrbjscia +brbjsciaiiegilwrcyxowxpb +brbjsciaiiegilwrddnqavbj +brbjsciaiiegilwrdiiqutzn +brbjsciaiiegilwrdndrjssr +brbjsciaiiegilwrdwyssqez +brbjsciaiiegilwregjuqmpg +brbjsciaiiegilwrelevflik +brbjsciaiiegilwreuzwoizs +brbjsciaiiegilwrezuxdhsw +brbjsciaiiegilwrfoazvcwh +brbjsciaiiegilwrhanbdvpq +brbjsciaiiegilwrhfibxuiu +brbjsciaiiegilwrhkdcmtby +brbjsciaiiegilwrhtydvqtb +brbjsciaiiegilwrhytekpmf +brbjsciaiiegilwriiegilwr +brbjsciaiiegilwrirzhrjiz +brbjsciaiiegilwrjbkjpftg +brbjsciaiiegilwrjgfkeemk +brbjsciaiiegilwrjlakydfo +brbjsciaiiegilwrjuvmcaww +brbjsciaiiegilwrkxrqrxft +brbjsciaiiegilwrlhcsptqa +brbjsciaiiegilwrlqxtyrci +brbjsciaiiegilwrmaivwnmu +brbjsciaiiegilwrmfdwlmfy +brbjsciaiiegilwrmoyxujxb +brbjsciaiiegilwrmttyjiqf +brbjsciaiiegilwrpssfqqjt +brbjsciaiiegilwrpxngfpcx +brbjsciaiiegilwrqcdhomua +brbjsciaiiegilwrqlyixkgi +brbjsciaiiegilwrqvokbhxq +brbjsciaiiegilwrraelkfjy +brbjsciaiiegilwrrounibuf +brbjsciairzhrjizaoffckzd +brbjsciairzhrjizatafwjsh +brbjsciairzhrjizbhlijevx +brbjsciairzhrjizbrbjscia +brbjsciairzhrjizcyxowxpb +brbjsciairzhrjizddnqavbj +brbjsciairzhrjizdiiqutzn +brbjsciairzhrjizdndrjssr +brbjsciairzhrjizdwyssqez +brbjsciairzhrjizegjuqmpg +brbjsciairzhrjizelevflik +brbjsciairzhrjizeuzwoizs +brbjsciairzhrjizezuxdhsw +brbjsciairzhrjizfoazvcwh +brbjsciairzhrjizhanbdvpq +brbjsciairzhrjizhfibxuiu +brbjsciairzhrjizhkdcmtby +brbjsciairzhrjizhtydvqtb +brbjsciairzhrjizhytekpmf +brbjsciairzhrjiziiegilwr +brbjsciairzhrjizirzhrjiz +brbjsciairzhrjizjbkjpftg +brbjsciairzhrjizjgfkeemk +brbjsciairzhrjizjlakydfo +brbjsciairzhrjizjuvmcaww +brbjsciairzhrjizkxrqrxft +brbjsciairzhrjizlhcsptqa +brbjsciairzhrjizlqxtyrci +brbjsciairzhrjizmaivwnmu +brbjsciairzhrjizmfdwlmfy +brbjsciairzhrjizmoyxujxb +brbjsciairzhrjizmttyjiqf +brbjsciairzhrjizpssfqqjt +brbjsciairzhrjizpxngfpcx +brbjsciairzhrjizqcdhomua +brbjsciairzhrjizqlyixkgi +brbjsciairzhrjizqvokbhxq +brbjsciairzhrjizraelkfjy +brbjsciairzhrjizrounibuf +brbjsciajbkjpftgaoffckzd +brbjsciajbkjpftgatafwjsh +brbjsciajbkjpftgbhlijevx +brbjsciajbkjpftgbrbjscia +brbjsciajbkjpftgcyxowxpb +brbjsciajbkjpftgddnqavbj +brbjsciajbkjpftgdiiqutzn +brbjsciajbkjpftgdndrjssr +brbjsciajbkjpftgdwyssqez +brbjsciajbkjpftgegjuqmpg +brbjsciajbkjpftgelevflik +brbjsciajbkjpftgeuzwoizs +brbjsciajbkjpftgezuxdhsw +brbjsciajbkjpftgfoazvcwh +brbjsciajbkjpftghanbdvpq +brbjsciajbkjpftghfibxuiu +brbjsciajbkjpftghkdcmtby +brbjsciajbkjpftghtydvqtb +brbjsciajbkjpftghytekpmf +brbjsciajbkjpftgiiegilwr +brbjsciajbkjpftgirzhrjiz +brbjsciajbkjpftgjbkjpftg +brbjsciajbkjpftgjgfkeemk +brbjsciajbkjpftgjlakydfo +brbjsciajbkjpftgjuvmcaww +brbjsciajbkjpftgkxrqrxft +brbjsciajbkjpftglhcsptqa +brbjsciajbkjpftglqxtyrci +brbjsciajbkjpftgmaivwnmu +brbjsciajbkjpftgmfdwlmfy +brbjsciajbkjpftgmoyxujxb +brbjsciajbkjpftgmttyjiqf +brbjsciajbkjpftgpssfqqjt +brbjsciajbkjpftgpxngfpcx +brbjsciajbkjpftgqcdhomua +brbjsciajbkjpftgqlyixkgi +brbjsciajbkjpftgqvokbhxq +brbjsciajbkjpftgraelkfjy +brbjsciajbkjpftgrounibuf +brbjsciajgfkeemkaoffckzd +brbjsciajgfkeemkatafwjsh +brbjsciajgfkeemkbhlijevx +brbjsciajgfkeemkbrbjscia +brbjsciajgfkeemkcyxowxpb +brbjsciajgfkeemkddnqavbj +brbjsciajgfkeemkdiiqutzn +brbjsciajgfkeemkdndrjssr +brbjsciajgfkeemkdwyssqez +brbjsciajgfkeemkegjuqmpg +brbjsciajgfkeemkelevflik +brbjsciajgfkeemkeuzwoizs +brbjsciajgfkeemkezuxdhsw +brbjsciajgfkeemkfoazvcwh +brbjsciajgfkeemkhanbdvpq +brbjsciajgfkeemkhfibxuiu +brbjsciajgfkeemkhkdcmtby +brbjsciajgfkeemkhtydvqtb +brbjsciajgfkeemkhytekpmf +brbjsciajgfkeemkiiegilwr +brbjsciajgfkeemkirzhrjiz +brbjsciajgfkeemkjbkjpftg +brbjsciajgfkeemkjgfkeemk +brbjsciajgfkeemkjlakydfo +brbjsciajgfkeemkjuvmcaww +brbjsciajgfkeemkkxrqrxft +brbjsciajgfkeemklhcsptqa +brbjsciajgfkeemklqxtyrci +brbjsciajgfkeemkmaivwnmu +brbjsciajgfkeemkmfdwlmfy +brbjsciajgfkeemkmoyxujxb +brbjsciajgfkeemkmttyjiqf +brbjsciajgfkeemkpssfqqjt +brbjsciajgfkeemkpxngfpcx +brbjsciajgfkeemkqcdhomua +brbjsciajgfkeemkqlyixkgi +brbjsciajgfkeemkqvokbhxq +brbjsciajgfkeemkraelkfjy +brbjsciajgfkeemkrounibuf +brbjsciajlakydfoaoffckzd +brbjsciajlakydfoatafwjsh +brbjsciajlakydfobhlijevx +brbjsciajlakydfobrbjscia +brbjsciajlakydfocyxowxpb +brbjsciajlakydfoddnqavbj +brbjsciajlakydfodiiqutzn +brbjsciajlakydfodndrjssr +brbjsciajlakydfodwyssqez +brbjsciajlakydfoegjuqmpg +brbjsciajlakydfoelevflik +brbjsciajlakydfoeuzwoizs +brbjsciajlakydfoezuxdhsw +brbjsciajlakydfofoazvcwh +brbjsciajlakydfohanbdvpq +brbjsciajlakydfohfibxuiu +brbjsciajlakydfohkdcmtby +brbjsciajlakydfohtydvqtb +brbjsciajlakydfohytekpmf +brbjsciajlakydfoiiegilwr +brbjsciajlakydfoirzhrjiz +brbjsciajlakydfojbkjpftg +brbjsciajlakydfojgfkeemk +brbjsciajlakydfojlakydfo +brbjsciajlakydfojuvmcaww +brbjsciajlakydfokxrqrxft +brbjsciajlakydfolhcsptqa +brbjsciajlakydfolqxtyrci +brbjsciajlakydfomaivwnmu +brbjsciajlakydfomfdwlmfy +brbjsciajlakydfomoyxujxb +brbjsciajlakydfomttyjiqf +brbjsciajlakydfopssfqqjt +brbjsciajlakydfopxngfpcx +brbjsciajlakydfoqcdhomua +brbjsciajlakydfoqlyixkgi +brbjsciajlakydfoqvokbhxq +brbjsciajlakydforaelkfjy +brbjsciajlakydforounibuf +brbjsciajuvmcawwaoffckzd +brbjsciajuvmcawwatafwjsh +brbjsciajuvmcawwbhlijevx +brbjsciajuvmcawwbrbjscia +brbjsciajuvmcawwcyxowxpb +brbjsciajuvmcawwddnqavbj +brbjsciajuvmcawwdiiqutzn +brbjsciajuvmcawwdndrjssr +brbjsciajuvmcawwdwyssqez +brbjsciajuvmcawwegjuqmpg +brbjsciajuvmcawwelevflik +brbjsciajuvmcawweuzwoizs +brbjsciajuvmcawwezuxdhsw +brbjsciajuvmcawwfoazvcwh +brbjsciajuvmcawwhanbdvpq +brbjsciajuvmcawwhfibxuiu +brbjsciajuvmcawwhkdcmtby +brbjsciajuvmcawwhtydvqtb +brbjsciajuvmcawwhytekpmf +brbjsciajuvmcawwiiegilwr +brbjsciajuvmcawwirzhrjiz +brbjsciajuvmcawwjbkjpftg +brbjsciajuvmcawwjgfkeemk +brbjsciajuvmcawwjlakydfo +brbjsciajuvmcawwjuvmcaww +brbjsciajuvmcawwkxrqrxft +brbjsciajuvmcawwlhcsptqa +brbjsciajuvmcawwlqxtyrci +brbjsciajuvmcawwmaivwnmu +brbjsciajuvmcawwmfdwlmfy +brbjsciajuvmcawwmoyxujxb +brbjsciajuvmcawwmttyjiqf +brbjsciajuvmcawwpssfqqjt +brbjsciajuvmcawwpxngfpcx +brbjsciajuvmcawwqcdhomua +brbjsciajuvmcawwqlyixkgi +brbjsciajuvmcawwqvokbhxq +brbjsciajuvmcawwraelkfjy +brbjsciajuvmcawwrounibuf +brbjsciakxrqrxftaoffckzd +brbjsciakxrqrxftatafwjsh +brbjsciakxrqrxftbhlijevx +brbjsciakxrqrxftbrbjscia +brbjsciakxrqrxftcyxowxpb +brbjsciakxrqrxftddnqavbj +brbjsciakxrqrxftdiiqutzn +brbjsciakxrqrxftdndrjssr +brbjsciakxrqrxftdwyssqez +brbjsciakxrqrxftegjuqmpg +brbjsciakxrqrxftelevflik +brbjsciakxrqrxfteuzwoizs +brbjsciakxrqrxftezuxdhsw +brbjsciakxrqrxftfoazvcwh +brbjsciakxrqrxfthanbdvpq +brbjsciakxrqrxfthfibxuiu +brbjsciakxrqrxfthkdcmtby +brbjsciakxrqrxfthtydvqtb +brbjsciakxrqrxfthytekpmf +brbjsciakxrqrxftiiegilwr +brbjsciakxrqrxftirzhrjiz +brbjsciakxrqrxftjbkjpftg +brbjsciakxrqrxftjgfkeemk +brbjsciakxrqrxftjlakydfo +brbjsciakxrqrxftjuvmcaww +brbjsciakxrqrxftkxrqrxft +brbjsciakxrqrxftlhcsptqa +brbjsciakxrqrxftlqxtyrci +brbjsciakxrqrxftmaivwnmu +brbjsciakxrqrxftmfdwlmfy +brbjsciakxrqrxftmoyxujxb +brbjsciakxrqrxftmttyjiqf +brbjsciakxrqrxftpssfqqjt +brbjsciakxrqrxftpxngfpcx +brbjsciakxrqrxftqcdhomua +brbjsciakxrqrxftqlyixkgi +brbjsciakxrqrxftqvokbhxq +brbjsciakxrqrxftraelkfjy +brbjsciakxrqrxftrounibuf +brbjscialhcsptqaaoffckzd +brbjscialhcsptqaatafwjsh +brbjscialhcsptqabhlijevx +brbjscialhcsptqabrbjscia +brbjscialhcsptqacyxowxpb +brbjscialhcsptqaddnqavbj +brbjscialhcsptqadiiqutzn +brbjscialhcsptqadndrjssr +brbjscialhcsptqadwyssqez +brbjscialhcsptqaegjuqmpg +brbjscialhcsptqaelevflik +brbjscialhcsptqaeuzwoizs +brbjscialhcsptqaezuxdhsw +brbjscialhcsptqafoazvcwh +brbjscialhcsptqahanbdvpq +brbjscialhcsptqahfibxuiu +brbjscialhcsptqahkdcmtby +brbjscialhcsptqahtydvqtb +brbjscialhcsptqahytekpmf +brbjscialhcsptqaiiegilwr +brbjscialhcsptqairzhrjiz +brbjscialhcsptqajbkjpftg +brbjscialhcsptqajgfkeemk +brbjscialhcsptqajlakydfo +brbjscialhcsptqajuvmcaww +brbjscialhcsptqakxrqrxft +brbjscialhcsptqalhcsptqa +brbjscialhcsptqalqxtyrci +brbjscialhcsptqamaivwnmu +brbjscialhcsptqamfdwlmfy +brbjscialhcsptqamoyxujxb +brbjscialhcsptqamttyjiqf +brbjscialhcsptqapssfqqjt +brbjscialhcsptqapxngfpcx +brbjscialhcsptqaqcdhomua +brbjscialhcsptqaqlyixkgi +brbjscialhcsptqaqvokbhxq +brbjscialhcsptqaraelkfjy +brbjscialhcsptqarounibuf +brbjscialqxtyrciaoffckzd +brbjscialqxtyrciatafwjsh +brbjscialqxtyrcibhlijevx +brbjscialqxtyrcibrbjscia +brbjscialqxtyrcicyxowxpb +brbjscialqxtyrciddnqavbj +brbjscialqxtyrcidiiqutzn +brbjscialqxtyrcidndrjssr +brbjscialqxtyrcidwyssqez +brbjscialqxtyrciegjuqmpg +brbjscialqxtyrcielevflik +brbjscialqxtyrcieuzwoizs +brbjscialqxtyrciezuxdhsw +brbjscialqxtyrcifoazvcwh +brbjscialqxtyrcihanbdvpq +brbjscialqxtyrcihfibxuiu +brbjscialqxtyrcihkdcmtby +brbjscialqxtyrcihtydvqtb +brbjscialqxtyrcihytekpmf +brbjscialqxtyrciiiegilwr +brbjscialqxtyrciirzhrjiz +brbjscialqxtyrcijbkjpftg +brbjscialqxtyrcijgfkeemk +brbjscialqxtyrcijlakydfo +brbjscialqxtyrcijuvmcaww +brbjscialqxtyrcikxrqrxft +brbjscialqxtyrcilhcsptqa +brbjscialqxtyrcilqxtyrci +brbjscialqxtyrcimaivwnmu +brbjscialqxtyrcimfdwlmfy +brbjscialqxtyrcimoyxujxb +brbjscialqxtyrcimttyjiqf +brbjscialqxtyrcipssfqqjt +brbjscialqxtyrcipxngfpcx +brbjscialqxtyrciqcdhomua +brbjscialqxtyrciqlyixkgi +brbjscialqxtyrciqvokbhxq +brbjscialqxtyrciraelkfjy +brbjscialqxtyrcirounibuf +brbjsciamaivwnmuaoffckzd +brbjsciamaivwnmuatafwjsh +brbjsciamaivwnmubhlijevx +brbjsciamaivwnmubrbjscia +brbjsciamaivwnmucyxowxpb +brbjsciamaivwnmuddnqavbj +brbjsciamaivwnmudiiqutzn +brbjsciamaivwnmudndrjssr +brbjsciamaivwnmudwyssqez +brbjsciamaivwnmuegjuqmpg +brbjsciamaivwnmuelevflik +brbjsciamaivwnmueuzwoizs +brbjsciamaivwnmuezuxdhsw +brbjsciamaivwnmufoazvcwh +brbjsciamaivwnmuhanbdvpq +brbjsciamaivwnmuhfibxuiu +brbjsciamaivwnmuhkdcmtby +brbjsciamaivwnmuhtydvqtb +brbjsciamaivwnmuhytekpmf +brbjsciamaivwnmuiiegilwr +brbjsciamaivwnmuirzhrjiz +brbjsciamaivwnmujbkjpftg +brbjsciamaivwnmujgfkeemk +brbjsciamaivwnmujlakydfo +brbjsciamaivwnmujuvmcaww +brbjsciamaivwnmukxrqrxft +brbjsciamaivwnmulhcsptqa +brbjsciamaivwnmulqxtyrci +brbjsciamaivwnmumaivwnmu +brbjsciamaivwnmumfdwlmfy +brbjsciamaivwnmumoyxujxb +brbjsciamaivwnmumttyjiqf +brbjsciamaivwnmupssfqqjt +brbjsciamaivwnmupxngfpcx +brbjsciamaivwnmuqcdhomua +brbjsciamaivwnmuqlyixkgi +brbjsciamaivwnmuqvokbhxq +brbjsciamaivwnmuraelkfjy +brbjsciamaivwnmurounibuf +brbjsciamfdwlmfyaoffckzd +brbjsciamfdwlmfyatafwjsh +brbjsciamfdwlmfybhlijevx +brbjsciamfdwlmfybrbjscia +brbjsciamfdwlmfycyxowxpb +brbjsciamfdwlmfyddnqavbj +brbjsciamfdwlmfydiiqutzn +brbjsciamfdwlmfydndrjssr +brbjsciamfdwlmfydwyssqez +brbjsciamfdwlmfyegjuqmpg +brbjsciamfdwlmfyelevflik +brbjsciamfdwlmfyeuzwoizs +brbjsciamfdwlmfyezuxdhsw +brbjsciamfdwlmfyfoazvcwh +brbjsciamfdwlmfyhanbdvpq +brbjsciamfdwlmfyhfibxuiu +brbjsciamfdwlmfyhkdcmtby +brbjsciamfdwlmfyhtydvqtb +brbjsciamfdwlmfyhytekpmf +brbjsciamfdwlmfyiiegilwr +brbjsciamfdwlmfyirzhrjiz +brbjsciamfdwlmfyjbkjpftg +brbjsciamfdwlmfyjgfkeemk +brbjsciamfdwlmfyjlakydfo +brbjsciamfdwlmfyjuvmcaww +brbjsciamfdwlmfykxrqrxft +brbjsciamfdwlmfylhcsptqa +brbjsciamfdwlmfylqxtyrci +brbjsciamfdwlmfymaivwnmu +brbjsciamfdwlmfymfdwlmfy +brbjsciamfdwlmfymoyxujxb +brbjsciamfdwlmfymttyjiqf +brbjsciamfdwlmfypssfqqjt +brbjsciamfdwlmfypxngfpcx +brbjsciamfdwlmfyqcdhomua +brbjsciamfdwlmfyqlyixkgi +brbjsciamfdwlmfyqvokbhxq +brbjsciamfdwlmfyraelkfjy +brbjsciamfdwlmfyrounibuf +brbjsciamoyxujxbaoffckzd +brbjsciamoyxujxbatafwjsh +brbjsciamoyxujxbbhlijevx +brbjsciamoyxujxbbrbjscia +brbjsciamoyxujxbcyxowxpb +brbjsciamoyxujxbddnqavbj +brbjsciamoyxujxbdiiqutzn +brbjsciamoyxujxbdndrjssr +brbjsciamoyxujxbdwyssqez +brbjsciamoyxujxbegjuqmpg +brbjsciamoyxujxbelevflik +brbjsciamoyxujxbeuzwoizs +brbjsciamoyxujxbezuxdhsw +brbjsciamoyxujxbfoazvcwh +brbjsciamoyxujxbhanbdvpq +brbjsciamoyxujxbhfibxuiu +brbjsciamoyxujxbhkdcmtby +brbjsciamoyxujxbhtydvqtb +brbjsciamoyxujxbhytekpmf +brbjsciamoyxujxbiiegilwr +brbjsciamoyxujxbirzhrjiz +brbjsciamoyxujxbjbkjpftg +brbjsciamoyxujxbjgfkeemk +brbjsciamoyxujxbjlakydfo +brbjsciamoyxujxbjuvmcaww +brbjsciamoyxujxbkxrqrxft +brbjsciamoyxujxblhcsptqa +brbjsciamoyxujxblqxtyrci +brbjsciamoyxujxbmaivwnmu +brbjsciamoyxujxbmfdwlmfy +brbjsciamoyxujxbmoyxujxb +brbjsciamoyxujxbmttyjiqf +brbjsciamoyxujxbpssfqqjt +brbjsciamoyxujxbpxngfpcx +brbjsciamoyxujxbqcdhomua +brbjsciamoyxujxbqlyixkgi +brbjsciamoyxujxbqvokbhxq +brbjsciamoyxujxbraelkfjy +brbjsciamoyxujxbrounibuf +brbjsciamttyjiqfaoffckzd +brbjsciamttyjiqfatafwjsh +brbjsciamttyjiqfbhlijevx +brbjsciamttyjiqfbrbjscia +brbjsciamttyjiqfcyxowxpb +brbjsciamttyjiqfddnqavbj +brbjsciamttyjiqfdiiqutzn +brbjsciamttyjiqfdndrjssr +brbjsciamttyjiqfdwyssqez +brbjsciamttyjiqfegjuqmpg +brbjsciamttyjiqfelevflik +brbjsciamttyjiqfeuzwoizs +brbjsciamttyjiqfezuxdhsw +brbjsciamttyjiqffoazvcwh +brbjsciamttyjiqfhanbdvpq +brbjsciamttyjiqfhfibxuiu +brbjsciamttyjiqfhkdcmtby +brbjsciamttyjiqfhtydvqtb +brbjsciamttyjiqfhytekpmf +brbjsciamttyjiqfiiegilwr +brbjsciamttyjiqfirzhrjiz +brbjsciamttyjiqfjbkjpftg +brbjsciamttyjiqfjgfkeemk +brbjsciamttyjiqfjlakydfo +brbjsciamttyjiqfjuvmcaww +brbjsciamttyjiqfkxrqrxft +brbjsciamttyjiqflhcsptqa +brbjsciamttyjiqflqxtyrci +brbjsciamttyjiqfmaivwnmu +brbjsciamttyjiqfmfdwlmfy +brbjsciamttyjiqfmoyxujxb +brbjsciamttyjiqfmttyjiqf +brbjsciamttyjiqfpssfqqjt +brbjsciamttyjiqfpxngfpcx +brbjsciamttyjiqfqcdhomua +brbjsciamttyjiqfqlyixkgi +brbjsciamttyjiqfqvokbhxq +brbjsciamttyjiqfraelkfjy +brbjsciamttyjiqfrounibuf +brbjsciapssfqqjtaoffckzd +brbjsciapssfqqjtatafwjsh +brbjsciapssfqqjtbhlijevx +brbjsciapssfqqjtbrbjscia +brbjsciapssfqqjtcyxowxpb +brbjsciapssfqqjtddnqavbj +brbjsciapssfqqjtdiiqutzn +brbjsciapssfqqjtdndrjssr +brbjsciapssfqqjtdwyssqez +brbjsciapssfqqjtegjuqmpg +brbjsciapssfqqjtelevflik +brbjsciapssfqqjteuzwoizs +brbjsciapssfqqjtezuxdhsw +brbjsciapssfqqjtfoazvcwh +brbjsciapssfqqjthanbdvpq +brbjsciapssfqqjthfibxuiu +brbjsciapssfqqjthkdcmtby +brbjsciapssfqqjthtydvqtb +brbjsciapssfqqjthytekpmf +brbjsciapssfqqjtiiegilwr +brbjsciapssfqqjtirzhrjiz +brbjsciapssfqqjtjbkjpftg +brbjsciapssfqqjtjgfkeemk +brbjsciapssfqqjtjlakydfo +brbjsciapssfqqjtjuvmcaww +brbjsciapssfqqjtkxrqrxft +brbjsciapssfqqjtlhcsptqa +brbjsciapssfqqjtlqxtyrci +brbjsciapssfqqjtmaivwnmu +brbjsciapssfqqjtmfdwlmfy +brbjsciapssfqqjtmoyxujxb +brbjsciapssfqqjtmttyjiqf +brbjsciapssfqqjtpssfqqjt +brbjsciapssfqqjtpxngfpcx +brbjsciapssfqqjtqcdhomua +brbjsciapssfqqjtqlyixkgi +brbjsciapssfqqjtqvokbhxq +brbjsciapssfqqjtraelkfjy +brbjsciapssfqqjtrounibuf +brbjsciapxngfpcxaoffckzd +brbjsciapxngfpcxatafwjsh +brbjsciapxngfpcxbhlijevx +brbjsciapxngfpcxbrbjscia +brbjsciapxngfpcxcyxowxpb +brbjsciapxngfpcxddnqavbj +brbjsciapxngfpcxdiiqutzn +brbjsciapxngfpcxdndrjssr +brbjsciapxngfpcxdwyssqez +brbjsciapxngfpcxegjuqmpg +brbjsciapxngfpcxelevflik +brbjsciapxngfpcxeuzwoizs +brbjsciapxngfpcxezuxdhsw +brbjsciapxngfpcxfoazvcwh +brbjsciapxngfpcxhanbdvpq +brbjsciapxngfpcxhfibxuiu +brbjsciapxngfpcxhkdcmtby +brbjsciapxngfpcxhtydvqtb +brbjsciapxngfpcxhytekpmf +brbjsciapxngfpcxiiegilwr +brbjsciapxngfpcxirzhrjiz +brbjsciapxngfpcxjbkjpftg +brbjsciapxngfpcxjgfkeemk +brbjsciapxngfpcxjlakydfo +brbjsciapxngfpcxjuvmcaww +brbjsciapxngfpcxkxrqrxft +brbjsciapxngfpcxlhcsptqa +brbjsciapxngfpcxlqxtyrci +brbjsciapxngfpcxmaivwnmu +brbjsciapxngfpcxmfdwlmfy +brbjsciapxngfpcxmoyxujxb +brbjsciapxngfpcxmttyjiqf +brbjsciapxngfpcxpssfqqjt +brbjsciapxngfpcxpxngfpcx +brbjsciapxngfpcxqcdhomua +brbjsciapxngfpcxqlyixkgi +brbjsciapxngfpcxqvokbhxq +brbjsciapxngfpcxraelkfjy +brbjsciapxngfpcxrounibuf +brbjsciaqcdhomuaaoffckzd +brbjsciaqcdhomuaatafwjsh +brbjsciaqcdhomuabhlijevx +brbjsciaqcdhomuabrbjscia +brbjsciaqcdhomuacyxowxpb +brbjsciaqcdhomuaddnqavbj +brbjsciaqcdhomuadiiqutzn +brbjsciaqcdhomuadndrjssr +brbjsciaqcdhomuadwyssqez +brbjsciaqcdhomuaegjuqmpg +brbjsciaqcdhomuaelevflik +brbjsciaqcdhomuaeuzwoizs +brbjsciaqcdhomuaezuxdhsw +brbjsciaqcdhomuafoazvcwh +brbjsciaqcdhomuahanbdvpq +brbjsciaqcdhomuahfibxuiu +brbjsciaqcdhomuahkdcmtby +brbjsciaqcdhomuahtydvqtb +brbjsciaqcdhomuahytekpmf +brbjsciaqcdhomuaiiegilwr +brbjsciaqcdhomuairzhrjiz +brbjsciaqcdhomuajbkjpftg +brbjsciaqcdhomuajgfkeemk +brbjsciaqcdhomuajlakydfo +brbjsciaqcdhomuajuvmcaww +brbjsciaqcdhomuakxrqrxft +brbjsciaqcdhomualhcsptqa +brbjsciaqcdhomualqxtyrci +brbjsciaqcdhomuamaivwnmu +brbjsciaqcdhomuamfdwlmfy +brbjsciaqcdhomuamoyxujxb +brbjsciaqcdhomuamttyjiqf +brbjsciaqcdhomuapssfqqjt +brbjsciaqcdhomuapxngfpcx +brbjsciaqcdhomuaqcdhomua +brbjsciaqcdhomuaqlyixkgi +brbjsciaqcdhomuaqvokbhxq +brbjsciaqcdhomuaraelkfjy +brbjsciaqcdhomuarounibuf +brbjsciaqlyixkgiaoffckzd +brbjsciaqlyixkgiatafwjsh +brbjsciaqlyixkgibhlijevx +brbjsciaqlyixkgibrbjscia +brbjsciaqlyixkgicyxowxpb +brbjsciaqlyixkgiddnqavbj +brbjsciaqlyixkgidiiqutzn +brbjsciaqlyixkgidndrjssr +brbjsciaqlyixkgidwyssqez +brbjsciaqlyixkgiegjuqmpg +brbjsciaqlyixkgielevflik +brbjsciaqlyixkgieuzwoizs +brbjsciaqlyixkgiezuxdhsw +brbjsciaqlyixkgifoazvcwh +brbjsciaqlyixkgihanbdvpq +brbjsciaqlyixkgihfibxuiu +brbjsciaqlyixkgihkdcmtby +brbjsciaqlyixkgihtydvqtb +brbjsciaqlyixkgihytekpmf +brbjsciaqlyixkgiiiegilwr +brbjsciaqlyixkgiirzhrjiz +brbjsciaqlyixkgijbkjpftg +brbjsciaqlyixkgijgfkeemk +brbjsciaqlyixkgijlakydfo +brbjsciaqlyixkgijuvmcaww +brbjsciaqlyixkgikxrqrxft +brbjsciaqlyixkgilhcsptqa +brbjsciaqlyixkgilqxtyrci +brbjsciaqlyixkgimaivwnmu +brbjsciaqlyixkgimfdwlmfy +brbjsciaqlyixkgimoyxujxb +brbjsciaqlyixkgimttyjiqf +brbjsciaqlyixkgipssfqqjt +brbjsciaqlyixkgipxngfpcx +brbjsciaqlyixkgiqcdhomua +brbjsciaqlyixkgiqlyixkgi +brbjsciaqlyixkgiqvokbhxq +brbjsciaqlyixkgiraelkfjy +brbjsciaqlyixkgirounibuf +brbjsciaqvokbhxqaoffckzd +brbjsciaqvokbhxqatafwjsh +brbjsciaqvokbhxqbhlijevx +brbjsciaqvokbhxqbrbjscia +brbjsciaqvokbhxqcyxowxpb +brbjsciaqvokbhxqddnqavbj +brbjsciaqvokbhxqdiiqutzn +brbjsciaqvokbhxqdndrjssr +brbjsciaqvokbhxqdwyssqez +brbjsciaqvokbhxqegjuqmpg +brbjsciaqvokbhxqelevflik +brbjsciaqvokbhxqeuzwoizs +brbjsciaqvokbhxqezuxdhsw +brbjsciaqvokbhxqfoazvcwh +brbjsciaqvokbhxqhanbdvpq +brbjsciaqvokbhxqhfibxuiu +brbjsciaqvokbhxqhkdcmtby +brbjsciaqvokbhxqhtydvqtb +brbjsciaqvokbhxqhytekpmf +brbjsciaqvokbhxqiiegilwr +brbjsciaqvokbhxqirzhrjiz +brbjsciaqvokbhxqjbkjpftg +brbjsciaqvokbhxqjgfkeemk +brbjsciaqvokbhxqjlakydfo +brbjsciaqvokbhxqjuvmcaww +brbjsciaqvokbhxqkxrqrxft +brbjsciaqvokbhxqlhcsptqa +brbjsciaqvokbhxqlqxtyrci +brbjsciaqvokbhxqmaivwnmu +brbjsciaqvokbhxqmfdwlmfy +brbjsciaqvokbhxqmoyxujxb +brbjsciaqvokbhxqmttyjiqf +brbjsciaqvokbhxqpssfqqjt +brbjsciaqvokbhxqpxngfpcx +brbjsciaqvokbhxqqcdhomua +brbjsciaqvokbhxqqlyixkgi +brbjsciaqvokbhxqqvokbhxq +brbjsciaqvokbhxqraelkfjy +brbjsciaqvokbhxqrounibuf +brbjsciaraelkfjyaoffckzd +brbjsciaraelkfjyatafwjsh +brbjsciaraelkfjybhlijevx +brbjsciaraelkfjybrbjscia +brbjsciaraelkfjycyxowxpb +brbjsciaraelkfjyddnqavbj +brbjsciaraelkfjydiiqutzn +brbjsciaraelkfjydndrjssr +brbjsciaraelkfjydwyssqez +brbjsciaraelkfjyegjuqmpg +brbjsciaraelkfjyelevflik +brbjsciaraelkfjyeuzwoizs +brbjsciaraelkfjyezuxdhsw +brbjsciaraelkfjyfoazvcwh +brbjsciaraelkfjyhanbdvpq +brbjsciaraelkfjyhfibxuiu +brbjsciaraelkfjyhkdcmtby +brbjsciaraelkfjyhtydvqtb +brbjsciaraelkfjyhytekpmf +brbjsciaraelkfjyiiegilwr +brbjsciaraelkfjyirzhrjiz +brbjsciaraelkfjyjbkjpftg +brbjsciaraelkfjyjgfkeemk +brbjsciaraelkfjyjlakydfo +brbjsciaraelkfjyjuvmcaww +brbjsciaraelkfjykxrqrxft +brbjsciaraelkfjylhcsptqa +brbjsciaraelkfjylqxtyrci +brbjsciaraelkfjymaivwnmu +brbjsciaraelkfjymfdwlmfy +brbjsciaraelkfjymoyxujxb +brbjsciaraelkfjymttyjiqf +brbjsciaraelkfjypssfqqjt +brbjsciaraelkfjypxngfpcx +brbjsciaraelkfjyqcdhomua +brbjsciaraelkfjyqlyixkgi +brbjsciaraelkfjyqvokbhxq +brbjsciaraelkfjyraelkfjy +brbjsciaraelkfjyrounibuf +brbjsciarounibufaoffckzd +brbjsciarounibufatafwjsh +brbjsciarounibufbhlijevx +brbjsciarounibufbrbjscia +brbjsciarounibufcyxowxpb +brbjsciarounibufddnqavbj +brbjsciarounibufdiiqutzn +brbjsciarounibufdndrjssr +brbjsciarounibufdwyssqez +brbjsciarounibufegjuqmpg +brbjsciarounibufelevflik +brbjsciarounibufeuzwoizs +brbjsciarounibufezuxdhsw +brbjsciarounibuffoazvcwh +brbjsciarounibufhanbdvpq +brbjsciarounibufhfibxuiu +brbjsciarounibufhkdcmtby +brbjsciarounibufhtydvqtb +brbjsciarounibufhytekpmf +brbjsciarounibufiiegilwr +brbjsciarounibufirzhrjiz +brbjsciarounibufjbkjpftg +brbjsciarounibufjgfkeemk +brbjsciarounibufjlakydfo +brbjsciarounibufjuvmcaww +brbjsciarounibufkxrqrxft +brbjsciarounibuflhcsptqa +brbjsciarounibuflqxtyrci +brbjsciarounibufmaivwnmu +brbjsciarounibufmfdwlmfy +brbjsciarounibufmoyxujxb +brbjsciarounibufmttyjiqf +brbjsciarounibufpssfqqjt +brbjsciarounibufpxngfpcx +brbjsciarounibufqcdhomua +brbjsciarounibufqlyixkgi +brbjsciarounibufqvokbhxq +brbjsciarounibufraelkfjy +brbjsciarounibufrounibuf +cyxowxpbaoffckzdaoffckzd +cyxowxpbaoffckzdatafwjsh +cyxowxpbaoffckzdbhlijevx +cyxowxpbaoffckzdbrbjscia +cyxowxpbaoffckzdcyxowxpb +cyxowxpbaoffckzdddnqavbj +cyxowxpbaoffckzddiiqutzn +cyxowxpbaoffckzddndrjssr +cyxowxpbaoffckzddwyssqez +cyxowxpbaoffckzdegjuqmpg +cyxowxpbaoffckzdelevflik +cyxowxpbaoffckzdeuzwoizs +cyxowxpbaoffckzdezuxdhsw +cyxowxpbaoffckzdfoazvcwh +cyxowxpbaoffckzdhanbdvpq +cyxowxpbaoffckzdhfibxuiu +cyxowxpbaoffckzdhkdcmtby +cyxowxpbaoffckzdhtydvqtb +cyxowxpbaoffckzdhytekpmf +cyxowxpbaoffckzdiiegilwr +cyxowxpbaoffckzdirzhrjiz +cyxowxpbaoffckzdjbkjpftg +cyxowxpbaoffckzdjgfkeemk +cyxowxpbaoffckzdjlakydfo +cyxowxpbaoffckzdjuvmcaww +cyxowxpbaoffckzdkxrqrxft +cyxowxpbaoffckzdlhcsptqa +cyxowxpbaoffckzdlqxtyrci +cyxowxpbaoffckzdmaivwnmu +cyxowxpbaoffckzdmfdwlmfy +cyxowxpbaoffckzdmoyxujxb +cyxowxpbaoffckzdmttyjiqf +cyxowxpbaoffckzdpssfqqjt +cyxowxpbaoffckzdpxngfpcx +cyxowxpbaoffckzdqcdhomua +cyxowxpbaoffckzdqlyixkgi +cyxowxpbaoffckzdqvokbhxq +cyxowxpbaoffckzdraelkfjy +cyxowxpbaoffckzdrounibuf +cyxowxpbatafwjshaoffckzd +cyxowxpbatafwjshatafwjsh +cyxowxpbatafwjshbhlijevx +cyxowxpbatafwjshbrbjscia +cyxowxpbatafwjshcyxowxpb +cyxowxpbatafwjshddnqavbj +cyxowxpbatafwjshdiiqutzn +cyxowxpbatafwjshdndrjssr +cyxowxpbatafwjshdwyssqez +cyxowxpbatafwjshegjuqmpg +cyxowxpbatafwjshelevflik +cyxowxpbatafwjsheuzwoizs +cyxowxpbatafwjshezuxdhsw +cyxowxpbatafwjshfoazvcwh +cyxowxpbatafwjshhanbdvpq +cyxowxpbatafwjshhfibxuiu +cyxowxpbatafwjshhkdcmtby +cyxowxpbatafwjshhtydvqtb +cyxowxpbatafwjshhytekpmf +cyxowxpbatafwjshiiegilwr +cyxowxpbatafwjshirzhrjiz +cyxowxpbatafwjshjbkjpftg +cyxowxpbatafwjshjgfkeemk +cyxowxpbatafwjshjlakydfo +cyxowxpbatafwjshjuvmcaww +cyxowxpbatafwjshkxrqrxft +cyxowxpbatafwjshlhcsptqa +cyxowxpbatafwjshlqxtyrci +cyxowxpbatafwjshmaivwnmu +cyxowxpbatafwjshmfdwlmfy +cyxowxpbatafwjshmoyxujxb +cyxowxpbatafwjshmttyjiqf +cyxowxpbatafwjshpssfqqjt +cyxowxpbatafwjshpxngfpcx +cyxowxpbatafwjshqcdhomua +cyxowxpbatafwjshqlyixkgi +cyxowxpbatafwjshqvokbhxq +cyxowxpbatafwjshraelkfjy +cyxowxpbatafwjshrounibuf +cyxowxpbbhlijevxaoffckzd +cyxowxpbbhlijevxatafwjsh +cyxowxpbbhlijevxbhlijevx +cyxowxpbbhlijevxbrbjscia +cyxowxpbbhlijevxcyxowxpb +cyxowxpbbhlijevxddnqavbj +cyxowxpbbhlijevxdiiqutzn +cyxowxpbbhlijevxdndrjssr +cyxowxpbbhlijevxdwyssqez +cyxowxpbbhlijevxegjuqmpg +cyxowxpbbhlijevxelevflik +cyxowxpbbhlijevxeuzwoizs +cyxowxpbbhlijevxezuxdhsw +cyxowxpbbhlijevxfoazvcwh +cyxowxpbbhlijevxhanbdvpq +cyxowxpbbhlijevxhfibxuiu +cyxowxpbbhlijevxhkdcmtby +cyxowxpbbhlijevxhtydvqtb +cyxowxpbbhlijevxhytekpmf +cyxowxpbbhlijevxiiegilwr +cyxowxpbbhlijevxirzhrjiz +cyxowxpbbhlijevxjbkjpftg +cyxowxpbbhlijevxjgfkeemk +cyxowxpbbhlijevxjlakydfo +cyxowxpbbhlijevxjuvmcaww +cyxowxpbbhlijevxkxrqrxft +cyxowxpbbhlijevxlhcsptqa +cyxowxpbbhlijevxlqxtyrci +cyxowxpbbhlijevxmaivwnmu +cyxowxpbbhlijevxmfdwlmfy +cyxowxpbbhlijevxmoyxujxb +cyxowxpbbhlijevxmttyjiqf +cyxowxpbbhlijevxpssfqqjt +cyxowxpbbhlijevxpxngfpcx +cyxowxpbbhlijevxqcdhomua +cyxowxpbbhlijevxqlyixkgi +cyxowxpbbhlijevxqvokbhxq +cyxowxpbbhlijevxraelkfjy +cyxowxpbbhlijevxrounibuf +cyxowxpbbrbjsciaaoffckzd +cyxowxpbbrbjsciaatafwjsh +cyxowxpbbrbjsciabhlijevx +cyxowxpbbrbjsciabrbjscia +cyxowxpbbrbjsciacyxowxpb +cyxowxpbbrbjsciaddnqavbj +cyxowxpbbrbjsciadiiqutzn +cyxowxpbbrbjsciadndrjssr +cyxowxpbbrbjsciadwyssqez +cyxowxpbbrbjsciaegjuqmpg +cyxowxpbbrbjsciaelevflik +cyxowxpbbrbjsciaeuzwoizs +cyxowxpbbrbjsciaezuxdhsw +cyxowxpbbrbjsciafoazvcwh +cyxowxpbbrbjsciahanbdvpq +cyxowxpbbrbjsciahfibxuiu +cyxowxpbbrbjsciahkdcmtby +cyxowxpbbrbjsciahtydvqtb +cyxowxpbbrbjsciahytekpmf +cyxowxpbbrbjsciaiiegilwr +cyxowxpbbrbjsciairzhrjiz +cyxowxpbbrbjsciajbkjpftg +cyxowxpbbrbjsciajgfkeemk +cyxowxpbbrbjsciajlakydfo +cyxowxpbbrbjsciajuvmcaww +cyxowxpbbrbjsciakxrqrxft +cyxowxpbbrbjscialhcsptqa +cyxowxpbbrbjscialqxtyrci +cyxowxpbbrbjsciamaivwnmu +cyxowxpbbrbjsciamfdwlmfy +cyxowxpbbrbjsciamoyxujxb +cyxowxpbbrbjsciamttyjiqf +cyxowxpbbrbjsciapssfqqjt +cyxowxpbbrbjsciapxngfpcx +cyxowxpbbrbjsciaqcdhomua +cyxowxpbbrbjsciaqlyixkgi +cyxowxpbbrbjsciaqvokbhxq +cyxowxpbbrbjsciaraelkfjy +cyxowxpbbrbjsciarounibuf +cyxowxpbcyxowxpbaoffckzd +cyxowxpbcyxowxpbatafwjsh +cyxowxpbcyxowxpbbhlijevx +cyxowxpbcyxowxpbbrbjscia +cyxowxpbcyxowxpbcyxowxpb +cyxowxpbcyxowxpbddnqavbj +cyxowxpbcyxowxpbdiiqutzn +cyxowxpbcyxowxpbdndrjssr +cyxowxpbcyxowxpbdwyssqez +cyxowxpbcyxowxpbegjuqmpg +cyxowxpbcyxowxpbelevflik +cyxowxpbcyxowxpbeuzwoizs +cyxowxpbcyxowxpbezuxdhsw +cyxowxpbcyxowxpbfoazvcwh +cyxowxpbcyxowxpbhanbdvpq +cyxowxpbcyxowxpbhfibxuiu +cyxowxpbcyxowxpbhkdcmtby +cyxowxpbcyxowxpbhtydvqtb +cyxowxpbcyxowxpbhytekpmf +cyxowxpbcyxowxpbiiegilwr +cyxowxpbcyxowxpbirzhrjiz +cyxowxpbcyxowxpbjbkjpftg +cyxowxpbcyxowxpbjgfkeemk +cyxowxpbcyxowxpbjlakydfo +cyxowxpbcyxowxpbjuvmcaww +cyxowxpbcyxowxpbkxrqrxft +cyxowxpbcyxowxpblhcsptqa +cyxowxpbcyxowxpblqxtyrci +cyxowxpbcyxowxpbmaivwnmu +cyxowxpbcyxowxpbmfdwlmfy +cyxowxpbcyxowxpbmoyxujxb +cyxowxpbcyxowxpbmttyjiqf +cyxowxpbcyxowxpbpssfqqjt +cyxowxpbcyxowxpbpxngfpcx +cyxowxpbcyxowxpbqcdhomua +cyxowxpbcyxowxpbqlyixkgi +cyxowxpbcyxowxpbqvokbhxq +cyxowxpbcyxowxpbraelkfjy +cyxowxpbcyxowxpbrounibuf +cyxowxpbddnqavbjaoffckzd +cyxowxpbddnqavbjatafwjsh +cyxowxpbddnqavbjbhlijevx +cyxowxpbddnqavbjbrbjscia +cyxowxpbddnqavbjcyxowxpb +cyxowxpbddnqavbjddnqavbj +cyxowxpbddnqavbjdiiqutzn +cyxowxpbddnqavbjdndrjssr +cyxowxpbddnqavbjdwyssqez +cyxowxpbddnqavbjegjuqmpg +cyxowxpbddnqavbjelevflik +cyxowxpbddnqavbjeuzwoizs +cyxowxpbddnqavbjezuxdhsw +cyxowxpbddnqavbjfoazvcwh +cyxowxpbddnqavbjhanbdvpq +cyxowxpbddnqavbjhfibxuiu +cyxowxpbddnqavbjhkdcmtby +cyxowxpbddnqavbjhtydvqtb +cyxowxpbddnqavbjhytekpmf +cyxowxpbddnqavbjiiegilwr +cyxowxpbddnqavbjirzhrjiz +cyxowxpbddnqavbjjbkjpftg +cyxowxpbddnqavbjjgfkeemk +cyxowxpbddnqavbjjlakydfo +cyxowxpbddnqavbjjuvmcaww +cyxowxpbddnqavbjkxrqrxft +cyxowxpbddnqavbjlhcsptqa +cyxowxpbddnqavbjlqxtyrci +cyxowxpbddnqavbjmaivwnmu +cyxowxpbddnqavbjmfdwlmfy +cyxowxpbddnqavbjmoyxujxb +cyxowxpbddnqavbjmttyjiqf +cyxowxpbddnqavbjpssfqqjt +cyxowxpbddnqavbjpxngfpcx +cyxowxpbddnqavbjqcdhomua +cyxowxpbddnqavbjqlyixkgi +cyxowxpbddnqavbjqvokbhxq +cyxowxpbddnqavbjraelkfjy +cyxowxpbddnqavbjrounibuf +cyxowxpbdiiqutznaoffckzd +cyxowxpbdiiqutznatafwjsh +cyxowxpbdiiqutznbhlijevx +cyxowxpbdiiqutznbrbjscia +cyxowxpbdiiqutzncyxowxpb +cyxowxpbdiiqutznddnqavbj +cyxowxpbdiiqutzndiiqutzn +cyxowxpbdiiqutzndndrjssr +cyxowxpbdiiqutzndwyssqez +cyxowxpbdiiqutznegjuqmpg +cyxowxpbdiiqutznelevflik +cyxowxpbdiiqutzneuzwoizs +cyxowxpbdiiqutznezuxdhsw +cyxowxpbdiiqutznfoazvcwh +cyxowxpbdiiqutznhanbdvpq +cyxowxpbdiiqutznhfibxuiu +cyxowxpbdiiqutznhkdcmtby +cyxowxpbdiiqutznhtydvqtb +cyxowxpbdiiqutznhytekpmf +cyxowxpbdiiqutzniiegilwr +cyxowxpbdiiqutznirzhrjiz +cyxowxpbdiiqutznjbkjpftg +cyxowxpbdiiqutznjgfkeemk +cyxowxpbdiiqutznjlakydfo +cyxowxpbdiiqutznjuvmcaww +cyxowxpbdiiqutznkxrqrxft +cyxowxpbdiiqutznlhcsptqa +cyxowxpbdiiqutznlqxtyrci +cyxowxpbdiiqutznmaivwnmu +cyxowxpbdiiqutznmfdwlmfy +cyxowxpbdiiqutznmoyxujxb +cyxowxpbdiiqutznmttyjiqf +cyxowxpbdiiqutznpssfqqjt +cyxowxpbdiiqutznpxngfpcx +cyxowxpbdiiqutznqcdhomua +cyxowxpbdiiqutznqlyixkgi +cyxowxpbdiiqutznqvokbhxq +cyxowxpbdiiqutznraelkfjy +cyxowxpbdiiqutznrounibuf +cyxowxpbdndrjssraoffckzd +cyxowxpbdndrjssratafwjsh +cyxowxpbdndrjssrbhlijevx +cyxowxpbdndrjssrbrbjscia +cyxowxpbdndrjssrcyxowxpb +cyxowxpbdndrjssrddnqavbj +cyxowxpbdndrjssrdiiqutzn +cyxowxpbdndrjssrdndrjssr +cyxowxpbdndrjssrdwyssqez +cyxowxpbdndrjssregjuqmpg +cyxowxpbdndrjssrelevflik +cyxowxpbdndrjssreuzwoizs +cyxowxpbdndrjssrezuxdhsw +cyxowxpbdndrjssrfoazvcwh +cyxowxpbdndrjssrhanbdvpq +cyxowxpbdndrjssrhfibxuiu +cyxowxpbdndrjssrhkdcmtby +cyxowxpbdndrjssrhtydvqtb +cyxowxpbdndrjssrhytekpmf +cyxowxpbdndrjssriiegilwr +cyxowxpbdndrjssrirzhrjiz +cyxowxpbdndrjssrjbkjpftg +cyxowxpbdndrjssrjgfkeemk +cyxowxpbdndrjssrjlakydfo +cyxowxpbdndrjssrjuvmcaww +cyxowxpbdndrjssrkxrqrxft +cyxowxpbdndrjssrlhcsptqa +cyxowxpbdndrjssrlqxtyrci +cyxowxpbdndrjssrmaivwnmu +cyxowxpbdndrjssrmfdwlmfy +cyxowxpbdndrjssrmoyxujxb +cyxowxpbdndrjssrmttyjiqf +cyxowxpbdndrjssrpssfqqjt +cyxowxpbdndrjssrpxngfpcx +cyxowxpbdndrjssrqcdhomua +cyxowxpbdndrjssrqlyixkgi +cyxowxpbdndrjssrqvokbhxq +cyxowxpbdndrjssrraelkfjy +cyxowxpbdndrjssrrounibuf +cyxowxpbdwyssqezaoffckzd +cyxowxpbdwyssqezatafwjsh +cyxowxpbdwyssqezbhlijevx +cyxowxpbdwyssqezbrbjscia +cyxowxpbdwyssqezcyxowxpb +cyxowxpbdwyssqezddnqavbj +cyxowxpbdwyssqezdiiqutzn +cyxowxpbdwyssqezdndrjssr +cyxowxpbdwyssqezdwyssqez +cyxowxpbdwyssqezegjuqmpg +cyxowxpbdwyssqezelevflik +cyxowxpbdwyssqezeuzwoizs +cyxowxpbdwyssqezezuxdhsw +cyxowxpbdwyssqezfoazvcwh +cyxowxpbdwyssqezhanbdvpq +cyxowxpbdwyssqezhfibxuiu +cyxowxpbdwyssqezhkdcmtby +cyxowxpbdwyssqezhtydvqtb +cyxowxpbdwyssqezhytekpmf +cyxowxpbdwyssqeziiegilwr +cyxowxpbdwyssqezirzhrjiz +cyxowxpbdwyssqezjbkjpftg +cyxowxpbdwyssqezjgfkeemk +cyxowxpbdwyssqezjlakydfo +cyxowxpbdwyssqezjuvmcaww +cyxowxpbdwyssqezkxrqrxft +cyxowxpbdwyssqezlhcsptqa +cyxowxpbdwyssqezlqxtyrci +cyxowxpbdwyssqezmaivwnmu +cyxowxpbdwyssqezmfdwlmfy +cyxowxpbdwyssqezmoyxujxb +cyxowxpbdwyssqezmttyjiqf +cyxowxpbdwyssqezpssfqqjt +cyxowxpbdwyssqezpxngfpcx +cyxowxpbdwyssqezqcdhomua +cyxowxpbdwyssqezqlyixkgi +cyxowxpbdwyssqezqvokbhxq +cyxowxpbdwyssqezraelkfjy +cyxowxpbdwyssqezrounibuf +cyxowxpbegjuqmpgaoffckzd +cyxowxpbegjuqmpgatafwjsh +cyxowxpbegjuqmpgbhlijevx +cyxowxpbegjuqmpgbrbjscia +cyxowxpbegjuqmpgcyxowxpb +cyxowxpbegjuqmpgddnqavbj +cyxowxpbegjuqmpgdiiqutzn +cyxowxpbegjuqmpgdndrjssr +cyxowxpbegjuqmpgdwyssqez +cyxowxpbegjuqmpgegjuqmpg +cyxowxpbegjuqmpgelevflik +cyxowxpbegjuqmpgeuzwoizs +cyxowxpbegjuqmpgezuxdhsw +cyxowxpbegjuqmpgfoazvcwh +cyxowxpbegjuqmpghanbdvpq +cyxowxpbegjuqmpghfibxuiu +cyxowxpbegjuqmpghkdcmtby +cyxowxpbegjuqmpghtydvqtb +cyxowxpbegjuqmpghytekpmf +cyxowxpbegjuqmpgiiegilwr +cyxowxpbegjuqmpgirzhrjiz +cyxowxpbegjuqmpgjbkjpftg +cyxowxpbegjuqmpgjgfkeemk +cyxowxpbegjuqmpgjlakydfo +cyxowxpbegjuqmpgjuvmcaww +cyxowxpbegjuqmpgkxrqrxft +cyxowxpbegjuqmpglhcsptqa +cyxowxpbegjuqmpglqxtyrci +cyxowxpbegjuqmpgmaivwnmu +cyxowxpbegjuqmpgmfdwlmfy +cyxowxpbegjuqmpgmoyxujxb +cyxowxpbegjuqmpgmttyjiqf +cyxowxpbegjuqmpgpssfqqjt +cyxowxpbegjuqmpgpxngfpcx +cyxowxpbegjuqmpgqcdhomua +cyxowxpbegjuqmpgqlyixkgi +cyxowxpbegjuqmpgqvokbhxq +cyxowxpbegjuqmpgraelkfjy +cyxowxpbegjuqmpgrounibuf +cyxowxpbelevflikaoffckzd +cyxowxpbelevflikatafwjsh +cyxowxpbelevflikbhlijevx +cyxowxpbelevflikbrbjscia +cyxowxpbelevflikcyxowxpb +cyxowxpbelevflikddnqavbj +cyxowxpbelevflikdiiqutzn +cyxowxpbelevflikdndrjssr +cyxowxpbelevflikdwyssqez +cyxowxpbelevflikegjuqmpg +cyxowxpbelevflikelevflik +cyxowxpbelevflikeuzwoizs +cyxowxpbelevflikezuxdhsw +cyxowxpbelevflikfoazvcwh +cyxowxpbelevflikhanbdvpq +cyxowxpbelevflikhfibxuiu +cyxowxpbelevflikhkdcmtby +cyxowxpbelevflikhtydvqtb +cyxowxpbelevflikhytekpmf +cyxowxpbelevflikiiegilwr +cyxowxpbelevflikirzhrjiz +cyxowxpbelevflikjbkjpftg +cyxowxpbelevflikjgfkeemk +cyxowxpbelevflikjlakydfo +cyxowxpbelevflikjuvmcaww +cyxowxpbelevflikkxrqrxft +cyxowxpbelevfliklhcsptqa +cyxowxpbelevfliklqxtyrci +cyxowxpbelevflikmaivwnmu +cyxowxpbelevflikmfdwlmfy +cyxowxpbelevflikmoyxujxb +cyxowxpbelevflikmttyjiqf +cyxowxpbelevflikpssfqqjt +cyxowxpbelevflikpxngfpcx +cyxowxpbelevflikqcdhomua +cyxowxpbelevflikqlyixkgi +cyxowxpbelevflikqvokbhxq +cyxowxpbelevflikraelkfjy +cyxowxpbelevflikrounibuf +cyxowxpbeuzwoizsaoffckzd +cyxowxpbeuzwoizsatafwjsh +cyxowxpbeuzwoizsbhlijevx +cyxowxpbeuzwoizsbrbjscia +cyxowxpbeuzwoizscyxowxpb +cyxowxpbeuzwoizsddnqavbj +cyxowxpbeuzwoizsdiiqutzn +cyxowxpbeuzwoizsdndrjssr +cyxowxpbeuzwoizsdwyssqez +cyxowxpbeuzwoizsegjuqmpg +cyxowxpbeuzwoizselevflik +cyxowxpbeuzwoizseuzwoizs +cyxowxpbeuzwoizsezuxdhsw +cyxowxpbeuzwoizsfoazvcwh +cyxowxpbeuzwoizshanbdvpq +cyxowxpbeuzwoizshfibxuiu +cyxowxpbeuzwoizshkdcmtby +cyxowxpbeuzwoizshtydvqtb +cyxowxpbeuzwoizshytekpmf +cyxowxpbeuzwoizsiiegilwr +cyxowxpbeuzwoizsirzhrjiz +cyxowxpbeuzwoizsjbkjpftg +cyxowxpbeuzwoizsjgfkeemk +cyxowxpbeuzwoizsjlakydfo +cyxowxpbeuzwoizsjuvmcaww +cyxowxpbeuzwoizskxrqrxft +cyxowxpbeuzwoizslhcsptqa +cyxowxpbeuzwoizslqxtyrci +cyxowxpbeuzwoizsmaivwnmu +cyxowxpbeuzwoizsmfdwlmfy +cyxowxpbeuzwoizsmoyxujxb +cyxowxpbeuzwoizsmttyjiqf +cyxowxpbeuzwoizspssfqqjt +cyxowxpbeuzwoizspxngfpcx +cyxowxpbeuzwoizsqcdhomua +cyxowxpbeuzwoizsqlyixkgi +cyxowxpbeuzwoizsqvokbhxq +cyxowxpbeuzwoizsraelkfjy +cyxowxpbeuzwoizsrounibuf +cyxowxpbezuxdhswaoffckzd +cyxowxpbezuxdhswatafwjsh +cyxowxpbezuxdhswbhlijevx +cyxowxpbezuxdhswbrbjscia +cyxowxpbezuxdhswcyxowxpb +cyxowxpbezuxdhswddnqavbj +cyxowxpbezuxdhswdiiqutzn +cyxowxpbezuxdhswdndrjssr +cyxowxpbezuxdhswdwyssqez +cyxowxpbezuxdhswegjuqmpg +cyxowxpbezuxdhswelevflik +cyxowxpbezuxdhsweuzwoizs +cyxowxpbezuxdhswezuxdhsw +cyxowxpbezuxdhswfoazvcwh +cyxowxpbezuxdhswhanbdvpq +cyxowxpbezuxdhswhfibxuiu +cyxowxpbezuxdhswhkdcmtby +cyxowxpbezuxdhswhtydvqtb +cyxowxpbezuxdhswhytekpmf +cyxowxpbezuxdhswiiegilwr +cyxowxpbezuxdhswirzhrjiz +cyxowxpbezuxdhswjbkjpftg +cyxowxpbezuxdhswjgfkeemk +cyxowxpbezuxdhswjlakydfo +cyxowxpbezuxdhswjuvmcaww +cyxowxpbezuxdhswkxrqrxft +cyxowxpbezuxdhswlhcsptqa +cyxowxpbezuxdhswlqxtyrci +cyxowxpbezuxdhswmaivwnmu +cyxowxpbezuxdhswmfdwlmfy +cyxowxpbezuxdhswmoyxujxb +cyxowxpbezuxdhswmttyjiqf +cyxowxpbezuxdhswpssfqqjt +cyxowxpbezuxdhswpxngfpcx +cyxowxpbezuxdhswqcdhomua +cyxowxpbezuxdhswqlyixkgi +cyxowxpbezuxdhswqvokbhxq +cyxowxpbezuxdhswraelkfjy +cyxowxpbezuxdhswrounibuf +cyxowxpbfoazvcwhaoffckzd +cyxowxpbfoazvcwhatafwjsh +cyxowxpbfoazvcwhbhlijevx +cyxowxpbfoazvcwhbrbjscia +cyxowxpbfoazvcwhcyxowxpb +cyxowxpbfoazvcwhddnqavbj +cyxowxpbfoazvcwhdiiqutzn +cyxowxpbfoazvcwhdndrjssr +cyxowxpbfoazvcwhdwyssqez +cyxowxpbfoazvcwhegjuqmpg +cyxowxpbfoazvcwhelevflik +cyxowxpbfoazvcwheuzwoizs +cyxowxpbfoazvcwhezuxdhsw +cyxowxpbfoazvcwhfoazvcwh +cyxowxpbfoazvcwhhanbdvpq +cyxowxpbfoazvcwhhfibxuiu +cyxowxpbfoazvcwhhkdcmtby +cyxowxpbfoazvcwhhtydvqtb +cyxowxpbfoazvcwhhytekpmf +cyxowxpbfoazvcwhiiegilwr +cyxowxpbfoazvcwhirzhrjiz +cyxowxpbfoazvcwhjbkjpftg +cyxowxpbfoazvcwhjgfkeemk +cyxowxpbfoazvcwhjlakydfo +cyxowxpbfoazvcwhjuvmcaww +cyxowxpbfoazvcwhkxrqrxft +cyxowxpbfoazvcwhlhcsptqa +cyxowxpbfoazvcwhlqxtyrci +cyxowxpbfoazvcwhmaivwnmu +cyxowxpbfoazvcwhmfdwlmfy +cyxowxpbfoazvcwhmoyxujxb +cyxowxpbfoazvcwhmttyjiqf +cyxowxpbfoazvcwhpssfqqjt +cyxowxpbfoazvcwhpxngfpcx +cyxowxpbfoazvcwhqcdhomua +cyxowxpbfoazvcwhqlyixkgi +cyxowxpbfoazvcwhqvokbhxq +cyxowxpbfoazvcwhraelkfjy +cyxowxpbfoazvcwhrounibuf +cyxowxpbhanbdvpqaoffckzd +cyxowxpbhanbdvpqatafwjsh +cyxowxpbhanbdvpqbhlijevx +cyxowxpbhanbdvpqbrbjscia +cyxowxpbhanbdvpqcyxowxpb +cyxowxpbhanbdvpqddnqavbj +cyxowxpbhanbdvpqdiiqutzn +cyxowxpbhanbdvpqdndrjssr +cyxowxpbhanbdvpqdwyssqez +cyxowxpbhanbdvpqegjuqmpg +cyxowxpbhanbdvpqelevflik +cyxowxpbhanbdvpqeuzwoizs +cyxowxpbhanbdvpqezuxdhsw +cyxowxpbhanbdvpqfoazvcwh +cyxowxpbhanbdvpqhanbdvpq +cyxowxpbhanbdvpqhfibxuiu +cyxowxpbhanbdvpqhkdcmtby +cyxowxpbhanbdvpqhtydvqtb +cyxowxpbhanbdvpqhytekpmf +cyxowxpbhanbdvpqiiegilwr +cyxowxpbhanbdvpqirzhrjiz +cyxowxpbhanbdvpqjbkjpftg +cyxowxpbhanbdvpqjgfkeemk +cyxowxpbhanbdvpqjlakydfo +cyxowxpbhanbdvpqjuvmcaww +cyxowxpbhanbdvpqkxrqrxft +cyxowxpbhanbdvpqlhcsptqa +cyxowxpbhanbdvpqlqxtyrci +cyxowxpbhanbdvpqmaivwnmu +cyxowxpbhanbdvpqmfdwlmfy +cyxowxpbhanbdvpqmoyxujxb +cyxowxpbhanbdvpqmttyjiqf +cyxowxpbhanbdvpqpssfqqjt +cyxowxpbhanbdvpqpxngfpcx +cyxowxpbhanbdvpqqcdhomua +cyxowxpbhanbdvpqqlyixkgi +cyxowxpbhanbdvpqqvokbhxq +cyxowxpbhanbdvpqraelkfjy +cyxowxpbhanbdvpqrounibuf +cyxowxpbhfibxuiuaoffckzd +cyxowxpbhfibxuiuatafwjsh +cyxowxpbhfibxuiubhlijevx +cyxowxpbhfibxuiubrbjscia +cyxowxpbhfibxuiucyxowxpb +cyxowxpbhfibxuiuddnqavbj +cyxowxpbhfibxuiudiiqutzn +cyxowxpbhfibxuiudndrjssr +cyxowxpbhfibxuiudwyssqez +cyxowxpbhfibxuiuegjuqmpg +cyxowxpbhfibxuiuelevflik +cyxowxpbhfibxuiueuzwoizs +cyxowxpbhfibxuiuezuxdhsw +cyxowxpbhfibxuiufoazvcwh +cyxowxpbhfibxuiuhanbdvpq +cyxowxpbhfibxuiuhfibxuiu +cyxowxpbhfibxuiuhkdcmtby +cyxowxpbhfibxuiuhtydvqtb +cyxowxpbhfibxuiuhytekpmf +cyxowxpbhfibxuiuiiegilwr +cyxowxpbhfibxuiuirzhrjiz +cyxowxpbhfibxuiujbkjpftg +cyxowxpbhfibxuiujgfkeemk +cyxowxpbhfibxuiujlakydfo +cyxowxpbhfibxuiujuvmcaww +cyxowxpbhfibxuiukxrqrxft +cyxowxpbhfibxuiulhcsptqa +cyxowxpbhfibxuiulqxtyrci +cyxowxpbhfibxuiumaivwnmu +cyxowxpbhfibxuiumfdwlmfy +cyxowxpbhfibxuiumoyxujxb +cyxowxpbhfibxuiumttyjiqf +cyxowxpbhfibxuiupssfqqjt +cyxowxpbhfibxuiupxngfpcx +cyxowxpbhfibxuiuqcdhomua +cyxowxpbhfibxuiuqlyixkgi +cyxowxpbhfibxuiuqvokbhxq +cyxowxpbhfibxuiuraelkfjy +cyxowxpbhfibxuiurounibuf +cyxowxpbhkdcmtbyaoffckzd +cyxowxpbhkdcmtbyatafwjsh +cyxowxpbhkdcmtbybhlijevx +cyxowxpbhkdcmtbybrbjscia +cyxowxpbhkdcmtbycyxowxpb +cyxowxpbhkdcmtbyddnqavbj +cyxowxpbhkdcmtbydiiqutzn +cyxowxpbhkdcmtbydndrjssr +cyxowxpbhkdcmtbydwyssqez +cyxowxpbhkdcmtbyegjuqmpg +cyxowxpbhkdcmtbyelevflik +cyxowxpbhkdcmtbyeuzwoizs +cyxowxpbhkdcmtbyezuxdhsw +cyxowxpbhkdcmtbyfoazvcwh +cyxowxpbhkdcmtbyhanbdvpq +cyxowxpbhkdcmtbyhfibxuiu +cyxowxpbhkdcmtbyhkdcmtby +cyxowxpbhkdcmtbyhtydvqtb +cyxowxpbhkdcmtbyhytekpmf +cyxowxpbhkdcmtbyiiegilwr +cyxowxpbhkdcmtbyirzhrjiz +cyxowxpbhkdcmtbyjbkjpftg +cyxowxpbhkdcmtbyjgfkeemk +cyxowxpbhkdcmtbyjlakydfo +cyxowxpbhkdcmtbyjuvmcaww +cyxowxpbhkdcmtbykxrqrxft +cyxowxpbhkdcmtbylhcsptqa +cyxowxpbhkdcmtbylqxtyrci +cyxowxpbhkdcmtbymaivwnmu +cyxowxpbhkdcmtbymfdwlmfy +cyxowxpbhkdcmtbymoyxujxb +cyxowxpbhkdcmtbymttyjiqf +cyxowxpbhkdcmtbypssfqqjt +cyxowxpbhkdcmtbypxngfpcx +cyxowxpbhkdcmtbyqcdhomua +cyxowxpbhkdcmtbyqlyixkgi +cyxowxpbhkdcmtbyqvokbhxq +cyxowxpbhkdcmtbyraelkfjy +cyxowxpbhkdcmtbyrounibuf +cyxowxpbhtydvqtbaoffckzd +cyxowxpbhtydvqtbatafwjsh +cyxowxpbhtydvqtbbhlijevx +cyxowxpbhtydvqtbbrbjscia +cyxowxpbhtydvqtbcyxowxpb +cyxowxpbhtydvqtbddnqavbj +cyxowxpbhtydvqtbdiiqutzn +cyxowxpbhtydvqtbdndrjssr +cyxowxpbhtydvqtbdwyssqez +cyxowxpbhtydvqtbegjuqmpg +cyxowxpbhtydvqtbelevflik +cyxowxpbhtydvqtbeuzwoizs +cyxowxpbhtydvqtbezuxdhsw +cyxowxpbhtydvqtbfoazvcwh +cyxowxpbhtydvqtbhanbdvpq +cyxowxpbhtydvqtbhfibxuiu +cyxowxpbhtydvqtbhkdcmtby +cyxowxpbhtydvqtbhtydvqtb +cyxowxpbhtydvqtbhytekpmf +cyxowxpbhtydvqtbiiegilwr +cyxowxpbhtydvqtbirzhrjiz +cyxowxpbhtydvqtbjbkjpftg +cyxowxpbhtydvqtbjgfkeemk +cyxowxpbhtydvqtbjlakydfo +cyxowxpbhtydvqtbjuvmcaww +cyxowxpbhtydvqtbkxrqrxft +cyxowxpbhtydvqtblhcsptqa +cyxowxpbhtydvqtblqxtyrci +cyxowxpbhtydvqtbmaivwnmu +cyxowxpbhtydvqtbmfdwlmfy +cyxowxpbhtydvqtbmoyxujxb +cyxowxpbhtydvqtbmttyjiqf +cyxowxpbhtydvqtbpssfqqjt +cyxowxpbhtydvqtbpxngfpcx +cyxowxpbhtydvqtbqcdhomua +cyxowxpbhtydvqtbqlyixkgi +cyxowxpbhtydvqtbqvokbhxq +cyxowxpbhtydvqtbraelkfjy +cyxowxpbhtydvqtbrounibuf +cyxowxpbhytekpmfaoffckzd +cyxowxpbhytekpmfatafwjsh +cyxowxpbhytekpmfbhlijevx +cyxowxpbhytekpmfbrbjscia +cyxowxpbhytekpmfcyxowxpb +cyxowxpbhytekpmfddnqavbj +cyxowxpbhytekpmfdiiqutzn +cyxowxpbhytekpmfdndrjssr +cyxowxpbhytekpmfdwyssqez +cyxowxpbhytekpmfegjuqmpg +cyxowxpbhytekpmfelevflik +cyxowxpbhytekpmfeuzwoizs +cyxowxpbhytekpmfezuxdhsw +cyxowxpbhytekpmffoazvcwh +cyxowxpbhytekpmfhanbdvpq +cyxowxpbhytekpmfhfibxuiu +cyxowxpbhytekpmfhkdcmtby +cyxowxpbhytekpmfhtydvqtb +cyxowxpbhytekpmfhytekpmf +cyxowxpbhytekpmfiiegilwr +cyxowxpbhytekpmfirzhrjiz +cyxowxpbhytekpmfjbkjpftg +cyxowxpbhytekpmfjgfkeemk +cyxowxpbhytekpmfjlakydfo +cyxowxpbhytekpmfjuvmcaww +cyxowxpbhytekpmfkxrqrxft +cyxowxpbhytekpmflhcsptqa +cyxowxpbhytekpmflqxtyrci +cyxowxpbhytekpmfmaivwnmu +cyxowxpbhytekpmfmfdwlmfy +cyxowxpbhytekpmfmoyxujxb +cyxowxpbhytekpmfmttyjiqf +cyxowxpbhytekpmfpssfqqjt +cyxowxpbhytekpmfpxngfpcx +cyxowxpbhytekpmfqcdhomua +cyxowxpbhytekpmfqlyixkgi +cyxowxpbhytekpmfqvokbhxq +cyxowxpbhytekpmfraelkfjy +cyxowxpbhytekpmfrounibuf +cyxowxpbiiegilwraoffckzd +cyxowxpbiiegilwratafwjsh +cyxowxpbiiegilwrbhlijevx +cyxowxpbiiegilwrbrbjscia +cyxowxpbiiegilwrcyxowxpb +cyxowxpbiiegilwrddnqavbj +cyxowxpbiiegilwrdiiqutzn +cyxowxpbiiegilwrdndrjssr +cyxowxpbiiegilwrdwyssqez +cyxowxpbiiegilwregjuqmpg +cyxowxpbiiegilwrelevflik +cyxowxpbiiegilwreuzwoizs +cyxowxpbiiegilwrezuxdhsw +cyxowxpbiiegilwrfoazvcwh +cyxowxpbiiegilwrhanbdvpq +cyxowxpbiiegilwrhfibxuiu +cyxowxpbiiegilwrhkdcmtby +cyxowxpbiiegilwrhtydvqtb +cyxowxpbiiegilwrhytekpmf +cyxowxpbiiegilwriiegilwr +cyxowxpbiiegilwrirzhrjiz +cyxowxpbiiegilwrjbkjpftg +cyxowxpbiiegilwrjgfkeemk +cyxowxpbiiegilwrjlakydfo +cyxowxpbiiegilwrjuvmcaww +cyxowxpbiiegilwrkxrqrxft +cyxowxpbiiegilwrlhcsptqa +cyxowxpbiiegilwrlqxtyrci +cyxowxpbiiegilwrmaivwnmu +cyxowxpbiiegilwrmfdwlmfy +cyxowxpbiiegilwrmoyxujxb +cyxowxpbiiegilwrmttyjiqf +cyxowxpbiiegilwrpssfqqjt +cyxowxpbiiegilwrpxngfpcx +cyxowxpbiiegilwrqcdhomua +cyxowxpbiiegilwrqlyixkgi +cyxowxpbiiegilwrqvokbhxq +cyxowxpbiiegilwrraelkfjy +cyxowxpbiiegilwrrounibuf +cyxowxpbirzhrjizaoffckzd +cyxowxpbirzhrjizatafwjsh +cyxowxpbirzhrjizbhlijevx +cyxowxpbirzhrjizbrbjscia +cyxowxpbirzhrjizcyxowxpb +cyxowxpbirzhrjizddnqavbj +cyxowxpbirzhrjizdiiqutzn +cyxowxpbirzhrjizdndrjssr +cyxowxpbirzhrjizdwyssqez +cyxowxpbirzhrjizegjuqmpg +cyxowxpbirzhrjizelevflik +cyxowxpbirzhrjizeuzwoizs +cyxowxpbirzhrjizezuxdhsw +cyxowxpbirzhrjizfoazvcwh +cyxowxpbirzhrjizhanbdvpq +cyxowxpbirzhrjizhfibxuiu +cyxowxpbirzhrjizhkdcmtby +cyxowxpbirzhrjizhtydvqtb +cyxowxpbirzhrjizhytekpmf +cyxowxpbirzhrjiziiegilwr +cyxowxpbirzhrjizirzhrjiz +cyxowxpbirzhrjizjbkjpftg +cyxowxpbirzhrjizjgfkeemk +cyxowxpbirzhrjizjlakydfo +cyxowxpbirzhrjizjuvmcaww +cyxowxpbirzhrjizkxrqrxft +cyxowxpbirzhrjizlhcsptqa +cyxowxpbirzhrjizlqxtyrci +cyxowxpbirzhrjizmaivwnmu +cyxowxpbirzhrjizmfdwlmfy +cyxowxpbirzhrjizmoyxujxb +cyxowxpbirzhrjizmttyjiqf +cyxowxpbirzhrjizpssfqqjt +cyxowxpbirzhrjizpxngfpcx +cyxowxpbirzhrjizqcdhomua +cyxowxpbirzhrjizqlyixkgi +cyxowxpbirzhrjizqvokbhxq +cyxowxpbirzhrjizraelkfjy +cyxowxpbirzhrjizrounibuf +cyxowxpbjbkjpftgaoffckzd +cyxowxpbjbkjpftgatafwjsh +cyxowxpbjbkjpftgbhlijevx +cyxowxpbjbkjpftgbrbjscia +cyxowxpbjbkjpftgcyxowxpb +cyxowxpbjbkjpftgddnqavbj +cyxowxpbjbkjpftgdiiqutzn +cyxowxpbjbkjpftgdndrjssr +cyxowxpbjbkjpftgdwyssqez +cyxowxpbjbkjpftgegjuqmpg +cyxowxpbjbkjpftgelevflik +cyxowxpbjbkjpftgeuzwoizs +cyxowxpbjbkjpftgezuxdhsw +cyxowxpbjbkjpftgfoazvcwh +cyxowxpbjbkjpftghanbdvpq +cyxowxpbjbkjpftghfibxuiu +cyxowxpbjbkjpftghkdcmtby +cyxowxpbjbkjpftghtydvqtb +cyxowxpbjbkjpftghytekpmf +cyxowxpbjbkjpftgiiegilwr +cyxowxpbjbkjpftgirzhrjiz +cyxowxpbjbkjpftgjbkjpftg +cyxowxpbjbkjpftgjgfkeemk +cyxowxpbjbkjpftgjlakydfo +cyxowxpbjbkjpftgjuvmcaww +cyxowxpbjbkjpftgkxrqrxft +cyxowxpbjbkjpftglhcsptqa +cyxowxpbjbkjpftglqxtyrci +cyxowxpbjbkjpftgmaivwnmu +cyxowxpbjbkjpftgmfdwlmfy +cyxowxpbjbkjpftgmoyxujxb +cyxowxpbjbkjpftgmttyjiqf +cyxowxpbjbkjpftgpssfqqjt +cyxowxpbjbkjpftgpxngfpcx +cyxowxpbjbkjpftgqcdhomua +cyxowxpbjbkjpftgqlyixkgi +cyxowxpbjbkjpftgqvokbhxq +cyxowxpbjbkjpftgraelkfjy +cyxowxpbjbkjpftgrounibuf +cyxowxpbjgfkeemkaoffckzd +cyxowxpbjgfkeemkatafwjsh +cyxowxpbjgfkeemkbhlijevx +cyxowxpbjgfkeemkbrbjscia +cyxowxpbjgfkeemkcyxowxpb +cyxowxpbjgfkeemkddnqavbj +cyxowxpbjgfkeemkdiiqutzn +cyxowxpbjgfkeemkdndrjssr +cyxowxpbjgfkeemkdwyssqez +cyxowxpbjgfkeemkegjuqmpg +cyxowxpbjgfkeemkelevflik +cyxowxpbjgfkeemkeuzwoizs +cyxowxpbjgfkeemkezuxdhsw +cyxowxpbjgfkeemkfoazvcwh +cyxowxpbjgfkeemkhanbdvpq +cyxowxpbjgfkeemkhfibxuiu +cyxowxpbjgfkeemkhkdcmtby +cyxowxpbjgfkeemkhtydvqtb +cyxowxpbjgfkeemkhytekpmf +cyxowxpbjgfkeemkiiegilwr +cyxowxpbjgfkeemkirzhrjiz +cyxowxpbjgfkeemkjbkjpftg +cyxowxpbjgfkeemkjgfkeemk +cyxowxpbjgfkeemkjlakydfo +cyxowxpbjgfkeemkjuvmcaww +cyxowxpbjgfkeemkkxrqrxft +cyxowxpbjgfkeemklhcsptqa +cyxowxpbjgfkeemklqxtyrci +cyxowxpbjgfkeemkmaivwnmu +cyxowxpbjgfkeemkmfdwlmfy +cyxowxpbjgfkeemkmoyxujxb +cyxowxpbjgfkeemkmttyjiqf +cyxowxpbjgfkeemkpssfqqjt +cyxowxpbjgfkeemkpxngfpcx +cyxowxpbjgfkeemkqcdhomua +cyxowxpbjgfkeemkqlyixkgi +cyxowxpbjgfkeemkqvokbhxq +cyxowxpbjgfkeemkraelkfjy +cyxowxpbjgfkeemkrounibuf +cyxowxpbjlakydfoaoffckzd +cyxowxpbjlakydfoatafwjsh +cyxowxpbjlakydfobhlijevx +cyxowxpbjlakydfobrbjscia +cyxowxpbjlakydfocyxowxpb +cyxowxpbjlakydfoddnqavbj +cyxowxpbjlakydfodiiqutzn +cyxowxpbjlakydfodndrjssr +cyxowxpbjlakydfodwyssqez +cyxowxpbjlakydfoegjuqmpg +cyxowxpbjlakydfoelevflik +cyxowxpbjlakydfoeuzwoizs +cyxowxpbjlakydfoezuxdhsw +cyxowxpbjlakydfofoazvcwh +cyxowxpbjlakydfohanbdvpq +cyxowxpbjlakydfohfibxuiu +cyxowxpbjlakydfohkdcmtby +cyxowxpbjlakydfohtydvqtb +cyxowxpbjlakydfohytekpmf +cyxowxpbjlakydfoiiegilwr +cyxowxpbjlakydfoirzhrjiz +cyxowxpbjlakydfojbkjpftg +cyxowxpbjlakydfojgfkeemk +cyxowxpbjlakydfojlakydfo +cyxowxpbjlakydfojuvmcaww +cyxowxpbjlakydfokxrqrxft +cyxowxpbjlakydfolhcsptqa +cyxowxpbjlakydfolqxtyrci +cyxowxpbjlakydfomaivwnmu +cyxowxpbjlakydfomfdwlmfy +cyxowxpbjlakydfomoyxujxb +cyxowxpbjlakydfomttyjiqf +cyxowxpbjlakydfopssfqqjt +cyxowxpbjlakydfopxngfpcx +cyxowxpbjlakydfoqcdhomua +cyxowxpbjlakydfoqlyixkgi +cyxowxpbjlakydfoqvokbhxq +cyxowxpbjlakydforaelkfjy +cyxowxpbjlakydforounibuf +cyxowxpbjuvmcawwaoffckzd +cyxowxpbjuvmcawwatafwjsh +cyxowxpbjuvmcawwbhlijevx +cyxowxpbjuvmcawwbrbjscia +cyxowxpbjuvmcawwcyxowxpb +cyxowxpbjuvmcawwddnqavbj +cyxowxpbjuvmcawwdiiqutzn +cyxowxpbjuvmcawwdndrjssr +cyxowxpbjuvmcawwdwyssqez +cyxowxpbjuvmcawwegjuqmpg +cyxowxpbjuvmcawwelevflik +cyxowxpbjuvmcawweuzwoizs +cyxowxpbjuvmcawwezuxdhsw +cyxowxpbjuvmcawwfoazvcwh +cyxowxpbjuvmcawwhanbdvpq +cyxowxpbjuvmcawwhfibxuiu +cyxowxpbjuvmcawwhkdcmtby +cyxowxpbjuvmcawwhtydvqtb +cyxowxpbjuvmcawwhytekpmf +cyxowxpbjuvmcawwiiegilwr +cyxowxpbjuvmcawwirzhrjiz +cyxowxpbjuvmcawwjbkjpftg +cyxowxpbjuvmcawwjgfkeemk +cyxowxpbjuvmcawwjlakydfo +cyxowxpbjuvmcawwjuvmcaww +cyxowxpbjuvmcawwkxrqrxft +cyxowxpbjuvmcawwlhcsptqa +cyxowxpbjuvmcawwlqxtyrci +cyxowxpbjuvmcawwmaivwnmu +cyxowxpbjuvmcawwmfdwlmfy +cyxowxpbjuvmcawwmoyxujxb +cyxowxpbjuvmcawwmttyjiqf +cyxowxpbjuvmcawwpssfqqjt +cyxowxpbjuvmcawwpxngfpcx +cyxowxpbjuvmcawwqcdhomua +cyxowxpbjuvmcawwqlyixkgi +cyxowxpbjuvmcawwqvokbhxq +cyxowxpbjuvmcawwraelkfjy +cyxowxpbjuvmcawwrounibuf +cyxowxpbkxrqrxftaoffckzd +cyxowxpbkxrqrxftatafwjsh +cyxowxpbkxrqrxftbhlijevx +cyxowxpbkxrqrxftbrbjscia +cyxowxpbkxrqrxftcyxowxpb +cyxowxpbkxrqrxftddnqavbj +cyxowxpbkxrqrxftdiiqutzn +cyxowxpbkxrqrxftdndrjssr +cyxowxpbkxrqrxftdwyssqez +cyxowxpbkxrqrxftegjuqmpg +cyxowxpbkxrqrxftelevflik +cyxowxpbkxrqrxfteuzwoizs +cyxowxpbkxrqrxftezuxdhsw +cyxowxpbkxrqrxftfoazvcwh +cyxowxpbkxrqrxfthanbdvpq +cyxowxpbkxrqrxfthfibxuiu +cyxowxpbkxrqrxfthkdcmtby +cyxowxpbkxrqrxfthtydvqtb +cyxowxpbkxrqrxfthytekpmf +cyxowxpbkxrqrxftiiegilwr +cyxowxpbkxrqrxftirzhrjiz +cyxowxpbkxrqrxftjbkjpftg +cyxowxpbkxrqrxftjgfkeemk +cyxowxpbkxrqrxftjlakydfo +cyxowxpbkxrqrxftjuvmcaww +cyxowxpbkxrqrxftkxrqrxft +cyxowxpbkxrqrxftlhcsptqa +cyxowxpbkxrqrxftlqxtyrci +cyxowxpbkxrqrxftmaivwnmu +cyxowxpbkxrqrxftmfdwlmfy +cyxowxpbkxrqrxftmoyxujxb +cyxowxpbkxrqrxftmttyjiqf +cyxowxpbkxrqrxftpssfqqjt +cyxowxpbkxrqrxftpxngfpcx +cyxowxpbkxrqrxftqcdhomua +cyxowxpbkxrqrxftqlyixkgi +cyxowxpbkxrqrxftqvokbhxq +cyxowxpbkxrqrxftraelkfjy +cyxowxpbkxrqrxftrounibuf +cyxowxpblhcsptqaaoffckzd +cyxowxpblhcsptqaatafwjsh +cyxowxpblhcsptqabhlijevx +cyxowxpblhcsptqabrbjscia +cyxowxpblhcsptqacyxowxpb +cyxowxpblhcsptqaddnqavbj +cyxowxpblhcsptqadiiqutzn +cyxowxpblhcsptqadndrjssr +cyxowxpblhcsptqadwyssqez +cyxowxpblhcsptqaegjuqmpg +cyxowxpblhcsptqaelevflik +cyxowxpblhcsptqaeuzwoizs +cyxowxpblhcsptqaezuxdhsw +cyxowxpblhcsptqafoazvcwh +cyxowxpblhcsptqahanbdvpq +cyxowxpblhcsptqahfibxuiu +cyxowxpblhcsptqahkdcmtby +cyxowxpblhcsptqahtydvqtb +cyxowxpblhcsptqahytekpmf +cyxowxpblhcsptqaiiegilwr +cyxowxpblhcsptqairzhrjiz +cyxowxpblhcsptqajbkjpftg +cyxowxpblhcsptqajgfkeemk +cyxowxpblhcsptqajlakydfo +cyxowxpblhcsptqajuvmcaww +cyxowxpblhcsptqakxrqrxft +cyxowxpblhcsptqalhcsptqa +cyxowxpblhcsptqalqxtyrci +cyxowxpblhcsptqamaivwnmu +cyxowxpblhcsptqamfdwlmfy +cyxowxpblhcsptqamoyxujxb +cyxowxpblhcsptqamttyjiqf +cyxowxpblhcsptqapssfqqjt +cyxowxpblhcsptqapxngfpcx +cyxowxpblhcsptqaqcdhomua +cyxowxpblhcsptqaqlyixkgi +cyxowxpblhcsptqaqvokbhxq +cyxowxpblhcsptqaraelkfjy +cyxowxpblhcsptqarounibuf +cyxowxpblqxtyrciaoffckzd +cyxowxpblqxtyrciatafwjsh +cyxowxpblqxtyrcibhlijevx +cyxowxpblqxtyrcibrbjscia +cyxowxpblqxtyrcicyxowxpb +cyxowxpblqxtyrciddnqavbj +cyxowxpblqxtyrcidiiqutzn +cyxowxpblqxtyrcidndrjssr +cyxowxpblqxtyrcidwyssqez +cyxowxpblqxtyrciegjuqmpg +cyxowxpblqxtyrcielevflik +cyxowxpblqxtyrcieuzwoizs +cyxowxpblqxtyrciezuxdhsw +cyxowxpblqxtyrcifoazvcwh +cyxowxpblqxtyrcihanbdvpq +cyxowxpblqxtyrcihfibxuiu +cyxowxpblqxtyrcihkdcmtby +cyxowxpblqxtyrcihtydvqtb +cyxowxpblqxtyrcihytekpmf +cyxowxpblqxtyrciiiegilwr +cyxowxpblqxtyrciirzhrjiz +cyxowxpblqxtyrcijbkjpftg +cyxowxpblqxtyrcijgfkeemk +cyxowxpblqxtyrcijlakydfo +cyxowxpblqxtyrcijuvmcaww +cyxowxpblqxtyrcikxrqrxft +cyxowxpblqxtyrcilhcsptqa +cyxowxpblqxtyrcilqxtyrci +cyxowxpblqxtyrcimaivwnmu +cyxowxpblqxtyrcimfdwlmfy +cyxowxpblqxtyrcimoyxujxb +cyxowxpblqxtyrcimttyjiqf +cyxowxpblqxtyrcipssfqqjt +cyxowxpblqxtyrcipxngfpcx +cyxowxpblqxtyrciqcdhomua +cyxowxpblqxtyrciqlyixkgi +cyxowxpblqxtyrciqvokbhxq +cyxowxpblqxtyrciraelkfjy +cyxowxpblqxtyrcirounibuf +cyxowxpbmaivwnmuaoffckzd +cyxowxpbmaivwnmuatafwjsh +cyxowxpbmaivwnmubhlijevx +cyxowxpbmaivwnmubrbjscia +cyxowxpbmaivwnmucyxowxpb +cyxowxpbmaivwnmuddnqavbj +cyxowxpbmaivwnmudiiqutzn +cyxowxpbmaivwnmudndrjssr +cyxowxpbmaivwnmudwyssqez +cyxowxpbmaivwnmuegjuqmpg +cyxowxpbmaivwnmuelevflik +cyxowxpbmaivwnmueuzwoizs +cyxowxpbmaivwnmuezuxdhsw +cyxowxpbmaivwnmufoazvcwh +cyxowxpbmaivwnmuhanbdvpq +cyxowxpbmaivwnmuhfibxuiu +cyxowxpbmaivwnmuhkdcmtby +cyxowxpbmaivwnmuhtydvqtb +cyxowxpbmaivwnmuhytekpmf +cyxowxpbmaivwnmuiiegilwr +cyxowxpbmaivwnmuirzhrjiz +cyxowxpbmaivwnmujbkjpftg +cyxowxpbmaivwnmujgfkeemk +cyxowxpbmaivwnmujlakydfo +cyxowxpbmaivwnmujuvmcaww +cyxowxpbmaivwnmukxrqrxft +cyxowxpbmaivwnmulhcsptqa +cyxowxpbmaivwnmulqxtyrci +cyxowxpbmaivwnmumaivwnmu +cyxowxpbmaivwnmumfdwlmfy +cyxowxpbmaivwnmumoyxujxb +cyxowxpbmaivwnmumttyjiqf +cyxowxpbmaivwnmupssfqqjt +cyxowxpbmaivwnmupxngfpcx +cyxowxpbmaivwnmuqcdhomua +cyxowxpbmaivwnmuqlyixkgi +cyxowxpbmaivwnmuqvokbhxq +cyxowxpbmaivwnmuraelkfjy +cyxowxpbmaivwnmurounibuf +cyxowxpbmfdwlmfyaoffckzd +cyxowxpbmfdwlmfyatafwjsh +cyxowxpbmfdwlmfybhlijevx +cyxowxpbmfdwlmfybrbjscia +cyxowxpbmfdwlmfycyxowxpb +cyxowxpbmfdwlmfyddnqavbj +cyxowxpbmfdwlmfydiiqutzn +cyxowxpbmfdwlmfydndrjssr +cyxowxpbmfdwlmfydwyssqez +cyxowxpbmfdwlmfyegjuqmpg +cyxowxpbmfdwlmfyelevflik +cyxowxpbmfdwlmfyeuzwoizs +cyxowxpbmfdwlmfyezuxdhsw +cyxowxpbmfdwlmfyfoazvcwh +cyxowxpbmfdwlmfyhanbdvpq +cyxowxpbmfdwlmfyhfibxuiu +cyxowxpbmfdwlmfyhkdcmtby +cyxowxpbmfdwlmfyhtydvqtb +cyxowxpbmfdwlmfyhytekpmf +cyxowxpbmfdwlmfyiiegilwr +cyxowxpbmfdwlmfyirzhrjiz +cyxowxpbmfdwlmfyjbkjpftg +cyxowxpbmfdwlmfyjgfkeemk +cyxowxpbmfdwlmfyjlakydfo +cyxowxpbmfdwlmfyjuvmcaww +cyxowxpbmfdwlmfykxrqrxft +cyxowxpbmfdwlmfylhcsptqa +cyxowxpbmfdwlmfylqxtyrci +cyxowxpbmfdwlmfymaivwnmu +cyxowxpbmfdwlmfymfdwlmfy +cyxowxpbmfdwlmfymoyxujxb +cyxowxpbmfdwlmfymttyjiqf +cyxowxpbmfdwlmfypssfqqjt +cyxowxpbmfdwlmfypxngfpcx +cyxowxpbmfdwlmfyqcdhomua +cyxowxpbmfdwlmfyqlyixkgi +cyxowxpbmfdwlmfyqvokbhxq +cyxowxpbmfdwlmfyraelkfjy +cyxowxpbmfdwlmfyrounibuf +cyxowxpbmoyxujxbaoffckzd +cyxowxpbmoyxujxbatafwjsh +cyxowxpbmoyxujxbbhlijevx +cyxowxpbmoyxujxbbrbjscia +cyxowxpbmoyxujxbcyxowxpb +cyxowxpbmoyxujxbddnqavbj +cyxowxpbmoyxujxbdiiqutzn +cyxowxpbmoyxujxbdndrjssr +cyxowxpbmoyxujxbdwyssqez +cyxowxpbmoyxujxbegjuqmpg +cyxowxpbmoyxujxbelevflik +cyxowxpbmoyxujxbeuzwoizs +cyxowxpbmoyxujxbezuxdhsw +cyxowxpbmoyxujxbfoazvcwh +cyxowxpbmoyxujxbhanbdvpq +cyxowxpbmoyxujxbhfibxuiu +cyxowxpbmoyxujxbhkdcmtby +cyxowxpbmoyxujxbhtydvqtb +cyxowxpbmoyxujxbhytekpmf +cyxowxpbmoyxujxbiiegilwr +cyxowxpbmoyxujxbirzhrjiz +cyxowxpbmoyxujxbjbkjpftg +cyxowxpbmoyxujxbjgfkeemk +cyxowxpbmoyxujxbjlakydfo +cyxowxpbmoyxujxbjuvmcaww +cyxowxpbmoyxujxbkxrqrxft +cyxowxpbmoyxujxblhcsptqa +cyxowxpbmoyxujxblqxtyrci +cyxowxpbmoyxujxbmaivwnmu +cyxowxpbmoyxujxbmfdwlmfy +cyxowxpbmoyxujxbmoyxujxb +cyxowxpbmoyxujxbmttyjiqf +cyxowxpbmoyxujxbpssfqqjt +cyxowxpbmoyxujxbpxngfpcx +cyxowxpbmoyxujxbqcdhomua +cyxowxpbmoyxujxbqlyixkgi +cyxowxpbmoyxujxbqvokbhxq +cyxowxpbmoyxujxbraelkfjy +cyxowxpbmoyxujxbrounibuf +cyxowxpbmttyjiqfaoffckzd +cyxowxpbmttyjiqfatafwjsh +cyxowxpbmttyjiqfbhlijevx +cyxowxpbmttyjiqfbrbjscia +cyxowxpbmttyjiqfcyxowxpb +cyxowxpbmttyjiqfddnqavbj +cyxowxpbmttyjiqfdiiqutzn +cyxowxpbmttyjiqfdndrjssr +cyxowxpbmttyjiqfdwyssqez +cyxowxpbmttyjiqfegjuqmpg +cyxowxpbmttyjiqfelevflik +cyxowxpbmttyjiqfeuzwoizs +cyxowxpbmttyjiqfezuxdhsw +cyxowxpbmttyjiqffoazvcwh +cyxowxpbmttyjiqfhanbdvpq +cyxowxpbmttyjiqfhfibxuiu +cyxowxpbmttyjiqfhkdcmtby +cyxowxpbmttyjiqfhtydvqtb +cyxowxpbmttyjiqfhytekpmf +cyxowxpbmttyjiqfiiegilwr +cyxowxpbmttyjiqfirzhrjiz +cyxowxpbmttyjiqfjbkjpftg +cyxowxpbmttyjiqfjgfkeemk +cyxowxpbmttyjiqfjlakydfo +cyxowxpbmttyjiqfjuvmcaww +cyxowxpbmttyjiqfkxrqrxft +cyxowxpbmttyjiqflhcsptqa +cyxowxpbmttyjiqflqxtyrci +cyxowxpbmttyjiqfmaivwnmu +cyxowxpbmttyjiqfmfdwlmfy +cyxowxpbmttyjiqfmoyxujxb +cyxowxpbmttyjiqfmttyjiqf +cyxowxpbmttyjiqfpssfqqjt +cyxowxpbmttyjiqfpxngfpcx +cyxowxpbmttyjiqfqcdhomua +cyxowxpbmttyjiqfqlyixkgi +cyxowxpbmttyjiqfqvokbhxq +cyxowxpbmttyjiqfraelkfjy +cyxowxpbmttyjiqfrounibuf +cyxowxpbpssfqqjtaoffckzd +cyxowxpbpssfqqjtatafwjsh +cyxowxpbpssfqqjtbhlijevx +cyxowxpbpssfqqjtbrbjscia +cyxowxpbpssfqqjtcyxowxpb +cyxowxpbpssfqqjtddnqavbj +cyxowxpbpssfqqjtdiiqutzn +cyxowxpbpssfqqjtdndrjssr +cyxowxpbpssfqqjtdwyssqez +cyxowxpbpssfqqjtegjuqmpg +cyxowxpbpssfqqjtelevflik +cyxowxpbpssfqqjteuzwoizs +cyxowxpbpssfqqjtezuxdhsw +cyxowxpbpssfqqjtfoazvcwh +cyxowxpbpssfqqjthanbdvpq +cyxowxpbpssfqqjthfibxuiu +cyxowxpbpssfqqjthkdcmtby +cyxowxpbpssfqqjthtydvqtb +cyxowxpbpssfqqjthytekpmf +cyxowxpbpssfqqjtiiegilwr +cyxowxpbpssfqqjtirzhrjiz +cyxowxpbpssfqqjtjbkjpftg +cyxowxpbpssfqqjtjgfkeemk +cyxowxpbpssfqqjtjlakydfo +cyxowxpbpssfqqjtjuvmcaww +cyxowxpbpssfqqjtkxrqrxft +cyxowxpbpssfqqjtlhcsptqa +cyxowxpbpssfqqjtlqxtyrci +cyxowxpbpssfqqjtmaivwnmu +cyxowxpbpssfqqjtmfdwlmfy +cyxowxpbpssfqqjtmoyxujxb +cyxowxpbpssfqqjtmttyjiqf +cyxowxpbpssfqqjtpssfqqjt +cyxowxpbpssfqqjtpxngfpcx +cyxowxpbpssfqqjtqcdhomua +cyxowxpbpssfqqjtqlyixkgi +cyxowxpbpssfqqjtqvokbhxq +cyxowxpbpssfqqjtraelkfjy +cyxowxpbpssfqqjtrounibuf +cyxowxpbpxngfpcxaoffckzd +cyxowxpbpxngfpcxatafwjsh +cyxowxpbpxngfpcxbhlijevx +cyxowxpbpxngfpcxbrbjscia +cyxowxpbpxngfpcxcyxowxpb +cyxowxpbpxngfpcxddnqavbj +cyxowxpbpxngfpcxdiiqutzn +cyxowxpbpxngfpcxdndrjssr +cyxowxpbpxngfpcxdwyssqez +cyxowxpbpxngfpcxegjuqmpg +cyxowxpbpxngfpcxelevflik +cyxowxpbpxngfpcxeuzwoizs +cyxowxpbpxngfpcxezuxdhsw +cyxowxpbpxngfpcxfoazvcwh +cyxowxpbpxngfpcxhanbdvpq +cyxowxpbpxngfpcxhfibxuiu +cyxowxpbpxngfpcxhkdcmtby +cyxowxpbpxngfpcxhtydvqtb +cyxowxpbpxngfpcxhytekpmf +cyxowxpbpxngfpcxiiegilwr +cyxowxpbpxngfpcxirzhrjiz +cyxowxpbpxngfpcxjbkjpftg +cyxowxpbpxngfpcxjgfkeemk +cyxowxpbpxngfpcxjlakydfo +cyxowxpbpxngfpcxjuvmcaww +cyxowxpbpxngfpcxkxrqrxft +cyxowxpbpxngfpcxlhcsptqa +cyxowxpbpxngfpcxlqxtyrci +cyxowxpbpxngfpcxmaivwnmu +cyxowxpbpxngfpcxmfdwlmfy +cyxowxpbpxngfpcxmoyxujxb +cyxowxpbpxngfpcxmttyjiqf +cyxowxpbpxngfpcxpssfqqjt +cyxowxpbpxngfpcxpxngfpcx +cyxowxpbpxngfpcxqcdhomua +cyxowxpbpxngfpcxqlyixkgi +cyxowxpbpxngfpcxqvokbhxq +cyxowxpbpxngfpcxraelkfjy +cyxowxpbpxngfpcxrounibuf +cyxowxpbqcdhomuaaoffckzd +cyxowxpbqcdhomuaatafwjsh +cyxowxpbqcdhomuabhlijevx +cyxowxpbqcdhomuabrbjscia +cyxowxpbqcdhomuacyxowxpb +cyxowxpbqcdhomuaddnqavbj +cyxowxpbqcdhomuadiiqutzn +cyxowxpbqcdhomuadndrjssr +cyxowxpbqcdhomuadwyssqez +cyxowxpbqcdhomuaegjuqmpg +cyxowxpbqcdhomuaelevflik +cyxowxpbqcdhomuaeuzwoizs +cyxowxpbqcdhomuaezuxdhsw +cyxowxpbqcdhomuafoazvcwh +cyxowxpbqcdhomuahanbdvpq +cyxowxpbqcdhomuahfibxuiu +cyxowxpbqcdhomuahkdcmtby +cyxowxpbqcdhomuahtydvqtb +cyxowxpbqcdhomuahytekpmf +cyxowxpbqcdhomuaiiegilwr +cyxowxpbqcdhomuairzhrjiz +cyxowxpbqcdhomuajbkjpftg +cyxowxpbqcdhomuajgfkeemk +cyxowxpbqcdhomuajlakydfo +cyxowxpbqcdhomuajuvmcaww +cyxowxpbqcdhomuakxrqrxft +cyxowxpbqcdhomualhcsptqa +cyxowxpbqcdhomualqxtyrci +cyxowxpbqcdhomuamaivwnmu +cyxowxpbqcdhomuamfdwlmfy +cyxowxpbqcdhomuamoyxujxb +cyxowxpbqcdhomuamttyjiqf +cyxowxpbqcdhomuapssfqqjt +cyxowxpbqcdhomuapxngfpcx +cyxowxpbqcdhomuaqcdhomua +cyxowxpbqcdhomuaqlyixkgi +cyxowxpbqcdhomuaqvokbhxq +cyxowxpbqcdhomuaraelkfjy +cyxowxpbqcdhomuarounibuf +cyxowxpbqlyixkgiaoffckzd +cyxowxpbqlyixkgiatafwjsh +cyxowxpbqlyixkgibhlijevx +cyxowxpbqlyixkgibrbjscia +cyxowxpbqlyixkgicyxowxpb +cyxowxpbqlyixkgiddnqavbj +cyxowxpbqlyixkgidiiqutzn +cyxowxpbqlyixkgidndrjssr +cyxowxpbqlyixkgidwyssqez +cyxowxpbqlyixkgiegjuqmpg +cyxowxpbqlyixkgielevflik +cyxowxpbqlyixkgieuzwoizs +cyxowxpbqlyixkgiezuxdhsw +cyxowxpbqlyixkgifoazvcwh +cyxowxpbqlyixkgihanbdvpq +cyxowxpbqlyixkgihfibxuiu +cyxowxpbqlyixkgihkdcmtby +cyxowxpbqlyixkgihtydvqtb +cyxowxpbqlyixkgihytekpmf +cyxowxpbqlyixkgiiiegilwr +cyxowxpbqlyixkgiirzhrjiz +cyxowxpbqlyixkgijbkjpftg +cyxowxpbqlyixkgijgfkeemk +cyxowxpbqlyixkgijlakydfo +cyxowxpbqlyixkgijuvmcaww +cyxowxpbqlyixkgikxrqrxft +cyxowxpbqlyixkgilhcsptqa +cyxowxpbqlyixkgilqxtyrci +cyxowxpbqlyixkgimaivwnmu +cyxowxpbqlyixkgimfdwlmfy +cyxowxpbqlyixkgimoyxujxb +cyxowxpbqlyixkgimttyjiqf +cyxowxpbqlyixkgipssfqqjt +cyxowxpbqlyixkgipxngfpcx +cyxowxpbqlyixkgiqcdhomua +cyxowxpbqlyixkgiqlyixkgi +cyxowxpbqlyixkgiqvokbhxq +cyxowxpbqlyixkgiraelkfjy +cyxowxpbqlyixkgirounibuf +cyxowxpbqvokbhxqaoffckzd +cyxowxpbqvokbhxqatafwjsh +cyxowxpbqvokbhxqbhlijevx +cyxowxpbqvokbhxqbrbjscia +cyxowxpbqvokbhxqcyxowxpb +cyxowxpbqvokbhxqddnqavbj +cyxowxpbqvokbhxqdiiqutzn +cyxowxpbqvokbhxqdndrjssr +cyxowxpbqvokbhxqdwyssqez +cyxowxpbqvokbhxqegjuqmpg +cyxowxpbqvokbhxqelevflik +cyxowxpbqvokbhxqeuzwoizs +cyxowxpbqvokbhxqezuxdhsw +cyxowxpbqvokbhxqfoazvcwh +cyxowxpbqvokbhxqhanbdvpq +cyxowxpbqvokbhxqhfibxuiu +cyxowxpbqvokbhxqhkdcmtby +cyxowxpbqvokbhxqhtydvqtb +cyxowxpbqvokbhxqhytekpmf +cyxowxpbqvokbhxqiiegilwr +cyxowxpbqvokbhxqirzhrjiz +cyxowxpbqvokbhxqjbkjpftg +cyxowxpbqvokbhxqjgfkeemk +cyxowxpbqvokbhxqjlakydfo +cyxowxpbqvokbhxqjuvmcaww +cyxowxpbqvokbhxqkxrqrxft +cyxowxpbqvokbhxqlhcsptqa +cyxowxpbqvokbhxqlqxtyrci +cyxowxpbqvokbhxqmaivwnmu +cyxowxpbqvokbhxqmfdwlmfy +cyxowxpbqvokbhxqmoyxujxb +cyxowxpbqvokbhxqmttyjiqf +cyxowxpbqvokbhxqpssfqqjt +cyxowxpbqvokbhxqpxngfpcx +cyxowxpbqvokbhxqqcdhomua +cyxowxpbqvokbhxqqlyixkgi +cyxowxpbqvokbhxqqvokbhxq +cyxowxpbqvokbhxqraelkfjy +cyxowxpbqvokbhxqrounibuf +cyxowxpbraelkfjyaoffckzd +cyxowxpbraelkfjyatafwjsh +cyxowxpbraelkfjybhlijevx +cyxowxpbraelkfjybrbjscia +cyxowxpbraelkfjycyxowxpb +cyxowxpbraelkfjyddnqavbj +cyxowxpbraelkfjydiiqutzn +cyxowxpbraelkfjydndrjssr +cyxowxpbraelkfjydwyssqez +cyxowxpbraelkfjyegjuqmpg +cyxowxpbraelkfjyelevflik +cyxowxpbraelkfjyeuzwoizs +cyxowxpbraelkfjyezuxdhsw +cyxowxpbraelkfjyfoazvcwh +cyxowxpbraelkfjyhanbdvpq +cyxowxpbraelkfjyhfibxuiu +cyxowxpbraelkfjyhkdcmtby +cyxowxpbraelkfjyhtydvqtb +cyxowxpbraelkfjyhytekpmf +cyxowxpbraelkfjyiiegilwr +cyxowxpbraelkfjyirzhrjiz +cyxowxpbraelkfjyjbkjpftg +cyxowxpbraelkfjyjgfkeemk +cyxowxpbraelkfjyjlakydfo +cyxowxpbraelkfjyjuvmcaww +cyxowxpbraelkfjykxrqrxft +cyxowxpbraelkfjylhcsptqa +cyxowxpbraelkfjylqxtyrci +cyxowxpbraelkfjymaivwnmu +cyxowxpbraelkfjymfdwlmfy +cyxowxpbraelkfjymoyxujxb +cyxowxpbraelkfjymttyjiqf +cyxowxpbraelkfjypssfqqjt +cyxowxpbraelkfjypxngfpcx +cyxowxpbraelkfjyqcdhomua +cyxowxpbraelkfjyqlyixkgi +cyxowxpbraelkfjyqvokbhxq +cyxowxpbraelkfjyraelkfjy +cyxowxpbraelkfjyrounibuf +cyxowxpbrounibufaoffckzd +cyxowxpbrounibufatafwjsh +cyxowxpbrounibufbhlijevx +cyxowxpbrounibufbrbjscia +cyxowxpbrounibufcyxowxpb +cyxowxpbrounibufddnqavbj +cyxowxpbrounibufdiiqutzn +cyxowxpbrounibufdndrjssr +cyxowxpbrounibufdwyssqez +cyxowxpbrounibufegjuqmpg +cyxowxpbrounibufelevflik +cyxowxpbrounibufeuzwoizs +cyxowxpbrounibufezuxdhsw +cyxowxpbrounibuffoazvcwh +cyxowxpbrounibufhanbdvpq +cyxowxpbrounibufhfibxuiu +cyxowxpbrounibufhkdcmtby +cyxowxpbrounibufhtydvqtb +cyxowxpbrounibufhytekpmf +cyxowxpbrounibufiiegilwr +cyxowxpbrounibufirzhrjiz +cyxowxpbrounibufjbkjpftg +cyxowxpbrounibufjgfkeemk +cyxowxpbrounibufjlakydfo +cyxowxpbrounibufjuvmcaww +cyxowxpbrounibufkxrqrxft +cyxowxpbrounibuflhcsptqa +cyxowxpbrounibuflqxtyrci +cyxowxpbrounibufmaivwnmu +cyxowxpbrounibufmfdwlmfy +cyxowxpbrounibufmoyxujxb +cyxowxpbrounibufmttyjiqf +cyxowxpbrounibufpssfqqjt +cyxowxpbrounibufpxngfpcx +cyxowxpbrounibufqcdhomua +cyxowxpbrounibufqlyixkgi +cyxowxpbrounibufqvokbhxq +cyxowxpbrounibufraelkfjy +cyxowxpbrounibufrounibuf +ddnqavbjaoffckzdaoffckzd +ddnqavbjaoffckzdatafwjsh +ddnqavbjaoffckzdbhlijevx +ddnqavbjaoffckzdbrbjscia +ddnqavbjaoffckzdcyxowxpb +ddnqavbjaoffckzdddnqavbj +ddnqavbjaoffckzddiiqutzn +ddnqavbjaoffckzddndrjssr +ddnqavbjaoffckzddwyssqez +ddnqavbjaoffckzdegjuqmpg +ddnqavbjaoffckzdelevflik +ddnqavbjaoffckzdeuzwoizs +ddnqavbjaoffckzdezuxdhsw +ddnqavbjaoffckzdfoazvcwh +ddnqavbjaoffckzdhanbdvpq +ddnqavbjaoffckzdhfibxuiu +ddnqavbjaoffckzdhkdcmtby +ddnqavbjaoffckzdhtydvqtb +ddnqavbjaoffckzdhytekpmf +ddnqavbjaoffckzdiiegilwr +ddnqavbjaoffckzdirzhrjiz +ddnqavbjaoffckzdjbkjpftg +ddnqavbjaoffckzdjgfkeemk +ddnqavbjaoffckzdjlakydfo +ddnqavbjaoffckzdjuvmcaww +ddnqavbjaoffckzdkxrqrxft +ddnqavbjaoffckzdlhcsptqa +ddnqavbjaoffckzdlqxtyrci +ddnqavbjaoffckzdmaivwnmu +ddnqavbjaoffckzdmfdwlmfy +ddnqavbjaoffckzdmoyxujxb +ddnqavbjaoffckzdmttyjiqf +ddnqavbjaoffckzdpssfqqjt +ddnqavbjaoffckzdpxngfpcx +ddnqavbjaoffckzdqcdhomua +ddnqavbjaoffckzdqlyixkgi +ddnqavbjaoffckzdqvokbhxq +ddnqavbjaoffckzdraelkfjy +ddnqavbjaoffckzdrounibuf +ddnqavbjatafwjshaoffckzd +ddnqavbjatafwjshatafwjsh +ddnqavbjatafwjshbhlijevx +ddnqavbjatafwjshbrbjscia +ddnqavbjatafwjshcyxowxpb +ddnqavbjatafwjshddnqavbj +ddnqavbjatafwjshdiiqutzn +ddnqavbjatafwjshdndrjssr +ddnqavbjatafwjshdwyssqez +ddnqavbjatafwjshegjuqmpg +ddnqavbjatafwjshelevflik +ddnqavbjatafwjsheuzwoizs +ddnqavbjatafwjshezuxdhsw +ddnqavbjatafwjshfoazvcwh +ddnqavbjatafwjshhanbdvpq +ddnqavbjatafwjshhfibxuiu +ddnqavbjatafwjshhkdcmtby +ddnqavbjatafwjshhtydvqtb +ddnqavbjatafwjshhytekpmf +ddnqavbjatafwjshiiegilwr +ddnqavbjatafwjshirzhrjiz +ddnqavbjatafwjshjbkjpftg +ddnqavbjatafwjshjgfkeemk +ddnqavbjatafwjshjlakydfo +ddnqavbjatafwjshjuvmcaww +ddnqavbjatafwjshkxrqrxft +ddnqavbjatafwjshlhcsptqa +ddnqavbjatafwjshlqxtyrci +ddnqavbjatafwjshmaivwnmu +ddnqavbjatafwjshmfdwlmfy +ddnqavbjatafwjshmoyxujxb +ddnqavbjatafwjshmttyjiqf +ddnqavbjatafwjshpssfqqjt +ddnqavbjatafwjshpxngfpcx +ddnqavbjatafwjshqcdhomua +ddnqavbjatafwjshqlyixkgi +ddnqavbjatafwjshqvokbhxq +ddnqavbjatafwjshraelkfjy +ddnqavbjatafwjshrounibuf +ddnqavbjbhlijevxaoffckzd +ddnqavbjbhlijevxatafwjsh +ddnqavbjbhlijevxbhlijevx +ddnqavbjbhlijevxbrbjscia +ddnqavbjbhlijevxcyxowxpb +ddnqavbjbhlijevxddnqavbj +ddnqavbjbhlijevxdiiqutzn +ddnqavbjbhlijevxdndrjssr +ddnqavbjbhlijevxdwyssqez +ddnqavbjbhlijevxegjuqmpg +ddnqavbjbhlijevxelevflik +ddnqavbjbhlijevxeuzwoizs +ddnqavbjbhlijevxezuxdhsw +ddnqavbjbhlijevxfoazvcwh +ddnqavbjbhlijevxhanbdvpq +ddnqavbjbhlijevxhfibxuiu +ddnqavbjbhlijevxhkdcmtby +ddnqavbjbhlijevxhtydvqtb +ddnqavbjbhlijevxhytekpmf +ddnqavbjbhlijevxiiegilwr +ddnqavbjbhlijevxirzhrjiz +ddnqavbjbhlijevxjbkjpftg +ddnqavbjbhlijevxjgfkeemk +ddnqavbjbhlijevxjlakydfo +ddnqavbjbhlijevxjuvmcaww +ddnqavbjbhlijevxkxrqrxft +ddnqavbjbhlijevxlhcsptqa +ddnqavbjbhlijevxlqxtyrci +ddnqavbjbhlijevxmaivwnmu +ddnqavbjbhlijevxmfdwlmfy +ddnqavbjbhlijevxmoyxujxb +ddnqavbjbhlijevxmttyjiqf +ddnqavbjbhlijevxpssfqqjt +ddnqavbjbhlijevxpxngfpcx +ddnqavbjbhlijevxqcdhomua +ddnqavbjbhlijevxqlyixkgi +ddnqavbjbhlijevxqvokbhxq +ddnqavbjbhlijevxraelkfjy +ddnqavbjbhlijevxrounibuf +ddnqavbjbrbjsciaaoffckzd +ddnqavbjbrbjsciaatafwjsh +ddnqavbjbrbjsciabhlijevx +ddnqavbjbrbjsciabrbjscia +ddnqavbjbrbjsciacyxowxpb +ddnqavbjbrbjsciaddnqavbj +ddnqavbjbrbjsciadiiqutzn +ddnqavbjbrbjsciadndrjssr +ddnqavbjbrbjsciadwyssqez +ddnqavbjbrbjsciaegjuqmpg +ddnqavbjbrbjsciaelevflik +ddnqavbjbrbjsciaeuzwoizs +ddnqavbjbrbjsciaezuxdhsw +ddnqavbjbrbjsciafoazvcwh +ddnqavbjbrbjsciahanbdvpq +ddnqavbjbrbjsciahfibxuiu +ddnqavbjbrbjsciahkdcmtby +ddnqavbjbrbjsciahtydvqtb +ddnqavbjbrbjsciahytekpmf +ddnqavbjbrbjsciaiiegilwr +ddnqavbjbrbjsciairzhrjiz +ddnqavbjbrbjsciajbkjpftg +ddnqavbjbrbjsciajgfkeemk +ddnqavbjbrbjsciajlakydfo +ddnqavbjbrbjsciajuvmcaww +ddnqavbjbrbjsciakxrqrxft +ddnqavbjbrbjscialhcsptqa +ddnqavbjbrbjscialqxtyrci +ddnqavbjbrbjsciamaivwnmu +ddnqavbjbrbjsciamfdwlmfy +ddnqavbjbrbjsciamoyxujxb +ddnqavbjbrbjsciamttyjiqf +ddnqavbjbrbjsciapssfqqjt +ddnqavbjbrbjsciapxngfpcx +ddnqavbjbrbjsciaqcdhomua +ddnqavbjbrbjsciaqlyixkgi +ddnqavbjbrbjsciaqvokbhxq +ddnqavbjbrbjsciaraelkfjy +ddnqavbjbrbjsciarounibuf +ddnqavbjcyxowxpbaoffckzd +ddnqavbjcyxowxpbatafwjsh +ddnqavbjcyxowxpbbhlijevx +ddnqavbjcyxowxpbbrbjscia +ddnqavbjcyxowxpbcyxowxpb +ddnqavbjcyxowxpbddnqavbj +ddnqavbjcyxowxpbdiiqutzn +ddnqavbjcyxowxpbdndrjssr +ddnqavbjcyxowxpbdwyssqez +ddnqavbjcyxowxpbegjuqmpg +ddnqavbjcyxowxpbelevflik +ddnqavbjcyxowxpbeuzwoizs +ddnqavbjcyxowxpbezuxdhsw +ddnqavbjcyxowxpbfoazvcwh +ddnqavbjcyxowxpbhanbdvpq +ddnqavbjcyxowxpbhfibxuiu +ddnqavbjcyxowxpbhkdcmtby +ddnqavbjcyxowxpbhtydvqtb +ddnqavbjcyxowxpbhytekpmf +ddnqavbjcyxowxpbiiegilwr +ddnqavbjcyxowxpbirzhrjiz +ddnqavbjcyxowxpbjbkjpftg +ddnqavbjcyxowxpbjgfkeemk +ddnqavbjcyxowxpbjlakydfo +ddnqavbjcyxowxpbjuvmcaww +ddnqavbjcyxowxpbkxrqrxft +ddnqavbjcyxowxpblhcsptqa +ddnqavbjcyxowxpblqxtyrci +ddnqavbjcyxowxpbmaivwnmu +ddnqavbjcyxowxpbmfdwlmfy +ddnqavbjcyxowxpbmoyxujxb +ddnqavbjcyxowxpbmttyjiqf +ddnqavbjcyxowxpbpssfqqjt +ddnqavbjcyxowxpbpxngfpcx +ddnqavbjcyxowxpbqcdhomua +ddnqavbjcyxowxpbqlyixkgi +ddnqavbjcyxowxpbqvokbhxq +ddnqavbjcyxowxpbraelkfjy +ddnqavbjcyxowxpbrounibuf +ddnqavbjddnqavbjaoffckzd +ddnqavbjddnqavbjatafwjsh +ddnqavbjddnqavbjbhlijevx +ddnqavbjddnqavbjbrbjscia +ddnqavbjddnqavbjcyxowxpb +ddnqavbjddnqavbjddnqavbj +ddnqavbjddnqavbjdiiqutzn +ddnqavbjddnqavbjdndrjssr +ddnqavbjddnqavbjdwyssqez +ddnqavbjddnqavbjegjuqmpg +ddnqavbjddnqavbjelevflik +ddnqavbjddnqavbjeuzwoizs +ddnqavbjddnqavbjezuxdhsw +ddnqavbjddnqavbjfoazvcwh +ddnqavbjddnqavbjhanbdvpq +ddnqavbjddnqavbjhfibxuiu +ddnqavbjddnqavbjhkdcmtby +ddnqavbjddnqavbjhtydvqtb +ddnqavbjddnqavbjhytekpmf +ddnqavbjddnqavbjiiegilwr +ddnqavbjddnqavbjirzhrjiz +ddnqavbjddnqavbjjbkjpftg +ddnqavbjddnqavbjjgfkeemk +ddnqavbjddnqavbjjlakydfo +ddnqavbjddnqavbjjuvmcaww +ddnqavbjddnqavbjkxrqrxft +ddnqavbjddnqavbjlhcsptqa +ddnqavbjddnqavbjlqxtyrci +ddnqavbjddnqavbjmaivwnmu +ddnqavbjddnqavbjmfdwlmfy +ddnqavbjddnqavbjmoyxujxb +ddnqavbjddnqavbjmttyjiqf +ddnqavbjddnqavbjpssfqqjt +ddnqavbjddnqavbjpxngfpcx +ddnqavbjddnqavbjqcdhomua +ddnqavbjddnqavbjqlyixkgi +ddnqavbjddnqavbjqvokbhxq +ddnqavbjddnqavbjraelkfjy +ddnqavbjddnqavbjrounibuf +ddnqavbjdiiqutznaoffckzd +ddnqavbjdiiqutznatafwjsh +ddnqavbjdiiqutznbhlijevx +ddnqavbjdiiqutznbrbjscia +ddnqavbjdiiqutzncyxowxpb +ddnqavbjdiiqutznddnqavbj +ddnqavbjdiiqutzndiiqutzn +ddnqavbjdiiqutzndndrjssr +ddnqavbjdiiqutzndwyssqez +ddnqavbjdiiqutznegjuqmpg +ddnqavbjdiiqutznelevflik +ddnqavbjdiiqutzneuzwoizs +ddnqavbjdiiqutznezuxdhsw +ddnqavbjdiiqutznfoazvcwh +ddnqavbjdiiqutznhanbdvpq +ddnqavbjdiiqutznhfibxuiu +ddnqavbjdiiqutznhkdcmtby +ddnqavbjdiiqutznhtydvqtb +ddnqavbjdiiqutznhytekpmf +ddnqavbjdiiqutzniiegilwr +ddnqavbjdiiqutznirzhrjiz +ddnqavbjdiiqutznjbkjpftg +ddnqavbjdiiqutznjgfkeemk +ddnqavbjdiiqutznjlakydfo +ddnqavbjdiiqutznjuvmcaww +ddnqavbjdiiqutznkxrqrxft +ddnqavbjdiiqutznlhcsptqa +ddnqavbjdiiqutznlqxtyrci +ddnqavbjdiiqutznmaivwnmu +ddnqavbjdiiqutznmfdwlmfy +ddnqavbjdiiqutznmoyxujxb +ddnqavbjdiiqutznmttyjiqf +ddnqavbjdiiqutznpssfqqjt +ddnqavbjdiiqutznpxngfpcx +ddnqavbjdiiqutznqcdhomua +ddnqavbjdiiqutznqlyixkgi +ddnqavbjdiiqutznqvokbhxq +ddnqavbjdiiqutznraelkfjy +ddnqavbjdiiqutznrounibuf +ddnqavbjdndrjssraoffckzd +ddnqavbjdndrjssratafwjsh +ddnqavbjdndrjssrbhlijevx +ddnqavbjdndrjssrbrbjscia +ddnqavbjdndrjssrcyxowxpb +ddnqavbjdndrjssrddnqavbj +ddnqavbjdndrjssrdiiqutzn +ddnqavbjdndrjssrdndrjssr +ddnqavbjdndrjssrdwyssqez +ddnqavbjdndrjssregjuqmpg +ddnqavbjdndrjssrelevflik +ddnqavbjdndrjssreuzwoizs +ddnqavbjdndrjssrezuxdhsw +ddnqavbjdndrjssrfoazvcwh +ddnqavbjdndrjssrhanbdvpq +ddnqavbjdndrjssrhfibxuiu +ddnqavbjdndrjssrhkdcmtby +ddnqavbjdndrjssrhtydvqtb +ddnqavbjdndrjssrhytekpmf +ddnqavbjdndrjssriiegilwr +ddnqavbjdndrjssrirzhrjiz +ddnqavbjdndrjssrjbkjpftg +ddnqavbjdndrjssrjgfkeemk +ddnqavbjdndrjssrjlakydfo +ddnqavbjdndrjssrjuvmcaww +ddnqavbjdndrjssrkxrqrxft +ddnqavbjdndrjssrlhcsptqa +ddnqavbjdndrjssrlqxtyrci +ddnqavbjdndrjssrmaivwnmu +ddnqavbjdndrjssrmfdwlmfy +ddnqavbjdndrjssrmoyxujxb +ddnqavbjdndrjssrmttyjiqf +ddnqavbjdndrjssrpssfqqjt +ddnqavbjdndrjssrpxngfpcx +ddnqavbjdndrjssrqcdhomua +ddnqavbjdndrjssrqlyixkgi +ddnqavbjdndrjssrqvokbhxq +ddnqavbjdndrjssrraelkfjy +ddnqavbjdndrjssrrounibuf +ddnqavbjdwyssqezaoffckzd +ddnqavbjdwyssqezatafwjsh +ddnqavbjdwyssqezbhlijevx +ddnqavbjdwyssqezbrbjscia +ddnqavbjdwyssqezcyxowxpb +ddnqavbjdwyssqezddnqavbj +ddnqavbjdwyssqezdiiqutzn +ddnqavbjdwyssqezdndrjssr +ddnqavbjdwyssqezdwyssqez +ddnqavbjdwyssqezegjuqmpg +ddnqavbjdwyssqezelevflik +ddnqavbjdwyssqezeuzwoizs +ddnqavbjdwyssqezezuxdhsw +ddnqavbjdwyssqezfoazvcwh +ddnqavbjdwyssqezhanbdvpq +ddnqavbjdwyssqezhfibxuiu +ddnqavbjdwyssqezhkdcmtby +ddnqavbjdwyssqezhtydvqtb +ddnqavbjdwyssqezhytekpmf +ddnqavbjdwyssqeziiegilwr +ddnqavbjdwyssqezirzhrjiz +ddnqavbjdwyssqezjbkjpftg +ddnqavbjdwyssqezjgfkeemk +ddnqavbjdwyssqezjlakydfo +ddnqavbjdwyssqezjuvmcaww +ddnqavbjdwyssqezkxrqrxft +ddnqavbjdwyssqezlhcsptqa +ddnqavbjdwyssqezlqxtyrci +ddnqavbjdwyssqezmaivwnmu +ddnqavbjdwyssqezmfdwlmfy +ddnqavbjdwyssqezmoyxujxb +ddnqavbjdwyssqezmttyjiqf +ddnqavbjdwyssqezpssfqqjt +ddnqavbjdwyssqezpxngfpcx +ddnqavbjdwyssqezqcdhomua +ddnqavbjdwyssqezqlyixkgi +ddnqavbjdwyssqezqvokbhxq +ddnqavbjdwyssqezraelkfjy +ddnqavbjdwyssqezrounibuf +ddnqavbjegjuqmpgaoffckzd +ddnqavbjegjuqmpgatafwjsh +ddnqavbjegjuqmpgbhlijevx +ddnqavbjegjuqmpgbrbjscia +ddnqavbjegjuqmpgcyxowxpb +ddnqavbjegjuqmpgddnqavbj +ddnqavbjegjuqmpgdiiqutzn +ddnqavbjegjuqmpgdndrjssr +ddnqavbjegjuqmpgdwyssqez +ddnqavbjegjuqmpgegjuqmpg +ddnqavbjegjuqmpgelevflik +ddnqavbjegjuqmpgeuzwoizs +ddnqavbjegjuqmpgezuxdhsw +ddnqavbjegjuqmpgfoazvcwh +ddnqavbjegjuqmpghanbdvpq +ddnqavbjegjuqmpghfibxuiu +ddnqavbjegjuqmpghkdcmtby +ddnqavbjegjuqmpghtydvqtb +ddnqavbjegjuqmpghytekpmf +ddnqavbjegjuqmpgiiegilwr +ddnqavbjegjuqmpgirzhrjiz +ddnqavbjegjuqmpgjbkjpftg +ddnqavbjegjuqmpgjgfkeemk +ddnqavbjegjuqmpgjlakydfo +ddnqavbjegjuqmpgjuvmcaww +ddnqavbjegjuqmpgkxrqrxft +ddnqavbjegjuqmpglhcsptqa +ddnqavbjegjuqmpglqxtyrci +ddnqavbjegjuqmpgmaivwnmu +ddnqavbjegjuqmpgmfdwlmfy +ddnqavbjegjuqmpgmoyxujxb +ddnqavbjegjuqmpgmttyjiqf +ddnqavbjegjuqmpgpssfqqjt +ddnqavbjegjuqmpgpxngfpcx +ddnqavbjegjuqmpgqcdhomua +ddnqavbjegjuqmpgqlyixkgi +ddnqavbjegjuqmpgqvokbhxq +ddnqavbjegjuqmpgraelkfjy +ddnqavbjegjuqmpgrounibuf +ddnqavbjelevflikaoffckzd +ddnqavbjelevflikatafwjsh +ddnqavbjelevflikbhlijevx +ddnqavbjelevflikbrbjscia +ddnqavbjelevflikcyxowxpb +ddnqavbjelevflikddnqavbj +ddnqavbjelevflikdiiqutzn +ddnqavbjelevflikdndrjssr +ddnqavbjelevflikdwyssqez +ddnqavbjelevflikegjuqmpg +ddnqavbjelevflikelevflik +ddnqavbjelevflikeuzwoizs +ddnqavbjelevflikezuxdhsw +ddnqavbjelevflikfoazvcwh +ddnqavbjelevflikhanbdvpq +ddnqavbjelevflikhfibxuiu +ddnqavbjelevflikhkdcmtby +ddnqavbjelevflikhtydvqtb +ddnqavbjelevflikhytekpmf +ddnqavbjelevflikiiegilwr +ddnqavbjelevflikirzhrjiz +ddnqavbjelevflikjbkjpftg +ddnqavbjelevflikjgfkeemk +ddnqavbjelevflikjlakydfo +ddnqavbjelevflikjuvmcaww +ddnqavbjelevflikkxrqrxft +ddnqavbjelevfliklhcsptqa +ddnqavbjelevfliklqxtyrci +ddnqavbjelevflikmaivwnmu +ddnqavbjelevflikmfdwlmfy +ddnqavbjelevflikmoyxujxb +ddnqavbjelevflikmttyjiqf +ddnqavbjelevflikpssfqqjt +ddnqavbjelevflikpxngfpcx +ddnqavbjelevflikqcdhomua +ddnqavbjelevflikqlyixkgi +ddnqavbjelevflikqvokbhxq +ddnqavbjelevflikraelkfjy +ddnqavbjelevflikrounibuf +ddnqavbjeuzwoizsaoffckzd +ddnqavbjeuzwoizsatafwjsh +ddnqavbjeuzwoizsbhlijevx +ddnqavbjeuzwoizsbrbjscia +ddnqavbjeuzwoizscyxowxpb +ddnqavbjeuzwoizsddnqavbj +ddnqavbjeuzwoizsdiiqutzn +ddnqavbjeuzwoizsdndrjssr +ddnqavbjeuzwoizsdwyssqez +ddnqavbjeuzwoizsegjuqmpg +ddnqavbjeuzwoizselevflik +ddnqavbjeuzwoizseuzwoizs +ddnqavbjeuzwoizsezuxdhsw +ddnqavbjeuzwoizsfoazvcwh +ddnqavbjeuzwoizshanbdvpq +ddnqavbjeuzwoizshfibxuiu +ddnqavbjeuzwoizshkdcmtby +ddnqavbjeuzwoizshtydvqtb +ddnqavbjeuzwoizshytekpmf +ddnqavbjeuzwoizsiiegilwr +ddnqavbjeuzwoizsirzhrjiz +ddnqavbjeuzwoizsjbkjpftg +ddnqavbjeuzwoizsjgfkeemk +ddnqavbjeuzwoizsjlakydfo +ddnqavbjeuzwoizsjuvmcaww +ddnqavbjeuzwoizskxrqrxft +ddnqavbjeuzwoizslhcsptqa +ddnqavbjeuzwoizslqxtyrci +ddnqavbjeuzwoizsmaivwnmu +ddnqavbjeuzwoizsmfdwlmfy +ddnqavbjeuzwoizsmoyxujxb +ddnqavbjeuzwoizsmttyjiqf +ddnqavbjeuzwoizspssfqqjt +ddnqavbjeuzwoizspxngfpcx +ddnqavbjeuzwoizsqcdhomua +ddnqavbjeuzwoizsqlyixkgi +ddnqavbjeuzwoizsqvokbhxq +ddnqavbjeuzwoizsraelkfjy +ddnqavbjeuzwoizsrounibuf +ddnqavbjezuxdhswaoffckzd +ddnqavbjezuxdhswatafwjsh +ddnqavbjezuxdhswbhlijevx +ddnqavbjezuxdhswbrbjscia +ddnqavbjezuxdhswcyxowxpb +ddnqavbjezuxdhswddnqavbj +ddnqavbjezuxdhswdiiqutzn +ddnqavbjezuxdhswdndrjssr +ddnqavbjezuxdhswdwyssqez +ddnqavbjezuxdhswegjuqmpg +ddnqavbjezuxdhswelevflik +ddnqavbjezuxdhsweuzwoizs +ddnqavbjezuxdhswezuxdhsw +ddnqavbjezuxdhswfoazvcwh +ddnqavbjezuxdhswhanbdvpq +ddnqavbjezuxdhswhfibxuiu +ddnqavbjezuxdhswhkdcmtby +ddnqavbjezuxdhswhtydvqtb +ddnqavbjezuxdhswhytekpmf +ddnqavbjezuxdhswiiegilwr +ddnqavbjezuxdhswirzhrjiz +ddnqavbjezuxdhswjbkjpftg +ddnqavbjezuxdhswjgfkeemk +ddnqavbjezuxdhswjlakydfo +ddnqavbjezuxdhswjuvmcaww +ddnqavbjezuxdhswkxrqrxft +ddnqavbjezuxdhswlhcsptqa +ddnqavbjezuxdhswlqxtyrci +ddnqavbjezuxdhswmaivwnmu +ddnqavbjezuxdhswmfdwlmfy +ddnqavbjezuxdhswmoyxujxb +ddnqavbjezuxdhswmttyjiqf +ddnqavbjezuxdhswpssfqqjt +ddnqavbjezuxdhswpxngfpcx +ddnqavbjezuxdhswqcdhomua +ddnqavbjezuxdhswqlyixkgi +ddnqavbjezuxdhswqvokbhxq +ddnqavbjezuxdhswraelkfjy +ddnqavbjezuxdhswrounibuf +ddnqavbjfoazvcwhaoffckzd +ddnqavbjfoazvcwhatafwjsh +ddnqavbjfoazvcwhbhlijevx +ddnqavbjfoazvcwhbrbjscia +ddnqavbjfoazvcwhcyxowxpb +ddnqavbjfoazvcwhddnqavbj +ddnqavbjfoazvcwhdiiqutzn +ddnqavbjfoazvcwhdndrjssr +ddnqavbjfoazvcwhdwyssqez +ddnqavbjfoazvcwhegjuqmpg +ddnqavbjfoazvcwhelevflik +ddnqavbjfoazvcwheuzwoizs +ddnqavbjfoazvcwhezuxdhsw +ddnqavbjfoazvcwhfoazvcwh +ddnqavbjfoazvcwhhanbdvpq +ddnqavbjfoazvcwhhfibxuiu +ddnqavbjfoazvcwhhkdcmtby +ddnqavbjfoazvcwhhtydvqtb +ddnqavbjfoazvcwhhytekpmf +ddnqavbjfoazvcwhiiegilwr +ddnqavbjfoazvcwhirzhrjiz +ddnqavbjfoazvcwhjbkjpftg +ddnqavbjfoazvcwhjgfkeemk +ddnqavbjfoazvcwhjlakydfo +ddnqavbjfoazvcwhjuvmcaww +ddnqavbjfoazvcwhkxrqrxft +ddnqavbjfoazvcwhlhcsptqa +ddnqavbjfoazvcwhlqxtyrci +ddnqavbjfoazvcwhmaivwnmu +ddnqavbjfoazvcwhmfdwlmfy +ddnqavbjfoazvcwhmoyxujxb +ddnqavbjfoazvcwhmttyjiqf +ddnqavbjfoazvcwhpssfqqjt +ddnqavbjfoazvcwhpxngfpcx +ddnqavbjfoazvcwhqcdhomua +ddnqavbjfoazvcwhqlyixkgi +ddnqavbjfoazvcwhqvokbhxq +ddnqavbjfoazvcwhraelkfjy +ddnqavbjfoazvcwhrounibuf +ddnqavbjhanbdvpqaoffckzd +ddnqavbjhanbdvpqatafwjsh +ddnqavbjhanbdvpqbhlijevx +ddnqavbjhanbdvpqbrbjscia +ddnqavbjhanbdvpqcyxowxpb +ddnqavbjhanbdvpqddnqavbj +ddnqavbjhanbdvpqdiiqutzn +ddnqavbjhanbdvpqdndrjssr +ddnqavbjhanbdvpqdwyssqez +ddnqavbjhanbdvpqegjuqmpg +ddnqavbjhanbdvpqelevflik +ddnqavbjhanbdvpqeuzwoizs +ddnqavbjhanbdvpqezuxdhsw +ddnqavbjhanbdvpqfoazvcwh +ddnqavbjhanbdvpqhanbdvpq +ddnqavbjhanbdvpqhfibxuiu +ddnqavbjhanbdvpqhkdcmtby +ddnqavbjhanbdvpqhtydvqtb +ddnqavbjhanbdvpqhytekpmf +ddnqavbjhanbdvpqiiegilwr +ddnqavbjhanbdvpqirzhrjiz +ddnqavbjhanbdvpqjbkjpftg +ddnqavbjhanbdvpqjgfkeemk +ddnqavbjhanbdvpqjlakydfo +ddnqavbjhanbdvpqjuvmcaww +ddnqavbjhanbdvpqkxrqrxft +ddnqavbjhanbdvpqlhcsptqa +ddnqavbjhanbdvpqlqxtyrci +ddnqavbjhanbdvpqmaivwnmu +ddnqavbjhanbdvpqmfdwlmfy +ddnqavbjhanbdvpqmoyxujxb +ddnqavbjhanbdvpqmttyjiqf +ddnqavbjhanbdvpqpssfqqjt +ddnqavbjhanbdvpqpxngfpcx +ddnqavbjhanbdvpqqcdhomua +ddnqavbjhanbdvpqqlyixkgi +ddnqavbjhanbdvpqqvokbhxq +ddnqavbjhanbdvpqraelkfjy +ddnqavbjhanbdvpqrounibuf +ddnqavbjhfibxuiuaoffckzd +ddnqavbjhfibxuiuatafwjsh +ddnqavbjhfibxuiubhlijevx +ddnqavbjhfibxuiubrbjscia +ddnqavbjhfibxuiucyxowxpb +ddnqavbjhfibxuiuddnqavbj +ddnqavbjhfibxuiudiiqutzn +ddnqavbjhfibxuiudndrjssr +ddnqavbjhfibxuiudwyssqez +ddnqavbjhfibxuiuegjuqmpg +ddnqavbjhfibxuiuelevflik +ddnqavbjhfibxuiueuzwoizs +ddnqavbjhfibxuiuezuxdhsw +ddnqavbjhfibxuiufoazvcwh +ddnqavbjhfibxuiuhanbdvpq +ddnqavbjhfibxuiuhfibxuiu +ddnqavbjhfibxuiuhkdcmtby +ddnqavbjhfibxuiuhtydvqtb +ddnqavbjhfibxuiuhytekpmf +ddnqavbjhfibxuiuiiegilwr +ddnqavbjhfibxuiuirzhrjiz +ddnqavbjhfibxuiujbkjpftg +ddnqavbjhfibxuiujgfkeemk +ddnqavbjhfibxuiujlakydfo +ddnqavbjhfibxuiujuvmcaww +ddnqavbjhfibxuiukxrqrxft +ddnqavbjhfibxuiulhcsptqa +ddnqavbjhfibxuiulqxtyrci +ddnqavbjhfibxuiumaivwnmu +ddnqavbjhfibxuiumfdwlmfy +ddnqavbjhfibxuiumoyxujxb +ddnqavbjhfibxuiumttyjiqf +ddnqavbjhfibxuiupssfqqjt +ddnqavbjhfibxuiupxngfpcx +ddnqavbjhfibxuiuqcdhomua +ddnqavbjhfibxuiuqlyixkgi +ddnqavbjhfibxuiuqvokbhxq +ddnqavbjhfibxuiuraelkfjy +ddnqavbjhfibxuiurounibuf +ddnqavbjhkdcmtbyaoffckzd +ddnqavbjhkdcmtbyatafwjsh +ddnqavbjhkdcmtbybhlijevx +ddnqavbjhkdcmtbybrbjscia +ddnqavbjhkdcmtbycyxowxpb +ddnqavbjhkdcmtbyddnqavbj +ddnqavbjhkdcmtbydiiqutzn +ddnqavbjhkdcmtbydndrjssr +ddnqavbjhkdcmtbydwyssqez +ddnqavbjhkdcmtbyegjuqmpg +ddnqavbjhkdcmtbyelevflik +ddnqavbjhkdcmtbyeuzwoizs +ddnqavbjhkdcmtbyezuxdhsw +ddnqavbjhkdcmtbyfoazvcwh +ddnqavbjhkdcmtbyhanbdvpq +ddnqavbjhkdcmtbyhfibxuiu +ddnqavbjhkdcmtbyhkdcmtby +ddnqavbjhkdcmtbyhtydvqtb +ddnqavbjhkdcmtbyhytekpmf +ddnqavbjhkdcmtbyiiegilwr +ddnqavbjhkdcmtbyirzhrjiz +ddnqavbjhkdcmtbyjbkjpftg +ddnqavbjhkdcmtbyjgfkeemk +ddnqavbjhkdcmtbyjlakydfo +ddnqavbjhkdcmtbyjuvmcaww +ddnqavbjhkdcmtbykxrqrxft +ddnqavbjhkdcmtbylhcsptqa +ddnqavbjhkdcmtbylqxtyrci +ddnqavbjhkdcmtbymaivwnmu +ddnqavbjhkdcmtbymfdwlmfy +ddnqavbjhkdcmtbymoyxujxb +ddnqavbjhkdcmtbymttyjiqf +ddnqavbjhkdcmtbypssfqqjt +ddnqavbjhkdcmtbypxngfpcx +ddnqavbjhkdcmtbyqcdhomua +ddnqavbjhkdcmtbyqlyixkgi +ddnqavbjhkdcmtbyqvokbhxq +ddnqavbjhkdcmtbyraelkfjy +ddnqavbjhkdcmtbyrounibuf +ddnqavbjhtydvqtbaoffckzd +ddnqavbjhtydvqtbatafwjsh +ddnqavbjhtydvqtbbhlijevx +ddnqavbjhtydvqtbbrbjscia +ddnqavbjhtydvqtbcyxowxpb +ddnqavbjhtydvqtbddnqavbj +ddnqavbjhtydvqtbdiiqutzn +ddnqavbjhtydvqtbdndrjssr +ddnqavbjhtydvqtbdwyssqez +ddnqavbjhtydvqtbegjuqmpg +ddnqavbjhtydvqtbelevflik +ddnqavbjhtydvqtbeuzwoizs +ddnqavbjhtydvqtbezuxdhsw +ddnqavbjhtydvqtbfoazvcwh +ddnqavbjhtydvqtbhanbdvpq +ddnqavbjhtydvqtbhfibxuiu +ddnqavbjhtydvqtbhkdcmtby +ddnqavbjhtydvqtbhtydvqtb +ddnqavbjhtydvqtbhytekpmf +ddnqavbjhtydvqtbiiegilwr +ddnqavbjhtydvqtbirzhrjiz +ddnqavbjhtydvqtbjbkjpftg +ddnqavbjhtydvqtbjgfkeemk +ddnqavbjhtydvqtbjlakydfo +ddnqavbjhtydvqtbjuvmcaww +ddnqavbjhtydvqtbkxrqrxft +ddnqavbjhtydvqtblhcsptqa +ddnqavbjhtydvqtblqxtyrci +ddnqavbjhtydvqtbmaivwnmu +ddnqavbjhtydvqtbmfdwlmfy +ddnqavbjhtydvqtbmoyxujxb +ddnqavbjhtydvqtbmttyjiqf +ddnqavbjhtydvqtbpssfqqjt +ddnqavbjhtydvqtbpxngfpcx +ddnqavbjhtydvqtbqcdhomua +ddnqavbjhtydvqtbqlyixkgi +ddnqavbjhtydvqtbqvokbhxq +ddnqavbjhtydvqtbraelkfjy +ddnqavbjhtydvqtbrounibuf +ddnqavbjhytekpmfaoffckzd +ddnqavbjhytekpmfatafwjsh +ddnqavbjhytekpmfbhlijevx +ddnqavbjhytekpmfbrbjscia +ddnqavbjhytekpmfcyxowxpb +ddnqavbjhytekpmfddnqavbj +ddnqavbjhytekpmfdiiqutzn +ddnqavbjhytekpmfdndrjssr +ddnqavbjhytekpmfdwyssqez +ddnqavbjhytekpmfegjuqmpg +ddnqavbjhytekpmfelevflik +ddnqavbjhytekpmfeuzwoizs +ddnqavbjhytekpmfezuxdhsw +ddnqavbjhytekpmffoazvcwh +ddnqavbjhytekpmfhanbdvpq +ddnqavbjhytekpmfhfibxuiu +ddnqavbjhytekpmfhkdcmtby +ddnqavbjhytekpmfhtydvqtb +ddnqavbjhytekpmfhytekpmf +ddnqavbjhytekpmfiiegilwr +ddnqavbjhytekpmfirzhrjiz +ddnqavbjhytekpmfjbkjpftg +ddnqavbjhytekpmfjgfkeemk +ddnqavbjhytekpmfjlakydfo +ddnqavbjhytekpmfjuvmcaww +ddnqavbjhytekpmfkxrqrxft +ddnqavbjhytekpmflhcsptqa +ddnqavbjhytekpmflqxtyrci +ddnqavbjhytekpmfmaivwnmu +ddnqavbjhytekpmfmfdwlmfy +ddnqavbjhytekpmfmoyxujxb +ddnqavbjhytekpmfmttyjiqf +ddnqavbjhytekpmfpssfqqjt +ddnqavbjhytekpmfpxngfpcx +ddnqavbjhytekpmfqcdhomua +ddnqavbjhytekpmfqlyixkgi +ddnqavbjhytekpmfqvokbhxq +ddnqavbjhytekpmfraelkfjy +ddnqavbjhytekpmfrounibuf +ddnqavbjiiegilwraoffckzd +ddnqavbjiiegilwratafwjsh +ddnqavbjiiegilwrbhlijevx +ddnqavbjiiegilwrbrbjscia +ddnqavbjiiegilwrcyxowxpb +ddnqavbjiiegilwrddnqavbj +ddnqavbjiiegilwrdiiqutzn +ddnqavbjiiegilwrdndrjssr +ddnqavbjiiegilwrdwyssqez +ddnqavbjiiegilwregjuqmpg +ddnqavbjiiegilwrelevflik +ddnqavbjiiegilwreuzwoizs +ddnqavbjiiegilwrezuxdhsw +ddnqavbjiiegilwrfoazvcwh +ddnqavbjiiegilwrhanbdvpq +ddnqavbjiiegilwrhfibxuiu +ddnqavbjiiegilwrhkdcmtby +ddnqavbjiiegilwrhtydvqtb +ddnqavbjiiegilwrhytekpmf +ddnqavbjiiegilwriiegilwr +ddnqavbjiiegilwrirzhrjiz +ddnqavbjiiegilwrjbkjpftg +ddnqavbjiiegilwrjgfkeemk +ddnqavbjiiegilwrjlakydfo +ddnqavbjiiegilwrjuvmcaww +ddnqavbjiiegilwrkxrqrxft +ddnqavbjiiegilwrlhcsptqa +ddnqavbjiiegilwrlqxtyrci +ddnqavbjiiegilwrmaivwnmu +ddnqavbjiiegilwrmfdwlmfy +ddnqavbjiiegilwrmoyxujxb +ddnqavbjiiegilwrmttyjiqf +ddnqavbjiiegilwrpssfqqjt +ddnqavbjiiegilwrpxngfpcx +ddnqavbjiiegilwrqcdhomua +ddnqavbjiiegilwrqlyixkgi +ddnqavbjiiegilwrqvokbhxq +ddnqavbjiiegilwrraelkfjy +ddnqavbjiiegilwrrounibuf +ddnqavbjirzhrjizaoffckzd +ddnqavbjirzhrjizatafwjsh +ddnqavbjirzhrjizbhlijevx +ddnqavbjirzhrjizbrbjscia +ddnqavbjirzhrjizcyxowxpb +ddnqavbjirzhrjizddnqavbj +ddnqavbjirzhrjizdiiqutzn +ddnqavbjirzhrjizdndrjssr +ddnqavbjirzhrjizdwyssqez +ddnqavbjirzhrjizegjuqmpg +ddnqavbjirzhrjizelevflik +ddnqavbjirzhrjizeuzwoizs +ddnqavbjirzhrjizezuxdhsw +ddnqavbjirzhrjizfoazvcwh +ddnqavbjirzhrjizhanbdvpq +ddnqavbjirzhrjizhfibxuiu +ddnqavbjirzhrjizhkdcmtby +ddnqavbjirzhrjizhtydvqtb +ddnqavbjirzhrjizhytekpmf +ddnqavbjirzhrjiziiegilwr +ddnqavbjirzhrjizirzhrjiz +ddnqavbjirzhrjizjbkjpftg +ddnqavbjirzhrjizjgfkeemk +ddnqavbjirzhrjizjlakydfo +ddnqavbjirzhrjizjuvmcaww +ddnqavbjirzhrjizkxrqrxft +ddnqavbjirzhrjizlhcsptqa +ddnqavbjirzhrjizlqxtyrci +ddnqavbjirzhrjizmaivwnmu +ddnqavbjirzhrjizmfdwlmfy +ddnqavbjirzhrjizmoyxujxb +ddnqavbjirzhrjizmttyjiqf +ddnqavbjirzhrjizpssfqqjt +ddnqavbjirzhrjizpxngfpcx +ddnqavbjirzhrjizqcdhomua +ddnqavbjirzhrjizqlyixkgi +ddnqavbjirzhrjizqvokbhxq +ddnqavbjirzhrjizraelkfjy +ddnqavbjirzhrjizrounibuf +ddnqavbjjbkjpftgaoffckzd +ddnqavbjjbkjpftgatafwjsh +ddnqavbjjbkjpftgbhlijevx +ddnqavbjjbkjpftgbrbjscia +ddnqavbjjbkjpftgcyxowxpb +ddnqavbjjbkjpftgddnqavbj +ddnqavbjjbkjpftgdiiqutzn +ddnqavbjjbkjpftgdndrjssr +ddnqavbjjbkjpftgdwyssqez +ddnqavbjjbkjpftgegjuqmpg +ddnqavbjjbkjpftgelevflik +ddnqavbjjbkjpftgeuzwoizs +ddnqavbjjbkjpftgezuxdhsw +ddnqavbjjbkjpftgfoazvcwh +ddnqavbjjbkjpftghanbdvpq +ddnqavbjjbkjpftghfibxuiu +ddnqavbjjbkjpftghkdcmtby +ddnqavbjjbkjpftghtydvqtb +ddnqavbjjbkjpftghytekpmf +ddnqavbjjbkjpftgiiegilwr +ddnqavbjjbkjpftgirzhrjiz +ddnqavbjjbkjpftgjbkjpftg +ddnqavbjjbkjpftgjgfkeemk +ddnqavbjjbkjpftgjlakydfo +ddnqavbjjbkjpftgjuvmcaww +ddnqavbjjbkjpftgkxrqrxft +ddnqavbjjbkjpftglhcsptqa +ddnqavbjjbkjpftglqxtyrci +ddnqavbjjbkjpftgmaivwnmu +ddnqavbjjbkjpftgmfdwlmfy +ddnqavbjjbkjpftgmoyxujxb +ddnqavbjjbkjpftgmttyjiqf +ddnqavbjjbkjpftgpssfqqjt +ddnqavbjjbkjpftgpxngfpcx +ddnqavbjjbkjpftgqcdhomua +ddnqavbjjbkjpftgqlyixkgi +ddnqavbjjbkjpftgqvokbhxq +ddnqavbjjbkjpftgraelkfjy +ddnqavbjjbkjpftgrounibuf +ddnqavbjjgfkeemkaoffckzd +ddnqavbjjgfkeemkatafwjsh +ddnqavbjjgfkeemkbhlijevx +ddnqavbjjgfkeemkbrbjscia +ddnqavbjjgfkeemkcyxowxpb +ddnqavbjjgfkeemkddnqavbj +ddnqavbjjgfkeemkdiiqutzn +ddnqavbjjgfkeemkdndrjssr +ddnqavbjjgfkeemkdwyssqez +ddnqavbjjgfkeemkegjuqmpg +ddnqavbjjgfkeemkelevflik +ddnqavbjjgfkeemkeuzwoizs +ddnqavbjjgfkeemkezuxdhsw +ddnqavbjjgfkeemkfoazvcwh +ddnqavbjjgfkeemkhanbdvpq +ddnqavbjjgfkeemkhfibxuiu +ddnqavbjjgfkeemkhkdcmtby +ddnqavbjjgfkeemkhtydvqtb +ddnqavbjjgfkeemkhytekpmf +ddnqavbjjgfkeemkiiegilwr +ddnqavbjjgfkeemkirzhrjiz +ddnqavbjjgfkeemkjbkjpftg +ddnqavbjjgfkeemkjgfkeemk +ddnqavbjjgfkeemkjlakydfo +ddnqavbjjgfkeemkjuvmcaww +ddnqavbjjgfkeemkkxrqrxft +ddnqavbjjgfkeemklhcsptqa +ddnqavbjjgfkeemklqxtyrci +ddnqavbjjgfkeemkmaivwnmu +ddnqavbjjgfkeemkmfdwlmfy +ddnqavbjjgfkeemkmoyxujxb +ddnqavbjjgfkeemkmttyjiqf +ddnqavbjjgfkeemkpssfqqjt +ddnqavbjjgfkeemkpxngfpcx +ddnqavbjjgfkeemkqcdhomua +ddnqavbjjgfkeemkqlyixkgi +ddnqavbjjgfkeemkqvokbhxq +ddnqavbjjgfkeemkraelkfjy +ddnqavbjjgfkeemkrounibuf +ddnqavbjjlakydfoaoffckzd +ddnqavbjjlakydfoatafwjsh +ddnqavbjjlakydfobhlijevx +ddnqavbjjlakydfobrbjscia +ddnqavbjjlakydfocyxowxpb +ddnqavbjjlakydfoddnqavbj +ddnqavbjjlakydfodiiqutzn +ddnqavbjjlakydfodndrjssr +ddnqavbjjlakydfodwyssqez +ddnqavbjjlakydfoegjuqmpg +ddnqavbjjlakydfoelevflik +ddnqavbjjlakydfoeuzwoizs +ddnqavbjjlakydfoezuxdhsw +ddnqavbjjlakydfofoazvcwh +ddnqavbjjlakydfohanbdvpq +ddnqavbjjlakydfohfibxuiu +ddnqavbjjlakydfohkdcmtby +ddnqavbjjlakydfohtydvqtb +ddnqavbjjlakydfohytekpmf +ddnqavbjjlakydfoiiegilwr +ddnqavbjjlakydfoirzhrjiz +ddnqavbjjlakydfojbkjpftg +ddnqavbjjlakydfojgfkeemk +ddnqavbjjlakydfojlakydfo +ddnqavbjjlakydfojuvmcaww +ddnqavbjjlakydfokxrqrxft +ddnqavbjjlakydfolhcsptqa +ddnqavbjjlakydfolqxtyrci +ddnqavbjjlakydfomaivwnmu +ddnqavbjjlakydfomfdwlmfy +ddnqavbjjlakydfomoyxujxb +ddnqavbjjlakydfomttyjiqf +ddnqavbjjlakydfopssfqqjt +ddnqavbjjlakydfopxngfpcx +ddnqavbjjlakydfoqcdhomua +ddnqavbjjlakydfoqlyixkgi +ddnqavbjjlakydfoqvokbhxq +ddnqavbjjlakydforaelkfjy +ddnqavbjjlakydforounibuf +ddnqavbjjuvmcawwaoffckzd +ddnqavbjjuvmcawwatafwjsh +ddnqavbjjuvmcawwbhlijevx +ddnqavbjjuvmcawwbrbjscia +ddnqavbjjuvmcawwcyxowxpb +ddnqavbjjuvmcawwddnqavbj +ddnqavbjjuvmcawwdiiqutzn +ddnqavbjjuvmcawwdndrjssr +ddnqavbjjuvmcawwdwyssqez +ddnqavbjjuvmcawwegjuqmpg +ddnqavbjjuvmcawwelevflik +ddnqavbjjuvmcawweuzwoizs +ddnqavbjjuvmcawwezuxdhsw +ddnqavbjjuvmcawwfoazvcwh +ddnqavbjjuvmcawwhanbdvpq +ddnqavbjjuvmcawwhfibxuiu +ddnqavbjjuvmcawwhkdcmtby +ddnqavbjjuvmcawwhtydvqtb +ddnqavbjjuvmcawwhytekpmf +ddnqavbjjuvmcawwiiegilwr +ddnqavbjjuvmcawwirzhrjiz +ddnqavbjjuvmcawwjbkjpftg +ddnqavbjjuvmcawwjgfkeemk +ddnqavbjjuvmcawwjlakydfo +ddnqavbjjuvmcawwjuvmcaww +ddnqavbjjuvmcawwkxrqrxft +ddnqavbjjuvmcawwlhcsptqa +ddnqavbjjuvmcawwlqxtyrci +ddnqavbjjuvmcawwmaivwnmu +ddnqavbjjuvmcawwmfdwlmfy +ddnqavbjjuvmcawwmoyxujxb +ddnqavbjjuvmcawwmttyjiqf +ddnqavbjjuvmcawwpssfqqjt +ddnqavbjjuvmcawwpxngfpcx +ddnqavbjjuvmcawwqcdhomua +ddnqavbjjuvmcawwqlyixkgi +ddnqavbjjuvmcawwqvokbhxq +ddnqavbjjuvmcawwraelkfjy +ddnqavbjjuvmcawwrounibuf +ddnqavbjkxrqrxftaoffckzd +ddnqavbjkxrqrxftatafwjsh +ddnqavbjkxrqrxftbhlijevx +ddnqavbjkxrqrxftbrbjscia +ddnqavbjkxrqrxftcyxowxpb +ddnqavbjkxrqrxftddnqavbj +ddnqavbjkxrqrxftdiiqutzn +ddnqavbjkxrqrxftdndrjssr +ddnqavbjkxrqrxftdwyssqez +ddnqavbjkxrqrxftegjuqmpg +ddnqavbjkxrqrxftelevflik +ddnqavbjkxrqrxfteuzwoizs +ddnqavbjkxrqrxftezuxdhsw +ddnqavbjkxrqrxftfoazvcwh +ddnqavbjkxrqrxfthanbdvpq +ddnqavbjkxrqrxfthfibxuiu +ddnqavbjkxrqrxfthkdcmtby +ddnqavbjkxrqrxfthtydvqtb +ddnqavbjkxrqrxfthytekpmf +ddnqavbjkxrqrxftiiegilwr +ddnqavbjkxrqrxftirzhrjiz +ddnqavbjkxrqrxftjbkjpftg +ddnqavbjkxrqrxftjgfkeemk +ddnqavbjkxrqrxftjlakydfo +ddnqavbjkxrqrxftjuvmcaww +ddnqavbjkxrqrxftkxrqrxft +ddnqavbjkxrqrxftlhcsptqa +ddnqavbjkxrqrxftlqxtyrci +ddnqavbjkxrqrxftmaivwnmu +ddnqavbjkxrqrxftmfdwlmfy +ddnqavbjkxrqrxftmoyxujxb +ddnqavbjkxrqrxftmttyjiqf +ddnqavbjkxrqrxftpssfqqjt +ddnqavbjkxrqrxftpxngfpcx +ddnqavbjkxrqrxftqcdhomua +ddnqavbjkxrqrxftqlyixkgi +ddnqavbjkxrqrxftqvokbhxq +ddnqavbjkxrqrxftraelkfjy +ddnqavbjkxrqrxftrounibuf +ddnqavbjlhcsptqaaoffckzd +ddnqavbjlhcsptqaatafwjsh +ddnqavbjlhcsptqabhlijevx +ddnqavbjlhcsptqabrbjscia +ddnqavbjlhcsptqacyxowxpb +ddnqavbjlhcsptqaddnqavbj +ddnqavbjlhcsptqadiiqutzn +ddnqavbjlhcsptqadndrjssr +ddnqavbjlhcsptqadwyssqez +ddnqavbjlhcsptqaegjuqmpg +ddnqavbjlhcsptqaelevflik +ddnqavbjlhcsptqaeuzwoizs +ddnqavbjlhcsptqaezuxdhsw +ddnqavbjlhcsptqafoazvcwh +ddnqavbjlhcsptqahanbdvpq +ddnqavbjlhcsptqahfibxuiu +ddnqavbjlhcsptqahkdcmtby +ddnqavbjlhcsptqahtydvqtb +ddnqavbjlhcsptqahytekpmf +ddnqavbjlhcsptqaiiegilwr +ddnqavbjlhcsptqairzhrjiz +ddnqavbjlhcsptqajbkjpftg +ddnqavbjlhcsptqajgfkeemk +ddnqavbjlhcsptqajlakydfo +ddnqavbjlhcsptqajuvmcaww +ddnqavbjlhcsptqakxrqrxft +ddnqavbjlhcsptqalhcsptqa +ddnqavbjlhcsptqalqxtyrci +ddnqavbjlhcsptqamaivwnmu +ddnqavbjlhcsptqamfdwlmfy +ddnqavbjlhcsptqamoyxujxb +ddnqavbjlhcsptqamttyjiqf +ddnqavbjlhcsptqapssfqqjt +ddnqavbjlhcsptqapxngfpcx +ddnqavbjlhcsptqaqcdhomua +ddnqavbjlhcsptqaqlyixkgi +ddnqavbjlhcsptqaqvokbhxq +ddnqavbjlhcsptqaraelkfjy +ddnqavbjlhcsptqarounibuf +ddnqavbjlqxtyrciaoffckzd +ddnqavbjlqxtyrciatafwjsh +ddnqavbjlqxtyrcibhlijevx +ddnqavbjlqxtyrcibrbjscia +ddnqavbjlqxtyrcicyxowxpb +ddnqavbjlqxtyrciddnqavbj +ddnqavbjlqxtyrcidiiqutzn +ddnqavbjlqxtyrcidndrjssr +ddnqavbjlqxtyrcidwyssqez +ddnqavbjlqxtyrciegjuqmpg +ddnqavbjlqxtyrcielevflik +ddnqavbjlqxtyrcieuzwoizs +ddnqavbjlqxtyrciezuxdhsw +ddnqavbjlqxtyrcifoazvcwh +ddnqavbjlqxtyrcihanbdvpq +ddnqavbjlqxtyrcihfibxuiu +ddnqavbjlqxtyrcihkdcmtby +ddnqavbjlqxtyrcihtydvqtb +ddnqavbjlqxtyrcihytekpmf +ddnqavbjlqxtyrciiiegilwr +ddnqavbjlqxtyrciirzhrjiz +ddnqavbjlqxtyrcijbkjpftg +ddnqavbjlqxtyrcijgfkeemk +ddnqavbjlqxtyrcijlakydfo +ddnqavbjlqxtyrcijuvmcaww +ddnqavbjlqxtyrcikxrqrxft +ddnqavbjlqxtyrcilhcsptqa +ddnqavbjlqxtyrcilqxtyrci +ddnqavbjlqxtyrcimaivwnmu +ddnqavbjlqxtyrcimfdwlmfy +ddnqavbjlqxtyrcimoyxujxb +ddnqavbjlqxtyrcimttyjiqf +ddnqavbjlqxtyrcipssfqqjt +ddnqavbjlqxtyrcipxngfpcx +ddnqavbjlqxtyrciqcdhomua +ddnqavbjlqxtyrciqlyixkgi +ddnqavbjlqxtyrciqvokbhxq +ddnqavbjlqxtyrciraelkfjy +ddnqavbjlqxtyrcirounibuf +ddnqavbjmaivwnmuaoffckzd +ddnqavbjmaivwnmuatafwjsh +ddnqavbjmaivwnmubhlijevx +ddnqavbjmaivwnmubrbjscia +ddnqavbjmaivwnmucyxowxpb +ddnqavbjmaivwnmuddnqavbj +ddnqavbjmaivwnmudiiqutzn +ddnqavbjmaivwnmudndrjssr +ddnqavbjmaivwnmudwyssqez +ddnqavbjmaivwnmuegjuqmpg +ddnqavbjmaivwnmuelevflik +ddnqavbjmaivwnmueuzwoizs +ddnqavbjmaivwnmuezuxdhsw +ddnqavbjmaivwnmufoazvcwh +ddnqavbjmaivwnmuhanbdvpq +ddnqavbjmaivwnmuhfibxuiu +ddnqavbjmaivwnmuhkdcmtby +ddnqavbjmaivwnmuhtydvqtb +ddnqavbjmaivwnmuhytekpmf +ddnqavbjmaivwnmuiiegilwr +ddnqavbjmaivwnmuirzhrjiz +ddnqavbjmaivwnmujbkjpftg +ddnqavbjmaivwnmujgfkeemk +ddnqavbjmaivwnmujlakydfo +ddnqavbjmaivwnmujuvmcaww +ddnqavbjmaivwnmukxrqrxft +ddnqavbjmaivwnmulhcsptqa +ddnqavbjmaivwnmulqxtyrci +ddnqavbjmaivwnmumaivwnmu +ddnqavbjmaivwnmumfdwlmfy +ddnqavbjmaivwnmumoyxujxb +ddnqavbjmaivwnmumttyjiqf +ddnqavbjmaivwnmupssfqqjt +ddnqavbjmaivwnmupxngfpcx +ddnqavbjmaivwnmuqcdhomua +ddnqavbjmaivwnmuqlyixkgi +ddnqavbjmaivwnmuqvokbhxq +ddnqavbjmaivwnmuraelkfjy +ddnqavbjmaivwnmurounibuf +ddnqavbjmfdwlmfyaoffckzd +ddnqavbjmfdwlmfyatafwjsh +ddnqavbjmfdwlmfybhlijevx +ddnqavbjmfdwlmfybrbjscia +ddnqavbjmfdwlmfycyxowxpb +ddnqavbjmfdwlmfyddnqavbj +ddnqavbjmfdwlmfydiiqutzn +ddnqavbjmfdwlmfydndrjssr +ddnqavbjmfdwlmfydwyssqez +ddnqavbjmfdwlmfyegjuqmpg +ddnqavbjmfdwlmfyelevflik +ddnqavbjmfdwlmfyeuzwoizs +ddnqavbjmfdwlmfyezuxdhsw +ddnqavbjmfdwlmfyfoazvcwh +ddnqavbjmfdwlmfyhanbdvpq +ddnqavbjmfdwlmfyhfibxuiu +ddnqavbjmfdwlmfyhkdcmtby +ddnqavbjmfdwlmfyhtydvqtb +ddnqavbjmfdwlmfyhytekpmf +ddnqavbjmfdwlmfyiiegilwr +ddnqavbjmfdwlmfyirzhrjiz +ddnqavbjmfdwlmfyjbkjpftg +ddnqavbjmfdwlmfyjgfkeemk +ddnqavbjmfdwlmfyjlakydfo +ddnqavbjmfdwlmfyjuvmcaww +ddnqavbjmfdwlmfykxrqrxft +ddnqavbjmfdwlmfylhcsptqa +ddnqavbjmfdwlmfylqxtyrci +ddnqavbjmfdwlmfymaivwnmu +ddnqavbjmfdwlmfymfdwlmfy +ddnqavbjmfdwlmfymoyxujxb +ddnqavbjmfdwlmfymttyjiqf +ddnqavbjmfdwlmfypssfqqjt +ddnqavbjmfdwlmfypxngfpcx +ddnqavbjmfdwlmfyqcdhomua +ddnqavbjmfdwlmfyqlyixkgi +ddnqavbjmfdwlmfyqvokbhxq +ddnqavbjmfdwlmfyraelkfjy +ddnqavbjmfdwlmfyrounibuf +ddnqavbjmoyxujxbaoffckzd +ddnqavbjmoyxujxbatafwjsh +ddnqavbjmoyxujxbbhlijevx +ddnqavbjmoyxujxbbrbjscia +ddnqavbjmoyxujxbcyxowxpb +ddnqavbjmoyxujxbddnqavbj +ddnqavbjmoyxujxbdiiqutzn +ddnqavbjmoyxujxbdndrjssr +ddnqavbjmoyxujxbdwyssqez +ddnqavbjmoyxujxbegjuqmpg +ddnqavbjmoyxujxbelevflik +ddnqavbjmoyxujxbeuzwoizs +ddnqavbjmoyxujxbezuxdhsw +ddnqavbjmoyxujxbfoazvcwh +ddnqavbjmoyxujxbhanbdvpq +ddnqavbjmoyxujxbhfibxuiu +ddnqavbjmoyxujxbhkdcmtby +ddnqavbjmoyxujxbhtydvqtb +ddnqavbjmoyxujxbhytekpmf +ddnqavbjmoyxujxbiiegilwr +ddnqavbjmoyxujxbirzhrjiz +ddnqavbjmoyxujxbjbkjpftg +ddnqavbjmoyxujxbjgfkeemk +ddnqavbjmoyxujxbjlakydfo +ddnqavbjmoyxujxbjuvmcaww +ddnqavbjmoyxujxbkxrqrxft +ddnqavbjmoyxujxblhcsptqa +ddnqavbjmoyxujxblqxtyrci +ddnqavbjmoyxujxbmaivwnmu +ddnqavbjmoyxujxbmfdwlmfy +ddnqavbjmoyxujxbmoyxujxb +ddnqavbjmoyxujxbmttyjiqf +ddnqavbjmoyxujxbpssfqqjt +ddnqavbjmoyxujxbpxngfpcx +ddnqavbjmoyxujxbqcdhomua +ddnqavbjmoyxujxbqlyixkgi +ddnqavbjmoyxujxbqvokbhxq +ddnqavbjmoyxujxbraelkfjy +ddnqavbjmoyxujxbrounibuf +ddnqavbjmttyjiqfaoffckzd +ddnqavbjmttyjiqfatafwjsh +ddnqavbjmttyjiqfbhlijevx +ddnqavbjmttyjiqfbrbjscia +ddnqavbjmttyjiqfcyxowxpb +ddnqavbjmttyjiqfddnqavbj +ddnqavbjmttyjiqfdiiqutzn +ddnqavbjmttyjiqfdndrjssr +ddnqavbjmttyjiqfdwyssqez +ddnqavbjmttyjiqfegjuqmpg +ddnqavbjmttyjiqfelevflik +ddnqavbjmttyjiqfeuzwoizs +ddnqavbjmttyjiqfezuxdhsw +ddnqavbjmttyjiqffoazvcwh +ddnqavbjmttyjiqfhanbdvpq +ddnqavbjmttyjiqfhfibxuiu +ddnqavbjmttyjiqfhkdcmtby +ddnqavbjmttyjiqfhtydvqtb +ddnqavbjmttyjiqfhytekpmf +ddnqavbjmttyjiqfiiegilwr +ddnqavbjmttyjiqfirzhrjiz +ddnqavbjmttyjiqfjbkjpftg +ddnqavbjmttyjiqfjgfkeemk +ddnqavbjmttyjiqfjlakydfo +ddnqavbjmttyjiqfjuvmcaww +ddnqavbjmttyjiqfkxrqrxft +ddnqavbjmttyjiqflhcsptqa +ddnqavbjmttyjiqflqxtyrci +ddnqavbjmttyjiqfmaivwnmu +ddnqavbjmttyjiqfmfdwlmfy +ddnqavbjmttyjiqfmoyxujxb +ddnqavbjmttyjiqfmttyjiqf +ddnqavbjmttyjiqfpssfqqjt +ddnqavbjmttyjiqfpxngfpcx +ddnqavbjmttyjiqfqcdhomua +ddnqavbjmttyjiqfqlyixkgi +ddnqavbjmttyjiqfqvokbhxq +ddnqavbjmttyjiqfraelkfjy +ddnqavbjmttyjiqfrounibuf +ddnqavbjpssfqqjtaoffckzd +ddnqavbjpssfqqjtatafwjsh +ddnqavbjpssfqqjtbhlijevx +ddnqavbjpssfqqjtbrbjscia +ddnqavbjpssfqqjtcyxowxpb +ddnqavbjpssfqqjtddnqavbj +ddnqavbjpssfqqjtdiiqutzn +ddnqavbjpssfqqjtdndrjssr +ddnqavbjpssfqqjtdwyssqez +ddnqavbjpssfqqjtegjuqmpg +ddnqavbjpssfqqjtelevflik +ddnqavbjpssfqqjteuzwoizs +ddnqavbjpssfqqjtezuxdhsw +ddnqavbjpssfqqjtfoazvcwh +ddnqavbjpssfqqjthanbdvpq +ddnqavbjpssfqqjthfibxuiu +ddnqavbjpssfqqjthkdcmtby +ddnqavbjpssfqqjthtydvqtb +ddnqavbjpssfqqjthytekpmf +ddnqavbjpssfqqjtiiegilwr +ddnqavbjpssfqqjtirzhrjiz +ddnqavbjpssfqqjtjbkjpftg +ddnqavbjpssfqqjtjgfkeemk +ddnqavbjpssfqqjtjlakydfo +ddnqavbjpssfqqjtjuvmcaww +ddnqavbjpssfqqjtkxrqrxft +ddnqavbjpssfqqjtlhcsptqa +ddnqavbjpssfqqjtlqxtyrci +ddnqavbjpssfqqjtmaivwnmu +ddnqavbjpssfqqjtmfdwlmfy +ddnqavbjpssfqqjtmoyxujxb +ddnqavbjpssfqqjtmttyjiqf +ddnqavbjpssfqqjtpssfqqjt +ddnqavbjpssfqqjtpxngfpcx +ddnqavbjpssfqqjtqcdhomua +ddnqavbjpssfqqjtqlyixkgi +ddnqavbjpssfqqjtqvokbhxq +ddnqavbjpssfqqjtraelkfjy +ddnqavbjpssfqqjtrounibuf +ddnqavbjpxngfpcxaoffckzd +ddnqavbjpxngfpcxatafwjsh +ddnqavbjpxngfpcxbhlijevx +ddnqavbjpxngfpcxbrbjscia +ddnqavbjpxngfpcxcyxowxpb +ddnqavbjpxngfpcxddnqavbj +ddnqavbjpxngfpcxdiiqutzn +ddnqavbjpxngfpcxdndrjssr +ddnqavbjpxngfpcxdwyssqez +ddnqavbjpxngfpcxegjuqmpg +ddnqavbjpxngfpcxelevflik +ddnqavbjpxngfpcxeuzwoizs +ddnqavbjpxngfpcxezuxdhsw +ddnqavbjpxngfpcxfoazvcwh +ddnqavbjpxngfpcxhanbdvpq +ddnqavbjpxngfpcxhfibxuiu +ddnqavbjpxngfpcxhkdcmtby +ddnqavbjpxngfpcxhtydvqtb +ddnqavbjpxngfpcxhytekpmf +ddnqavbjpxngfpcxiiegilwr +ddnqavbjpxngfpcxirzhrjiz +ddnqavbjpxngfpcxjbkjpftg +ddnqavbjpxngfpcxjgfkeemk +ddnqavbjpxngfpcxjlakydfo +ddnqavbjpxngfpcxjuvmcaww +ddnqavbjpxngfpcxkxrqrxft +ddnqavbjpxngfpcxlhcsptqa +ddnqavbjpxngfpcxlqxtyrci +ddnqavbjpxngfpcxmaivwnmu +ddnqavbjpxngfpcxmfdwlmfy +ddnqavbjpxngfpcxmoyxujxb +ddnqavbjpxngfpcxmttyjiqf +ddnqavbjpxngfpcxpssfqqjt +ddnqavbjpxngfpcxpxngfpcx +ddnqavbjpxngfpcxqcdhomua +ddnqavbjpxngfpcxqlyixkgi +ddnqavbjpxngfpcxqvokbhxq +ddnqavbjpxngfpcxraelkfjy +ddnqavbjpxngfpcxrounibuf +ddnqavbjqcdhomuaaoffckzd +ddnqavbjqcdhomuaatafwjsh +ddnqavbjqcdhomuabhlijevx +ddnqavbjqcdhomuabrbjscia +ddnqavbjqcdhomuacyxowxpb +ddnqavbjqcdhomuaddnqavbj +ddnqavbjqcdhomuadiiqutzn +ddnqavbjqcdhomuadndrjssr +ddnqavbjqcdhomuadwyssqez +ddnqavbjqcdhomuaegjuqmpg +ddnqavbjqcdhomuaelevflik +ddnqavbjqcdhomuaeuzwoizs +ddnqavbjqcdhomuaezuxdhsw +ddnqavbjqcdhomuafoazvcwh +ddnqavbjqcdhomuahanbdvpq +ddnqavbjqcdhomuahfibxuiu +ddnqavbjqcdhomuahkdcmtby +ddnqavbjqcdhomuahtydvqtb +ddnqavbjqcdhomuahytekpmf +ddnqavbjqcdhomuaiiegilwr +ddnqavbjqcdhomuairzhrjiz +ddnqavbjqcdhomuajbkjpftg +ddnqavbjqcdhomuajgfkeemk +ddnqavbjqcdhomuajlakydfo +ddnqavbjqcdhomuajuvmcaww +ddnqavbjqcdhomuakxrqrxft +ddnqavbjqcdhomualhcsptqa +ddnqavbjqcdhomualqxtyrci +ddnqavbjqcdhomuamaivwnmu +ddnqavbjqcdhomuamfdwlmfy +ddnqavbjqcdhomuamoyxujxb +ddnqavbjqcdhomuamttyjiqf +ddnqavbjqcdhomuapssfqqjt +ddnqavbjqcdhomuapxngfpcx +ddnqavbjqcdhomuaqcdhomua +ddnqavbjqcdhomuaqlyixkgi +ddnqavbjqcdhomuaqvokbhxq +ddnqavbjqcdhomuaraelkfjy +ddnqavbjqcdhomuarounibuf +ddnqavbjqlyixkgiaoffckzd +ddnqavbjqlyixkgiatafwjsh +ddnqavbjqlyixkgibhlijevx +ddnqavbjqlyixkgibrbjscia +ddnqavbjqlyixkgicyxowxpb +ddnqavbjqlyixkgiddnqavbj +ddnqavbjqlyixkgidiiqutzn +ddnqavbjqlyixkgidndrjssr +ddnqavbjqlyixkgidwyssqez +ddnqavbjqlyixkgiegjuqmpg +ddnqavbjqlyixkgielevflik +ddnqavbjqlyixkgieuzwoizs +ddnqavbjqlyixkgiezuxdhsw +ddnqavbjqlyixkgifoazvcwh +ddnqavbjqlyixkgihanbdvpq +ddnqavbjqlyixkgihfibxuiu +ddnqavbjqlyixkgihkdcmtby +ddnqavbjqlyixkgihtydvqtb +ddnqavbjqlyixkgihytekpmf +ddnqavbjqlyixkgiiiegilwr +ddnqavbjqlyixkgiirzhrjiz +ddnqavbjqlyixkgijbkjpftg +ddnqavbjqlyixkgijgfkeemk +ddnqavbjqlyixkgijlakydfo +ddnqavbjqlyixkgijuvmcaww +ddnqavbjqlyixkgikxrqrxft +ddnqavbjqlyixkgilhcsptqa +ddnqavbjqlyixkgilqxtyrci +ddnqavbjqlyixkgimaivwnmu +ddnqavbjqlyixkgimfdwlmfy +ddnqavbjqlyixkgimoyxujxb +ddnqavbjqlyixkgimttyjiqf +ddnqavbjqlyixkgipssfqqjt +ddnqavbjqlyixkgipxngfpcx +ddnqavbjqlyixkgiqcdhomua +ddnqavbjqlyixkgiqlyixkgi +ddnqavbjqlyixkgiqvokbhxq +ddnqavbjqlyixkgiraelkfjy +ddnqavbjqlyixkgirounibuf +ddnqavbjqvokbhxqaoffckzd +ddnqavbjqvokbhxqatafwjsh +ddnqavbjqvokbhxqbhlijevx +ddnqavbjqvokbhxqbrbjscia +ddnqavbjqvokbhxqcyxowxpb +ddnqavbjqvokbhxqddnqavbj +ddnqavbjqvokbhxqdiiqutzn +ddnqavbjqvokbhxqdndrjssr +ddnqavbjqvokbhxqdwyssqez +ddnqavbjqvokbhxqegjuqmpg +ddnqavbjqvokbhxqelevflik +ddnqavbjqvokbhxqeuzwoizs +ddnqavbjqvokbhxqezuxdhsw +ddnqavbjqvokbhxqfoazvcwh +ddnqavbjqvokbhxqhanbdvpq +ddnqavbjqvokbhxqhfibxuiu +ddnqavbjqvokbhxqhkdcmtby +ddnqavbjqvokbhxqhtydvqtb +ddnqavbjqvokbhxqhytekpmf +ddnqavbjqvokbhxqiiegilwr +ddnqavbjqvokbhxqirzhrjiz +ddnqavbjqvokbhxqjbkjpftg +ddnqavbjqvokbhxqjgfkeemk +ddnqavbjqvokbhxqjlakydfo +ddnqavbjqvokbhxqjuvmcaww +ddnqavbjqvokbhxqkxrqrxft +ddnqavbjqvokbhxqlhcsptqa +ddnqavbjqvokbhxqlqxtyrci +ddnqavbjqvokbhxqmaivwnmu +ddnqavbjqvokbhxqmfdwlmfy +ddnqavbjqvokbhxqmoyxujxb +ddnqavbjqvokbhxqmttyjiqf +ddnqavbjqvokbhxqpssfqqjt +ddnqavbjqvokbhxqpxngfpcx +ddnqavbjqvokbhxqqcdhomua +ddnqavbjqvokbhxqqlyixkgi +ddnqavbjqvokbhxqqvokbhxq +ddnqavbjqvokbhxqraelkfjy +ddnqavbjqvokbhxqrounibuf +ddnqavbjraelkfjyaoffckzd +ddnqavbjraelkfjyatafwjsh +ddnqavbjraelkfjybhlijevx +ddnqavbjraelkfjybrbjscia +ddnqavbjraelkfjycyxowxpb +ddnqavbjraelkfjyddnqavbj +ddnqavbjraelkfjydiiqutzn +ddnqavbjraelkfjydndrjssr +ddnqavbjraelkfjydwyssqez +ddnqavbjraelkfjyegjuqmpg +ddnqavbjraelkfjyelevflik +ddnqavbjraelkfjyeuzwoizs +ddnqavbjraelkfjyezuxdhsw +ddnqavbjraelkfjyfoazvcwh +ddnqavbjraelkfjyhanbdvpq +ddnqavbjraelkfjyhfibxuiu +ddnqavbjraelkfjyhkdcmtby +ddnqavbjraelkfjyhtydvqtb +ddnqavbjraelkfjyhytekpmf +ddnqavbjraelkfjyiiegilwr +ddnqavbjraelkfjyirzhrjiz +ddnqavbjraelkfjyjbkjpftg +ddnqavbjraelkfjyjgfkeemk +ddnqavbjraelkfjyjlakydfo +ddnqavbjraelkfjyjuvmcaww +ddnqavbjraelkfjykxrqrxft +ddnqavbjraelkfjylhcsptqa +ddnqavbjraelkfjylqxtyrci +ddnqavbjraelkfjymaivwnmu +ddnqavbjraelkfjymfdwlmfy +ddnqavbjraelkfjymoyxujxb +ddnqavbjraelkfjymttyjiqf +ddnqavbjraelkfjypssfqqjt +ddnqavbjraelkfjypxngfpcx +ddnqavbjraelkfjyqcdhomua +ddnqavbjraelkfjyqlyixkgi +ddnqavbjraelkfjyqvokbhxq +ddnqavbjraelkfjyraelkfjy +ddnqavbjraelkfjyrounibuf +ddnqavbjrounibufaoffckzd +ddnqavbjrounibufatafwjsh +ddnqavbjrounibufbhlijevx +ddnqavbjrounibufbrbjscia +ddnqavbjrounibufcyxowxpb +ddnqavbjrounibufddnqavbj +ddnqavbjrounibufdiiqutzn +ddnqavbjrounibufdndrjssr +ddnqavbjrounibufdwyssqez +ddnqavbjrounibufegjuqmpg +ddnqavbjrounibufelevflik +ddnqavbjrounibufeuzwoizs +ddnqavbjrounibufezuxdhsw +ddnqavbjrounibuffoazvcwh +ddnqavbjrounibufhanbdvpq +ddnqavbjrounibufhfibxuiu +ddnqavbjrounibufhkdcmtby +ddnqavbjrounibufhtydvqtb +ddnqavbjrounibufhytekpmf +ddnqavbjrounibufiiegilwr +ddnqavbjrounibufirzhrjiz +ddnqavbjrounibufjbkjpftg +ddnqavbjrounibufjgfkeemk +ddnqavbjrounibufjlakydfo +ddnqavbjrounibufjuvmcaww +ddnqavbjrounibufkxrqrxft +ddnqavbjrounibuflhcsptqa +ddnqavbjrounibuflqxtyrci +ddnqavbjrounibufmaivwnmu +ddnqavbjrounibufmfdwlmfy +ddnqavbjrounibufmoyxujxb +ddnqavbjrounibufmttyjiqf +ddnqavbjrounibufpssfqqjt +ddnqavbjrounibufpxngfpcx +ddnqavbjrounibufqcdhomua +ddnqavbjrounibufqlyixkgi +ddnqavbjrounibufqvokbhxq +ddnqavbjrounibufraelkfjy +ddnqavbjrounibufrounibuf +diiqutznaoffckzdaoffckzd +diiqutznaoffckzdatafwjsh +diiqutznaoffckzdbhlijevx +diiqutznaoffckzdbrbjscia +diiqutznaoffckzdcyxowxpb +diiqutznaoffckzdddnqavbj +diiqutznaoffckzddiiqutzn +diiqutznaoffckzddndrjssr +diiqutznaoffckzddwyssqez +diiqutznaoffckzdegjuqmpg +diiqutznaoffckzdelevflik +diiqutznaoffckzdeuzwoizs +diiqutznaoffckzdezuxdhsw +diiqutznaoffckzdfoazvcwh +diiqutznaoffckzdhanbdvpq +diiqutznaoffckzdhfibxuiu +diiqutznaoffckzdhkdcmtby +diiqutznaoffckzdhtydvqtb +diiqutznaoffckzdhytekpmf +diiqutznaoffckzdiiegilwr +diiqutznaoffckzdirzhrjiz +diiqutznaoffckzdjbkjpftg +diiqutznaoffckzdjgfkeemk +diiqutznaoffckzdjlakydfo +diiqutznaoffckzdjuvmcaww +diiqutznaoffckzdkxrqrxft +diiqutznaoffckzdlhcsptqa +diiqutznaoffckzdlqxtyrci +diiqutznaoffckzdmaivwnmu +diiqutznaoffckzdmfdwlmfy +diiqutznaoffckzdmoyxujxb +diiqutznaoffckzdmttyjiqf +diiqutznaoffckzdpssfqqjt +diiqutznaoffckzdpxngfpcx +diiqutznaoffckzdqcdhomua +diiqutznaoffckzdqlyixkgi +diiqutznaoffckzdqvokbhxq +diiqutznaoffckzdraelkfjy +diiqutznaoffckzdrounibuf +diiqutznatafwjshaoffckzd +diiqutznatafwjshatafwjsh +diiqutznatafwjshbhlijevx +diiqutznatafwjshbrbjscia +diiqutznatafwjshcyxowxpb +diiqutznatafwjshddnqavbj +diiqutznatafwjshdiiqutzn +diiqutznatafwjshdndrjssr +diiqutznatafwjshdwyssqez +diiqutznatafwjshegjuqmpg +diiqutznatafwjshelevflik +diiqutznatafwjsheuzwoizs +diiqutznatafwjshezuxdhsw +diiqutznatafwjshfoazvcwh +diiqutznatafwjshhanbdvpq +diiqutznatafwjshhfibxuiu +diiqutznatafwjshhkdcmtby +diiqutznatafwjshhtydvqtb +diiqutznatafwjshhytekpmf +diiqutznatafwjshiiegilwr +diiqutznatafwjshirzhrjiz +diiqutznatafwjshjbkjpftg +diiqutznatafwjshjgfkeemk +diiqutznatafwjshjlakydfo +diiqutznatafwjshjuvmcaww +diiqutznatafwjshkxrqrxft +diiqutznatafwjshlhcsptqa +diiqutznatafwjshlqxtyrci +diiqutznatafwjshmaivwnmu +diiqutznatafwjshmfdwlmfy +diiqutznatafwjshmoyxujxb +diiqutznatafwjshmttyjiqf +diiqutznatafwjshpssfqqjt +diiqutznatafwjshpxngfpcx +diiqutznatafwjshqcdhomua +diiqutznatafwjshqlyixkgi +diiqutznatafwjshqvokbhxq +diiqutznatafwjshraelkfjy +diiqutznatafwjshrounibuf +diiqutznbhlijevxaoffckzd +diiqutznbhlijevxatafwjsh +diiqutznbhlijevxbhlijevx +diiqutznbhlijevxbrbjscia +diiqutznbhlijevxcyxowxpb +diiqutznbhlijevxddnqavbj +diiqutznbhlijevxdiiqutzn +diiqutznbhlijevxdndrjssr +diiqutznbhlijevxdwyssqez +diiqutznbhlijevxegjuqmpg +diiqutznbhlijevxelevflik +diiqutznbhlijevxeuzwoizs +diiqutznbhlijevxezuxdhsw +diiqutznbhlijevxfoazvcwh +diiqutznbhlijevxhanbdvpq +diiqutznbhlijevxhfibxuiu +diiqutznbhlijevxhkdcmtby +diiqutznbhlijevxhtydvqtb +diiqutznbhlijevxhytekpmf +diiqutznbhlijevxiiegilwr +diiqutznbhlijevxirzhrjiz +diiqutznbhlijevxjbkjpftg +diiqutznbhlijevxjgfkeemk +diiqutznbhlijevxjlakydfo +diiqutznbhlijevxjuvmcaww +diiqutznbhlijevxkxrqrxft +diiqutznbhlijevxlhcsptqa +diiqutznbhlijevxlqxtyrci +diiqutznbhlijevxmaivwnmu +diiqutznbhlijevxmfdwlmfy +diiqutznbhlijevxmoyxujxb +diiqutznbhlijevxmttyjiqf +diiqutznbhlijevxpssfqqjt +diiqutznbhlijevxpxngfpcx +diiqutznbhlijevxqcdhomua +diiqutznbhlijevxqlyixkgi +diiqutznbhlijevxqvokbhxq +diiqutznbhlijevxraelkfjy +diiqutznbhlijevxrounibuf +diiqutznbrbjsciaaoffckzd +diiqutznbrbjsciaatafwjsh +diiqutznbrbjsciabhlijevx +diiqutznbrbjsciabrbjscia +diiqutznbrbjsciacyxowxpb +diiqutznbrbjsciaddnqavbj +diiqutznbrbjsciadiiqutzn +diiqutznbrbjsciadndrjssr +diiqutznbrbjsciadwyssqez +diiqutznbrbjsciaegjuqmpg +diiqutznbrbjsciaelevflik +diiqutznbrbjsciaeuzwoizs +diiqutznbrbjsciaezuxdhsw +diiqutznbrbjsciafoazvcwh +diiqutznbrbjsciahanbdvpq +diiqutznbrbjsciahfibxuiu +diiqutznbrbjsciahkdcmtby +diiqutznbrbjsciahtydvqtb +diiqutznbrbjsciahytekpmf +diiqutznbrbjsciaiiegilwr +diiqutznbrbjsciairzhrjiz +diiqutznbrbjsciajbkjpftg +diiqutznbrbjsciajgfkeemk +diiqutznbrbjsciajlakydfo +diiqutznbrbjsciajuvmcaww +diiqutznbrbjsciakxrqrxft +diiqutznbrbjscialhcsptqa +diiqutznbrbjscialqxtyrci +diiqutznbrbjsciamaivwnmu +diiqutznbrbjsciamfdwlmfy +diiqutznbrbjsciamoyxujxb +diiqutznbrbjsciamttyjiqf +diiqutznbrbjsciapssfqqjt +diiqutznbrbjsciapxngfpcx +diiqutznbrbjsciaqcdhomua +diiqutznbrbjsciaqlyixkgi +diiqutznbrbjsciaqvokbhxq +diiqutznbrbjsciaraelkfjy +diiqutznbrbjsciarounibuf +diiqutzncyxowxpbaoffckzd +diiqutzncyxowxpbatafwjsh +diiqutzncyxowxpbbhlijevx +diiqutzncyxowxpbbrbjscia +diiqutzncyxowxpbcyxowxpb +diiqutzncyxowxpbddnqavbj +diiqutzncyxowxpbdiiqutzn +diiqutzncyxowxpbdndrjssr +diiqutzncyxowxpbdwyssqez +diiqutzncyxowxpbegjuqmpg +diiqutzncyxowxpbelevflik +diiqutzncyxowxpbeuzwoizs +diiqutzncyxowxpbezuxdhsw +diiqutzncyxowxpbfoazvcwh +diiqutzncyxowxpbhanbdvpq +diiqutzncyxowxpbhfibxuiu +diiqutzncyxowxpbhkdcmtby +diiqutzncyxowxpbhtydvqtb +diiqutzncyxowxpbhytekpmf +diiqutzncyxowxpbiiegilwr +diiqutzncyxowxpbirzhrjiz +diiqutzncyxowxpbjbkjpftg +diiqutzncyxowxpbjgfkeemk +diiqutzncyxowxpbjlakydfo +diiqutzncyxowxpbjuvmcaww +diiqutzncyxowxpbkxrqrxft +diiqutzncyxowxpblhcsptqa +diiqutzncyxowxpblqxtyrci +diiqutzncyxowxpbmaivwnmu +diiqutzncyxowxpbmfdwlmfy +diiqutzncyxowxpbmoyxujxb +diiqutzncyxowxpbmttyjiqf +diiqutzncyxowxpbpssfqqjt +diiqutzncyxowxpbpxngfpcx +diiqutzncyxowxpbqcdhomua +diiqutzncyxowxpbqlyixkgi +diiqutzncyxowxpbqvokbhxq +diiqutzncyxowxpbraelkfjy +diiqutzncyxowxpbrounibuf +diiqutznddnqavbjaoffckzd +diiqutznddnqavbjatafwjsh +diiqutznddnqavbjbhlijevx +diiqutznddnqavbjbrbjscia +diiqutznddnqavbjcyxowxpb +diiqutznddnqavbjddnqavbj +diiqutznddnqavbjdiiqutzn +diiqutznddnqavbjdndrjssr +diiqutznddnqavbjdwyssqez +diiqutznddnqavbjegjuqmpg +diiqutznddnqavbjelevflik +diiqutznddnqavbjeuzwoizs +diiqutznddnqavbjezuxdhsw +diiqutznddnqavbjfoazvcwh +diiqutznddnqavbjhanbdvpq +diiqutznddnqavbjhfibxuiu +diiqutznddnqavbjhkdcmtby +diiqutznddnqavbjhtydvqtb +diiqutznddnqavbjhytekpmf +diiqutznddnqavbjiiegilwr +diiqutznddnqavbjirzhrjiz +diiqutznddnqavbjjbkjpftg +diiqutznddnqavbjjgfkeemk +diiqutznddnqavbjjlakydfo +diiqutznddnqavbjjuvmcaww +diiqutznddnqavbjkxrqrxft +diiqutznddnqavbjlhcsptqa +diiqutznddnqavbjlqxtyrci +diiqutznddnqavbjmaivwnmu +diiqutznddnqavbjmfdwlmfy +diiqutznddnqavbjmoyxujxb +diiqutznddnqavbjmttyjiqf +diiqutznddnqavbjpssfqqjt +diiqutznddnqavbjpxngfpcx +diiqutznddnqavbjqcdhomua +diiqutznddnqavbjqlyixkgi +diiqutznddnqavbjqvokbhxq +diiqutznddnqavbjraelkfjy +diiqutznddnqavbjrounibuf +diiqutzndiiqutznaoffckzd +diiqutzndiiqutznatafwjsh +diiqutzndiiqutznbhlijevx +diiqutzndiiqutznbrbjscia +diiqutzndiiqutzncyxowxpb +diiqutzndiiqutznddnqavbj +diiqutzndiiqutzndiiqutzn +diiqutzndiiqutzndndrjssr +diiqutzndiiqutzndwyssqez +diiqutzndiiqutznegjuqmpg +diiqutzndiiqutznelevflik +diiqutzndiiqutzneuzwoizs +diiqutzndiiqutznezuxdhsw +diiqutzndiiqutznfoazvcwh +diiqutzndiiqutznhanbdvpq +diiqutzndiiqutznhfibxuiu +diiqutzndiiqutznhkdcmtby +diiqutzndiiqutznhtydvqtb +diiqutzndiiqutznhytekpmf +diiqutzndiiqutzniiegilwr +diiqutzndiiqutznirzhrjiz +diiqutzndiiqutznjbkjpftg +diiqutzndiiqutznjgfkeemk +diiqutzndiiqutznjlakydfo +diiqutzndiiqutznjuvmcaww +diiqutzndiiqutznkxrqrxft +diiqutzndiiqutznlhcsptqa +diiqutzndiiqutznlqxtyrci +diiqutzndiiqutznmaivwnmu +diiqutzndiiqutznmfdwlmfy +diiqutzndiiqutznmoyxujxb +diiqutzndiiqutznmttyjiqf +diiqutzndiiqutznpssfqqjt +diiqutzndiiqutznpxngfpcx +diiqutzndiiqutznqcdhomua +diiqutzndiiqutznqlyixkgi +diiqutzndiiqutznqvokbhxq +diiqutzndiiqutznraelkfjy +diiqutzndiiqutznrounibuf +diiqutzndndrjssraoffckzd +diiqutzndndrjssratafwjsh +diiqutzndndrjssrbhlijevx +diiqutzndndrjssrbrbjscia +diiqutzndndrjssrcyxowxpb +diiqutzndndrjssrddnqavbj +diiqutzndndrjssrdiiqutzn +diiqutzndndrjssrdndrjssr +diiqutzndndrjssrdwyssqez +diiqutzndndrjssregjuqmpg +diiqutzndndrjssrelevflik +diiqutzndndrjssreuzwoizs +diiqutzndndrjssrezuxdhsw +diiqutzndndrjssrfoazvcwh +diiqutzndndrjssrhanbdvpq +diiqutzndndrjssrhfibxuiu +diiqutzndndrjssrhkdcmtby +diiqutzndndrjssrhtydvqtb +diiqutzndndrjssrhytekpmf +diiqutzndndrjssriiegilwr +diiqutzndndrjssrirzhrjiz +diiqutzndndrjssrjbkjpftg +diiqutzndndrjssrjgfkeemk +diiqutzndndrjssrjlakydfo +diiqutzndndrjssrjuvmcaww +diiqutzndndrjssrkxrqrxft +diiqutzndndrjssrlhcsptqa +diiqutzndndrjssrlqxtyrci +diiqutzndndrjssrmaivwnmu +diiqutzndndrjssrmfdwlmfy +diiqutzndndrjssrmoyxujxb +diiqutzndndrjssrmttyjiqf +diiqutzndndrjssrpssfqqjt +diiqutzndndrjssrpxngfpcx +diiqutzndndrjssrqcdhomua +diiqutzndndrjssrqlyixkgi +diiqutzndndrjssrqvokbhxq +diiqutzndndrjssrraelkfjy +diiqutzndndrjssrrounibuf +diiqutzndwyssqezaoffckzd +diiqutzndwyssqezatafwjsh +diiqutzndwyssqezbhlijevx +diiqutzndwyssqezbrbjscia +diiqutzndwyssqezcyxowxpb +diiqutzndwyssqezddnqavbj +diiqutzndwyssqezdiiqutzn +diiqutzndwyssqezdndrjssr +diiqutzndwyssqezdwyssqez +diiqutzndwyssqezegjuqmpg +diiqutzndwyssqezelevflik +diiqutzndwyssqezeuzwoizs +diiqutzndwyssqezezuxdhsw +diiqutzndwyssqezfoazvcwh +diiqutzndwyssqezhanbdvpq +diiqutzndwyssqezhfibxuiu +diiqutzndwyssqezhkdcmtby +diiqutzndwyssqezhtydvqtb +diiqutzndwyssqezhytekpmf +diiqutzndwyssqeziiegilwr +diiqutzndwyssqezirzhrjiz +diiqutzndwyssqezjbkjpftg +diiqutzndwyssqezjgfkeemk +diiqutzndwyssqezjlakydfo +diiqutzndwyssqezjuvmcaww +diiqutzndwyssqezkxrqrxft +diiqutzndwyssqezlhcsptqa +diiqutzndwyssqezlqxtyrci +diiqutzndwyssqezmaivwnmu +diiqutzndwyssqezmfdwlmfy +diiqutzndwyssqezmoyxujxb +diiqutzndwyssqezmttyjiqf +diiqutzndwyssqezpssfqqjt +diiqutzndwyssqezpxngfpcx +diiqutzndwyssqezqcdhomua +diiqutzndwyssqezqlyixkgi +diiqutzndwyssqezqvokbhxq +diiqutzndwyssqezraelkfjy +diiqutzndwyssqezrounibuf +diiqutznegjuqmpgaoffckzd +diiqutznegjuqmpgatafwjsh +diiqutznegjuqmpgbhlijevx +diiqutznegjuqmpgbrbjscia +diiqutznegjuqmpgcyxowxpb +diiqutznegjuqmpgddnqavbj +diiqutznegjuqmpgdiiqutzn +diiqutznegjuqmpgdndrjssr +diiqutznegjuqmpgdwyssqez +diiqutznegjuqmpgegjuqmpg +diiqutznegjuqmpgelevflik +diiqutznegjuqmpgeuzwoizs +diiqutznegjuqmpgezuxdhsw +diiqutznegjuqmpgfoazvcwh +diiqutznegjuqmpghanbdvpq +diiqutznegjuqmpghfibxuiu +diiqutznegjuqmpghkdcmtby +diiqutznegjuqmpghtydvqtb +diiqutznegjuqmpghytekpmf +diiqutznegjuqmpgiiegilwr +diiqutznegjuqmpgirzhrjiz +diiqutznegjuqmpgjbkjpftg +diiqutznegjuqmpgjgfkeemk +diiqutznegjuqmpgjlakydfo +diiqutznegjuqmpgjuvmcaww +diiqutznegjuqmpgkxrqrxft +diiqutznegjuqmpglhcsptqa +diiqutznegjuqmpglqxtyrci +diiqutznegjuqmpgmaivwnmu +diiqutznegjuqmpgmfdwlmfy +diiqutznegjuqmpgmoyxujxb +diiqutznegjuqmpgmttyjiqf +diiqutznegjuqmpgpssfqqjt +diiqutznegjuqmpgpxngfpcx +diiqutznegjuqmpgqcdhomua +diiqutznegjuqmpgqlyixkgi +diiqutznegjuqmpgqvokbhxq +diiqutznegjuqmpgraelkfjy +diiqutznegjuqmpgrounibuf +diiqutznelevflikaoffckzd +diiqutznelevflikatafwjsh +diiqutznelevflikbhlijevx +diiqutznelevflikbrbjscia +diiqutznelevflikcyxowxpb +diiqutznelevflikddnqavbj +diiqutznelevflikdiiqutzn +diiqutznelevflikdndrjssr +diiqutznelevflikdwyssqez +diiqutznelevflikegjuqmpg +diiqutznelevflikelevflik +diiqutznelevflikeuzwoizs +diiqutznelevflikezuxdhsw +diiqutznelevflikfoazvcwh +diiqutznelevflikhanbdvpq +diiqutznelevflikhfibxuiu +diiqutznelevflikhkdcmtby +diiqutznelevflikhtydvqtb +diiqutznelevflikhytekpmf +diiqutznelevflikiiegilwr +diiqutznelevflikirzhrjiz +diiqutznelevflikjbkjpftg +diiqutznelevflikjgfkeemk +diiqutznelevflikjlakydfo +diiqutznelevflikjuvmcaww +diiqutznelevflikkxrqrxft +diiqutznelevfliklhcsptqa +diiqutznelevfliklqxtyrci +diiqutznelevflikmaivwnmu +diiqutznelevflikmfdwlmfy +diiqutznelevflikmoyxujxb +diiqutznelevflikmttyjiqf +diiqutznelevflikpssfqqjt +diiqutznelevflikpxngfpcx +diiqutznelevflikqcdhomua +diiqutznelevflikqlyixkgi +diiqutznelevflikqvokbhxq +diiqutznelevflikraelkfjy +diiqutznelevflikrounibuf +diiqutzneuzwoizsaoffckzd +diiqutzneuzwoizsatafwjsh +diiqutzneuzwoizsbhlijevx +diiqutzneuzwoizsbrbjscia +diiqutzneuzwoizscyxowxpb +diiqutzneuzwoizsddnqavbj +diiqutzneuzwoizsdiiqutzn +diiqutzneuzwoizsdndrjssr +diiqutzneuzwoizsdwyssqez +diiqutzneuzwoizsegjuqmpg +diiqutzneuzwoizselevflik +diiqutzneuzwoizseuzwoizs +diiqutzneuzwoizsezuxdhsw +diiqutzneuzwoizsfoazvcwh +diiqutzneuzwoizshanbdvpq +diiqutzneuzwoizshfibxuiu +diiqutzneuzwoizshkdcmtby +diiqutzneuzwoizshtydvqtb +diiqutzneuzwoizshytekpmf +diiqutzneuzwoizsiiegilwr +diiqutzneuzwoizsirzhrjiz +diiqutzneuzwoizsjbkjpftg +diiqutzneuzwoizsjgfkeemk +diiqutzneuzwoizsjlakydfo +diiqutzneuzwoizsjuvmcaww +diiqutzneuzwoizskxrqrxft +diiqutzneuzwoizslhcsptqa +diiqutzneuzwoizslqxtyrci +diiqutzneuzwoizsmaivwnmu +diiqutzneuzwoizsmfdwlmfy +diiqutzneuzwoizsmoyxujxb +diiqutzneuzwoizsmttyjiqf +diiqutzneuzwoizspssfqqjt +diiqutzneuzwoizspxngfpcx +diiqutzneuzwoizsqcdhomua +diiqutzneuzwoizsqlyixkgi +diiqutzneuzwoizsqvokbhxq +diiqutzneuzwoizsraelkfjy +diiqutzneuzwoizsrounibuf +diiqutznezuxdhswaoffckzd +diiqutznezuxdhswatafwjsh +diiqutznezuxdhswbhlijevx +diiqutznezuxdhswbrbjscia +diiqutznezuxdhswcyxowxpb +diiqutznezuxdhswddnqavbj +diiqutznezuxdhswdiiqutzn +diiqutznezuxdhswdndrjssr +diiqutznezuxdhswdwyssqez +diiqutznezuxdhswegjuqmpg +diiqutznezuxdhswelevflik +diiqutznezuxdhsweuzwoizs +diiqutznezuxdhswezuxdhsw +diiqutznezuxdhswfoazvcwh +diiqutznezuxdhswhanbdvpq +diiqutznezuxdhswhfibxuiu +diiqutznezuxdhswhkdcmtby +diiqutznezuxdhswhtydvqtb +diiqutznezuxdhswhytekpmf +diiqutznezuxdhswiiegilwr +diiqutznezuxdhswirzhrjiz +diiqutznezuxdhswjbkjpftg +diiqutznezuxdhswjgfkeemk +diiqutznezuxdhswjlakydfo +diiqutznezuxdhswjuvmcaww +diiqutznezuxdhswkxrqrxft +diiqutznezuxdhswlhcsptqa +diiqutznezuxdhswlqxtyrci +diiqutznezuxdhswmaivwnmu +diiqutznezuxdhswmfdwlmfy +diiqutznezuxdhswmoyxujxb +diiqutznezuxdhswmttyjiqf +diiqutznezuxdhswpssfqqjt +diiqutznezuxdhswpxngfpcx +diiqutznezuxdhswqcdhomua +diiqutznezuxdhswqlyixkgi +diiqutznezuxdhswqvokbhxq +diiqutznezuxdhswraelkfjy +diiqutznezuxdhswrounibuf +diiqutznfoazvcwhaoffckzd +diiqutznfoazvcwhatafwjsh +diiqutznfoazvcwhbhlijevx +diiqutznfoazvcwhbrbjscia +diiqutznfoazvcwhcyxowxpb +diiqutznfoazvcwhddnqavbj +diiqutznfoazvcwhdiiqutzn +diiqutznfoazvcwhdndrjssr +diiqutznfoazvcwhdwyssqez +diiqutznfoazvcwhegjuqmpg +diiqutznfoazvcwhelevflik +diiqutznfoazvcwheuzwoizs +diiqutznfoazvcwhezuxdhsw +diiqutznfoazvcwhfoazvcwh +diiqutznfoazvcwhhanbdvpq +diiqutznfoazvcwhhfibxuiu +diiqutznfoazvcwhhkdcmtby +diiqutznfoazvcwhhtydvqtb +diiqutznfoazvcwhhytekpmf +diiqutznfoazvcwhiiegilwr +diiqutznfoazvcwhirzhrjiz +diiqutznfoazvcwhjbkjpftg +diiqutznfoazvcwhjgfkeemk +diiqutznfoazvcwhjlakydfo +diiqutznfoazvcwhjuvmcaww +diiqutznfoazvcwhkxrqrxft +diiqutznfoazvcwhlhcsptqa +diiqutznfoazvcwhlqxtyrci +diiqutznfoazvcwhmaivwnmu +diiqutznfoazvcwhmfdwlmfy +diiqutznfoazvcwhmoyxujxb +diiqutznfoazvcwhmttyjiqf +diiqutznfoazvcwhpssfqqjt +diiqutznfoazvcwhpxngfpcx +diiqutznfoazvcwhqcdhomua +diiqutznfoazvcwhqlyixkgi +diiqutznfoazvcwhqvokbhxq +diiqutznfoazvcwhraelkfjy +diiqutznfoazvcwhrounibuf +diiqutznhanbdvpqaoffckzd +diiqutznhanbdvpqatafwjsh +diiqutznhanbdvpqbhlijevx +diiqutznhanbdvpqbrbjscia +diiqutznhanbdvpqcyxowxpb +diiqutznhanbdvpqddnqavbj +diiqutznhanbdvpqdiiqutzn +diiqutznhanbdvpqdndrjssr +diiqutznhanbdvpqdwyssqez +diiqutznhanbdvpqegjuqmpg +diiqutznhanbdvpqelevflik +diiqutznhanbdvpqeuzwoizs +diiqutznhanbdvpqezuxdhsw +diiqutznhanbdvpqfoazvcwh +diiqutznhanbdvpqhanbdvpq +diiqutznhanbdvpqhfibxuiu +diiqutznhanbdvpqhkdcmtby +diiqutznhanbdvpqhtydvqtb +diiqutznhanbdvpqhytekpmf +diiqutznhanbdvpqiiegilwr +diiqutznhanbdvpqirzhrjiz +diiqutznhanbdvpqjbkjpftg +diiqutznhanbdvpqjgfkeemk +diiqutznhanbdvpqjlakydfo +diiqutznhanbdvpqjuvmcaww +diiqutznhanbdvpqkxrqrxft +diiqutznhanbdvpqlhcsptqa +diiqutznhanbdvpqlqxtyrci +diiqutznhanbdvpqmaivwnmu +diiqutznhanbdvpqmfdwlmfy +diiqutznhanbdvpqmoyxujxb +diiqutznhanbdvpqmttyjiqf +diiqutznhanbdvpqpssfqqjt +diiqutznhanbdvpqpxngfpcx +diiqutznhanbdvpqqcdhomua +diiqutznhanbdvpqqlyixkgi +diiqutznhanbdvpqqvokbhxq +diiqutznhanbdvpqraelkfjy +diiqutznhanbdvpqrounibuf +diiqutznhfibxuiuaoffckzd +diiqutznhfibxuiuatafwjsh +diiqutznhfibxuiubhlijevx +diiqutznhfibxuiubrbjscia +diiqutznhfibxuiucyxowxpb +diiqutznhfibxuiuddnqavbj +diiqutznhfibxuiudiiqutzn +diiqutznhfibxuiudndrjssr +diiqutznhfibxuiudwyssqez +diiqutznhfibxuiuegjuqmpg +diiqutznhfibxuiuelevflik +diiqutznhfibxuiueuzwoizs +diiqutznhfibxuiuezuxdhsw +diiqutznhfibxuiufoazvcwh +diiqutznhfibxuiuhanbdvpq +diiqutznhfibxuiuhfibxuiu +diiqutznhfibxuiuhkdcmtby +diiqutznhfibxuiuhtydvqtb +diiqutznhfibxuiuhytekpmf +diiqutznhfibxuiuiiegilwr +diiqutznhfibxuiuirzhrjiz +diiqutznhfibxuiujbkjpftg +diiqutznhfibxuiujgfkeemk +diiqutznhfibxuiujlakydfo +diiqutznhfibxuiujuvmcaww +diiqutznhfibxuiukxrqrxft +diiqutznhfibxuiulhcsptqa +diiqutznhfibxuiulqxtyrci +diiqutznhfibxuiumaivwnmu +diiqutznhfibxuiumfdwlmfy +diiqutznhfibxuiumoyxujxb +diiqutznhfibxuiumttyjiqf +diiqutznhfibxuiupssfqqjt +diiqutznhfibxuiupxngfpcx +diiqutznhfibxuiuqcdhomua +diiqutznhfibxuiuqlyixkgi +diiqutznhfibxuiuqvokbhxq +diiqutznhfibxuiuraelkfjy +diiqutznhfibxuiurounibuf +diiqutznhkdcmtbyaoffckzd +diiqutznhkdcmtbyatafwjsh +diiqutznhkdcmtbybhlijevx +diiqutznhkdcmtbybrbjscia +diiqutznhkdcmtbycyxowxpb +diiqutznhkdcmtbyddnqavbj +diiqutznhkdcmtbydiiqutzn +diiqutznhkdcmtbydndrjssr +diiqutznhkdcmtbydwyssqez +diiqutznhkdcmtbyegjuqmpg +diiqutznhkdcmtbyelevflik +diiqutznhkdcmtbyeuzwoizs +diiqutznhkdcmtbyezuxdhsw +diiqutznhkdcmtbyfoazvcwh +diiqutznhkdcmtbyhanbdvpq +diiqutznhkdcmtbyhfibxuiu +diiqutznhkdcmtbyhkdcmtby +diiqutznhkdcmtbyhtydvqtb +diiqutznhkdcmtbyhytekpmf +diiqutznhkdcmtbyiiegilwr +diiqutznhkdcmtbyirzhrjiz +diiqutznhkdcmtbyjbkjpftg +diiqutznhkdcmtbyjgfkeemk +diiqutznhkdcmtbyjlakydfo +diiqutznhkdcmtbyjuvmcaww +diiqutznhkdcmtbykxrqrxft +diiqutznhkdcmtbylhcsptqa +diiqutznhkdcmtbylqxtyrci +diiqutznhkdcmtbymaivwnmu +diiqutznhkdcmtbymfdwlmfy +diiqutznhkdcmtbymoyxujxb +diiqutznhkdcmtbymttyjiqf +diiqutznhkdcmtbypssfqqjt +diiqutznhkdcmtbypxngfpcx +diiqutznhkdcmtbyqcdhomua +diiqutznhkdcmtbyqlyixkgi +diiqutznhkdcmtbyqvokbhxq +diiqutznhkdcmtbyraelkfjy +diiqutznhkdcmtbyrounibuf +diiqutznhtydvqtbaoffckzd +diiqutznhtydvqtbatafwjsh +diiqutznhtydvqtbbhlijevx +diiqutznhtydvqtbbrbjscia +diiqutznhtydvqtbcyxowxpb +diiqutznhtydvqtbddnqavbj +diiqutznhtydvqtbdiiqutzn +diiqutznhtydvqtbdndrjssr +diiqutznhtydvqtbdwyssqez +diiqutznhtydvqtbegjuqmpg +diiqutznhtydvqtbelevflik +diiqutznhtydvqtbeuzwoizs +diiqutznhtydvqtbezuxdhsw +diiqutznhtydvqtbfoazvcwh +diiqutznhtydvqtbhanbdvpq +diiqutznhtydvqtbhfibxuiu +diiqutznhtydvqtbhkdcmtby +diiqutznhtydvqtbhtydvqtb +diiqutznhtydvqtbhytekpmf +diiqutznhtydvqtbiiegilwr +diiqutznhtydvqtbirzhrjiz +diiqutznhtydvqtbjbkjpftg +diiqutznhtydvqtbjgfkeemk +diiqutznhtydvqtbjlakydfo +diiqutznhtydvqtbjuvmcaww +diiqutznhtydvqtbkxrqrxft +diiqutznhtydvqtblhcsptqa +diiqutznhtydvqtblqxtyrci +diiqutznhtydvqtbmaivwnmu +diiqutznhtydvqtbmfdwlmfy +diiqutznhtydvqtbmoyxujxb +diiqutznhtydvqtbmttyjiqf +diiqutznhtydvqtbpssfqqjt +diiqutznhtydvqtbpxngfpcx +diiqutznhtydvqtbqcdhomua +diiqutznhtydvqtbqlyixkgi +diiqutznhtydvqtbqvokbhxq +diiqutznhtydvqtbraelkfjy +diiqutznhtydvqtbrounibuf +diiqutznhytekpmfaoffckzd +diiqutznhytekpmfatafwjsh +diiqutznhytekpmfbhlijevx +diiqutznhytekpmfbrbjscia +diiqutznhytekpmfcyxowxpb +diiqutznhytekpmfddnqavbj +diiqutznhytekpmfdiiqutzn +diiqutznhytekpmfdndrjssr +diiqutznhytekpmfdwyssqez +diiqutznhytekpmfegjuqmpg +diiqutznhytekpmfelevflik +diiqutznhytekpmfeuzwoizs +diiqutznhytekpmfezuxdhsw +diiqutznhytekpmffoazvcwh +diiqutznhytekpmfhanbdvpq +diiqutznhytekpmfhfibxuiu +diiqutznhytekpmfhkdcmtby +diiqutznhytekpmfhtydvqtb +diiqutznhytekpmfhytekpmf +diiqutznhytekpmfiiegilwr +diiqutznhytekpmfirzhrjiz +diiqutznhytekpmfjbkjpftg +diiqutznhytekpmfjgfkeemk +diiqutznhytekpmfjlakydfo +diiqutznhytekpmfjuvmcaww +diiqutznhytekpmfkxrqrxft +diiqutznhytekpmflhcsptqa +diiqutznhytekpmflqxtyrci +diiqutznhytekpmfmaivwnmu +diiqutznhytekpmfmfdwlmfy +diiqutznhytekpmfmoyxujxb +diiqutznhytekpmfmttyjiqf +diiqutznhytekpmfpssfqqjt +diiqutznhytekpmfpxngfpcx +diiqutznhytekpmfqcdhomua +diiqutznhytekpmfqlyixkgi +diiqutznhytekpmfqvokbhxq +diiqutznhytekpmfraelkfjy +diiqutznhytekpmfrounibuf +diiqutzniiegilwraoffckzd +diiqutzniiegilwratafwjsh +diiqutzniiegilwrbhlijevx +diiqutzniiegilwrbrbjscia +diiqutzniiegilwrcyxowxpb +diiqutzniiegilwrddnqavbj +diiqutzniiegilwrdiiqutzn +diiqutzniiegilwrdndrjssr +diiqutzniiegilwrdwyssqez +diiqutzniiegilwregjuqmpg +diiqutzniiegilwrelevflik +diiqutzniiegilwreuzwoizs +diiqutzniiegilwrezuxdhsw +diiqutzniiegilwrfoazvcwh +diiqutzniiegilwrhanbdvpq +diiqutzniiegilwrhfibxuiu +diiqutzniiegilwrhkdcmtby +diiqutzniiegilwrhtydvqtb +diiqutzniiegilwrhytekpmf +diiqutzniiegilwriiegilwr +diiqutzniiegilwrirzhrjiz +diiqutzniiegilwrjbkjpftg +diiqutzniiegilwrjgfkeemk +diiqutzniiegilwrjlakydfo +diiqutzniiegilwrjuvmcaww +diiqutzniiegilwrkxrqrxft +diiqutzniiegilwrlhcsptqa +diiqutzniiegilwrlqxtyrci +diiqutzniiegilwrmaivwnmu +diiqutzniiegilwrmfdwlmfy +diiqutzniiegilwrmoyxujxb +diiqutzniiegilwrmttyjiqf +diiqutzniiegilwrpssfqqjt +diiqutzniiegilwrpxngfpcx +diiqutzniiegilwrqcdhomua +diiqutzniiegilwrqlyixkgi +diiqutzniiegilwrqvokbhxq +diiqutzniiegilwrraelkfjy +diiqutzniiegilwrrounibuf +diiqutznirzhrjizaoffckzd +diiqutznirzhrjizatafwjsh +diiqutznirzhrjizbhlijevx +diiqutznirzhrjizbrbjscia +diiqutznirzhrjizcyxowxpb +diiqutznirzhrjizddnqavbj +diiqutznirzhrjizdiiqutzn +diiqutznirzhrjizdndrjssr +diiqutznirzhrjizdwyssqez +diiqutznirzhrjizegjuqmpg +diiqutznirzhrjizelevflik +diiqutznirzhrjizeuzwoizs +diiqutznirzhrjizezuxdhsw +diiqutznirzhrjizfoazvcwh +diiqutznirzhrjizhanbdvpq +diiqutznirzhrjizhfibxuiu +diiqutznirzhrjizhkdcmtby +diiqutznirzhrjizhtydvqtb +diiqutznirzhrjizhytekpmf +diiqutznirzhrjiziiegilwr +diiqutznirzhrjizirzhrjiz +diiqutznirzhrjizjbkjpftg +diiqutznirzhrjizjgfkeemk +diiqutznirzhrjizjlakydfo +diiqutznirzhrjizjuvmcaww +diiqutznirzhrjizkxrqrxft +diiqutznirzhrjizlhcsptqa +diiqutznirzhrjizlqxtyrci +diiqutznirzhrjizmaivwnmu +diiqutznirzhrjizmfdwlmfy +diiqutznirzhrjizmoyxujxb +diiqutznirzhrjizmttyjiqf +diiqutznirzhrjizpssfqqjt +diiqutznirzhrjizpxngfpcx +diiqutznirzhrjizqcdhomua +diiqutznirzhrjizqlyixkgi +diiqutznirzhrjizqvokbhxq +diiqutznirzhrjizraelkfjy +diiqutznirzhrjizrounibuf +diiqutznjbkjpftgaoffckzd +diiqutznjbkjpftgatafwjsh +diiqutznjbkjpftgbhlijevx +diiqutznjbkjpftgbrbjscia +diiqutznjbkjpftgcyxowxpb +diiqutznjbkjpftgddnqavbj +diiqutznjbkjpftgdiiqutzn +diiqutznjbkjpftgdndrjssr +diiqutznjbkjpftgdwyssqez +diiqutznjbkjpftgegjuqmpg +diiqutznjbkjpftgelevflik +diiqutznjbkjpftgeuzwoizs +diiqutznjbkjpftgezuxdhsw +diiqutznjbkjpftgfoazvcwh +diiqutznjbkjpftghanbdvpq +diiqutznjbkjpftghfibxuiu +diiqutznjbkjpftghkdcmtby +diiqutznjbkjpftghtydvqtb +diiqutznjbkjpftghytekpmf +diiqutznjbkjpftgiiegilwr +diiqutznjbkjpftgirzhrjiz +diiqutznjbkjpftgjbkjpftg +diiqutznjbkjpftgjgfkeemk +diiqutznjbkjpftgjlakydfo +diiqutznjbkjpftgjuvmcaww +diiqutznjbkjpftgkxrqrxft +diiqutznjbkjpftglhcsptqa +diiqutznjbkjpftglqxtyrci +diiqutznjbkjpftgmaivwnmu +diiqutznjbkjpftgmfdwlmfy +diiqutznjbkjpftgmoyxujxb +diiqutznjbkjpftgmttyjiqf +diiqutznjbkjpftgpssfqqjt +diiqutznjbkjpftgpxngfpcx +diiqutznjbkjpftgqcdhomua +diiqutznjbkjpftgqlyixkgi +diiqutznjbkjpftgqvokbhxq +diiqutznjbkjpftgraelkfjy +diiqutznjbkjpftgrounibuf +diiqutznjgfkeemkaoffckzd +diiqutznjgfkeemkatafwjsh +diiqutznjgfkeemkbhlijevx +diiqutznjgfkeemkbrbjscia +diiqutznjgfkeemkcyxowxpb +diiqutznjgfkeemkddnqavbj +diiqutznjgfkeemkdiiqutzn +diiqutznjgfkeemkdndrjssr +diiqutznjgfkeemkdwyssqez +diiqutznjgfkeemkegjuqmpg +diiqutznjgfkeemkelevflik +diiqutznjgfkeemkeuzwoizs +diiqutznjgfkeemkezuxdhsw +diiqutznjgfkeemkfoazvcwh +diiqutznjgfkeemkhanbdvpq +diiqutznjgfkeemkhfibxuiu diff --git a/p1circularlinkedlist/libs/JavaGrading-0.1.jar b/EXAM0119LinearProbing/libs/JavaGrading-0.1.jar similarity index 100% rename from p1circularlinkedlist/libs/JavaGrading-0.1.jar rename to EXAM0119LinearProbing/libs/JavaGrading-0.1.jar diff --git a/median/hamcrest-core-1.3.jar b/EXAM0119LinearProbing/libs/hamcrest-core-1.3.jar similarity index 100% rename from median/hamcrest-core-1.3.jar rename to EXAM0119LinearProbing/libs/hamcrest-core-1.3.jar diff --git a/median/junit-4.12.jar b/EXAM0119LinearProbing/libs/junit-4.12.jar similarity index 100% rename from median/junit-4.12.jar rename to EXAM0119LinearProbing/libs/junit-4.12.jar diff --git a/EXAM0119LinearProbing/public/LSINF1121_EXAM0119_LinearProbing.zip b/EXAM0119LinearProbing/public/LSINF1121_EXAM0119_LinearProbing.zip new file mode 100644 index 00000000..e45bad74 Binary files /dev/null and b/EXAM0119LinearProbing/public/LSINF1121_EXAM0119_LinearProbing.zip differ diff --git a/EXAM0119LinearProbing/run b/EXAM0119LinearProbing/run new file mode 100644 index 00000000..724560b6 --- /dev/null +++ b/EXAM0119LinearProbing/run @@ -0,0 +1,34 @@ +#! /bin/python3 +# coding: utf-8 + +from inginious import input +from inginious import feedback +import subprocess +from inginious import rst +import re + +input.parse_template("student/LinearProbingHashST.java") + +compile_error = subprocess.call('javac -cp ".:libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar" tests/*.java student/LinearProbingHashST.java 2>&1', shell=True, stdout=open('compiler.out', 'w')) + +if compile_error != 0: + codeblock = rst.get_codeblock("java", open('compiler.out').read()) + feedback.set_global_feedback("Votre code ne compile pas: \n\n" + codeblock, True) + feedback.set_global_result("failed") + exit(0) + + +try: + out = subprocess.check_output('java -cp "libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar:." tests/RunTests', shell=True).decode('utf8') + + grade = re.findall(r"^TOTAL ([0-9\.]+)/([0-9\.]+)$", out, re.MULTILINE)[-1] + grade = 100.0*float(grade[0])/float(grade[1]) + + feedback.set_grade(grade) + codeblock = rst.get_codeblock("java", out) + feedback.set_global_feedback("Résultat des tests: \n\n" + codeblock, True) + + feedback.set_global_result("success") +except Exception as e: + feedback.set_global_feedback("Quelque chose s'est mal passé." + str(e), True) + feedback.set_global_result("failed") \ No newline at end of file diff --git a/EXAM0119LinearProbing/student/LinearProbingHashST.java b/EXAM0119LinearProbing/student/LinearProbingHashST.java new file mode 100644 index 00000000..371c3c0f --- /dev/null +++ b/EXAM0119LinearProbing/student/LinearProbingHashST.java @@ -0,0 +1,85 @@ +package student; + +import java.util.Arrays; + +/** + * Symbol-table implementation with linear-probing hash table. + */ +public class LinearProbingHashST { + + private int n; // number of key-value pairs in the symbol table + private int m; // size of linear probing table + private Key[] keys; // the keys + private Value[] vals; // the values + + + /** + * Initializes an empty symbol table. + */ + public LinearProbingHashST() { + this(16); + } + + /** + * Initializes an empty symbol table with the specified initial capacity. + */ + public LinearProbingHashST(int capacity) { + m = capacity; + n = 0; + keys = (Key[]) new Object[m]; + vals = (Value[]) new Object[m]; + } + + /** + * Returns the number of key-value pairs in this symbol table. + */ + public int size() { + return n; + } + + /** + * Returns true if this symbol table is empty. + */ + public boolean isEmpty() { + return size() == 0; + } + + // hash function for keys - returns value between 0 and M-1 + private int hash(Key key) { + return (key.hashCode() & 0x7fffffff) % m; + } + + /** + * resizes the hash table to the given capacity by re-hashing all of the keys + */ + private void resize(int capacity) { + @@resize@@ + } + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value. + */ + public void put(Key key, Value val) { + @@put@@ + } + + /** + * Returns the value associated with the specified key. + */ + public Value get(Key key) { + @@get@@ + } + + /** + * Returns all keys in this symbol table as an Iterable + */ + public Iterable keys() { + java.util.Queue queue = new java.util.LinkedList(); + for (int i = 0; i < m; i++) + if (keys[i] != null) queue.add(keys[i]); + return queue; + } + + +} diff --git a/EXAM0119LinearProbing/task.yaml b/EXAM0119LinearProbing/task.yaml new file mode 100644 index 00000000..6c113353 --- /dev/null +++ b/EXAM0119LinearProbing/task.yaml @@ -0,0 +1,138 @@ +accessible: false +author: John Aoga +context: |- + Dans ce exercice il vous est demandé d'implémenter les fonctions ``resize``, ``put`` et ``get`` d'une table de symbole basé sur le hashage par Linear Probing. + + Pour cela la classe suivant vous a été donné. Vous devez completer les *TODO*. + + + + .. code-block:: java + + import java.util.Arrays; + + /** + * Symbol-table implementation with linear-probing hash table. + */ + public class LinearProbingHashST { + + private int n; // number of key-value pairs in the symbol table + private int m; // size of linear probing table + private Key[] keys; // the keys + private Value[] vals; // the values + + + /** + * Initializes an empty symbol table. + */ + public LinearProbingHashST() {this(16);} + + /** + * Initializes an empty symbol table with the specified initial capacity. + */ + public LinearProbingHashST(int capacity) { + m = capacity; + n = 0; + keys = (Key[]) new Object[m]; + vals = (Value[]) new Object[m]; + } + + public int size() {return n;} + public boolean isEmpty() {return size() == 0;} + + // hash function for keys - returns value between 0 and M-1 + private int hash(Key key) { + return (key.hashCode() & 0x7fffffff) % m; + } + + /** + * resizes the hash table to the given capacity by re-hashing all of the keys + */ + private void resize(int capacity) { + //TODO STUDENT + } + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value. + */ + public void put(Key key, Value val) { + //TODO STUDENT + } + + /** + * Returns the value associated with the specified key. + */ + public Value get(Key key) { + //TODO STUDENT + } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: EXAM0119 - LinearProbing +network_grading: false +order: 0 +problems: + resize: + name: Implementation de resize + language: java + type: code + default: '' + header: | + .. code-block:: java + + /** + * resizes the hash table to the given capacity by re-hashing all of the keys + */ + private void resize(int capacity) { + //TODO STUDENT + } + + Collez ici le contenu de votre fonction ``resize`` + put: + language: java + name: Implementation de put + default: '' + type: code + header: |- + .. code-block:: java + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value. + */ + public void put(Key key, Value val) { + //TODO STUDENT + } + + Collez ici le contenu de votre fonction ``put`` + get: + type: code + language: java + header: | + .. code-block:: java + + /** + * Returns the value associated with the specified key. + */ + public Value get(Key key) { + //TODO STUDENT + } + + Collez ici le contenu de votre fonction ``get`` + default: '' + name: Implementation de get +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/EXAM0119LinearProbing/tests/Helpers.java b/EXAM0119LinearProbing/tests/Helpers.java new file mode 100644 index 00000000..646cac61 --- /dev/null +++ b/EXAM0119LinearProbing/tests/Helpers.java @@ -0,0 +1,30 @@ +package tests; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Helpers { + public static String[] readfile(String filename, int size) { + + String res[] = new String[size]; + + try(BufferedReader br = new BufferedReader(new FileReader(filename))) { + String st; + int i=0; + while ((st = br.readLine()) != null && i st = new LinearProbingHashST<>(17); + + int i = 0; + String sources[] = Helpers.readfile("data/hash-attack.txt", 3000); + + long t0 = System.currentTimeMillis(); + for (String key : sources){ + st.put(key, i); + i++; + } + long t1 = System.currentTimeMillis(); + System.out.println("time elapsed=:"+(t1-t0)); + + assertTrue(!st.isEmpty()); + + } + +} + diff --git a/EXAM0119LinearProbing/tests/LPHackAttackTests.java b/EXAM0119LinearProbing/tests/LPHackAttackTests.java new file mode 100644 index 00000000..1f64bcea --- /dev/null +++ b/EXAM0119LinearProbing/tests/LPHackAttackTests.java @@ -0,0 +1,80 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Random; + +import student.LinearProbingHashST; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +@RunWith(Parameterized.class) +public class LPHackAttackTests { + private Instance instance; + private static final int TEST_SIZE = 10; + private static final int INSTANCE_SIZE = 5; + + public LPHackAttackTests(Instance instance) { + this.instance = instance; + } + + @Test + @Grade(value = 4) + public void HackAttackTest() { + LinearProbingHashST st = new LinearProbingHashST<>(instance.capaity); + + int i = 0; + for (String key : instance.words){ + st.put(key, i); + i++; + } + + //System.out.println("cap="+instance.capaity); + + i = 0; + for (String s : st.keys()) { + assertEquals(new Integer(i),st.get(s)); + assertEquals(instance.words[i],s); + i++; + } + + assertTrue(i != 0); + } + + @Parameterized.Parameters + public static Instance[] data() { + Random wordsRandom = new Random(12345L); + Random capacityRandom = new Random(456L); + + String sources[] = Helpers.readfile("data/hash-attack.txt", 1000); + + Instance[] instances = new Instance[INSTANCE_SIZE]; + + for (int j = 0; j < INSTANCE_SIZE; j++) { + String[] tests = new String[TEST_SIZE]; + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = sources[wordsRandom.nextInt(999)+1]; + } + + instances[j] = new Instance(tests, capacityRandom.nextInt(TEST_SIZE)+1 ); + } + + return instances; + } + + private static class Instance{ + String[] words; + int capaity; + + public Instance(String[] words, int capaity) { + this.words = words; + this.capaity = capaity; + } + } + +} + diff --git a/EXAM0119LinearProbing/tests/LPStaticTests.java b/EXAM0119LinearProbing/tests/LPStaticTests.java new file mode 100644 index 00000000..60b98ab7 --- /dev/null +++ b/EXAM0119LinearProbing/tests/LPStaticTests.java @@ -0,0 +1,90 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +import student.LinearProbingHashST; + +import static org.junit.Assert.assertTrue; + +public class LPStaticTests { + + @Test + @Grade(value = 10) + public void staticTest() { + LinearProbingHashST st = new LinearProbingHashST<>(11); + String str = "S E A R C H E X A M P L E"; + + String expectedKeys = "X C E H L M P R S A "; + String expectedVals = "7 4 12 5 11 9 10 3 0 8 "; + + int i = 0; + for (String key : str.split(" ")){ + st.put(key, i); + i++; + } + + // print keys + String obtainedKeys = ""; + String obtainedVals = ""; + for (String s : st.keys()) { + obtainedKeys += s + " "; + obtainedVals += st.get(s) + " "; + } + + assertEquals(obtainedKeys,expectedKeys); + assertEquals(obtainedVals,expectedVals); + + } + + + @Test + @Grade(value = 20) + public void correctnessTest() { + + LinearProbingHashST st = new LinearProbingHashST<>(7); + + String instance[] = generateInstance(); + Integer expectedVals[] = {12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15}; + + int i = 0; + for (String key : instance){ + st.put(key, i); + i++; + } + + //System.out.println("cap="+instance.capaity); + i = 0; + for (String s : st.keys()) { + assertEquals(expectedVals[i],st.get(s)); + assertEquals(instance[expectedVals[i]],s); + i++; + } + + assertTrue(i != 0); + } + + public String[] generateInstance(){ + String[] sp = new String[]{"Aa", "BB"}; + String[] list = new String[16]; + + int count = 0; + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + for (int k = 0; k < 2; k++) { + for (int l = 0; l < 2; l++) { + list[count] = sp[i] + sp[j] + sp[k] + sp[l]; + count++; + } + } + } + } + + return list; + } + +} + + diff --git a/EXAM0119LinearProbing/tests/RunTests.java b/EXAM0119LinearProbing/tests/RunTests.java new file mode 100644 index 00000000..13c663a2 --- /dev/null +++ b/EXAM0119LinearProbing/tests/RunTests.java @@ -0,0 +1,13 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run( LPComplexityTests.class, LPHackAttackTests.class, LPStaticTests.class); + } +} \ No newline at end of file diff --git a/PART3Bst/feedback_settings.yaml b/PART3Bst/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/PART3Bst/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/PART3Bst/public/Ceil.java b/PART3Bst/public/Ceil.java new file mode 100644 index 00000000..ca75bd12 --- /dev/null +++ b/PART3Bst/public/Ceil.java @@ -0,0 +1,17 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.Stack; + + +public class Ceil { + /** + * Trouve dans l'arbre le plus petit élément plus grand ou égal à value + * (donc soit l'élément lui-même soit l'élément situé directement après par ordre de grandeur). + * Si un tel élément n'existe pas, elle doit retourner null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + //TODO + } +} diff --git a/PART3Bst/public/LSINF1121_PART3_BinarySearchTree.zip b/PART3Bst/public/LSINF1121_PART3_BinarySearchTree.zip new file mode 100644 index 00000000..51ea8b52 Binary files /dev/null and b/PART3Bst/public/LSINF1121_PART3_BinarySearchTree.zip differ diff --git a/PART3Bst/public/Node.java b/PART3Bst/public/Node.java new file mode 100644 index 00000000..b45d9c04 --- /dev/null +++ b/PART3Bst/public/Node.java @@ -0,0 +1,44 @@ +public class Node { + private Node left, right; + private int value; + + public Node(int value) { + this.left = null; + this.right = null; + this.value = value; + } + + public Node() { + } + + /** + * @return la valeur contenue dans ce noeud + */ + public int getValue() { + return value; + } + + /** + * @return Le noeud situe a gauche (dont la valeur est < que la valeur actuelle) s'il existe, null sinon + */ + public Node getLeft() { + return left; + } + + /** + * @return Le noeud situe a droite (dont la valeur est > que la valeur actuelle) s'il existe, null sinon + */ + public Node getRight() { + return right; + } + + /** + * Ajoute une nouvelle valeur newVal dans le BST + */ + public void add(int newVal) { + if(newVal < value && left == null) left = new Node(newVal); + else if(newVal < value) left.add(newVal); + else if(newVal > value && right == null) right = new Node(newVal); + else if(newVal > value) right.add(newVal); + } +} diff --git a/PART3Bst/public/bst.png b/PART3Bst/public/bst.png new file mode 100644 index 00000000..9300f61e Binary files /dev/null and b/PART3Bst/public/bst.png differ diff --git a/PART3Bst/run b/PART3Bst/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/PART3Bst/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/PART3Bst/solution/CeilBadComplexity.java b/PART3Bst/solution/CeilBadComplexity.java new file mode 100644 index 00000000..930231ee --- /dev/null +++ b/PART3Bst/solution/CeilBadComplexity.java @@ -0,0 +1,43 @@ + +public class Ceil { + /** + * Find in the tree the smallest element greater than or equal to value + * (so either the element itself or the element located directly after it + * in order of magnitude). If such an element does not exist, + * it must return null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + if (root == null) return null; + + java.util.List list = new java.util.ArrayList<>(); + java.util.Stack s = new java.util.Stack<>(); + Node curr = root; + + // traverse the tree + while (curr != null || s.size() > 0) + { + while (curr != null) + { + s.push(curr); + curr = curr.getLeft(); + } + + curr = s.pop(); + + list.add(curr.getValue()); + + curr = curr.getRight(); + } + + if (value > list.get(list.size()-1)) return null; + + for (Integer a: list) { + if (a == value) return value; + if (a > value) return a; + } + + return null; + } +} diff --git a/PART3Bst/solution/CeilCorrect.java b/PART3Bst/solution/CeilCorrect.java new file mode 100644 index 00000000..971e3978 --- /dev/null +++ b/PART3Bst/solution/CeilCorrect.java @@ -0,0 +1,25 @@ + +public class Ceil { + /** + * Find in the tree the smallest element greater than or equal to value + * (so either the element itself or the element located directly after it + * in order of magnitude). If such an element does not exist, + * it must return null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + if (root == null) return null; + if (value == root.getValue()) return value; + + //If root's value is greater than value, either left subtree or root has the ceil value + if (value < root.getValue()) { + Integer c = ceil(root.getLeft(), value); + if (c != null) return c; + else return root.getValue(); + } + + // If root's value is smaller, ceil must be in right subtree + return ceil(root.getRight(), value); + } +} diff --git a/PART3Bst/src/InginiousTests.java b/PART3Bst/src/InginiousTests.java new file mode 100644 index 00000000..92853e02 --- /dev/null +++ b/PART3Bst/src/InginiousTests.java @@ -0,0 +1,197 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import templates.*; + + +public class InginiousTests { + + ///////// Base + @Test + @Grade(value=20) + public void testCeilOk() { + java.util.TreeSet correct = new java.util.TreeSet<>(); + int values[] = new int[]{12,8,18,3,11,14,20,9,15}; + int in[] = new int[]{11,14,9,4,16,10,19,21,30,40}; + + Node root = new Node(values[0]); + for (int i = 1; i < values.length; i++) { + root.add(values[i]); + correct.add(values[i]); + } + + for (int i : in ) { + assertEquals(Ceil.ceil(root,i), correct.ceiling(i)); + } + } + + /////////// Extreme + /** + * Generates a random array of Integers, of size n + */ + public static Integer[] randomArray(int n) { + java.util.Random rand = new java.util.Random(); + Integer [] array = new Integer[n]; + Arrays.setAll(array, i -> rand.nextInt(1000000)); + return array; + } + + /** + * Verifies that values.ceil(where) == ceilFound + * @param values + * @param ceilFound + * @param where + */ + public static boolean verify(Integer[] values, Integer ceilFound, int where) { + // Let a real balanced tree for the Java STD lib do the work for us: + TreeSet set = new TreeSet(); + Collections.addAll(set, values); + Integer ceil2 = set.ceiling(where); + + if(ceilFound != null && ceil2 != null) + return ceilFound.equals(ceil2); + else + return ceilFound == ceil2; + } + + @Test + @Grade(value=30) + public void testExtreme() { + for (int i = 100; i < 1000; i += 100) { + Integer[] v = randomArray(i+1); + Node root = new Node(v[0]); + for(int j = 1; j < v.length; j++) + root.add(v[j]); + for(int j = -200; j < 1000001; j += 1000) { + Integer ceil = Ceil.ceil(root, j); + assertTrue("correct ceiling value computed",verify(v,ceil,j)); + } + } + } + + ////////// complexity + static private class InstanceConfig { + int toRetrieve = 0; + boolean wrongDirection = false; + HashSet wrongTurnsCalled = new HashSet<>(); + + public void reset(int toRetrieve) { + this.toRetrieve = toRetrieve; + wrongDirection = false; + wrongTurnsCalled = new HashSet<>(); + } + } + + static private class BaseNode extends Node { + private int value; + private InstanceConfig info; + private BaseNode left; + private BaseNode right; + + BaseNode(int v, InstanceConfig tor) { + value = v; + left = null; + right = null; + info = tor; + } + + @Override + public int getValue() { + if(info.wrongTurnsCalled.contains(this)) + info.wrongDirection = true; + return value; + } + + @Override + public Node getLeft() { + if(value <= info.toRetrieve) + info.wrongTurnsCalled.add(left); + return left; + } + + @Override + public Node getRight() { + if(value >= info.toRetrieve) + info.wrongTurnsCalled.add(right); + return right; + } + + public void add(int v) { + if(v < value && left == null) left = new BaseNode(v, info); + else if(v < value) left.add(v); + else if(v > value && right == null) right = new BaseNode(v, info); + else if(v > value) right.add(v); + } + } + + @Test + @Grade(value=50) + public void testComplexity() { + int[][] tests = new int[][]{ + new int[] {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}, + new int[] {1000, 900, 800, 700, 600, 500, 400, 300, 200, 100}, + new int[] {500, 300, 800, 100, 400, 600, 900, 200, 700}, + new int[] {231,635,69,644,422,855,161,275,10,685,544,34,379,575,858,740,832,842,838,624,118,55,977,163,484,59,737,299,343,161,647,674,249,758,248,19,612,336,419,255,416,460,286,35,678,352,796,195,308,918,778,118,202,879,378,548,214,688,908,668,759,293,875,279,324,472,117,167,637,32,934,34,854,673,113,110,27,585,266,450,769,4,264,206,586,704,304,612,639,948,718,952,534,444,470,302,182,30,165,984}, + new int[] {636,403,939,800,651,781,855,72,835,858,820,463,473,665,524,759,454,454,920,674,496,571,481,255,384,933,7,116,579,895,562,381,151,454,907,146,410,566,332,364,814,193,50,462,922,510,831,766,42,69,917,254,287,65,182,35,50,64,760,822,556,203,381,34,744,360,234,965,932,406,264,581,601,792,160,531,562,997,433,987,204,383,629,132,118,716,216,621,25,11,42,854,759,435,312,741,482,722,546,490}, + new int[] {164,898,443,782,245,1,164,767,788,590,910,745,803,688,801,322,118,70,121,829,130,153,443,718,794,871,935,845,233,187,48,93,235,35,603,481,317,348,674,673,278,809,651,468,858,696,902,905,303,108,952,435,766,922,13,492,29,797,988,120,371,24,115,425,970,898,65,735,938,647,691,886,563,930,958,393,94,218,23,258,825,232,697,673,863,607,356,17,13,340,981,288,9,316,345,155,489,224,449,491}, + new int[] {4,471,616,61,568,47,232,7,921,169,153,583,849,230,996,532,864,343,435,452,391,389,903,390,356,292,769,504,509,354,980,798,825,287,136,115,128,600,31,555,450,625,515,78,940,351,22,801,16,825,338,491,891,994,10,970,381,902,387,173,765,567,81,380,695,995,337,685,631,160,728,804,906,920,905,12,103,226,288,984,15,183,488,245,223,732,8,870,806,641,663,752,468,269,275,651,378,471,259,219}, + new int[] {483,76,190,396,531,330,847,356,79,392,14,322,24,995,193,532,185,885,888,637,950,895,216,860,345,690,29,250,926,586,913,263,855,343,403,416,433,529,492,52,709,676,836,503,767,775,208,75,861,204,525,43,929,122,966,582,451,115,46,793,462,493,886,801,819,181,574,30,912,14,946,908,15,693,140,94,212,970,62,374,306,10,717,708,220,544,742,716,413,555,969,895,92,711,506,989,469,354,819,510}, + }; + boolean wrongDirection = false; + boolean ok = true; + try { + for (int testNb = 0; testNb < tests.length; testNb++) { + // Get the test + int[] test = tests[testNb]; + int[] testSorted = new int[test.length]; + System.arraycopy(test, 0, testSorted, 0, test.length); + Arrays.sort(testSorted); + + // Generate the tree + InstanceConfig info = new InstanceConfig(); + Node root = new BaseNode(test[0], info); + for (int i = 1; i < test.length; i++) + root.add(test[i]); + + // Test all the possibilities + int posInSorted = 0; + for (int i = 0; i <= 1000; i++) { + info.reset(i); + while (posInSorted != testSorted.length && testSorted[posInSorted] < i) + posInSorted++; + Integer expected = null; + if (posInSorted != testSorted.length) + expected = testSorted[posInSorted]; + Integer returned = Ceil.ceil(root, i); + wrongDirection |= info.wrongDirection; + if(returned == null && expected != null) + ok = false; + if(expected == null && returned != null) + ok = false; + if(returned != null && expected != null && !returned.equals(expected)) + ok = false; + } + } + if(ok && !wrongDirection){} + else if(ok && wrongDirection) { + System.out.println("wrong Direction : Bad Complexity!!"); + assertTrue(false); + } + else { assertTrue(false);} + + } + catch (Exception e) { + System.out.println("exception"); + } + } +} diff --git a/PART3Bst/src/StudentTestRunner.java b/PART3Bst/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/PART3Bst/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/PART3Bst/task.yaml b/PART3Bst/task.yaml new file mode 100644 index 00000000..f17c6c5c --- /dev/null +++ b/PART3Bst/task.yaml @@ -0,0 +1,70 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Guillaume Derval, Simon Teugels, John Aoga +context: |- + Etant donné un arbre de recherche binaire, dont les noeuds implémentent l'interface Node: + + .. code-block:: java + + interface Node { + /** + * @return the value contained in this node + */ + int getValue(); + + /** + * @return the node on the left (whose value is < than the current value) + * if it exists, null if not + */ + Node getLeft(); + + /** + * @return the node on the right (whose value is > than the current value) + * if it exists, null if not + */ + Node getRight(); + } + + L'on vous demande de fournir le **corps** de la fonction *ceil*, qui trouve dans l'arbre le plus petit élément plus grand ou égal à `value` (donc soit l'élément lui-même soit l'élément situé directement après par ordre de grandeur). Si un tel élément n'existe pas, elle doit retourner `null`. + + Par exemple si on a ce BST, + + .. figure:: PART3Bst/bst.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + + - ceil(11) nous renverra 11, + - ceil(4) nous renverra 8, + - et ceil(21) nous renverra null. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '200' + output: '20' + time: '300' +name: PART 3 - Binary Search Tree (implem) +network_grading: false +order: 15 +problems: + ceil: + header: |- + Fournissez ici le **corps** de la fonction `ceil`: + + .. code-block:: java + + Integer ceil(Node root, int value) + default: '' + name: '' + type: code + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/PART3Bst/templates/Ceil.java b/PART3Bst/templates/Ceil.java new file mode 100644 index 00000000..35d1d727 --- /dev/null +++ b/PART3Bst/templates/Ceil.java @@ -0,0 +1,19 @@ +package templates; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.Stack; + + +public class Ceil { + /** + * Trouve dans l'arbre le plus petit élément plus grand ou égal à value + * (donc soit l'élément lui-même soit l'élément situé directement après par ordre de grandeur). + * Si un tel élément n'existe pas, elle doit retourner null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + @@ceil@@ + } +} diff --git a/PART3Bst/templates/Node.java b/PART3Bst/templates/Node.java new file mode 100644 index 00000000..2f236f9c --- /dev/null +++ b/PART3Bst/templates/Node.java @@ -0,0 +1,46 @@ +package templates; + +public class Node { + private Node left, right; + private int value; + + public Node(int value) { + this.left = null; + this.right = null; + this.value = value; + } + + public Node() { + } + + /** + * @return la valeur contenue dans ce noeud + */ + public int getValue() { + return value; + } + + /** + * @return Le noeud situe a gauche (dont la valeur est < que la valeur actuelle) s'il existe, null sinon + */ + public Node getLeft() { + return left; + } + + /** + * @return Le noeud situe a droite (dont la valeur est > que la valeur actuelle) s'il existe, null sinon + */ + public Node getRight() { + return right; + } + + /** + * Ajoute une nouvelle valeur newVal dans le BST + */ + public void add(int newVal) { + if(newVal < value && left == null) left = new Node(newVal); + else if(newVal < value) left.add(newVal); + else if(newVal > value && right == null) right = new Node(newVal); + else if(newVal > value) right.add(newVal); + } +} diff --git a/PART3Bst/unit_test/BSTTests.java b/PART3Bst/unit_test/BSTTests.java new file mode 100644 index 00000000..eab26eed --- /dev/null +++ b/PART3Bst/unit_test/BSTTests.java @@ -0,0 +1,194 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; + + +public class BSTTests { + + ///////// Base + @Test + @Grade(value=20) + public void testCeilOk() { + java.util.TreeSet correct = new java.util.TreeSet<>(); + int values[] = new int[]{12,8,18,3,11,14,20,9,15}; + int in[] = new int[]{11,14,9,4,16,10,19,21,30,40}; + + Node root = new Node(values[0]); + for (int i = 1; i < values.length; i++) { + root.add(values[i]); + correct.add(values[i]); + } + + for (int i : in ) { + assertEquals(Ceil.ceil(root,i), correct.ceiling(i)); + } + } + + /////////// Extreme + /** + * Generates a random array of Integers, of size n + */ + public static Integer[] randomArray(int n) { + java.util.Random rand = new java.util.Random(); + Integer [] array = new Integer[n]; + Arrays.setAll(array, i -> rand.nextInt(1000000)); + return array; + } + + /** + * Verifies that values.ceil(where) == ceilFound + * @param values + * @param ceilFound + * @param where + */ + public static boolean verify(Integer[] values, Integer ceilFound, int where) { + // Let a real balanced tree for the Java STD lib do the work for us: + TreeSet set = new TreeSet(); + Collections.addAll(set, values); + Integer ceil2 = set.ceiling(where); + + if(ceilFound != null && ceil2 != null) + return ceilFound.equals(ceil2); + else + return ceilFound == ceil2; + } + + @Test + @Grade(value=30) + public void testExtreme() { + for (int i = 100; i < 1000; i += 100) { + Integer[] v = randomArray(i+1); + Node root = new Node(v[0]); + for(int j = 1; j < v.length; j++) + root.add(v[j]); + for(int j = -200; j < 1000001; j += 1000) { + Integer ceil = Ceil.ceil(root, j); + assertTrue("correct ceiling value computed",verify(v,ceil,j)); + } + } + } + + ////////// complexity + static private class InstanceConfig { + int toRetrieve = 0; + boolean wrongDirection = false; + HashSet wrongTurnsCalled = new HashSet<>(); + + public void reset(int toRetrieve) { + this.toRetrieve = toRetrieve; + wrongDirection = false; + wrongTurnsCalled = new HashSet<>(); + } + } + + static private class BaseNode extends Node { + private int value; + private InstanceConfig info; + private BaseNode left; + private BaseNode right; + + BaseNode(int v, InstanceConfig tor) { + value = v; + left = null; + right = null; + info = tor; + } + + @Override + public int getValue() { + if(info.wrongTurnsCalled.contains(this)) + info.wrongDirection = true; + return value; + } + + @Override + public Node getLeft() { + if(value <= info.toRetrieve) + info.wrongTurnsCalled.add(left); + return left; + } + + @Override + public Node getRight() { + if(value >= info.toRetrieve) + info.wrongTurnsCalled.add(right); + return right; + } + + public void add(int v) { + if(v < value && left == null) left = new BaseNode(v, info); + else if(v < value) left.add(v); + else if(v > value && right == null) right = new BaseNode(v, info); + else if(v > value) right.add(v); + } + } + + @Test + @Grade(value=50) + public void testComplexity() { + int[][] tests = new int[][]{ + new int[] {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}, + new int[] {1000, 900, 800, 700, 600, 500, 400, 300, 200, 100}, + new int[] {500, 300, 800, 100, 400, 600, 900, 200, 700}, + new int[] {231,635,69,644,422,855,161,275,10,685,544,34,379,575,858,740,832,842,838,624,118,55,977,163,484,59,737,299,343,161,647,674,249,758,248,19,612,336,419,255,416,460,286,35,678,352,796,195,308,918,778,118,202,879,378,548,214,688,908,668,759,293,875,279,324,472,117,167,637,32,934,34,854,673,113,110,27,585,266,450,769,4,264,206,586,704,304,612,639,948,718,952,534,444,470,302,182,30,165,984}, + new int[] {636,403,939,800,651,781,855,72,835,858,820,463,473,665,524,759,454,454,920,674,496,571,481,255,384,933,7,116,579,895,562,381,151,454,907,146,410,566,332,364,814,193,50,462,922,510,831,766,42,69,917,254,287,65,182,35,50,64,760,822,556,203,381,34,744,360,234,965,932,406,264,581,601,792,160,531,562,997,433,987,204,383,629,132,118,716,216,621,25,11,42,854,759,435,312,741,482,722,546,490}, + new int[] {164,898,443,782,245,1,164,767,788,590,910,745,803,688,801,322,118,70,121,829,130,153,443,718,794,871,935,845,233,187,48,93,235,35,603,481,317,348,674,673,278,809,651,468,858,696,902,905,303,108,952,435,766,922,13,492,29,797,988,120,371,24,115,425,970,898,65,735,938,647,691,886,563,930,958,393,94,218,23,258,825,232,697,673,863,607,356,17,13,340,981,288,9,316,345,155,489,224,449,491}, + new int[] {4,471,616,61,568,47,232,7,921,169,153,583,849,230,996,532,864,343,435,452,391,389,903,390,356,292,769,504,509,354,980,798,825,287,136,115,128,600,31,555,450,625,515,78,940,351,22,801,16,825,338,491,891,994,10,970,381,902,387,173,765,567,81,380,695,995,337,685,631,160,728,804,906,920,905,12,103,226,288,984,15,183,488,245,223,732,8,870,806,641,663,752,468,269,275,651,378,471,259,219}, + new int[] {483,76,190,396,531,330,847,356,79,392,14,322,24,995,193,532,185,885,888,637,950,895,216,860,345,690,29,250,926,586,913,263,855,343,403,416,433,529,492,52,709,676,836,503,767,775,208,75,861,204,525,43,929,122,966,582,451,115,46,793,462,493,886,801,819,181,574,30,912,14,946,908,15,693,140,94,212,970,62,374,306,10,717,708,220,544,742,716,413,555,969,895,92,711,506,989,469,354,819,510}, + }; + boolean wrongDirection = false; + boolean ok = true; + try { + for (int testNb = 0; testNb < tests.length; testNb++) { + // Get the test + int[] test = tests[testNb]; + int[] testSorted = new int[test.length]; + System.arraycopy(test, 0, testSorted, 0, test.length); + Arrays.sort(testSorted); + + // Generate the tree + InstanceConfig info = new InstanceConfig(); + Node root = new BaseNode(test[0], info); + for (int i = 1; i < test.length; i++) + root.add(test[i]); + + // Test all the possibilities + int posInSorted = 0; + for (int i = 0; i <= 1000; i++) { + info.reset(i); + while (posInSorted != testSorted.length && testSorted[posInSorted] < i) + posInSorted++; + Integer expected = null; + if (posInSorted != testSorted.length) + expected = testSorted[posInSorted]; + Integer returned = Ceil.ceil(root, i); + wrongDirection |= info.wrongDirection; + if(returned == null && expected != null) + ok = false; + if(expected == null && returned != null) + ok = false; + if(returned != null && expected != null && !returned.equals(expected)) + ok = false; + } + } + if(ok && !wrongDirection){} + else if(ok && wrongDirection) { + System.out.println("wrong Direction : Bad Complexity!!"); + assertTrue(false); + } + else { assertTrue(false);} + + } + catch (Exception e) { + System.out.println("exception"); + } + } +} diff --git a/PART3OrderedBstIterator/feedback_settings.yaml b/PART3OrderedBstIterator/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/PART3OrderedBstIterator/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/PART3OrderedBstIterator/public/BST.java b/PART3OrderedBstIterator/public/BST.java new file mode 100644 index 00000000..1a8d3d66 --- /dev/null +++ b/PART3OrderedBstIterator/public/BST.java @@ -0,0 +1,109 @@ +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Stack; + +public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + // TODO STUDENT: Implement the get method + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + // TODO STUDENT: Implement the put method + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + // TODO STUDDENT: Implement the BSTIterator + // an iterator, doesn't implement remove() since it's optional + private class BSTIterator implements Iterator { + @@bstiterator@@ + } + +} diff --git a/PART3OrderedBstIterator/public/LSINF1121_PART3_OrderedBstIterator.zip b/PART3OrderedBstIterator/public/LSINF1121_PART3_OrderedBstIterator.zip new file mode 100644 index 00000000..3e8eaa78 Binary files /dev/null and b/PART3OrderedBstIterator/public/LSINF1121_PART3_OrderedBstIterator.zip differ diff --git a/PART3OrderedBstIterator/public/bst.png b/PART3OrderedBstIterator/public/bst.png new file mode 100644 index 00000000..9300f61e Binary files /dev/null and b/PART3OrderedBstIterator/public/bst.png differ diff --git a/PART3OrderedBstIterator/run b/PART3OrderedBstIterator/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/PART3OrderedBstIterator/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/PART3OrderedBstIterator/solution/BSTSolution.java b/PART3OrderedBstIterator/solution/BSTSolution.java new file mode 100644 index 00000000..55e563d5 --- /dev/null +++ b/PART3OrderedBstIterator/solution/BSTSolution.java @@ -0,0 +1,229 @@ +/* +* @author johnaoga +*/ +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Stack; + +public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + public void inOrder(){ + inOrder(root); + } + private void inOrder(Node x) { + if (x == null) return; + + inOrder(x.left); + System.out.println(x.key+"=>"+x.val); + inOrder(x.right); + } + + + // TODO STUDENT: Implement the get method + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + // TODO STUDENT: Implement the put method + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + // TODO STUDDENT: Implement the BSTIterator + + // an iterator, doesn't implement remove() since it's optional + /*CORRECT*/ + private class BSTIterator implements Iterator { + + private int size; + private Node current; + + Stack stack; + + public BSTIterator() { + stack = new Stack<>(); + current = root; + while (current != null) { + stack.push(current); + current = current.left; + } + if (root != null) size = root.getSize(); + } + + public boolean hasNext() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + + return (current != null || !stack.isEmpty()); + } + + public Key next() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + if (!hasNext()) throw new NoSuchElementException(); + Node node = stack.pop(); + Key key = node.key; + if (node.right != null) { + node = node.right; + while (node != null) { + stack.push(node); + node = node.left; + } + } + return key; + } + + }/**/ + + /* Wrong Complexity + private class BSTIterator implements Iterator { + private int size; + Stack stack; + + + private void populateStack(Stack st, Node x) { + if(x==null) return; + populateStack(st,x.right); + st.push(x); + populateStack(st,x.left); + } + + private BSTIterator(){ + stack =new Stack<>(); + populateStack(stack,root); + if (root != null) size = root.getSize(); + } + @Override + public boolean hasNext() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + + return !stack.isEmpty(); + } + + @Override + public Key next() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + if (!hasNext()) throw new NoSuchElementException(); + return stack.pop().key; + } + + @Override + public void remove() {} + }*/ + + + /** + * Unit tests the {@code BST} data type. + */ + public static void main(String[] args) { + char tiny[] = new char[] {'S', 'E', 'A', 'R', 'C', 'H', 'E', 'X', 'A', 'M', 'P', 'L', 'E'}; + BST st = new BST(); + + for (int i = 0; i < tiny.length; i++) { + String key = ""+tiny[i]; + st.put(key, i); + } + + System.out.println(st.size()); + + st.inOrder(); + + Iterator it = st.iterator(); + while (it.hasNext()){ + String key = it.next(); + System.out.println(key); + } + + + /*BST student = new BST<>(); + student.put("A",1); + + Iterator iter = student.iterator(); + student.put("B",2); + iter.next();*/ + } +} \ No newline at end of file diff --git a/PART3OrderedBstIterator/src/BSTTestComplexity.java b/PART3OrderedBstIterator/src/BSTTestComplexity.java new file mode 100644 index 00000000..bec23920 --- /dev/null +++ b/PART3OrderedBstIterator/src/BSTTestComplexity.java @@ -0,0 +1,64 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import templates.*; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestComplexity { + + private BST student; + + public BSTTestComplexity(BST student) { + this.student = student; + } + + @Test(timeout=600) + @Grade(value=8) //8*5 = 40 + public void runAsExpected() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + while (aIter.hasNext()) { + aIter.next(); + } + assertFalse(aIter.hasNext()); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=50) + @Grade(value=2) //2*5 = 10 + public void runAsExpectedBis() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(12345L); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + BST a = new BST<>(); + for (int k = 0; k < 1000000; k++) { + int val = r.nextInt(); + String key = ""+val; + a.put(key,val); + } + + tests.add(a); + } + return tests; + } +} diff --git a/PART3OrderedBstIterator/src/BSTTestExtreme.java b/PART3OrderedBstIterator/src/BSTTestExtreme.java new file mode 100644 index 00000000..1467e288 --- /dev/null +++ b/PART3OrderedBstIterator/src/BSTTestExtreme.java @@ -0,0 +1,72 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import templates.*; + +import java.util.*; + +import static org.junit.Assert.*; + + +public class BSTTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + char db[] = new char[] {'S', 'E', 'A', 'R', 'C', 'H', 'E', 'X', 'A', 'M', 'P', 'L', 'E'}; + BST student = new BST(); + + Iterator iterator = student.iterator(); + //assertFalse(iterator.hasNext()); + + Set correct = new TreeSet<>(); + for (int i = 0; i < db.length; i++) { + String key = ""+db[i]; + student.put(key, i); + if (i==6) { + assertEquals(i,student.size()); + } + assertEquals(student.get(key).intValue(),i); + correct.add(key); + } + + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + + } + + @Test(expected = NoSuchElementException.class) + @Grade(value=10) + public void testNoSuchElementException() { + BST student = new BST<>(); + student.iterator().next(); + + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=10) + public void testConcurrentModificationNext() { + BST student = new BST<>(); + student.put("A",1); + + Iterator iter = student.iterator(); + student.put("B",2); + iter.next(); + } + + + + + +} diff --git a/PART3OrderedBstIterator/src/BSTTestRandom.java b/PART3OrderedBstIterator/src/BSTTestRandom.java new file mode 100644 index 00000000..ec372c73 --- /dev/null +++ b/PART3OrderedBstIterator/src/BSTTestRandom.java @@ -0,0 +1,63 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import templates.*; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestRandom { + private BST student; + private Set correct; + + + public BSTTestRandom(BST student, Set correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.3) //0.3*50=15 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + int min=1, max=26; + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + BST a = new BST<>(); + Set b = new TreeSet<>(); + for (int k = 0; k < 15; k++) { + int v = r.nextInt((max - min) + 1) + min; + a.put(getCharForNumber(v),v); + b.add(getCharForNumber(v)); + } + + tests.add(new Object[]{a,b}); + } + return tests; + } + public static String getCharForNumber(int i) { + return i > 0 && i < 27 ? String.valueOf((char)(i + 64)) : null; + } +} diff --git a/PART3OrderedBstIterator/src/StudentTestRunner.java b/PART3OrderedBstIterator/src/StudentTestRunner.java new file mode 100644 index 00000000..680efe07 --- /dev/null +++ b/PART3OrderedBstIterator/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(BSTTestComplexity.class, BSTTestExtreme.class, BSTTestRandom.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/PART3OrderedBstIterator/task.yaml b/PART3OrderedBstIterator/task.yaml new file mode 100644 index 00000000..576552d8 --- /dev/null +++ b/PART3OrderedBstIterator/task.yaml @@ -0,0 +1,183 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: John Aoga +context: |- + On s’intéresse à l'implémentation d'un itérateur (``BSTIterator``) qui permet de traverser un ``Binary Search Tree`` dans l'ordre croissant (*In-order transversal*). + + Par exemple si on a ce BST, + + .. figure:: PART3OrderedBstIterator/bst.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + on veut le parcourir comme suit *[3,8,9,11,12,14,15,18,20]* + + *Attention:* L'itérateur devra lancer des exceptions dans les cas suivants: + + - étant donnée qu'on ne peut modifier l'itérateur alors qu'on est en train d'itérer, l'iterateur devra lancer un ``ConcurrentModificationException`` dans ce cas dans le ``next`` et le ``hasNest``; + + - si le ``next`` est appelé alors qu'il n'y a plus de prochain élément, l'iterateur devra lancer un ``NoSuchElementException``. + + .. code-block:: java + + import java.util.ConcurrentModificationException; + import java.util.Iterator; + import java.util.NoSuchElementException; + import java.util.Stack; + + public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + public void inOrder(){ + inOrder(root); + } + private void inOrder(Node x) { + if (x == null) return; + + inOrder(x.left); + System.out.println(x.key+"=>"+x.val); + inOrder(x.right); + } + + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + /** + * Implementation of an iterator that iterates through the keys of BST in incresing order (In-order transversal). + * + */ + private class BSTIterator implements Iterator { + + // TODO STUDDENT: Implement the BSTIterator + + } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '1000' + time: '300000' + output: '2' +name: PART 3 - Binary Search Tree Iterator (implem) +network_grading: false +order: 16 +problems: + bstiterator: + type: code + name: 'Implementation de l''iterateur: BSTIterator' + language: java + default: '' + header: |- + .. code-block:: java + + /** + * Implementation of an iterator that iterates through the keys of BST in incresing order (In-order transversal). + * + */ + private class BSTIterator implements Iterator { + + // TODO STUDDENT: Implement the BSTIterator + + } + + Copier le contenu de la class ``private class BSTIterator implements Iterator`` ci-desssous. +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/PART3OrderedBstIterator/templates/BST.java b/PART3OrderedBstIterator/templates/BST.java new file mode 100644 index 00000000..4dc19fe7 --- /dev/null +++ b/PART3OrderedBstIterator/templates/BST.java @@ -0,0 +1,111 @@ +package templates; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Stack; + +public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + // TODO STUDENT: Implement the get method + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + // TODO STUDENT: Implement the put method + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + // TODO STUDDENT: Implement the BSTIterator + // an iterator, doesn't implement remove() since it's optional + private class BSTIterator implements Iterator { + @@bstiterator@@ + } + +} diff --git a/PART3OrderedBstIterator/unit_test/BSTTestComplexity.java b/PART3OrderedBstIterator/unit_test/BSTTestComplexity.java new file mode 100644 index 00000000..524d1093 --- /dev/null +++ b/PART3OrderedBstIterator/unit_test/BSTTestComplexity.java @@ -0,0 +1,60 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestComplexity { + + private BST student; + + public BSTTestComplexity(BST student) { + this.student = student; + } + + @Test(timeout=600) + @Grade(value=8) //8*5 = 40 + public void runAsExpected() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + while (aIter.hasNext()) { + aIter.next(); + } + assertFalse(aIter.hasNext()); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=50) + @Grade(value=2) //2*5 = 10 + public void runAsExpectedBis() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(12345L); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + BST a = new BST<>(); + for (int k = 0; k < 1000000; k++) { + int val = r.nextInt(); + String key = ""+val; + a.put(key,val); + } + + tests.add(a); + } + return tests; + } +} diff --git a/PART3OrderedBstIterator/unit_test/BSTTestExtreme.java b/PART3OrderedBstIterator/unit_test/BSTTestExtreme.java new file mode 100644 index 00000000..be786d49 --- /dev/null +++ b/PART3OrderedBstIterator/unit_test/BSTTestExtreme.java @@ -0,0 +1,68 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.*; + + +public class BSTTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + char db[] = new char[] {'S', 'E', 'A', 'R', 'C', 'H', 'E', 'X', 'A', 'M', 'P', 'L', 'E'}; + BST student = new BST(); + + Iterator iterator = student.iterator(); + //assertFalse(iterator.hasNext()); + + Set correct = new TreeSet<>(); + for (int i = 0; i < db.length; i++) { + String key = ""+db[i]; + student.put(key, i); + if (i==6) { + assertEquals(i,student.size()); + } + assertEquals(student.get(key).intValue(),i); + correct.add(key); + } + + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + + } + + @Test(expected = NoSuchElementException.class) + @Grade(value=10) + public void testNoSuchElementException() { + BST student = new BST<>(); + student.iterator().next(); + + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=10) + public void testConcurrentModificationNext() { + BST student = new BST<>(); + student.put("A",1); + + Iterator iter = student.iterator(); + student.put("B",2); + iter.next(); + } + + + + + +} diff --git a/PART3OrderedBstIterator/unit_test/BSTTestRandom.java b/PART3OrderedBstIterator/unit_test/BSTTestRandom.java new file mode 100644 index 00000000..b3ef76b8 --- /dev/null +++ b/PART3OrderedBstIterator/unit_test/BSTTestRandom.java @@ -0,0 +1,60 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestRandom { + private BST student; + private Set correct; + + + public BSTTestRandom(BST student, Set correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.3) //0.3*50=15 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + int min=1, max=26; + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + BST a = new BST<>(); + Set b = new TreeSet<>(); + for (int k = 0; k < 15; k++) { + int v = r.nextInt((max - min) + 1) + min; + a.put(getCharForNumber(v),v); + b.add(getCharForNumber(v)); + } + + tests.add(new Object[]{a,b}); + } + return tests; + } + public static String getCharForNumber(int i) { + return i > 0 && i < 27 ? String.valueOf((char)(i + 64)) : null; + } +} diff --git a/m2bilanqcm/public/a1.png b/PART3Qcm/public/a1.png similarity index 100% rename from m2bilanqcm/public/a1.png rename to PART3Qcm/public/a1.png diff --git a/m2bilanqcm/public/a2.png b/PART3Qcm/public/a2.png similarity index 100% rename from m2bilanqcm/public/a2.png rename to PART3Qcm/public/a2.png diff --git a/m2bilanqcm/public/a3.png b/PART3Qcm/public/a3.png similarity index 100% rename from m2bilanqcm/public/a3.png rename to PART3Qcm/public/a3.png diff --git a/m2bilanqcm/public/a4.png b/PART3Qcm/public/a4.png similarity index 100% rename from m2bilanqcm/public/a4.png rename to PART3Qcm/public/a4.png diff --git a/m2bilanqcm/public/a5.png b/PART3Qcm/public/a5.png similarity index 100% rename from m2bilanqcm/public/a5.png rename to PART3Qcm/public/a5.png diff --git a/PART3Qcm/task.yaml b/PART3Qcm/task.yaml new file mode 100644 index 00000000..b66934a9 --- /dev/null +++ b/PART3Qcm/task.yaml @@ -0,0 +1,87 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Antoine Cailliau +context: '' +environment: mcq +evaluate: last +groups: false +input_random: '0' +limits: + memory: '100' + output: '2' + time: '30' +name: PART 3 - QCM +network_grading: false +order: 12 +problems: + qcm02: + choices: + - text: \\(O(\\log N)\\) et \\(O(N)\\) + valid: true + - text: \\(O(\\log N)\\) et \\(O(\\frac{N^2}{2})\\) + - text: \\(O(N)\\) et \\(O(N)\\) + - text: \\(O(\\frac{N^2}{2})\\) et \\(O(N)\\) + - text: \\(O(N^2)\\) et \\(O(N)\\) + type: multiple_choice + limit: 0 + header: 'Dans le pire des cas, les opérations `get` et `put` dans `BinarySearchST` + (une recherche dichotomique dans un tableau ordonné) ont les complexités + suivantes :' + name: Complexité des opérations pour BinarySearchST + qcm03: + choices: + - text: \\(O(\\frac{N}{2})\\) + - valid: true + text: \\(O(\\log N)\\) + - text: \\(O(1.39\\times \\log N)\\) + - text: \\(O(\\frac{N^2}{2})\\) + - text: \\(O(N\\times log N)\\) + header: Le coût, dans le pire cas, d’un `get` dans un arbre *red-black* est + de  + limit: 0 + type: multiple_choice + name: Complexité des opérations de arbres Red-black + qcm04: + header: Quelle est la complexité pour énumérer en ordre croissant toutes les + clés d’un arbre binaire ? + type: multiple_choice + limit: 0 + choices: + - text: \\(O(N)\\) + valid: true + - text: \\(O(\\log N)\\) + - text: \\(O(N\\times \\log N)\\) + - text: \\(O(N^2)\\) + name: Complexité des opérations de arbres binaires + qcm05: + choices: + - text: Le *Selection Sort* n’est pas stable et est en-place. + valid: true + - text: Le *Quick Sort* est stable et en-place. + - valid: true + text: Le *Merge Sort* est stable et n’est pas en-place. + - valid: true + text: Le *3-Way Quick Sort* n’est pas stable et est en place. + - text: Le *Shell Sort* est stable et est en place. + limit: 0 + name: Propriétés des algorithmes de tri + multiple: true + type: multiple_choice + header: Quelles affirmations suivantes sont exactes ? + qcm07: + choices: + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a1.png' + valid: true + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a2.png' + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a3.png' + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a4.png' + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a5.png' + header: Quel arbre red-black correspond à l’arbre construit à partir de la + séquence 3, 5, 4, 2, 1, 7, 8, 6 ? + type: multiple_choice + limit: 0 + name: Algorithme de construction d'un arbre red-black +stored_submissions: 1 +submission_limit: + amount: 5 + period: -1 +weight: 1.0 diff --git a/PART3QcmBt/public/bt.png b/PART3QcmBt/public/bt.png new file mode 100644 index 00000000..18ced4c7 Binary files /dev/null and b/PART3QcmBt/public/bt.png differ diff --git a/PART3QcmBt/task.yaml b/PART3QcmBt/task.yaml new file mode 100644 index 00000000..7783b32e --- /dev/null +++ b/PART3QcmBt/task.yaml @@ -0,0 +1,62 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Frédéric Kaczynski, John Aoga +context: |- + Consider this ordered binary tree: + + .. figure:: PART3QcmBt/bt.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + We traverse this tree and we print the value of each node we visit it. +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 3 - QCM Binary Trees +network_grading: false +order: 13 +problems: + qcm2: + choices: + - text: '``1 2 3 4 5 6 7``' + - text: '``4 2 1 3 5 6 7``' + valid: true + - text: '``7 6 5 3 1 2 4``' + header: If the algorithm makes an prefix traversal, what will be the printed + output ? + limit: 0 + name: '' + type: multiple_choice + qcm1: + choices: + - text: '``1 2 3 4 6 5 7``' + valid: true + - text: '``4 2 1 3 5 6 7``' + - text: '``7 6 5 3 1 2 4``' + type: multiple_choice + name: '' + limit: 0 + header: If the algorithm makes an infix traversal, what will be the printed + output ? + qcm3: + choices: + - text: '``1 2 3 4 5 6 7``' + - text: '``4 2 1 3 5 6 7``' + - valid: true + text: '``1 3 2 6 7 5 4``' + name: '' + limit: 0 + type: multiple_choice + header: If the algorithm makes an postfix (or suffix) traversal, what will + be the printed output ? +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/PART3Rbt/public/rbt.png b/PART3Rbt/public/rbt.png new file mode 100644 index 00000000..b4c5226b Binary files /dev/null and b/PART3Rbt/public/rbt.png differ diff --git a/PART3Rbt/task.yaml b/PART3Rbt/task.yaml new file mode 100644 index 00000000..01744ddc --- /dev/null +++ b/PART3Rbt/task.yaml @@ -0,0 +1,81 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Frédéric Kaczynski, John Aoga +context: |- + Prenons l'exemple d'un ``Red-Black Tree`` vide dans lequel on ajoute progressivement des chiffres. + + Les questions suivantes vous demanderont d'écrire une représentation du ``Red-Black Tree`` au fur et à mesure que nous y ajouterons des objets. + + Écrivez la réponse comme si vous lisiez le ``Red-Black Tree`` de gauche à droite et de haut en bas (en ignorant les blancs possibles). Par exemple, si votre réponse est : + + .. figure:: PART3Rbt/rbt.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + Vous écririez: + + :: + + 6 24 7 1 3 5 9 + + Remarquez comment le nœud 2-3 composé de ``2``et ``4`` est écrit d'une manière fusionnée (``24``). +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + time: '30' + memory: '100' +name: PART 3 - Red Black Tree +network_grading: false +order: 14 +problems: + redblacktree1: + answer: '1' + header: 'En commençant par un ``Red-Black Tree`` vide, nous ajoutons ``1`` + au ``Red-Black Tree``. La représentation de l''arbre est :' + type: match + name: '' + redblacktree2: + header: 'Nous ajoutons ``6`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + answer: '16' + type: match + name: '' + redblacktree3: + answer: 4 1 6 + header: 'Nous ajoutons ``4`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + type: match + redblacktree4: + answer: 4 1 67 + header: 'Nous ajoutons ``7`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + type: match + redblacktree5: + type: match + header: 'Nous ajoutons ``3`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + answer: 4 13 67 + redblacktree6: + answer: 46 13 5 7 + type: match + header: 'Nous ajoutons ``5`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + redblacktree7: + name: '' + header: 'Nous ajoutons ``2`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + type: match + answer: 4 2 6 1 3 5 7 +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack1.java b/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack1.java new file mode 100644 index 00000000..da99b1b1 --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack1.java @@ -0,0 +1,564 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.NoSuchElementException; + +public class MyRedBlack, Value> implements RedBlack{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; // root of the BST + + // BST helper node data type + private class Node { + private Key key; // key + private Value val; // associated data + private Node left, right; // links to left and right subtrees + private boolean color; // color of parent link + private int size; // subtree count + + public Node(Key key, Value val, boolean color, int size) { + this.key = key; + this.val = val; + this.color = color; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /*************************************************************************** + * Node helper methods. + ***************************************************************************/ + // is node x red; false if x is null ? + private boolean isRed(Node x) { + if (x == null) return false; + return x.color == RED; + } + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x) { + if (x == null) return 0; + return x.size; + } + + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty() { + return root == null; + } + + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + if (key == null) throw new IllegalArgumentException("argument to get() is null"); + return get(root, key); + } + + // value associated with the given key in subtree rooted at x; null if no such key + private Value get(Node x, Key key) { + while (x != null) { + int cmp = key.compareTo(x.key); + if (cmp < 0) x = x.left; + else if (cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("first argument to put() is null"); + if (val == null) { + delete(key); + return; + } + + root = put(root, key, val); + root.color = BLACK; + // assert check(); + } + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val) { + if (h == null) return new Node(key, val, RED, 1); + + int cmp = key.compareTo(h.key); + if (cmp < 0) h.left = put(h.right, key, val); + else if (cmp > 0) h.right = put(h.left, key, val); + else h.val = val; + + // fix-up any right-leaning links + if (isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + h.size = size(h.left) + size(h.right) + 1; + + return h; + } + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMin(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the minimum key rooted at h + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMax(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the maximum key rooted at h + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("argument to delete() is null"); + if (!contains(key)) return; + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = delete(root, key); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the given key rooted at h + private Node delete(Node h, Key key) { + // assert get(h, key) != null; + + if (key.compareTo(h.key) < 0) { + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + if (key.compareTo(h.key) == 0 && (h.right == null)) + return null; + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + if (key.compareTo(h.key) == 0) { + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + // h.val = get(h.right, min(h.right).key); + // h.key = min(h.right).key; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /*************************************************************************** + * Red-black tree helper functions. + ***************************************************************************/ + + // make a left-leaning link lean to the right + private Node rotateRight(Node h) { + // assert (h != null) && isRed(h.left); + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = x.right.color; + x.right.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // make a right-leaning link lean to the left + private Node rotateLeft(Node h) { + // assert (h != null) && isRed(h.right); + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = x.left.color; + x.left.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // flip the colors of a node and its two children + private void flipColors(Node h) { + // h must have opposite color of its two children + // assert (h != null) && (h.left != null) && (h.right != null); + // assert (!isRed(h) && isRed(h.left) && isRed(h.right)) + // || (isRed(h) && !isRed(h.left) && !isRed(h.right)); + h.color = !h.color; + h.left.color = !h.left.color; + h.right.color = !h.right.color; + } + + // Assuming that h is red and both h.left and h.left.left + // are black, make h.left or one of its children red. + private Node moveRedLeft(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.left) && !isRed(h.left.left); + + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + // Assuming that h is red and both h.right and h.right.left + // are black, make h.right or one of its children red. + private Node moveRedRight(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.right) && !isRed(h.right.left); + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + // restore red-black tree invariant + private Node balance(Node h) { + // assert (h != null); + + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.size = size(h.left) + size(h.right) + 1; + return h; + } + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + // the smallest key in subtree rooted at x; null if no such key + private Node min(Node x) { + // assert x != null; + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + // the largest key in the subtree rooted at x; null if no such key + private Node max(Node x) { + // assert x != null; + if (x.right == null) return x; + else return max(x.right); + } + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + // the largest key in the subtree rooted at x less than or equal to the given key + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + // the smallest key in the subtree rooted at x greater than or equal to the given key + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // the key of rank k in the subtree rooted at x + private Node select(Node x, int k) { + // assert x != null; + // assert k >= 0 && k < size(x); + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k-t-1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // number of keys less than key in the subtree rooted at x + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + // if (isEmpty() || lo.compareTo(hi) > 0) return queue; + keys(root, queue, lo, hi); + return queue; + } + + // add the keys between lo and hi in the subtree rooted at x + // to the queue + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } +} \ No newline at end of file diff --git a/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack2.java b/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack2.java new file mode 100644 index 00000000..5db4172e --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack2.java @@ -0,0 +1,564 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.NoSuchElementException; + +public class MyRedBlack, Value> implements RedBlack{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; // root of the BST + + // BST helper node data type + private class Node { + private Key key; // key + private Value val; // associated data + private Node left, right; // links to left and right subtrees + private boolean color; // color of parent link + private int size; // subtree count + + public Node(Key key, Value val, boolean color, int size) { + this.key = key; + this.val = val; + this.color = color; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /*************************************************************************** + * Node helper methods. + ***************************************************************************/ + // is node x red; false if x is null ? + private boolean isRed(Node x) { + if (x == null) return false; + return x.color == RED; + } + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x) { + if (x == null) return 0; + return x.size; + } + + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty() { + return root == null; + } + + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + if (key == null) throw new IllegalArgumentException("argument to get() is null"); + return get(root, key); + } + + // value associated with the given key in subtree rooted at x; null if no such key + private Value get(Node x, Key key) { + while (x != null) { + int cmp = key.compareTo(x.key); + if (cmp < 0) x = x.left; + else if (cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("first argument to put() is null"); + if (val == null) { + delete(key); + return; + } + + root = put(root, key, val); + root.color = BLACK; + // assert check(); + } + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val) { + if (h == null) return new Node(key, val, RED, 1); + + int cmp = key.compareTo(h.key); + if (cmp < 0) h.left = put(h.left, key, val); + else if (cmp > 0) h.right = put(h.right, key, val); + else h.val = val; + + // fix-up any right-leaning links + if (isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + h.size = size(h.left) + size(h.right) + 1; + + return h; + } + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMin(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the minimum key rooted at h + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMax(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the maximum key rooted at h + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("argument to delete() is null"); + if (!contains(key)) return; + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = delete(root, key); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the given key rooted at h + private Node delete(Node h, Key key) { + // assert get(h, key) != null; + + if (key.compareTo(h.key) < 0) { + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + if (key.compareTo(h.key) == 0 && (h.right == null)) + return null; + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + if (key.compareTo(h.key) == 0) { + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + // h.val = get(h.right, min(h.right).key); + // h.key = min(h.right).key; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /*************************************************************************** + * Red-black tree helper functions. + ***************************************************************************/ + + // make a left-leaning link lean to the right + private Node rotateRight(Node h) { + // assert (h != null) && isRed(h.left); + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = x.right.color; + x.right.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // make a right-leaning link lean to the left + private Node rotateLeft(Node h) { + // assert (h != null) && isRed(h.right); + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = x.left.color; + x.left.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // flip the colors of a node and its two children + private void flipColors(Node h) { + // h must have opposite color of its two children + // assert (h != null) && (h.left != null) && (h.right != null); + // assert (!isRed(h) && isRed(h.left) && isRed(h.right)) + // || (isRed(h) && !isRed(h.left) && !isRed(h.right)); + h.color = h.color; + h.left.color = h.left.color; + h.right.color = h.right.color; + } + + // Assuming that h is red and both h.left and h.left.left + // are black, make h.left or one of its children red. + private Node moveRedLeft(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.left) && !isRed(h.left.left); + + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + // Assuming that h is red and both h.right and h.right.left + // are black, make h.right or one of its children red. + private Node moveRedRight(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.right) && !isRed(h.right.left); + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + // restore red-black tree invariant + private Node balance(Node h) { + // assert (h != null); + + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.size = size(h.left) + size(h.right) + 1; + return h; + } + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + // the smallest key in subtree rooted at x; null if no such key + private Node min(Node x) { + // assert x != null; + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + // the largest key in the subtree rooted at x; null if no such key + private Node max(Node x) { + // assert x != null; + if (x.right == null) return x; + else return max(x.right); + } + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + // the largest key in the subtree rooted at x less than or equal to the given key + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + // the smallest key in the subtree rooted at x greater than or equal to the given key + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // the key of rank k in the subtree rooted at x + private Node select(Node x, int k) { + // assert x != null; + // assert k >= 0 && k < size(x); + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k-t-1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // number of keys less than key in the subtree rooted at x + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + // if (isEmpty() || lo.compareTo(hi) > 0) return queue; + keys(root, queue, lo, hi); + return queue; + } + + // add the keys between lo and hi in the subtree rooted at x + // to the queue + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } +} \ No newline at end of file diff --git a/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack3.java b/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack3.java new file mode 100644 index 00000000..e4d6b9f9 --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/MyBuggyRedBlack3.java @@ -0,0 +1,417 @@ +import java.util.LinkedList; +import java.util.NoSuchElementException; +import java.util.Queue; + +public class MyRedBlack, Value> implements RedBlack { + private Node root; // root of BST + + private class Node { + private Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /** + * Returns true if this symbol table is empty. + * + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + /** + * Does this symbol table contain the given key? + * + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + if (key == null) throw new IllegalArgumentException("argument to contains() is null"); + return get(key) != null; + } + + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (key == null) throw new IllegalArgumentException("calls get() with a null key"); + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("calls put() with a null key"); + if (val == null) { + delete(key); + return; + } + root = put(root, key, val); + } + + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + + /** + * Removes the smallest key and associated value from the symbol table. + * + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("Symbol table underflow"); + root = deleteMin(root); + } + + private Node deleteMin(Node x) { + if (x.left == null) return x.right; + x.left = deleteMin(x.left); + x.size = size(x.left) + size(x.right) + 1; + return x; + } + + /** + * Removes the largest key and associated value from the symbol table. + * + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("Symbol table underflow"); + root = deleteMax(root); + } + + private Node deleteMax(Node x) { + if (x.right == null) return x.left; + x.right = deleteMax(x.right); + x.size = size(x.left) + size(x.right) + 1; + return x; + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("calls delete() with a null key"); + root = delete(root, key); + } + + private Node delete(Node x, Key key) { + if (x == null) return null; + + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = delete(x.left, key); + else if (cmp > 0) x.right = delete(x.right, key); + else { + if (x.right == null) return x.left; + if (x.left == null) return x.right; + Node t = x; + x = min(t.right); + x.right = deleteMin(t.right); + x.left = t.left; + } + x.size = size(x.left) + size(x.right) + 1; + return x; + } + + + /** + * Returns the smallest key in the symbol table. + * + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + private Node min(Node x) { + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + private Node max(Node x) { + if (x.right == null) return x; + else return max(x.right); + } + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + public Key floor2(Key key) { + return floor2(root, key, null); + } + + private Key floor2(Node x, Key key, Key best) { + if (x == null) return best; + int cmp = key.compareTo(x.key); + if (cmp < 0) return floor2(x.left, key, best); + else if (cmp > 0) return floor2(x.right, key, x.key); + else return x.key; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) { + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + return ceiling(x.right, key); + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // Return key of rank k. + private Node select(Node x, int k) { + if (x == null) return null; + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k - t - 1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // Number of keys in the subtree less than key. + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * + * @return all keys in the symbol table + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList<>(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the symbol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + keys(root, queue, lo, hi); + return queue; + } + + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the symbol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } + + /** + * Returns the height of the BST (for debugging). + * + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /** + * Returns the keys in the BST in level order (for debugging). + * + * @return the keys in the BST in level order traversal + */ + public Iterable levelOrder() { + Queue keys = new LinkedList(); + Queue queue = new LinkedList(); + queue.remove(root); + while (!queue.isEmpty()) { + Node x = queue.poll(); + if (x == null) continue; + keys.remove(x.key); + queue.remove(x.left); + queue.remove(x.right); + } + return keys; + } +} \ No newline at end of file diff --git a/PART3WriteUnittestsRedBlackTree/MyRedBlack.java b/PART3WriteUnittestsRedBlackTree/MyRedBlack.java new file mode 100644 index 00000000..6b9b0cdd --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/MyRedBlack.java @@ -0,0 +1,564 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.NoSuchElementException; + +public class MyRedBlack, Value> implements RedBlack{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; // root of the BST + + // BST helper node data type + private class Node { + private Key key; // key + private Value val; // associated data + private Node left, right; // links to left and right subtrees + private boolean color; // color of parent link + private int size; // subtree count + + public Node(Key key, Value val, boolean color, int size) { + this.key = key; + this.val = val; + this.color = color; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /*************************************************************************** + * Node helper methods. + ***************************************************************************/ + // is node x red; false if x is null ? + private boolean isRed(Node x) { + if (x == null) return false; + return x.color == RED; + } + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x) { + if (x == null) return 0; + return x.size; + } + + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty() { + return root == null; + } + + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + if (key == null) throw new IllegalArgumentException("argument to get() is null"); + return get(root, key); + } + + // value associated with the given key in subtree rooted at x; null if no such key + private Value get(Node x, Key key) { + while (x != null) { + int cmp = key.compareTo(x.key); + if (cmp < 0) x = x.left; + else if (cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("first argument to put() is null"); + if (val == null) { + delete(key); + return; + } + + root = put(root, key, val); + root.color = BLACK; + // assert check(); + } + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val) { + if (h == null) return new Node(key, val, RED, 1); + + int cmp = key.compareTo(h.key); + if (cmp < 0) h.left = put(h.left, key, val); + else if (cmp > 0) h.right = put(h.right, key, val); + else h.val = val; + + // fix-up any right-leaning links + if (isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + h.size = size(h.left) + size(h.right) + 1; + + return h; + } + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMin(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the minimum key rooted at h + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMax(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the maximum key rooted at h + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("argument to delete() is null"); + if (!contains(key)) return; + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = delete(root, key); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the given key rooted at h + private Node delete(Node h, Key key) { + // assert get(h, key) != null; + + if (key.compareTo(h.key) < 0) { + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + if (key.compareTo(h.key) == 0 && (h.right == null)) + return null; + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + if (key.compareTo(h.key) == 0) { + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + // h.val = get(h.right, min(h.right).key); + // h.key = min(h.right).key; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /*************************************************************************** + * Red-black tree helper functions. + ***************************************************************************/ + + // make a left-leaning link lean to the right + private Node rotateRight(Node h) { + // assert (h != null) && isRed(h.left); + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = x.right.color; + x.right.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // make a right-leaning link lean to the left + private Node rotateLeft(Node h) { + // assert (h != null) && isRed(h.right); + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = x.left.color; + x.left.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // flip the colors of a node and its two children + private void flipColors(Node h) { + // h must have opposite color of its two children + // assert (h != null) && (h.left != null) && (h.right != null); + // assert (!isRed(h) && isRed(h.left) && isRed(h.right)) + // || (isRed(h) && !isRed(h.left) && !isRed(h.right)); + h.color = !h.color; + h.left.color = !h.left.color; + h.right.color = !h.right.color; + } + + // Assuming that h is red and both h.left and h.left.left + // are black, make h.left or one of its children red. + private Node moveRedLeft(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.left) && !isRed(h.left.left); + + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + // Assuming that h is red and both h.right and h.right.left + // are black, make h.right or one of its children red. + private Node moveRedRight(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.right) && !isRed(h.right.left); + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + // restore red-black tree invariant + private Node balance(Node h) { + // assert (h != null); + + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.size = size(h.left) + size(h.right) + 1; + return h; + } + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + // the smallest key in subtree rooted at x; null if no such key + private Node min(Node x) { + // assert x != null; + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + // the largest key in the subtree rooted at x; null if no such key + private Node max(Node x) { + // assert x != null; + if (x.right == null) return x; + else return max(x.right); + } + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + // the largest key in the subtree rooted at x less than or equal to the given key + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + // the smallest key in the subtree rooted at x greater than or equal to the given key + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // the key of rank k in the subtree rooted at x + private Node select(Node x, int k) { + // assert x != null; + // assert k >= 0 && k < size(x); + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k-t-1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // number of keys less than key in the subtree rooted at x + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + // if (isEmpty() || lo.compareTo(hi) > 0) return queue; + keys(root, queue, lo, hi); + return queue; + } + + // add the keys between lo and hi in the subtree rooted at x + // to the queue + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } +} \ No newline at end of file diff --git a/PART3WriteUnittestsRedBlackTree/RedBlack.java b/PART3WriteUnittestsRedBlackTree/RedBlack.java new file mode 100644 index 00000000..16a996ec --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/RedBlack.java @@ -0,0 +1,187 @@ +import java.util.NoSuchElementException; + +public interface RedBlack, Value> { + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size(); + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty(); + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key); + + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key); + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val); + + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin(); + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax(); + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key); + + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height(); + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min(); + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max(); + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key); + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key); + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k); + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key); + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys(); + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi); + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi); +} \ No newline at end of file diff --git a/PART3WriteUnittestsRedBlackTree/execute_test b/PART3WriteUnittestsRedBlackTree/execute_test new file mode 100644 index 00000000..f78eacc5 --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/execute_test @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyRedBlack" for "MyBuggyRedBlack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/p1circularlinkedlist/libs/hamcrest-core-1.3.jar b/PART3WriteUnittestsRedBlackTree/hamcrest-core-1.3.jar similarity index 100% rename from p1circularlinkedlist/libs/hamcrest-core-1.3.jar rename to PART3WriteUnittestsRedBlackTree/hamcrest-core-1.3.jar diff --git a/p1circularlinkedlist/libs/junit-4.12.jar b/PART3WriteUnittestsRedBlackTree/junit-4.12.jar similarity index 100% rename from p1circularlinkedlist/libs/junit-4.12.jar rename to PART3WriteUnittestsRedBlackTree/junit-4.12.jar diff --git a/PART3WriteUnittestsRedBlackTree/public/LSINF1121_PART3_UnitTestsRedBlackTree.zip b/PART3WriteUnittestsRedBlackTree/public/LSINF1121_PART3_UnitTestsRedBlackTree.zip new file mode 100644 index 00000000..8b1834b8 Binary files /dev/null and b/PART3WriteUnittestsRedBlackTree/public/LSINF1121_PART3_UnitTestsRedBlackTree.zip differ diff --git a/PART3WriteUnittestsRedBlackTree/run b/PART3WriteUnittestsRedBlackTree/run new file mode 100644 index 00000000..c47ebaf3 --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/run @@ -0,0 +1,21 @@ +#! /bin/bash + +################################### +# Test configuration +################################### + +tot=4 # number of tests +problemId="RedBlack_tests" +name="MyRedBlack" +testName="RedBlackTests" +interfaceName="RedBlack" +buggyName="MyBuggyRedBlack" +buggyFeedbacks=( + "Failed order value in RBT" + "Failed flipcolor() check" + "Failed 2-3 property check" +) +countBeforeHints=3 + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/PART3WriteUnittestsRedBlackTree/task.yaml b/PART3WriteUnittestsRedBlackTree/task.yaml new file mode 100644 index 00000000..b561c194 --- /dev/null +++ b/PART3WriteUnittestsRedBlackTree/task.yaml @@ -0,0 +1,55 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Simon Teugels +context: | + Il vous est demandé d'écrire des tests unitaire (en utilisant JUnit) afin de vérifier si une implémentation particulière d'un ``Red-Black Tree`` est correcte. + + Voici un modèle simple que vous pouvez utiliser pour écrire vos tests : + + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class RedBlackTests { + + @Test + public void firstTest() { + // ... TODO ... + } + + @Test + public void secondTest() { + // ... TODO ... + } + + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '512' + output: '100' + time: '60' +name: PART 3 - Write Unit tests Red Black Tree +network_grading: false +order: 11 +problems: + RedBlack_tests: + header: |- + Téléchargez votre fichier ici, avec une seule classe nommée *RedBlackTests*. Vous pouvez supposer que la classe représentant le ``Red-Black Tree`` sous test s'appelle *MyRedBlack*. + + **Note:** : Vous ne devriez **pas** mettre votre classe dans un package java. En d'autres termes, vous ne devriez **pas** utiliser le mot-clé ``package``. + allowed_exts: + - .java + name: Tests unitaires pour l'implémentation d'un Red-Black Tree + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/PART5BinaryHeapPush/feedback_settings.yaml b/PART5BinaryHeapPush/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/PART5BinaryHeapPush/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/PART5BinaryHeapPush/public/Heap.java b/PART5BinaryHeapPush/public/Heap.java new file mode 100644 index 00000000..aef18d41 --- /dev/null +++ b/PART5BinaryHeapPush/public/Heap.java @@ -0,0 +1,52 @@ +/** + * Un heap binaire, dont le contenu est place dans le tableau `content`. + * + * Le tableau `contenu` represente un arbre, suivant la methode vue au cours: + * Le noeud n°i de l'arbre a pour enfant les indices 2*i et 2*I+1. + * + * Notez bien: + * - Ce heap utilise le 1-indexing, c'est a dire que le premier index du tableau est 1. Ceci est cense faciliter vos + * calculs. La position 0 de `content` doit donc toujours rester vide. + * - Vous pouvez utiliser la fonction increaseSize() pour doubler la taille de `content`, si besoin. + * - /!\ important! Les tests fournits dans ce projet assument que vous utilisez l'algorithme vu au cours. Si vous + * n'utilisez pas l'algorithme vu au cours, les tests retourneront toujours faux. + * + * INGInious va lui verifier vos reponses en se basant sur les proprietes de base d'un heap, et donc n'est pas + * sensible a l'algorithme que vous choississez. + * + * Vous etes dont libre de choisir l'algorithme de votre choix. + * + * - La complexite attendue est O(log n) par insertion dans la heap. Vous recevrez la moitie des points si votre + * algorithme est correct (s'il produit un heap valide) et l'autre moitie des points si il respecte la complexite. + */ +public class Heap { + protected int[] content; + protected int size; + + public Heap(int initSize) { + size = 0; + content = new int[initSize]; + } + + /** + * Doubles the size of the inner storage array + */ + protected void increaseSize() { + int[] newContent = new int[content.length*2]; + System.arraycopy(content, 0, newContent, 0, content.length); + content = newContent; + } + + /** + * Returns the content of the inner array + */ + public int[] getContent() { + return content; + } + + public int getSize() { + return size; + } + + //TODO +} diff --git a/PART5BinaryHeapPush/public/LSINF1121_PART5_BinaryHeapPush.zip b/PART5BinaryHeapPush/public/LSINF1121_PART5_BinaryHeapPush.zip new file mode 100644 index 00000000..5afa590a Binary files /dev/null and b/PART5BinaryHeapPush/public/LSINF1121_PART5_BinaryHeapPush.zip differ diff --git a/PART5BinaryHeapPush/run b/PART5BinaryHeapPush/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/PART5BinaryHeapPush/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/PART5BinaryHeapPush/src/INGIniousHelper.java b/PART5BinaryHeapPush/src/INGIniousHelper.java new file mode 100644 index 00000000..99bfc6e1 --- /dev/null +++ b/PART5BinaryHeapPush/src/INGIniousHelper.java @@ -0,0 +1,73 @@ +package src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; +import java.util.HashMap; + +public class INGIniousHelper { + public static boolean checkHeapiness(int[] content, int size, HashMap counts) { + HashMap doublecheck = new HashMap<>(); + if(!visit(content, 1, Integer.MIN_VALUE, size, doublecheck)) + return false; + if(counts.size() != doublecheck.size()) + return false; + for(int x: doublecheck.keySet()) { + Integer a = counts.get(x); + Integer b = doublecheck.get(x); + if (a == null || !a.equals(b)) + return false; + } + return true; + } + + private static boolean visit(int[] content, int pos, int min, int size, HashMap counts) { + if(pos > size) + return true; + if(content[pos] < min) + return false; + counts.put(content[pos], counts.getOrDefault(content[pos], 0)+1); + return visit(content, pos*2, content[pos], size, counts) && visit(content, pos*2+1, content[pos], size, counts); + } + + public static List readTestData() throws IOException { + List list = new ArrayList(); + + File file = new File("tests/easy.txt"); + BufferedReader br = new BufferedReader(new FileReader(file)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + int nTests = Integer.parseInt(st.nextToken()); + + for(int t = 0; t < nTests; t++) { + st = new StringTokenizer(br.readLine()); + int size = Integer.parseInt(st.nextToken()); + int steps = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + int[] content = new int[size]; + for(int i = 0; i < size; i++) + content[i] = Integer.parseInt(st.nextToken()); + + int[][] expected = new int[steps][]; + int[] expectedSteps = new int[steps]; + + for(int i = 0; i < steps; i++) { + st = new StringTokenizer(br.readLine()); + expectedSteps[i] = Integer.parseInt(st.nextToken()); + int length = Integer.parseInt(st.nextToken()); + expected[i] = new int[length]; + for(int j = 0; j < length; j++) + expected[i][j] = Integer.parseInt(st.nextToken()); + } + + list.add(new Object[] {content, expected, expectedSteps}); + } + + return list; + } +} diff --git a/PART5BinaryHeapPush/src/StudentTestRunner.java b/PART5BinaryHeapPush/src/StudentTestRunner.java new file mode 100644 index 00000000..6ed406f0 --- /dev/null +++ b/PART5BinaryHeapPush/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(TestHeapComplexity.class, TestHeapEasy.class, TestHeapFirst.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/PART5BinaryHeapPush/src/TestHeapComplexity.java b/PART5BinaryHeapPush/src/TestHeapComplexity.java new file mode 100644 index 00000000..22ab3410 --- /dev/null +++ b/PART5BinaryHeapPush/src/TestHeapComplexity.java @@ -0,0 +1,59 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import static src.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; + +@RunWith(Parameterized.class) +public class TestHeapComplexity { + private int seed; + + public TestHeapComplexity(Integer seed) { + this.seed = seed; + } + + @Test(timeout=700) + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + int size = 10000; + int[] toInsert = generateRandom(size, seed); + for(int i = 0; i < toInsert.length; i++) { + heap.push(toInsert[i]); + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + } + + assertTrue(checkHeapiness(heap.getContent(), size, counts)); + } + + private int[] generateRandom(int size, int seed) { + int[] todo = new int[size]; + Random r = new Random(seed); + for(int i = 0; i < size; i++) { + todo[i] = r.nextInt(); + if(todo[i] == Integer.MIN_VALUE) + todo[i] = 0; + } + return todo; + } + + @Parameterized.Parameters + public static List data() throws IOException { + List list = new ArrayList(); + for(int i = 0; i < 50; i++) + list.add(new Object[] {i}); + return list; + } +} diff --git a/PART5BinaryHeapPush/src/TestHeapEasy.java b/PART5BinaryHeapPush/src/TestHeapEasy.java new file mode 100644 index 00000000..84c7c17a --- /dev/null +++ b/PART5BinaryHeapPush/src/TestHeapEasy.java @@ -0,0 +1,42 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import static src.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; +import static src.INGIniousHelper.readTestData; + +@RunWith(Parameterized.class) +public class TestHeapEasy { + private int[] toInsert; + + public TestHeapEasy(int[] toInsert, int[][] expected, int[] expectedSteps) { + this.toInsert = toInsert; + } + + @Test + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + + for(int i = 0; i < toInsert.length; i++) { + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + heap.push(toInsert[i]); + assertTrue(checkHeapiness(heap.getContent(), i+1, counts)); + } + } + + @Parameterized.Parameters + public static List data() throws IOException { + return readTestData(); + } +} diff --git a/PART5BinaryHeapPush/src/TestHeapFirst.java b/PART5BinaryHeapPush/src/TestHeapFirst.java new file mode 100644 index 00000000..fda92df7 --- /dev/null +++ b/PART5BinaryHeapPush/src/TestHeapFirst.java @@ -0,0 +1,29 @@ +package src; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import templates.*; + +import java.util.HashMap; + +import static src.INGIniousHelper.checkHeapiness; +import static junit.framework.TestCase.assertEquals; +import static org.junit.Assert.assertTrue; + +public class TestHeapFirst { + @Test + @Grade(value=25) + public void basicTest() { + HashMap counts = new HashMap<>(); + Heap heap = new Heap(10); + + int[] content = new int[]{5, 1, 2, 3, 8, 10, 6, 0}; + for(int x: content) { + counts.put(x, counts.getOrDefault(x, 0)+1); + heap.push(x); + } + + assertEquals(8, heap.getSize()); + assertTrue(checkHeapiness(heap.getContent(), 8, counts)); + + } +} diff --git a/PART5BinaryHeapPush/task.yaml b/PART5BinaryHeapPush/task.yaml new file mode 100644 index 00000000..9d5d7e2e --- /dev/null +++ b/PART5BinaryHeapPush/task.yaml @@ -0,0 +1,120 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: '' +context: |- + Dans cette tâche on vous propose d'implémenter la fonction d'insertion ``push()`` d'un heap binaire. + + La fonction push agit sur un tableau, nommé ``contenu``, qui représente un arbre, selon la méthode vue au cours: + le noeud n°i de l'arbre a pour enfant les indices 2*i et 2*i+1. + + il faut noter que dans le livre à la page 318 a été proposée le ``MaxPQ`` mais ici nous vous proposons de plutot réfléchir aux changements à apporter à ce code pour implémenter un ``MinPQ`` notamment à la fonction d'insertion. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 5 - Binary Heap Push (implem) +network_grading: false +order: 25 +problems: + first: + name: 'Vérifiez votre compréhension ' + answer: 0 1 2 3 8 10 6 5 + type: match + header: |- + Soit ce code: + + .. code-block:: java + + Heap heap = new Heap(10); + heap.push(5); + heap.push(1); + heap.push(2); + heap.push(3); + heap.push(8); + heap.push(10); + heap.push(6); + heap.push(0); + + En considérant que le Heap est un ``MinPQ`` Quel est le contenu du tableau `content` après ces opérations? + (indiquez uniquement les entrées utilisées du tableau, dans l'ordre, séparés par **UN espace, sans espace de fin**.) + + **Note** *Cette sous-question n'attribue pas de points, mais permet à la question de l'implémentation d'être corrigée.* + second: + default: '' + language: java + name: Code + type: code + header: |- + .. code-block:: java + + + /** + * A binary heap where the content is placed in the array `content`. + * + * The array `content` represents a tree and is based on the methods we have seen in the course: + * The ith node of the tree has indices 2*i and 2*i+1 as children. + * + * remarks: + * - This heap uses a 1-indexing, ie. the first index in the array is 1 instead of 0 as usual. This could ease your computations. + * By this way, the index O of the array `content` must always stay empty. + * - You can use the function increaseSize() to double the size of the array `content`, if needed. + * - The expected complexity is O(log n) for the insertion in the heap. + */ + public class Heap { + protected int[] content; + protected int size; + + public Heap(int initSize) { + size = 0; + content = new int[initSize]; + } + + /** + * Doubles the size of the inner storage array + */ + protected void increaseSize() { + int[] newContent = new int[content.length*2]; + System.arraycopy(content, 0, newContent, 0, content.length); + content = newContent; + } + + /** + * Add a new value to the heap. + * @param val value to add + */ + public void push(int val) { + //TODO + //operation on this.content. + //use increaseSize() if needed. + } + + //You can add other functions if needed here + + /** + * Returns the content of the inner array + */ + public int[] getContent() { + return content; + } + + public int getSize() { + return size; + } + } + + + Copiez toute la fonction ``push()`` ici (y compris public void push(int val) et les accolades) ainsi que toutes les autres méthodes éventuelles que vous aviez implémenté. + + .. code-block:: java + + public void push(int val) +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/PART5BinaryHeapPush/templates/Heap.java b/PART5BinaryHeapPush/templates/Heap.java new file mode 100644 index 00000000..3d1772c0 --- /dev/null +++ b/PART5BinaryHeapPush/templates/Heap.java @@ -0,0 +1,54 @@ +package templates; + +/** + * Un heap binaire, dont le contenu est place dans le tableau `content`. + * + * Le tableau `contenu` represente un arbre, suivant la methode vue au cours: + * Le noeud n°i de l'arbre a pour enfant les indices 2*i et 2*I+1. + * + * Notez bien: + * - Ce heap utilise le 1-indexing, c'est a dire que le premier index du tableau est 1. Ceci est cense faciliter vos + * calculs. La position 0 de `content` doit donc toujours rester vide. + * - Vous pouvez utiliser la fonction increaseSize() pour doubler la taille de `content`, si besoin. + * - /!\ important! Les tests fournits dans ce projet assument que vous utilisez l'algorithme vu au cours. Si vous + * n'utilisez pas l'algorithme vu au cours, les tests retourneront toujours faux. + * + * INGInious va lui verifier vos reponses en se basant sur les proprietes de base d'un heap, et donc n'est pas + * sensible a l'algorithme que vous choississez. + * + * Vous etes dont libre de choisir l'algorithme de votre choix. + * + * - La complexite attendue est O(log n) par insertion dans la heap. Vous recevrez la moitie des points si votre + * algorithme est correct (s'il produit un heap valide) et l'autre moitie des points si il respecte la complexite. + */ +public class Heap { + protected int[] content; + protected int size; + + public Heap(int initSize) { + size = 0; + content = new int[initSize]; + } + + /** + * Doubles the size of the inner storage array + */ + protected void increaseSize() { + int[] newContent = new int[content.length*2]; + System.arraycopy(content, 0, newContent, 0, content.length); + content = newContent; + } + + /** + * Returns the content of the inner array + */ + public int[] getContent() { + return content; + } + + public int getSize() { + return size; + } + +@ @second@@ +} diff --git a/PART5BinaryHeapPush/unit_test/INGIniousHelper.java b/PART5BinaryHeapPush/unit_test/INGIniousHelper.java new file mode 100644 index 00000000..c3e01bcc --- /dev/null +++ b/PART5BinaryHeapPush/unit_test/INGIniousHelper.java @@ -0,0 +1,73 @@ +package tests; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; +import java.util.HashMap; + +public class INGIniousHelper { + public static boolean checkHeapiness(int[] content, int size, HashMap counts) { + HashMap doublecheck = new HashMap<>(); + if(!visit(content, 1, Integer.MIN_VALUE, size, doublecheck)) + return false; + if(counts.size() != doublecheck.size()) + return false; + for(int x: doublecheck.keySet()) { + Integer a = counts.get(x); + Integer b = doublecheck.get(x); + if (a == null || !a.equals(b)) + return false; + } + return true; + } + + private static boolean visit(int[] content, int pos, int min, int size, HashMap counts) { + if(pos > size) + return true; + if(content[pos] < min) + return false; + counts.put(content[pos], counts.getOrDefault(content[pos], 0)+1); + return visit(content, pos*2, content[pos], size, counts) && visit(content, pos*2+1, content[pos], size, counts); + } + + public static List readTestData() throws IOException { + List list = new ArrayList(); + + File file = new File("tests/easy.txt"); + BufferedReader br = new BufferedReader(new FileReader(file)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + int nTests = Integer.parseInt(st.nextToken()); + + for(int t = 0; t < nTests; t++) { + st = new StringTokenizer(br.readLine()); + int size = Integer.parseInt(st.nextToken()); + int steps = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + int[] content = new int[size]; + for(int i = 0; i < size; i++) + content[i] = Integer.parseInt(st.nextToken()); + + int[][] expected = new int[steps][]; + int[] expectedSteps = new int[steps]; + + for(int i = 0; i < steps; i++) { + st = new StringTokenizer(br.readLine()); + expectedSteps[i] = Integer.parseInt(st.nextToken()); + int length = Integer.parseInt(st.nextToken()); + expected[i] = new int[length]; + for(int j = 0; j < length; j++) + expected[i][j] = Integer.parseInt(st.nextToken()); + } + + list.add(new Object[] {content, expected, expectedSteps}); + } + + return list; + } +} diff --git a/PART5BinaryHeapPush/unit_test/TestHeapComplexity.java b/PART5BinaryHeapPush/unit_test/TestHeapComplexity.java new file mode 100644 index 00000000..c7ede9ae --- /dev/null +++ b/PART5BinaryHeapPush/unit_test/TestHeapComplexity.java @@ -0,0 +1,56 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import static tests.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; + +@RunWith(Parameterized.class) +public class TestHeapComplexity { + private int seed; + + public TestHeapComplexity(Integer seed) { + this.seed = seed; + } + + @Test(timeout=700) + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + int size = 10000; + int[] toInsert = generateRandom(size, seed); + for(int i = 0; i < toInsert.length; i++) { + heap.push(toInsert[i]); + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + } + + assertTrue(checkHeapiness(heap.getContent(), size, counts)); + } + + private int[] generateRandom(int size, int seed) { + int[] todo = new int[size]; + Random r = new Random(seed); + for(int i = 0; i < size; i++) { + todo[i] = r.nextInt(); + if(todo[i] == Integer.MIN_VALUE) + todo[i] = 0; + } + return todo; + } + + @Parameterized.Parameters + public static List data() throws IOException { + List list = new ArrayList(); + for(int i = 0; i < 50; i++) + list.add(new Object[] {i}); + return list; + } +} diff --git a/PART5BinaryHeapPush/unit_test/TestHeapEasy.java b/PART5BinaryHeapPush/unit_test/TestHeapEasy.java new file mode 100644 index 00000000..03662805 --- /dev/null +++ b/PART5BinaryHeapPush/unit_test/TestHeapEasy.java @@ -0,0 +1,40 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import static tests.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; +import static tests.INGIniousHelper.readTestData; + +@RunWith(Parameterized.class) +public class TestHeapEasy { + private int[] toInsert; + + public TestHeapEasy(int[] toInsert, int[][] expected, int[] expectedSteps) { + this.toInsert = toInsert; + } + + @Test + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + + for(int i = 0; i < toInsert.length; i++) { + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + heap.push(toInsert[i]); + assertTrue(checkHeapiness(heap.getContent(), i+1, counts)); + } + } + + @Parameterized.Parameters + public static List data() throws IOException { + return readTestData(); + } +} diff --git a/PART5BinaryHeapPush/unit_test/TestHeapFirst.java b/PART5BinaryHeapPush/unit_test/TestHeapFirst.java new file mode 100644 index 00000000..d13b1b54 --- /dev/null +++ b/PART5BinaryHeapPush/unit_test/TestHeapFirst.java @@ -0,0 +1,27 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import java.util.HashMap; + +import static tests.INGIniousHelper.checkHeapiness; +import static junit.framework.TestCase.assertEquals; +import static org.junit.Assert.assertTrue; + +public class TestHeapFirst { + @Test + @Grade(value=25) + public void basicTest() { + HashMap counts = new HashMap<>(); + Heap heap = new Heap(10); + + int[] content = new int[]{5, 1, 2, 3, 8, 10, 6, 0}; + for(int x: content) { + counts.put(x, counts.getOrDefault(x, 0)+1); + heap.push(x); + } + + assertEquals(8, heap.getSize()); + assertTrue(checkHeapiness(heap.getContent(), 8, counts)); + + } +} diff --git a/Part1CircularLinkedList/feedback_settings.yaml b/Part1CircularLinkedList/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part1CircularLinkedList/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/p1circularlinkedlist/student/CircularLinkedList.java b/Part1CircularLinkedList/public/CircularLinkedList.java similarity index 100% rename from p1circularlinkedlist/student/CircularLinkedList.java rename to Part1CircularLinkedList/public/CircularLinkedList.java diff --git a/p1circularlinkedlist/public/CircularLinkedList.png b/Part1CircularLinkedList/public/CircularLinkedList.png similarity index 100% rename from p1circularlinkedlist/public/CircularLinkedList.png rename to Part1CircularLinkedList/public/CircularLinkedList.png diff --git a/Part1CircularLinkedList/public/LSINF1121_PART1_CircularLinkedList.zip b/Part1CircularLinkedList/public/LSINF1121_PART1_CircularLinkedList.zip new file mode 100644 index 00000000..e11e6a96 Binary files /dev/null and b/Part1CircularLinkedList/public/LSINF1121_PART1_CircularLinkedList.zip differ diff --git a/Part1CircularLinkedList/run b/Part1CircularLinkedList/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part1CircularLinkedList/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part1CircularLinkedList/src/CircularLinkedListTestComplexity.java b/Part1CircularLinkedList/src/CircularLinkedListTestComplexity.java new file mode 100644 index 00000000..0c5a0830 --- /dev/null +++ b/Part1CircularLinkedList/src/CircularLinkedListTestComplexity.java @@ -0,0 +1,63 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import static org.junit.Assert.*; + +@RunWith(Parameterized.class) +public class CircularLinkedListTestComplexity { + + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestComplexity(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test(timeout=300) + @Grade(value=10) //10 par test x 5 = 50 + public void runAsExpected() { + int sz = correct.size(); + for (int i = 0; i < sz/2; i++) { + student.remove(0); + correct.remove(0); + } + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 1000000; k++) { + a.enqueue(k); + b.add(k); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/Part1CircularLinkedList/src/CircularLinkedListTestExtreme.java b/Part1CircularLinkedList/src/CircularLinkedListTestExtreme.java new file mode 100644 index 00000000..72eb859c --- /dev/null +++ b/Part1CircularLinkedList/src/CircularLinkedListTestExtreme.java @@ -0,0 +1,64 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; + +import org.junit.Test; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; + +import student.CircularLinkedList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + + +public class CircularLinkedListTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + for (int i = 0; i < 20; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + assertEquals(0,a.size()); + a.enqueue(i); + assertEquals(1,a.size()); + Iterator itera = a.iterator(); + assertTrue(itera.hasNext()); + assertEquals(i,itera.next()); + + CircularLinkedList b = new CircularLinkedList<>(); + b.enqueue(i); + b.remove(0); + Iterator iterb = b.iterator(); + assertFalse(iterb.hasNext()); + + } + } + + @Test(expected = IndexOutOfBoundsException.class) + @Grade(value=5) + public void testOutOfBound() { + CircularLinkedList a = new CircularLinkedList<>(); + a.enqueue(3); + a.remove(1); + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=5) + public void testConcurrentModificationNext() { + CircularLinkedList a = new CircularLinkedList<>(); + Iterator iter = a.iterator(); + a.enqueue(3); + iter.next(); + } + + + + + +} + diff --git a/Part1CircularLinkedList/src/CircularLinkedListTestRandom.java b/Part1CircularLinkedList/src/CircularLinkedListTestRandom.java new file mode 100644 index 00000000..e93295ea --- /dev/null +++ b/Part1CircularLinkedList/src/CircularLinkedListTestRandom.java @@ -0,0 +1,68 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class CircularLinkedListTestRandom { + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestRandom(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.5) //0.5 par test x 50 = 25 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 100; k++) { + int v = r.nextInt(); + a.enqueue(v); + b.add(v); + } + if (i%2 == 0) { + a.remove(10); + b.remove(10); + a.remove(0); + b.remove(0); + a.remove(a.size()-1); + b.remove(b.size()-1); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/Part1CircularLinkedList/src/StudentTestRunner.java b/Part1CircularLinkedList/src/StudentTestRunner.java new file mode 100644 index 00000000..bc902539 --- /dev/null +++ b/Part1CircularLinkedList/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(CircularLinkedListTestComplexity.class, CircularLinkedListTestExtreme.class, CircularLinkedListTestRandom.class ); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part1CircularLinkedList/task.yaml b/Part1CircularLinkedList/task.yaml new file mode 100644 index 00000000..aa31d67a --- /dev/null +++ b/Part1CircularLinkedList/task.yaml @@ -0,0 +1,166 @@ +accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00/2019-09-24 16:00:00 +author: Pierre Schaus, John Aoga +categories: [] +context: |- + On s’intéresse à l'implémentation d'une ``liste simplement chaînée circulaire``, c’est-à-dire une liste pour laquelle la dernière position de la liste fait référence, comme position suivante, à la première position de la liste. + + .. figure:: Part1CircularLinkedList/CircularLinkedList.png + :scale: 100 % + :alt: alternate text + :align: center + :figclass: align-center + + L’ajout d’un nouvel élément dans la file (méthode ``enqueue``) se fait en fin de liste et le retrait (méthode ``remove``) se fait a un `index` particulier de la liste. Une (seule) référence sur la fin de la liste (``last``) est nécessaire pour effectuer toutes les opérations sur cette file. + + Il vous est donc demander d'implémenter cette liste simplement chaînée circulaire à partir de la classe ``CircularLinkedList.java`` où vous devez completer (*TODO STUDENT*): + + - la méthode d'ajout (``enqueue``); + + - la méthode de retrait (``remove``) [L'exception ``IndexOutOfBoundsException`` est lancée quand la valeur de l'index n'est pas comprise en 0 et size()-1]; + + - l'itérateur (``ListIterator``) qui permet de parcourir la liste en FIFO. + + *Attention:* L'itérateur devra lancer des exceptions dans les cas suivants: + + - étant donnée que le ``remove`` est optionnel dans l'`API `_ , l'iterateur devra juste lancer un ``UnsupportedOperationException`` en cas d'appel du ``remove``; + + - étant donnée qu'on ne peut modifier l'itérateur alors qu'on est en train d'itérer, l'iterateur devra lancer un ``ConcurrentModificationException`` dans ce cas dans le ``next`` et le ``hasNest``; + + - si le ``next`` est appelé alors qu'il n'y a plus de prochain élément, l'iterateur devra lancer un ``NoSuchElementException``. + + .. code-block:: java + + import java.util.ConcurrentModificationException; + import java.util.Iterator; + import java.util.NoSuchElementException; + + public class CircularLinkedList implements Iterable { + private long nOp = 0; // count the number of operations + private int n; // size of the stack + private Node last; // trailer of the list + + // helper linked list class + private class Node { + private Item item; + private Node next; + } + + public CircularLinkedList() { + last = null; + n = 0; + } + + public boolean isEmpty() { return n == 0; } + + public int size() { return n; } + + private long nOp() { return nOp; } + + /** + * Append an item at the end of the list + * @param item the item to append + */ + public void enqueue(Item item) { + // TODO STUDENT: Implement add method + } + + /** + * Removes the element at the specified position in this list. + * Shifts any subsequent elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + */ + public Item remove(int index) { + // TODO STUDENT: Implement remove method + } + + /** + * Returns an iterator that iterates through the items in FIFO order. + * @return an iterator that iterates through the items in FIFO order. + */ + public Iterator iterator() { + return new ListIterator(); + } + + /** + * Implementation of an iterator that iterates through the items in FIFO order. + * + */ + private class ListIterator implements Iterator { + // TODO STUDENT: Implement the ListIterator + } + + } + + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '500' + output: '2' + memory: '1000' +name: PART 1 - Circular linkedlist (Implem) +network_grading: false +order: 5 +problems: + enqueue: + header: |- + .. code-block:: java + + /** + * Append an item at the end of the list + * @param item the item to append + */ + public void enqueue(Item item) { + // TODO STUDENT: Implement add method + } + + Copier le contenu de la fonction ``public void enqueue(Item item)`` ci-desssous. + language: java + name: 'Implementation de la fonction ajout: void enqueue(Item item)' + default: '' + type: code + remove: + header: |- + .. code-block:: java + + /** + * Removes the element at the specified position in this list. + * Shifts any subsequent elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + */ + public Item remove(int index) { + // TODO STUDENT: Implement remove method + } + + Copier le contenu de la fonction ``public Item remove(int index)`` ci-desssous. + language: java + default: '' + type: code + name: 'Implementation de la fonction ajout: Item remove(int index)' + listiterator: + name: 'Implementation de l''iterateur: ListIterator' + header: |- + .. code-block:: java + + /** + * Implementation of an iterator that iterates through the items in FIFO order. + * + */ + private class ListIterator implements Iterator { + // TODO STUDENT: Implement the ListIterator + } + + Copier le contenu de la class ``private class ListIterator implements Iterator`` ci-desssous. + default: '' + type: code + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part1CircularLinkedList/templates/CircularLinkedList.java b/Part1CircularLinkedList/templates/CircularLinkedList.java new file mode 100644 index 00000000..7c1bb503 --- /dev/null +++ b/Part1CircularLinkedList/templates/CircularLinkedList.java @@ -0,0 +1,71 @@ +package student; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class CircularLinkedList implements Iterable { + private long nOp = 0; // count the number of operations + private int n; // size of the stack + private Node last; // trailer of the list + + // helper linked list class + private class Node { + private Item item; + private Node next; + } + + public CircularLinkedList() { + last = null; + n = 0; + } + + public boolean isEmpty() { + return n == 0; + } + + public int size() { + return n; + } + + private long nOp() { + return nOp; + } + + + + /** + * Append an item at the end of the list + * @param item the item to append + */ + public void enqueue(Item item) { + @@enqueue@@ + } + + /** + * Removes the element at the specified position in this list. + * Shifts any subsequent elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + */ + public Item remove(int index) { + @@remove@@ + } + + + /** + * Returns an iterator that iterates through the items in FIFO order. + * @return an iterator that iterates through the items in FIFO order. + */ + public Iterator iterator() { + return new ListIterator(); + } + + /** + * Implementation of an iterator that iterates through the items in FIFO order. + * + */ + private class ListIterator implements Iterator { + @@listiterator@@ + } + +} \ No newline at end of file diff --git a/Part1CircularLinkedList/unit_test/CircularLinkedListTestComplexity.java b/Part1CircularLinkedList/unit_test/CircularLinkedListTestComplexity.java new file mode 100644 index 00000000..df5d3038 --- /dev/null +++ b/Part1CircularLinkedList/unit_test/CircularLinkedListTestComplexity.java @@ -0,0 +1,63 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import static org.junit.Assert.*; + +@RunWith(Parameterized.class) +public class CircularLinkedListTestComplexity { + + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestComplexity(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test(timeout=300) + @Grade(value=10) //10 par test x 5 = 50 + public void runAsExpected() { + int sz = correct.size(); + for (int i = 0; i < sz/2; i++) { + student.remove(0); + correct.remove(0); + } + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 1000000; k++) { + a.enqueue(k); + b.add(k); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/Part1CircularLinkedList/unit_test/CircularLinkedListTestExtreme.java b/Part1CircularLinkedList/unit_test/CircularLinkedListTestExtreme.java new file mode 100644 index 00000000..ff260386 --- /dev/null +++ b/Part1CircularLinkedList/unit_test/CircularLinkedListTestExtreme.java @@ -0,0 +1,63 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; + +import student.CircularLinkedList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + + +public class CircularLinkedListTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + for (int i = 0; i < 20; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + assertEquals(0,a.size()); + a.enqueue(i); + assertEquals(1,a.size()); + Iterator itera = a.iterator(); + assertTrue(itera.hasNext()); + assertEquals(i,itera.next()); + + CircularLinkedList b = new CircularLinkedList<>(); + b.enqueue(i); + b.remove(0); + Iterator iterb = b.iterator(); + assertFalse(iterb.hasNext()); + + } + } + + @Test(expected = IndexOutOfBoundsException.class) + @Grade(value=5) + public void testOutOfBound() { + CircularLinkedList a = new CircularLinkedList<>(); + a.enqueue(3); + a.remove(1); + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=5) + public void testConcurrentModificationNext() { + CircularLinkedList a = new CircularLinkedList<>(); + Iterator iter = a.iterator(); + a.enqueue(3); + iter.next(); + } + + + + + +} + diff --git a/Part1CircularLinkedList/unit_test/CircularLinkedListTestRandom.java b/Part1CircularLinkedList/unit_test/CircularLinkedListTestRandom.java new file mode 100644 index 00000000..4786cc90 --- /dev/null +++ b/Part1CircularLinkedList/unit_test/CircularLinkedListTestRandom.java @@ -0,0 +1,67 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class CircularLinkedListTestRandom { + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestRandom(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.5) //0.5 par test x 50 = 25 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 100; k++) { + int v = r.nextInt(); + a.enqueue(v); + b.add(v); + } + if (i%2 == 0) { + a.remove(10); + b.remove(10); + a.remove(0); + b.remove(0); + a.remove(a.size()-1); + b.remove(b.size()-1); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/bilan_m2_global_warming/GlobalWarming.java b/Part2GlobalWarming/GlobalWarming.java similarity index 100% rename from bilan_m2_global_warming/GlobalWarming.java rename to Part2GlobalWarming/GlobalWarming.java diff --git a/bilan_m2_global_warming/GlobalWarmingImpl.java b/Part2GlobalWarming/GlobalWarmingImpl.java similarity index 100% rename from bilan_m2_global_warming/GlobalWarmingImpl.java rename to Part2GlobalWarming/GlobalWarmingImpl.java diff --git a/bilan_m2_global_warming/GlobalWarmingTest.java b/Part2GlobalWarming/GlobalWarmingTest.java similarity index 100% rename from bilan_m2_global_warming/GlobalWarmingTest.java rename to Part2GlobalWarming/GlobalWarmingTest.java diff --git a/Part2GlobalWarming/feedback_settings.yaml b/Part2GlobalWarming/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part2GlobalWarming/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part2GlobalWarming/public/GlobalWarming.java b/Part2GlobalWarming/public/GlobalWarming.java new file mode 100644 index 00000000..ea3c474c --- /dev/null +++ b/Part2GlobalWarming/public/GlobalWarming.java @@ -0,0 +1,46 @@ +import java.util.List; + +abstract public class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude) { + this.altitude = altitude; + } + + /** + * + * @param waterLevel + * @return the number of entries in altitude matrix that would be above + * the specified waterLevel. + * Warning: this is not the waterLevel given in the constructor/ + */ + public abstract int nbSafePoints(int waterLevel); + + +} diff --git a/Part2GlobalWarming/public/GlobalWarmingImpl.java b/Part2GlobalWarming/public/GlobalWarmingImpl.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part2GlobalWarming/public/GlobalWarmingImpl.java @@ -0,0 +1 @@ +//TODO diff --git a/Part2GlobalWarming/public/LSINF1121_PART2_GlobalWarming.zip b/Part2GlobalWarming/public/LSINF1121_PART2_GlobalWarming.zip new file mode 100644 index 00000000..ba6b771e Binary files /dev/null and b/Part2GlobalWarming/public/LSINF1121_PART2_GlobalWarming.zip differ diff --git a/bilan_m2_global_warming/public/matrix.png b/Part2GlobalWarming/public/matrix.png similarity index 100% rename from bilan_m2_global_warming/public/matrix.png rename to Part2GlobalWarming/public/matrix.png diff --git a/Part2GlobalWarming/run b/Part2GlobalWarming/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part2GlobalWarming/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/bilan_m2_global_warming/run b/Part2GlobalWarming/run.old similarity index 100% rename from bilan_m2_global_warming/run rename to Part2GlobalWarming/run.old diff --git a/Part2GlobalWarming/src/InginiousTests.java b/Part2GlobalWarming/src/InginiousTests.java new file mode 100644 index 00000000..a13b6732 --- /dev/null +++ b/Part2GlobalWarming/src/InginiousTests.java @@ -0,0 +1,272 @@ +package src; + +/*to be added for grading and test*/ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import templates.*; + +import static org.junit.Assert.*; + +/*normal import*/ +import java.io.IOException; +import java.util.List; +import java.util.List; +import java.util.Random; +import java.util.concurrent.*; + + +/** + * Created by johnaoga on 22/10/2018. + */ +//@RunWith(Parameterized.class) //For grading +public class InginiousTests { + + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + ///tests Methods Correctness + @Test + @Grade(value=10) + public void testSafePointExam() { + String message = "safe points returned (should be 14):"+new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2); + assertEquals(message, new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2), 14); + } + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix); + + if (warming.nbSafePoints(-1) != 100) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(0) != 24) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(1) != 0) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + } + + @Test + @Grade(value=30) + public void testCorrectnessNbSafePoints() { + int[][] matrix = getExamMatrix(); + GlobalWarming g1 = new GlobalWarmingImpl(matrix); + int[] true_value = {25, 18, 14, 9, 3}; + for (int l = 0; l < 5; l += 1) { + String msg = "at " +l+" number should be " + g1.nbSafePoints(l) + " but it's " + true_value[l]; + assertEquals(msg, true_value[l], g1.nbSafePoints(l)); + } + matrix = getExamMatrix2(); + GlobalWarming g2 = new GlobalWarmingImpl(matrix); + int[] true_value2 = {98, 97, 97, 97, 95, 95, 94, 94, 94, 93, 93, 92, 90, 90, 88, 87, 87, 87, 87, 87, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 84, 83, 82, 82, 81, 81, 81, 81, 80, 80, 78, 78, 78, 78, 78, 78, 77, 77, 76, 76, + 76, 76, 75, 74, 74, 74, 72, 71, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 66, 66, 65, 65, 65, 65, 64, + 63, 60, 60, 60, 58, 57, 57, 57, 57, 56, 56, 56, 53, 53, 53, 52, 52, 51, 51, 49, 49, 46, 45, 43, 43, 42, + 42, 40, 40, 39, 38, 37, 37, 35, 35, 35, 34, 32, 32, 32, 32, 32, 32, 29, 29, 29, 28, 27, 24, 23, 21, 19, + 19, 19, 18, 17, 16, 16, 15, 14, 12, 10, 10, 9, 9, 9, 8, 7, 7, 5, 2, 2, 1, 1, 0}; + for (int l = 0; l < 150; l += 1) { + String msg = "at " +l+" number should be " + g2.nbSafePoints(l) + " but it's " + true_value2[l]; + assertEquals(msg, true_value2[l], g2.nbSafePoints(l)); + } + + matrix = getExamMatrix3(); + GlobalWarming g3 = new GlobalWarmingImpl(matrix); + int[] true_value3 = {100, 99, 97, 96, 96, 95, 95, 95, 95, 95, 94, 94, 92, 92, 92, 92, 91, 91, 89, 87, 86, 85, + 84, 82, 82, 81, 80, 79, 79, 79, 78, 78, 78, 78, 77, 77, 77, 77, 76, 76, 76, 74, 73, 71, 70, 70, 70, 67, + 67, 67, 67, 66, 66, 64, 64, 63, 63, 61, 59, 59, 58, 58, 57, 57, 57, 56, 56, 55, 54, 53, 52, 52, 51, 50, + 49, 47, 47, 45, 45, 44, 43, 43, 42, 42, 42, 41, 41, 41, 39, 39, 39, 38, 38, 37, 37, 34, 33, 32, 32, 32, + 32, 31, 30, 30, 29, 27, 27, 26, 24, 24, 23, 22, 20, 20, 19, 19, 17, 15, 15, 15, 15, 15, 15, 13, 12, 12, + 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 9, 5, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g3.nbSafePoints(l) + " but it's " + true_value3[l]; + assertEquals(msg, true_value3[l], g3.nbSafePoints(l)); + } + + matrix = getExamMatrix4(); + GlobalWarming g4 = new GlobalWarmingImpl(matrix); + int[] true_value4 = {99, 99, 98, 98, 98, 97, 97, 96, 94, 93, 92, 91, 91, 89, 89, 88, 87, 87, 87, 87, 87, 86, 86, + 85, 85, 85, 85, 85, 82, 81, 81, 80, 80, 80, 77, 76, 75, 75, 75, 74, 73, 70, 70, 69, 69, 68, 68, 68, 67, + 67, 67, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 61, 61, 61, 60, 59, 56, 56, 56, 56, 54, 53, 52, 52, + 51, 51, 50, 48, 47, 45, 43, 42, 41, 40, 40, 39, 39, 39, 39, 38, 35, 35, 35, 34, 33, 33, 32, 32, 31, 31, + 30, 29, 28, 27, 27, 26, 25, 24, 24, 23, 23, 23, 21, 21, 19, 19, 18, 18, 17, 17, 16, 16, 16, 16, 13, 13, + 12, 11, 11, 10, 10, 10, 10, 9, 9, 7, 7, 6, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g4.nbSafePoints(l) + " but it's " + true_value4[l]; + assertEquals(msg, true_value4[l], g4.nbSafePoints(l)); + } + + matrix = getExamMatrix5(); + GlobalWarming g5 = new GlobalWarmingImpl(matrix); + int[] true_value5 = {100, 100, 98, 98, 98, 98, 98, 98, 98, 97, 97, 96, 95, 95, 94, 94, 92, 92, 92, 92, 92, 92, + 91, 90, 88, 87, 86, 85, 84, 84, 84, 84, 82, 82, 80, 78, 77, 77, 76, 74, 74, 74, 72, 71, 68, 67, 65, 65, + 64, 64, 62, 62, 61, 61, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 57, 57, 56, 55, 55, 52, 51, 51, 50, 48, + 48, 48, 47, 46, 45, 45, 45, 45, 45, 45, 45, 43, 42, 42, 42, 42, 41, 41, 41, 37, 36, 35, 35, 35, 33, 33, + 31, 30, 29, 28, 28, 26, 26, 24, 24, 24, 22, 22, 20, 19, 19, 18, 18, 17, 17, 16, 15, 14, 13, 13, 11, 11, + 9, 9, 9, 8, 7, 7, 6, 6, 6, 6, 6, 5, 3, 3, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g5.nbSafePoints(l) + " but it's " + true_value5[l]; + assertEquals(msg, true_value5[l], g5.nbSafePoints(l)); + } + + matrix = getExamMatrix6(); + GlobalWarming g6 = new GlobalWarmingImpl(matrix); + int[] true_value6 = {100, 99, 99, 98, 97, 96, 95, 95, 94, 93, 93, 92, 90, 90, 89, 89, 89, 89, 87, 87, 86, 84, + 84, 84, 83, 82, 82, 80, 79, 77, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 70, 69, 69, 69, 69, 69, 69, 69, + 67, 66, 65, 65, 65, 65, 64, 64, 63, 61, 61, 61, 59, 59, 58, 57, 57, 56, 56, 55, 54, 54, 53, 52, 52, 51, + 50, 50, 47, 47, 47, 46, 46, 46, 46, 46, 44, 43, 42, 42, 41, 41, 41, 41, 41, 39, 39, 39, 38, 37, 37, 36, + 36, 35, 34, 33, 33, 33, 32, 32, 32, 32, 32, 29, 25, 25, 25, 23, 22, 20, 19, 18, 16, 16, 15, 14, 14, 14, + 13, 12, 12, 12, 12, 12, 11, 11, 11, 11, 9, 8, 6, 6, 6, 5, 5, 4, 4, 3, 3, 3, 1, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g6.nbSafePoints(l) + " but it's " + true_value6[l]; + assertEquals(msg, true_value6[l], g6.nbSafePoints(l)); + } + } + + + ///extra methods + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix2() { + int [][] tab = new int[][] {{136, 14, 135, 94, 130, 4, 118, 149, 0, 84}, + {0, 12, 108, 61, 145, 112, 111, 138, 57, 129}, + {142, 74, 33, 1, 68, 104, 39, 100, 126, 11}, + {123, 123, 79, 141, 135, 92, 118, 6, 96, 134}, + {125, 80, 123, 147, 133, 145, 112, 39, 76, 102}, + {12, 45, 144, 20, 94, 52, 108, 15, 126, 57}, + {124, 75, 96, 79, 122, 105, 20, 55, 29, 47}, + {4, 102, 87, 70, 14, 96, 30, 121, 31, 98}, + {76, 144, 87, 136, 97, 56, 58, 51, 125, 98}, + {106, 118, 37, 87, 76, 131, 90, 9, 145, 55}}; + return tab; + } + + public int [][] getExamMatrix3() { + int [][] tab = new int[][] {{60, 148, 79, 47, 65, 53, 41, 111, 69, 104}, + {77, 77, 23, 112, 95, 44, 34, 75, 41, 20}, + {43, 138, 74, 47, 2, 10, 3, 82, 42, 23}, + {95, 95, 137, 137, 2, 62, 75, 53, 88, 135}, + {110, 25, 5, 80, 148, 141, 124, 136, 112, 12}, + {19, 27, 116, 96, 57, 16, 58, 137, 93, 97}, + {137, 88, 55, 108, 108, 117, 1, 68, 58, 18}, + {38, 22, 107, 101, 26, 30, 47, 12, 85, 70}, + {67, 123, 117, 19, 105, 102, 139, 43, 51, 91}, + {123, 130, 18, 114, 116, 73, 57, 72, 105, 21}}; + return tab; + } + + public int [][] getExamMatrix4() { + int [][] tab = new int[][] {{86, 15, 119, 53, 117, 67, 81, 147, 138, 13}, + {130, 125, 148, 121, 97, 7, 36, 91, 90, 51}, + {21, 134, 80, 115, 136, 104, 34, 62, 142, 0}, + {78, 53, 99, 95, 91, 10, 125, 62, 94, 9}, + {67, 11, 71, 23, 127, 28, 66, 71, 35, 41}, + {136, 43, 113, 107, 8, 78, 16, 8, 140, 75}, + {5, 45, 108, 29, 65, 125, 83, 40, 41, 106}, + {48, 82, 128, 141, 67, 79, 39, 91, 102, 31}, + {77, 81, 28, 101, 34, 113, 139, 62, 110, 73}, + {72, 115, 13, 41, 103, 2, 80, 34, 84, 28}}; + return tab; + } + + public int [][] getExamMatrix5() { + int [][] tab = new int[][] {{115, 32, 69, 98, 138, 90, 110, 16, 23, 112}, + {54, 44, 12, 78, 39, 122, 9, 124, 25, 140}, + {43, 110, 67, 100, 32, 72, 70, 93, 64, 2}, + {50, 76, 102, 45, 105, 113, 93, 48, 77, 120}, + {46, 2, 35, 26, 69, 93, 22, 107, 50, 35}, + {94, 66, 44, 98, 119, 38, 28, 85, 46, 126}, + {147, 24, 124, 39, 93, 103, 73, 42, 36, 24}, + {55, 44, 95, 146, 121, 107, 34, 137, 27, 34}, + {129, 132, 100, 58, 105, 52, 11, 130, 86, 138}, + {69, 101, 126, 42, 85, 14, 117, 16, 73, 112}}; + return tab; + } + + public int [][] getExamMatrix6() { + int [][] tab = new int[][] {{115, 12, 8, 41, 101, 136, 12, 103, 3, 18}, + {120, 88, 149, 18, 11, 60, 29, 57, 36, 65}, + {67, 25, 145, 136, 86, 74, 21, 85, 60, 1}, + {40, 24, 27, 20, 63, 27, 117, 76, 102, 84}, + {118, 79, 73, 68, 71, 141, 30, 36, 54, 143}, + {122, 106, 48, 117, 57, 84, 49, 112, 62, 127}, + {93, 138, 112, 9, 70, 76, 30, 93, 4, 119}, + {48, 97, 132, 126, 148, 99, 56, 76, 14, 116}, + {120, 123, 96, 28, 21, 5, 111, 112, 6, 148}, + {111, 115, 36, 112, 29, 137, 138, 111, 40, 50}}; + return tab; + } + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + ///Complexities + @Test(timeout=300) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(1000,2000000); + //long t0 = System.currentTimeMillis(); + final GlobalWarming g = new GlobalWarmingImpl(matrix); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + final GlobalWarming gwi = new GlobalWarmingImpl(getRandomMatrix(1000,2000000)); + + @Test(timeout=50) + @Grade(value=30) + public void timeComplexityNbSafePoints() { + //long t0 = System.currentTimeMillis(); + int max = 0; + for (int i = 0; i < 1000; i++) { + gwi.nbSafePoints(i*1000); + } + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor==:"+(t1-t0)); + } + +} diff --git a/Part2GlobalWarming/src/StudentTestRunner.java b/Part2GlobalWarming/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part2GlobalWarming/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part2GlobalWarming/task.yaml b/Part2GlobalWarming/task.yaml new file mode 100644 index 00000000..0fd8ad8c --- /dev/null +++ b/Part2GlobalWarming/task.yaml @@ -0,0 +1,144 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00 +author: Pierre Schaus, John Aoga +context: |+ + Context + ================================================== + + Supposons la matrice 5x5 suivante : + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + + représentée dans le tableau ci-dessous : + + .. image:: Part2GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + + Chaque entrée de la matrice représente une altitude. + L'objectif est d'implémenter une classe ``GlobalWarmingImpl`` qui étend la méthode `GlobalWarming` décrite ci-dessous. + + Compte tenu d'un niveau d'eau global, toutes les positions de la matrice ayant une valeur *<=* au niveau d'eau sont inondées et donc peu sûres. Donc, en supposant que le niveau d'eau est de *3*, tous les points sûrs sont en vert (dans la représentation ci-dessus). + + La méthode que vous devez implémentez est ``nbSafePoints`` + + * le calcul du nombre de points de sécurité pour un niveau d'eau donné + + + .. code-block:: java + + + import java.util.List; + + abstract class GlobalWarming { + + + final int[][] altitude; + + /** + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + */ + public GlobalWarming(int[][] altitude) { + this.altitude = altitude; + } + + /** + * + * @param waterLevel + * @return the number of entries in altitude matrix that would be above + * the specified waterLevel. + * Warning: this is not the waterLevel given in the constructor/ + */ + public abstract int nbSafePoints(int waterLevel); + + } + + `Le projet IntelliJ est disponible ici `_. + + Exercices préliminaires + ================================================== + + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + GlobalWarming gw = new MyGlobalWarming(tab); + + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '100' + time: '5000' + memory: '750' +name: PART 2 - Global Warming (implem) +network_grading: false +order: 10 +problems: + nbSafePoints: + answer: '14' + header: |- + Quel serait le résultat de: + + .. code-block:: java + + gw.nbSafePoints(2) + + + attendu : un nombre + name: Vérifiez votre compréhension + type: match + implementation: + language: java + header: |+ + Copier-coller et compléter le code ci-dessous. + Faites attention à la complexité temporelle prévue de chaque méthode. + Pour répondre à cette complexité temporelle, il faut déjà faire quelques pré-calculs dans le constructeur. N'hésitez pas à créer des classes internes dans GlobalWarmingImpl pour faciliter votre implémentation. + N'hésitez pas à utiliser n'importe quelle méthode ou structure de données disponible dans le langage Java et l'API. + + .. code-block:: java + + import java.util.*; + + public class GlobalWarmingImpl extends GlobalWarming { + + public GlobalWarmingImpl(int[][] altitude) { + super(altitude); + // expected pre-processing time in the constructror : O(n^2 log(n^2)) + // TODO + } + + + public int nbSafePoints(int waterLevel) { + // TODO + // expected time complexity O(log(n^2)) + return 0; + } + + } + + + + + default: '' + name: 'Implémentation de GlobalWarmingImpl ' + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part2GlobalWarming/templates/GlobalWarming.java b/Part2GlobalWarming/templates/GlobalWarming.java new file mode 100644 index 00000000..a697b366 --- /dev/null +++ b/Part2GlobalWarming/templates/GlobalWarming.java @@ -0,0 +1,48 @@ +package templates; + +import java.util.List; + +abstract public class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude) { + this.altitude = altitude; + } + + /** + * + * @param waterLevel + * @return the number of entries in altitude matrix that would be above + * the specified waterLevel. + * Warning: this is not the waterLevel given in the constructor/ + */ + public abstract int nbSafePoints(int waterLevel); + + +} diff --git a/Part2GlobalWarming/templates/GlobalWarmingImpl.java b/Part2GlobalWarming/templates/GlobalWarmingImpl.java new file mode 100644 index 00000000..f02baf3f --- /dev/null +++ b/Part2GlobalWarming/templates/GlobalWarmingImpl.java @@ -0,0 +1,3 @@ +package templates; + +@@implementation@@ diff --git a/Part2GlobalWarming/unit_test/GlobalWarmingTest.java b/Part2GlobalWarming/unit_test/GlobalWarmingTest.java new file mode 100644 index 00000000..3084b976 --- /dev/null +++ b/Part2GlobalWarming/unit_test/GlobalWarmingTest.java @@ -0,0 +1,268 @@ +/*to be added for grading and test*/ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +/*normal import*/ +import java.io.IOException; +import java.util.List; +import java.util.List; +import java.util.Random; +import java.util.concurrent.*; + + +/** + * Created by johnaoga on 22/10/2018. + */ +//@RunWith(Parameterized.class) //For grading +public class GlobalWarmingTest { + + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + ///tests Methods Correctness + @Test + @Grade(value=10) + public void testSafePointExam() { + String message = "safe points returned (should be 14):"+new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2); + assertEquals(message, new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2), 14); + } + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix); + + if (warming.nbSafePoints(-1) != 100) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(0) != 24) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(1) != 0) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + } + + @Test + @Grade(value=30) + public void testCorrectnessNbSafePoints() { + int[][] matrix = getExamMatrix(); + GlobalWarming g1 = new GlobalWarmingImpl(matrix); + int[] true_value = {25, 18, 14, 9, 3}; + for (int l = 0; l < 5; l += 1) { + String msg = "at " +l+" number should be " + g1.nbSafePoints(l) + " but it's " + true_value[l]; + assertEquals(msg, true_value[l], g1.nbSafePoints(l)); + } + matrix = getExamMatrix2(); + GlobalWarming g2 = new GlobalWarmingImpl(matrix); + int[] true_value2 = {98, 97, 97, 97, 95, 95, 94, 94, 94, 93, 93, 92, 90, 90, 88, 87, 87, 87, 87, 87, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 84, 83, 82, 82, 81, 81, 81, 81, 80, 80, 78, 78, 78, 78, 78, 78, 77, 77, 76, 76, + 76, 76, 75, 74, 74, 74, 72, 71, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 66, 66, 65, 65, 65, 65, 64, + 63, 60, 60, 60, 58, 57, 57, 57, 57, 56, 56, 56, 53, 53, 53, 52, 52, 51, 51, 49, 49, 46, 45, 43, 43, 42, + 42, 40, 40, 39, 38, 37, 37, 35, 35, 35, 34, 32, 32, 32, 32, 32, 32, 29, 29, 29, 28, 27, 24, 23, 21, 19, + 19, 19, 18, 17, 16, 16, 15, 14, 12, 10, 10, 9, 9, 9, 8, 7, 7, 5, 2, 2, 1, 1, 0}; + for (int l = 0; l < 150; l += 1) { + String msg = "at " +l+" number should be " + g2.nbSafePoints(l) + " but it's " + true_value2[l]; + assertEquals(msg, true_value2[l], g2.nbSafePoints(l)); + } + + matrix = getExamMatrix3(); + GlobalWarming g3 = new GlobalWarmingImpl(matrix); + int[] true_value3 = {100, 99, 97, 96, 96, 95, 95, 95, 95, 95, 94, 94, 92, 92, 92, 92, 91, 91, 89, 87, 86, 85, + 84, 82, 82, 81, 80, 79, 79, 79, 78, 78, 78, 78, 77, 77, 77, 77, 76, 76, 76, 74, 73, 71, 70, 70, 70, 67, + 67, 67, 67, 66, 66, 64, 64, 63, 63, 61, 59, 59, 58, 58, 57, 57, 57, 56, 56, 55, 54, 53, 52, 52, 51, 50, + 49, 47, 47, 45, 45, 44, 43, 43, 42, 42, 42, 41, 41, 41, 39, 39, 39, 38, 38, 37, 37, 34, 33, 32, 32, 32, + 32, 31, 30, 30, 29, 27, 27, 26, 24, 24, 23, 22, 20, 20, 19, 19, 17, 15, 15, 15, 15, 15, 15, 13, 12, 12, + 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 9, 5, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g3.nbSafePoints(l) + " but it's " + true_value3[l]; + assertEquals(msg, true_value3[l], g3.nbSafePoints(l)); + } + + matrix = getExamMatrix4(); + GlobalWarming g4 = new GlobalWarmingImpl(matrix); + int[] true_value4 = {99, 99, 98, 98, 98, 97, 97, 96, 94, 93, 92, 91, 91, 89, 89, 88, 87, 87, 87, 87, 87, 86, 86, + 85, 85, 85, 85, 85, 82, 81, 81, 80, 80, 80, 77, 76, 75, 75, 75, 74, 73, 70, 70, 69, 69, 68, 68, 68, 67, + 67, 67, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 61, 61, 61, 60, 59, 56, 56, 56, 56, 54, 53, 52, 52, + 51, 51, 50, 48, 47, 45, 43, 42, 41, 40, 40, 39, 39, 39, 39, 38, 35, 35, 35, 34, 33, 33, 32, 32, 31, 31, + 30, 29, 28, 27, 27, 26, 25, 24, 24, 23, 23, 23, 21, 21, 19, 19, 18, 18, 17, 17, 16, 16, 16, 16, 13, 13, + 12, 11, 11, 10, 10, 10, 10, 9, 9, 7, 7, 6, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g4.nbSafePoints(l) + " but it's " + true_value4[l]; + assertEquals(msg, true_value4[l], g4.nbSafePoints(l)); + } + + matrix = getExamMatrix5(); + GlobalWarming g5 = new GlobalWarmingImpl(matrix); + int[] true_value5 = {100, 100, 98, 98, 98, 98, 98, 98, 98, 97, 97, 96, 95, 95, 94, 94, 92, 92, 92, 92, 92, 92, + 91, 90, 88, 87, 86, 85, 84, 84, 84, 84, 82, 82, 80, 78, 77, 77, 76, 74, 74, 74, 72, 71, 68, 67, 65, 65, + 64, 64, 62, 62, 61, 61, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 57, 57, 56, 55, 55, 52, 51, 51, 50, 48, + 48, 48, 47, 46, 45, 45, 45, 45, 45, 45, 45, 43, 42, 42, 42, 42, 41, 41, 41, 37, 36, 35, 35, 35, 33, 33, + 31, 30, 29, 28, 28, 26, 26, 24, 24, 24, 22, 22, 20, 19, 19, 18, 18, 17, 17, 16, 15, 14, 13, 13, 11, 11, + 9, 9, 9, 8, 7, 7, 6, 6, 6, 6, 6, 5, 3, 3, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g5.nbSafePoints(l) + " but it's " + true_value5[l]; + assertEquals(msg, true_value5[l], g5.nbSafePoints(l)); + } + + matrix = getExamMatrix6(); + GlobalWarming g6 = new GlobalWarmingImpl(matrix); + int[] true_value6 = {100, 99, 99, 98, 97, 96, 95, 95, 94, 93, 93, 92, 90, 90, 89, 89, 89, 89, 87, 87, 86, 84, + 84, 84, 83, 82, 82, 80, 79, 77, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 70, 69, 69, 69, 69, 69, 69, 69, + 67, 66, 65, 65, 65, 65, 64, 64, 63, 61, 61, 61, 59, 59, 58, 57, 57, 56, 56, 55, 54, 54, 53, 52, 52, 51, + 50, 50, 47, 47, 47, 46, 46, 46, 46, 46, 44, 43, 42, 42, 41, 41, 41, 41, 41, 39, 39, 39, 38, 37, 37, 36, + 36, 35, 34, 33, 33, 33, 32, 32, 32, 32, 32, 29, 25, 25, 25, 23, 22, 20, 19, 18, 16, 16, 15, 14, 14, 14, + 13, 12, 12, 12, 12, 12, 11, 11, 11, 11, 9, 8, 6, 6, 6, 5, 5, 4, 4, 3, 3, 3, 1, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g6.nbSafePoints(l) + " but it's " + true_value6[l]; + assertEquals(msg, true_value6[l], g6.nbSafePoints(l)); + } + } + + + ///extra methods + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix2() { + int [][] tab = new int[][] {{136, 14, 135, 94, 130, 4, 118, 149, 0, 84}, + {0, 12, 108, 61, 145, 112, 111, 138, 57, 129}, + {142, 74, 33, 1, 68, 104, 39, 100, 126, 11}, + {123, 123, 79, 141, 135, 92, 118, 6, 96, 134}, + {125, 80, 123, 147, 133, 145, 112, 39, 76, 102}, + {12, 45, 144, 20, 94, 52, 108, 15, 126, 57}, + {124, 75, 96, 79, 122, 105, 20, 55, 29, 47}, + {4, 102, 87, 70, 14, 96, 30, 121, 31, 98}, + {76, 144, 87, 136, 97, 56, 58, 51, 125, 98}, + {106, 118, 37, 87, 76, 131, 90, 9, 145, 55}}; + return tab; + } + + public int [][] getExamMatrix3() { + int [][] tab = new int[][] {{60, 148, 79, 47, 65, 53, 41, 111, 69, 104}, + {77, 77, 23, 112, 95, 44, 34, 75, 41, 20}, + {43, 138, 74, 47, 2, 10, 3, 82, 42, 23}, + {95, 95, 137, 137, 2, 62, 75, 53, 88, 135}, + {110, 25, 5, 80, 148, 141, 124, 136, 112, 12}, + {19, 27, 116, 96, 57, 16, 58, 137, 93, 97}, + {137, 88, 55, 108, 108, 117, 1, 68, 58, 18}, + {38, 22, 107, 101, 26, 30, 47, 12, 85, 70}, + {67, 123, 117, 19, 105, 102, 139, 43, 51, 91}, + {123, 130, 18, 114, 116, 73, 57, 72, 105, 21}}; + return tab; + } + + public int [][] getExamMatrix4() { + int [][] tab = new int[][] {{86, 15, 119, 53, 117, 67, 81, 147, 138, 13}, + {130, 125, 148, 121, 97, 7, 36, 91, 90, 51}, + {21, 134, 80, 115, 136, 104, 34, 62, 142, 0}, + {78, 53, 99, 95, 91, 10, 125, 62, 94, 9}, + {67, 11, 71, 23, 127, 28, 66, 71, 35, 41}, + {136, 43, 113, 107, 8, 78, 16, 8, 140, 75}, + {5, 45, 108, 29, 65, 125, 83, 40, 41, 106}, + {48, 82, 128, 141, 67, 79, 39, 91, 102, 31}, + {77, 81, 28, 101, 34, 113, 139, 62, 110, 73}, + {72, 115, 13, 41, 103, 2, 80, 34, 84, 28}}; + return tab; + } + + public int [][] getExamMatrix5() { + int [][] tab = new int[][] {{115, 32, 69, 98, 138, 90, 110, 16, 23, 112}, + {54, 44, 12, 78, 39, 122, 9, 124, 25, 140}, + {43, 110, 67, 100, 32, 72, 70, 93, 64, 2}, + {50, 76, 102, 45, 105, 113, 93, 48, 77, 120}, + {46, 2, 35, 26, 69, 93, 22, 107, 50, 35}, + {94, 66, 44, 98, 119, 38, 28, 85, 46, 126}, + {147, 24, 124, 39, 93, 103, 73, 42, 36, 24}, + {55, 44, 95, 146, 121, 107, 34, 137, 27, 34}, + {129, 132, 100, 58, 105, 52, 11, 130, 86, 138}, + {69, 101, 126, 42, 85, 14, 117, 16, 73, 112}}; + return tab; + } + + public int [][] getExamMatrix6() { + int [][] tab = new int[][] {{115, 12, 8, 41, 101, 136, 12, 103, 3, 18}, + {120, 88, 149, 18, 11, 60, 29, 57, 36, 65}, + {67, 25, 145, 136, 86, 74, 21, 85, 60, 1}, + {40, 24, 27, 20, 63, 27, 117, 76, 102, 84}, + {118, 79, 73, 68, 71, 141, 30, 36, 54, 143}, + {122, 106, 48, 117, 57, 84, 49, 112, 62, 127}, + {93, 138, 112, 9, 70, 76, 30, 93, 4, 119}, + {48, 97, 132, 126, 148, 99, 56, 76, 14, 116}, + {120, 123, 96, 28, 21, 5, 111, 112, 6, 148}, + {111, 115, 36, 112, 29, 137, 138, 111, 40, 50}}; + return tab; + } + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + ///Complexities + @Test(timeout=300) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(1000,2000000); + //long t0 = System.currentTimeMillis(); + final GlobalWarming g = new GlobalWarmingImpl(matrix); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + final GlobalWarming gwi = new GlobalWarmingImpl(getRandomMatrix(1000,2000000)); + + @Test(timeout=50) + @Grade(value=30) + public void timeComplexityNbSafePoints() { + //long t0 = System.currentTimeMillis(); + int max = 0; + for (int i = 0; i < 1000; i++) { + gwi.nbSafePoints(i*1000); + } + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor==:"+(t1-t0)); + } + +} diff --git a/median/Median.java b/Part2Median/Median.java similarity index 100% rename from median/Median.java rename to Part2Median/Median.java diff --git a/Part2Median/Test.java b/Part2Median/Test.java new file mode 100644 index 00000000..063a73fc --- /dev/null +++ b/Part2Median/Test.java @@ -0,0 +1,96 @@ +import junit.framework.TestCase; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.security.Permission; +import java.util.Arrays; + +public class Test extends TestCase { + + public static int partition(Vector a, int lo, int hi) { + int i = lo, j = hi+1; + int v = a.get(lo); + while (true) { + while (a.get(++i) < v) if (i == hi) break; + while (v < a.get(--j)) if (j == lo) break; + if (i >= j) break; + a.swap(i,j); + } + a.swap(lo,j); + return j; + } + + public static int median(Vector a, int lo, int hi) { + int i = partition(a,lo,hi); + if (i == a.size()/2) return a.get(i); + else if (i < a.size()/2) { + return median(a,i+1,hi); + } else { + return median(a,lo,i-1); + } + } + + public static void sort(Vector a, int lo, int hi) { + if (lo < hi) { + int i = partition(a,lo,hi); + sort(a,lo,i-1); + sort(a,i+1,hi); + } + } + + + public static Vector randomVector(int n) { + java.util.Random rand = new java.util.Random(); + int [] array = new int[n]; + for (int i = 0; i < n; i++) { + array[i] = rand.nextInt(n); + } + //System.out.println(Arrays.toString(array)); + Vector v = new Vector(array.length); + for (int i = 0; i < v.size(); i++) { + v.set(i,array[i]); + } + return v; + } + + + // assigning the values + protected void setUp() { + + } + + @org.junit.Test + public void testMedianOk() { + for (int i = 100; i < 1000; i += 10) { + Vector v = randomVector(i+1); + assertTrue("correct median value computed",Median.median(v,0,v.size()-1) == median(v,0,v.size()-1)); + } + } + @org.junit.Test + public void testComplexityNLogNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + sort(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n.log(n))",v1.nOp() <= v2.nOp()*3); + } + } + @org.junit.Test + public void testComplexityNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + median(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n) expected",v1.nOp() <= v2.nOp()*3); + } + } + + +} \ No newline at end of file diff --git a/median/Vector.java b/Part2Median/Vector.java similarity index 100% rename from median/Vector.java rename to Part2Median/Vector.java diff --git a/preexam_bfs/student/hamcrest-core-1.3.jar b/Part2Median/hamcrest-core-1.3.jar similarity index 100% rename from preexam_bfs/student/hamcrest-core-1.3.jar rename to Part2Median/hamcrest-core-1.3.jar diff --git a/preexam_bfs/student/junit-4.12.jar b/Part2Median/junit-4.12.jar similarity index 100% rename from preexam_bfs/student/junit-4.12.jar rename to Part2Median/junit-4.12.jar diff --git a/Part2Median/public/LSINF1121_PART2_Median.zip b/Part2Median/public/LSINF1121_PART2_Median.zip new file mode 100644 index 00000000..90227c0f Binary files /dev/null and b/Part2Median/public/LSINF1121_PART2_Median.zip differ diff --git a/Part2Median/public/Median.java b/Part2Median/public/Median.java new file mode 100644 index 00000000..84ff083d --- /dev/null +++ b/Part2Median/public/Median.java @@ -0,0 +1,4 @@ +public class Median { + + @ @question1@@ +} \ No newline at end of file diff --git a/Part2Median/public/Vector.java b/Part2Median/public/Vector.java new file mode 100644 index 00000000..663e8768 --- /dev/null +++ b/Part2Median/public/Vector.java @@ -0,0 +1,38 @@ +public class Vector { + + private int [] array; + private int nOp = 0; + + + Vector(int n) { + array = new int[n]; + } + + public int size() { + return array.length; + } + + public void set(int i, int v) { + nOp++; + array[i] = v; + } + + public int get(int i) { + nOp++; + return array[i]; + } + + public void swap(int i, int j) { + nOp++; + int tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } + + public int nOp() { + return nOp; + } + + + +} diff --git a/median/public/project.zip b/Part2Median/public/project.zip similarity index 100% rename from median/public/project.zip rename to Part2Median/public/project.zip diff --git a/Part2Median/readme.md b/Part2Median/readme.md new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/Part2Median/readme.md @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/median/run b/Part2Median/run similarity index 100% rename from median/run rename to Part2Median/run diff --git a/Part2Median/task.yaml b/Part2Median/task.yaml new file mode 100644 index 00000000..c89f936e --- /dev/null +++ b/Part2Median/task.yaml @@ -0,0 +1,79 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00/2019-10-08 17:00:00 +author: Pierre Schaus +categories: [] +context: |- + Nous vous donnons l'API d'une classe Vector permettant d'accéder, modifier et interchanger deux élements en temps constant. + Votre tâche est d'implémenter une méthode permettant de calculer la médiane d'un Vecteur. + + .. code-block:: java + + public interface Vector { + // taille du vecteur + public int size(); + // mets la valeur v à l'indice i du vecteur + public void set(int i, int v); + // renvoie la valeur à l'indice i du vecteur + public int get(int i); + // échange les valeurs aux positions i et j + public void swap(int i, int j); + + } + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '900' +name: PART 2 - Median (implem) +network_grading: false +order: 7 +problems: + question1: + language: java + type: code + header: |- + Vous devez implémenter une méthode qui a la signature suivante: + + .. code-block:: java + + public static int median(Vector a, int lo, int hi) + + + + Cette méthode calcule la médiane du ``vector`` "a" entre les positions "lo" et "hi" (incluses). + + Vous pouvez considérer que le ``vector`` "a" a toujours une taille impaire. + + Pour vous aider, un *projet IntelliJ* avec un test minimaliste pour vérifier si votre code calcule la bonne valeur médiane est donné. En effet, il n'est pas conseillé de débugger son code via Inginious. + + **Attention** Il n'est pas interdit de modifier ou d'interchanger des elements du vecteur "a" durant le calcul (avec les methodes get/set/swap). Il est interdit de faire appel à d'autres méthodes de la librairie standard Java. Il est également interdit de faire un "new". + + L'évaluation porte sur sur 10 points: + + - bonne valeur de retour: 3 points, + + - bonne valeur de retour et complexité ``O(n log n)``: 5 points, + + - bonne valeur de retour et complexité ``O(n)`` expected (cas moyen sur une distribution uniforme aléatoire): 10 points. + + + Tout le code que vous écrirez dans le champ texte sera substitué à l'endroit indiqué ci-dessous. + Vous êtes libre d'implémenter éventuellement d'autres méthodes pour vous aider dans cette classe mais la méthode "median" donnée ci-dessus doit au moins y figurer. + + .. code-block:: java + + public class Median { + // votre code sera substitué ici + } + default: '' + name: Implementation de la median +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 10.0 diff --git a/Part2Median/unit_test/Test.java b/Part2Median/unit_test/Test.java new file mode 100644 index 00000000..063a73fc --- /dev/null +++ b/Part2Median/unit_test/Test.java @@ -0,0 +1,96 @@ +import junit.framework.TestCase; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.security.Permission; +import java.util.Arrays; + +public class Test extends TestCase { + + public static int partition(Vector a, int lo, int hi) { + int i = lo, j = hi+1; + int v = a.get(lo); + while (true) { + while (a.get(++i) < v) if (i == hi) break; + while (v < a.get(--j)) if (j == lo) break; + if (i >= j) break; + a.swap(i,j); + } + a.swap(lo,j); + return j; + } + + public static int median(Vector a, int lo, int hi) { + int i = partition(a,lo,hi); + if (i == a.size()/2) return a.get(i); + else if (i < a.size()/2) { + return median(a,i+1,hi); + } else { + return median(a,lo,i-1); + } + } + + public static void sort(Vector a, int lo, int hi) { + if (lo < hi) { + int i = partition(a,lo,hi); + sort(a,lo,i-1); + sort(a,i+1,hi); + } + } + + + public static Vector randomVector(int n) { + java.util.Random rand = new java.util.Random(); + int [] array = new int[n]; + for (int i = 0; i < n; i++) { + array[i] = rand.nextInt(n); + } + //System.out.println(Arrays.toString(array)); + Vector v = new Vector(array.length); + for (int i = 0; i < v.size(); i++) { + v.set(i,array[i]); + } + return v; + } + + + // assigning the values + protected void setUp() { + + } + + @org.junit.Test + public void testMedianOk() { + for (int i = 100; i < 1000; i += 10) { + Vector v = randomVector(i+1); + assertTrue("correct median value computed",Median.median(v,0,v.size()-1) == median(v,0,v.size()-1)); + } + } + @org.junit.Test + public void testComplexityNLogNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + sort(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n.log(n))",v1.nOp() <= v2.nOp()*3); + } + } + @org.junit.Test + public void testComplexityNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + median(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n) expected",v1.nOp() <= v2.nOp()*3); + } + } + + +} \ No newline at end of file diff --git a/preexam_merge_sort/examples/CorrectMergeSort.java b/Part2MergeSort/examples/CorrectMergeSort.java similarity index 100% rename from preexam_merge_sort/examples/CorrectMergeSort.java rename to Part2MergeSort/examples/CorrectMergeSort.java diff --git a/common/execute b/Part2MergeSort/execute similarity index 100% rename from common/execute rename to Part2MergeSort/execute diff --git a/common/execute_preexam b/Part2MergeSort/execute_preexam similarity index 100% rename from common/execute_preexam rename to Part2MergeSort/execute_preexam diff --git a/Part2MergeSort/public/LSINF1121_PART2_MergeSort.zip b/Part2MergeSort/public/LSINF1121_PART2_MergeSort.zip new file mode 100644 index 00000000..b3aab941 Binary files /dev/null and b/Part2MergeSort/public/LSINF1121_PART2_MergeSort.zip differ diff --git a/Part2MergeSort/public/MergeSort.java b/Part2MergeSort/public/MergeSort.java new file mode 100644 index 00000000..67360e52 --- /dev/null +++ b/Part2MergeSort/public/MergeSort.java @@ -0,0 +1,33 @@ +public class MergeSort { + private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { + for (int k = lo; k <= hi; k++) { + aux[k] = a[k]; + } + + int i = lo; + int j = mid + 1; + for (int k = lo; k <= hi; k++) { + if (i > mid) { + a[k] = aux[j++]; + } else if (j > hi) { + a[k] = aux[i++]; + } else if (aux[j].compareTo(aux[i]) < 0) { + a[k] = aux[j++]; + } else { + a[k] = aux[i++]; + } + } + } + + // Mergesort a[lo..hi] using auxiliary array aux[lo..hi] + private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { + //TODO Q1 + } + + /** + * Rearranges the array in ascending order, using the natural order + */ + public static void sort(Comparable[] a) { + //TODO Q2 + } +} diff --git a/Part2MergeSort/readme.md b/Part2MergeSort/readme.md new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/Part2MergeSort/readme.md @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/preexam_merge_sort/run b/Part2MergeSort/run similarity index 100% rename from preexam_merge_sort/run rename to Part2MergeSort/run diff --git a/preexam_merge_sort/student/MergeSort.java b/Part2MergeSort/student/MergeSort.java similarity index 100% rename from preexam_merge_sort/student/MergeSort.java rename to Part2MergeSort/student/MergeSort.java diff --git a/common/RunTests.java b/Part2MergeSort/student/RunTests.java similarity index 100% rename from common/RunTests.java rename to Part2MergeSort/student/RunTests.java diff --git a/preexam_merge_sort/student/Tests.java b/Part2MergeSort/student/Tests.java similarity index 100% rename from preexam_merge_sort/student/Tests.java rename to Part2MergeSort/student/Tests.java diff --git a/preexam_dfs/student/hamcrest-core-1.3.jar b/Part2MergeSort/student/hamcrest-core-1.3.jar similarity index 100% rename from preexam_dfs/student/hamcrest-core-1.3.jar rename to Part2MergeSort/student/hamcrest-core-1.3.jar diff --git a/preexam_dfs/student/junit-4.12.jar b/Part2MergeSort/student/junit-4.12.jar similarity index 100% rename from preexam_dfs/student/junit-4.12.jar rename to Part2MergeSort/student/junit-4.12.jar diff --git a/Part2MergeSort/task.yaml b/Part2MergeSort/task.yaml new file mode 100644 index 00000000..79947107 --- /dev/null +++ b/Part2MergeSort/task.yaml @@ -0,0 +1,85 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00/2019-10-08 17:00:00 +author: Frédéric Kaczynski +categories: [] +context: |- + Considérons l'algorithme de tri (descendant) ``Merge Sort``. + + .. code-block:: java + + public class MergeSort { + /** + * Pre-conditions: a[lo..mid] and a[mid+1..hi] are sorted + * Post-conditions: a[lo..hi] is sorted + */ + private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { + for (int k = lo; k <= hi; k++) { + aux[k] = a[k]; + } + + int i = lo; + int j = mid + 1; + for (int k = lo; k <= hi; k++) { + if (i > mid) { + a[k] = aux[j++]; + } else if (j > hi) { + a[k] = aux[i++]; + } else if (aux[j].compareTo(aux[i]) < 0) { + a[k] = aux[j++]; + } else { + a[k] = aux[i++]; + } + } + } + + // Mergesort a[lo..hi] using auxiliary array aux[lo..hi] + private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { + // TODO + } + + /** + * Rearranges the array in ascending order, using the natural order + */ + public static void sort(Comparable[] a) { + // TODO + } + } + + **Note:** Les questions suivantes vous demanderont d'implémenter la fonction left out. Vous n'avez pas besoin de mettre les accolades (``{ }``) entourant le corps de la fonction dans votre réponse. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 2 - Merge Sort (implem) +network_grading: false +order: 8 +problems: + question1: + language: java + type: code + header: |- + .. code-block:: java + + private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) + default: '' + name: Implementation de la fonction private sort + question2: + type: code + default: '' + header: |- + .. code-block:: java + + public static void sort(Comparable[] a) + language: java + name: Implementation de la fonction public sort +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/Part2MergeSort/unit_test/Tests.java b/Part2MergeSort/unit_test/Tests.java new file mode 100644 index 00000000..9c58921d --- /dev/null +++ b/Part2MergeSort/unit_test/Tests.java @@ -0,0 +1,50 @@ +import junit.framework.AssertionFailedError; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertArrayEquals; + +public class Tests { + + public static void main(String[] args) { + JUnitCore junit = new JUnitCore(); + Result result = junit.run(Tests.class); + + if (!result.wasSuccessful()) { + for (Failure fail : result.getFailures()) { + // Only displays the exception thrown if it is not a "normal" exception thrown by JUnit + // for a failed test + if (fail.getException() instanceof AssertionError) { + System.out.println(fail.getMessage()); + } else { + fail.getException().printStackTrace(); + } + } + } + + System.exit(result.wasSuccessful() ? 0 : 1); + } + + @Test + public void testSortOdd() + { + String message = "Test [1 4 3 8 6]"; + Integer[] arr = new Integer[]{1, 4, 3, 8, 6}; + + MergeSort.sort(arr); + assertArrayEquals(message, new Integer[]{1, 3, 4, 6, 8}, arr); + } + + @Test + public void testSortEven() + { + String message = "Test [1 9 4 3 8 6]"; + Integer[] arr = new Integer[]{1, 9, 4, 3, 8, 6}; + + MergeSort.sort(arr); + assertArrayEquals(message, new Integer[]{1, 3, 4, 6, 8, 9}, arr); + } +} diff --git a/whiteexam2016qcm/public/a1.png b/Part2QCM/public/a1.png similarity index 100% rename from whiteexam2016qcm/public/a1.png rename to Part2QCM/public/a1.png diff --git a/whiteexam2016qcm/public/a2.png b/Part2QCM/public/a2.png similarity index 100% rename from whiteexam2016qcm/public/a2.png rename to Part2QCM/public/a2.png diff --git a/whiteexam2016qcm/public/a3.png b/Part2QCM/public/a3.png similarity index 100% rename from whiteexam2016qcm/public/a3.png rename to Part2QCM/public/a3.png diff --git a/whiteexam2016qcm/public/a4.png b/Part2QCM/public/a4.png similarity index 100% rename from whiteexam2016qcm/public/a4.png rename to Part2QCM/public/a4.png diff --git a/whiteexam2016qcm/public/a5.png b/Part2QCM/public/a5.png similarity index 100% rename from whiteexam2016qcm/public/a5.png rename to Part2QCM/public/a5.png diff --git a/Part2QCM/task.yaml b/Part2QCM/task.yaml new file mode 100644 index 00000000..a9e4ec47 --- /dev/null +++ b/Part2QCM/task.yaml @@ -0,0 +1,62 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00 +author: Antoine Cailliau +context: '' +environment: mcq +evaluate: last +groups: false +input_random: '0' +limits: + output: '2' + time: '30' + memory: '100' +name: PART 2 - QCM +network_grading: false +order: 9 +problems: + qcm01: + choices: + - text: \\(O(N\\times\\log N)\\) + valid: true + - text: \\(O(N)\\) + - text: \\(O(N^2)\\) + - text: \\(O(\\frac{N^2}{2})\\) + - text: \\(O(\\log N)\\) + limit: 0 + name: Complexité de l'algorithme QuickSort + header: En moyenne, l’algorithme *QuickSort* utilise [reponse] comparaisons + pour trier un tableau de longueur N où les clés sont distinctes et mélangées + aléatoirement initialement. + type: multiple_choice + qcm05: + multiple: true + choices: + - text: Le *Selection Sort* n’est pas stable et est en-place. + valid: true + - text: Le *Quick Sort* est stable et en-place. + - valid: true + text: Le *Merge Sort* est stable et n’est pas en-place. + - valid: true + text: Le *3-Way Quick Sort* n’est pas stable et est en place. + - text: Le *Shell Sort* est stable et est en place. + type: multiple_choice + name: Propriétés des algorithmes de tri + limit: 0 + header: Quelles affirmations suivantes sont exactes ? + qcm06: + choices: + - valid: true + text: '[2, 3, 4, 5] [1, 6, 7, 8]' + - text: '[2, 3] [4, 5] [1, 6] [7, 8]' + - text: '[1, 2, 3, 4, 5] [7, 8, 9]' + - text: '[3, 5] [4, 2, 1, 7, 8, 6]' + type: multiple_choice + multiple: true + limit: 0 + header: Quel état du tableau correspond à une étape valide lors d’un *Merge + Sort* (Top-down) pour le tableau [3, 5, 4, 2, 1, 7, 8, 6] ? + name: Algorithme de tri MergeSort +stored_submissions: 1 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part2UnionIntervals/libs/JavaGrading-0.1.jar b/Part2UnionIntervals/libs/JavaGrading-0.1.jar new file mode 100644 index 00000000..8fba7674 Binary files /dev/null and b/Part2UnionIntervals/libs/JavaGrading-0.1.jar differ diff --git a/preexam_merge_sort/student/hamcrest-core-1.3.jar b/Part2UnionIntervals/libs/hamcrest-core-1.3.jar similarity index 100% rename from preexam_merge_sort/student/hamcrest-core-1.3.jar rename to Part2UnionIntervals/libs/hamcrest-core-1.3.jar diff --git a/preexam_merge_sort/student/junit-4.12.jar b/Part2UnionIntervals/libs/junit-4.12.jar similarity index 100% rename from preexam_merge_sort/student/junit-4.12.jar rename to Part2UnionIntervals/libs/junit-4.12.jar diff --git a/Part2UnionIntervals/public/Interval.java b/Part2UnionIntervals/public/Interval.java new file mode 100644 index 00000000..dd54b5ed --- /dev/null +++ b/Part2UnionIntervals/public/Interval.java @@ -0,0 +1,34 @@ +public class Interval implements Comparable { + + final int min, max; + public Interval(int min, int max) { + assert(min <= max); + this.min = min; + this.max = max; + } + + @Override + public boolean equals(Object obj) { + return ((Interval) obj).min == min && ((Interval) obj).max == max; + } + + @Override + public String toString() { + return "["+min+","+max+"]"; + } + + @Override + public int compareTo(Interval o) { + if (min < o.min) return -1; + else if (min == o.min) return max - o.max; + else return 1; + } + + public int getMin(){ + return this.min; + } + + public int getMax(){ + return this.max; + } +} diff --git a/Part2UnionIntervals/public/LSINF1121_PART2_UnionIntervals.zip b/Part2UnionIntervals/public/LSINF1121_PART2_UnionIntervals.zip new file mode 100644 index 00000000..85952f8d Binary files /dev/null and b/Part2UnionIntervals/public/LSINF1121_PART2_UnionIntervals.zip differ diff --git a/Part2UnionIntervals/public/Union.java b/Part2UnionIntervals/public/Union.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part2UnionIntervals/public/Union.java @@ -0,0 +1 @@ +//TODO diff --git a/Part2UnionIntervals/readme.md b/Part2UnionIntervals/readme.md new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/Part2UnionIntervals/readme.md @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/Part2UnionIntervals/run b/Part2UnionIntervals/run new file mode 100644 index 00000000..f62dae7e --- /dev/null +++ b/Part2UnionIntervals/run @@ -0,0 +1,48 @@ +#! /bin/python3 +# coding: utf-8 + +from inginious import input +from inginious import feedback +import subprocess +from inginious import rst +import re + +warmup = input.get_input("union") +if warmup=="[2,4],[5,9],[10,10]": + input.parse_template("student/Union.java") + + compile_error = subprocess.call('javac -cp ".:libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar" tests/*.java student/Union.java student/Union.java 2>&1', shell=True, stdout=open('compiler.out', 'w')) + + if compile_error != 0: + codeblock = rst.get_codeblock("java", open('compiler.out').read()) + + if "error: union(Interval [] intervals) is not public in Union;" in codeblock : + feedback.set_global_feedback("Votre code ne compile pas.\n\n" + "Hint. Faites attention à ne pas changer le template de base qui vous est fourni. Par exemple la signature des fonctions, l'accès (public, private,...) des méthodes", True) + else : + feedback.set_global_feedback("Votre code ne compile pas: \n\n" + codeblock, True) + feedback.set_global_result("failed") + exit(0) + + + + try: + out = subprocess.check_output('java -cp "libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar:." tests/RunTests', shell=True).decode('utf8') + + grade = re.findall(r"^TOTAL ([0-9\.]+)/([0-9\.]+)$", out, re.MULTILINE)[-1] + grade = 100.0*float(grade[0])/float(grade[1]) + + feedback.set_grade(grade) + codeblock = rst.get_codeblock("java", out) + feedback.set_global_feedback("Résultat des tests: \n\n" + codeblock, True) + + if grade < 99.99 : + feedback.set_global_result("failed") + else: + feedback.set_global_result("success") + except Exception as e: + feedback.set_global_feedback("Une erreur s'est produite!." + str(e), True) + feedback.set_global_result("failed") +else: + feedback.set_global_feedback("Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice", True) + feedback.set_grade(0) + feedback.set_global_result("failed") \ No newline at end of file diff --git a/Part2UnionIntervals/run_bash b/Part2UnionIntervals/run_bash new file mode 100644 index 00000000..4857b90b --- /dev/null +++ b/Part2UnionIntervals/run_bash @@ -0,0 +1,48 @@ +#!/bin/bash +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 +export LANGUAGE=en_US.UTF-8 + +# test preliminary question + +a=`getinput union` +if [[ "$a" != "[2,4],[5,9],[10,10]" ]]; then + echo "failed"; + feedback-result failed + feedback-msg -ae -m "Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice \n" + exit +fi + + +#produce the output directory +mkdir output + +# parse templates +parsetemplate Union.java + +# run sur un seul exemple pour les erreurs de compilation etc + +javac -Xlint:none -cp . Grading.java 2> output/comp.err + +java -cp . Grading 2> output/run.err > output/std.out + + +# run feedback +if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error + echo "compilation error" + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" + cat output/comp.err | rst-code | feedback-msg -a + exit +fi + + +if [ -s output/run.err ]; then # error in main() + echo "runtime error" + feedback-grade 0 + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" + cat output/run.err | rst-code | feedback-msg -a + exit +fi +echo "testing ok" diff --git a/Part2UnionIntervals/student/Interval.java b/Part2UnionIntervals/student/Interval.java new file mode 100644 index 00000000..2ad7cad3 --- /dev/null +++ b/Part2UnionIntervals/student/Interval.java @@ -0,0 +1,35 @@ +package student; +public class Interval implements Comparable { + + final int min, max; + public Interval(int min, int max) { + assert(min <= max); + this.min = min; + this.max = max; + } + + @Override + public boolean equals(Object obj) { + return ((Interval) obj).min == min && ((Interval) obj).max == max; + } + + @Override + public String toString() { + return "["+min+","+max+"]"; + } + + @Override + public int compareTo(Interval o) { + if (min < o.min) return -1; + else if (min == o.min) return max - o.max; + else return 1; + } + + public int getMin(){ + return this.min; + } + + public int getMax(){ + return this.max; + } +} diff --git a/Part2UnionIntervals/student/Union.java b/Part2UnionIntervals/student/Union.java new file mode 100644 index 00000000..c6e6813a --- /dev/null +++ b/Part2UnionIntervals/student/Union.java @@ -0,0 +1,3 @@ +package student; + +@@implementation@@ \ No newline at end of file diff --git a/Part2UnionIntervals/task.yaml b/Part2UnionIntervals/task.yaml new file mode 100644 index 00000000..027b5130 --- /dev/null +++ b/Part2UnionIntervals/task.yaml @@ -0,0 +1,88 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00/2019-10-08 17:00:00 +author: '' +categories: [] +context: |- + Etant donné un tableau d'intervalles (fermés), Il vous est demandé d'implémenter l'opération ``union``. Cette opération retournera le tableau minimal d'intervalles triés couvrant exactement l'union des points couverts par les intervalles d'entrée. + + Par exemple, l'union des intervalles *[7,9],[5,8],[2,4]* est *[2,4],[5,9]*. + + La classe ``Interval`` permetant de stocker les intervalles vous est fourni et se présente comme suit (vous pouvez l'utiliser directement dans votre code): + + + .. code-block:: java + + public class Interval implements Comparable { + + final int min, max; + public Interval(int min, int max) { + assert(min <= max); + this.min = min; + this.max = max; + } + + @Override + public boolean equals(Object obj) { + return ((Interval) obj).min == min && ((Interval) obj).max == max; + } + + @Override + public String toString() { + return "["+min+","+max+"]"; + } + + @Override + public int compareTo(Interval o) { + if (min < o.min) return -1; + else if (min == o.min) return max - o.max; + else return 1; + } + } + + `Le projet IntelliJ est disponible ici `_. + + Nous vous conseillons de le télécharger d'implémenter/tester avant de soumettre ce qui vous est demandé. +environment: java7 +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + hard_time: '40' + time: '20' + output: '2' + memory: '400' +name: PART 2 - Union Intervals (implem) +network_grading: false +order: 6 +problems: + union: + header: | + Quelle est l'union de [10,10],[2,4],[3,4],[5,6],[6,9],[6,8]? + Exprimez votre réponse en utilisant les notations *[a,b],[c,d],...,[e,f]* avec a,b,c,d,e,f entiers. + type: match + name: Warm-up + answer: '[2,4],[5,9],[10,10]' + implementation: + type: code + language: java + name: Implementation + default: '' + header: |- + Implémentez complètement la classe Union dans la zone de texte. + N'hésitez pas à utiliser n'importe quelle méthode/classe de l'API Java. + Complexité temporelle attendue : ``O(nlog(n))``, où *n* est le nombre d'intervalles d'entrée. + + .. code-block:: java + + public class Union { + + public static Interval [] union(Interval [] intervals) { + // TODO + return new Interval[]{}; + } + } +stored_submissions: 0 +submission_limit: + amount: 30 + period: -1 +weight: 1.0 diff --git a/Part2UnionIntervals/tests/RunTests.java b/Part2UnionIntervals/tests/RunTests.java new file mode 100644 index 00000000..a9666e19 --- /dev/null +++ b/Part2UnionIntervals/tests/RunTests.java @@ -0,0 +1,12 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run(UnionIntervalsTest.class); + } +} \ No newline at end of file diff --git a/Part2UnionIntervals/tests/UnionIntervalsTest.java b/Part2UnionIntervals/tests/UnionIntervalsTest.java new file mode 100644 index 00000000..0fd5d3d0 --- /dev/null +++ b/Part2UnionIntervals/tests/UnionIntervalsTest.java @@ -0,0 +1,268 @@ +package tests; + +/*to be added for grading and test*/ +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.Union; +import student.Interval; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.*; + +/** + * This is just a limited number of tests provided for convenience + * Don't hesitate to extend it with other tests + */ +public class UnionIntervalsTest { + + public static Interval [] unionSolution(Interval [] intervals) { + if (intervals.length == 0) return intervals; + Arrays.sort(intervals); + int min = intervals[0].getMin(); + int max = intervals[0].getMax(); + ArrayList res = new ArrayList(); + for (int i = 1; i < intervals.length; i++) { + if (intervals[i].getMin() > max) { + // close + res.add(new Interval(min,max)); + min = intervals[i].getMin(); + max = intervals[i].getMax(); + } else { + max = Math.max(max, intervals[i].getMax()); + } + } + res.add(new Interval(min,max)); + return res.toArray(new Interval[0]); + } + + public static boolean test(Interval[] input, Interval[] expectedOutput) { + Interval [] result = Union.union(input); + boolean ok = Arrays.equals(expectedOutput,result); + if (!ok) { + String res = "----bug found----\ninput:"; + for (int i = 0; i < input.length; i++) { + System.out.println("=>"+input[i]); + } + + for (Interval i: input) res += i; + res += "\nexpected output:"; + for (Interval i: expectedOutput) res += i; + res += "\nactual output:"; + for (Interval i: result) res += i; + feedback(res+"\n"); + } + return ok; + } + + @Test + @Grade(value=25) + public void testUnits() { + boolean ok = true; + if (ok) ok = test(new Interval[]{},new Interval[]{}); + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(1, 3); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 3)}); + } + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(3, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2), new Interval(3, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2)}); + } + if (ok) { + Interval i1 = new Interval(1, 1); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 1), new Interval(2, 2)}); + } + if (ok) { + Interval i0 = new Interval(7, 9); + Interval i1 = new Interval(5, 8); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i0, i1, i2},new Interval[] {new Interval(2, 4), new Interval(5, 9)}); + } + if (ok) { + Interval i0 = new Interval(10, 10); + Interval i1 = new Interval(2, 4); + Interval i2 = new Interval(3, 4); + Interval i3 = new Interval(5, 6); + Interval i4 = new Interval(6, 9); + Interval i5 = new Interval(6, 8); + ok = test(new Interval[]{i0, i1, i2, i3, i4, i5},new Interval[]{new Interval(2, 4), new Interval(5, 9), new Interval(10, 10)}); + } + assertTrue(ok); + + } + + + public static Interval randomInterval(Random rand) { + int min = rand.nextInt(20); + return new Interval(min, min + rand.nextInt(4)); + } + + private static boolean testRandom2() { + int [] seeds = new int[] {1,5,7,11,13}; + + Random rand = new java.util.Random(seeds[2]); + boolean ok = true; + + for (int i = 0; i < 500 & ok; i++) { + Interval[] intervals = new Interval[10]; + for (int k = 0; k < intervals.length; k++) { + intervals[k] = randomInterval(rand); + } + ok = test(intervals,unionSolution(intervals)); + } + return ok; + } + + @Test(timeout=1000) + @Grade(value=25) + public void testRandom() { + + final boolean [] ok = new boolean[]{false}; + ok[0] = testRandom2(); + + + assertTrue(ok[0]); + } + + abstract static class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + @Test(timeout=11000) + @Grade(value=50) + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + Interval [] res = Union.union(intervals); + } + + /* + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + Interval [] res = Union.union(intervals); + } + }.run(10000); + return timeOk; + }*/ + + + private static void exec(String cmd) { + try { + Runtime.getRuntime().exec(cmd).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + + private static void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n" + message + "\n"}).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + +/* + public static void main(String[] args) { + int grade = 0; + if (testUnits()) { + grade += 25; + } + if (testRandom()) { + grade += 25; + } + if (grade == 50 && testComplexity()) { + grade += 50; + } + + System.out.println("%grade:" + grade); + + exec("feedback-grade "+grade); + + + if (grade == 100) { + feedback("Congratulations"); + exec("feedback-result success"); + } + else { + feedback("Not yet good (bugs and/or time-complexity)"); + exec("feedback-result failed"); + } + + + }*/ + + +} diff --git a/Part2UnionIntervals/unit_test/UnionIntervalsTest.java b/Part2UnionIntervals/unit_test/UnionIntervalsTest.java new file mode 100644 index 00000000..0e46102f --- /dev/null +++ b/Part2UnionIntervals/unit_test/UnionIntervalsTest.java @@ -0,0 +1,263 @@ +/*to be added for grading and test*/ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.*; + +/** + * This is just a limited number of tests provided for convenience + * Don't hesitate to extend it with other tests + */ +public class UnionIntervalsTest { + + public static Interval [] unionSolution(Interval [] intervals) { + if (intervals.length == 0) return intervals; + Arrays.sort(intervals); + int min = intervals[0].getMin(); + int max = intervals[0].getMax(); + ArrayList res = new ArrayList(); + for (int i = 1; i < intervals.length; i++) { + if (intervals[i].getMin() > max) { + // close + res.add(new Interval(min,max)); + min = intervals[i].getMin(); + max = intervals[i].getMax(); + } else { + max = Math.max(max, intervals[i].getMax()); + } + } + res.add(new Interval(min,max)); + return res.toArray(new Interval[0]); + } + + public static boolean test(Interval[] input, Interval[] expectedOutput) { + Interval [] result = Union.union(input); + boolean ok = Arrays.equals(expectedOutput,result); + if (!ok) { + String res = "----bug found----\ninput:"; + for (int i = 0; i < input.length; i++) { + System.out.println("=>"+input[i]); + } + + for (Interval i: input) res += i; + res += "\nexpected output:"; + for (Interval i: expectedOutput) res += i; + res += "\nactual output:"; + for (Interval i: result) res += i; + feedback(res+"\n"); + } + return ok; + } + + @Test + @Grade(value=25) + public void testUnits() { + boolean ok = true; + if (ok) ok = test(new Interval[]{},new Interval[]{}); + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(1, 3); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 3)}); + } + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(3, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2), new Interval(3, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2)}); + } + if (ok) { + Interval i1 = new Interval(1, 1); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 1), new Interval(2, 2)}); + } + if (ok) { + Interval i0 = new Interval(7, 9); + Interval i1 = new Interval(5, 8); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i0, i1, i2},new Interval[] {new Interval(2, 4), new Interval(5, 9)}); + } + if (ok) { + Interval i0 = new Interval(10, 10); + Interval i1 = new Interval(2, 4); + Interval i2 = new Interval(3, 4); + Interval i3 = new Interval(5, 6); + Interval i4 = new Interval(6, 9); + Interval i5 = new Interval(6, 8); + ok = test(new Interval[]{i0, i1, i2, i3, i4, i5},new Interval[]{new Interval(2, 4), new Interval(5, 9), new Interval(10, 10)}); + } + assertTrue(ok); + + } + + + public static Interval randomInterval(Random rand) { + int min = rand.nextInt(20); + return new Interval(min, min + rand.nextInt(4)); + } + + private static boolean testRandom2() { + int [] seeds = new int[] {1,5,7,11,13}; + + Random rand = new java.util.Random(seeds[2]); + boolean ok = true; + + for (int i = 0; i < 500 & ok; i++) { + Interval[] intervals = new Interval[10]; + for (int k = 0; k < intervals.length; k++) { + intervals[k] = randomInterval(rand); + } + ok = test(intervals,unionSolution(intervals)); + } + return ok; + } + + @Test(timeout=1000) + @Grade(value=25) + public void testRandom() { + + final boolean [] ok = new boolean[]{false}; + ok[0] = testRandom2(); + + + assertTrue(ok[0]); + } + + abstract static class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + @Test(timeout=11000) + @Grade(value=50) + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + Interval [] res = Union.union(intervals); + } + + /* + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + Interval [] res = Union.union(intervals); + } + }.run(10000); + return timeOk; + }*/ + + + private static void exec(String cmd) { + try { + Runtime.getRuntime().exec(cmd).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + + private static void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n" + message + "\n"}).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + +/* + public static void main(String[] args) { + int grade = 0; + if (testUnits()) { + grade += 25; + } + if (testRandom()) { + grade += 25; + } + if (grade == 50 && testComplexity()) { + grade += 50; + } + + System.out.println("%grade:" + grade); + + exec("feedback-grade "+grade); + + + if (grade == 100) { + feedback("Congratulations"); + exec("feedback-result success"); + } + else { + feedback("Not yet good (bugs and/or time-complexity)"); + exec("feedback-result failed"); + } + + + }*/ + + +} diff --git a/Part4IncrementalHash/TimeLimitedCodeBlock.java b/Part4IncrementalHash/TimeLimitedCodeBlock.java new file mode 100644 index 00000000..36bd2fda --- /dev/null +++ b/Part4IncrementalHash/TimeLimitedCodeBlock.java @@ -0,0 +1,40 @@ + + +import java.util.concurrent.*; + + + +public abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); +} + diff --git a/Part4IncrementalHash/feedback_settings.yaml b/Part4IncrementalHash/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part4IncrementalHash/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part4IncrementalHash/public/IncrementalHash.java b/Part4IncrementalHash/public/IncrementalHash.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part4IncrementalHash/public/IncrementalHash.java @@ -0,0 +1 @@ +//TODO diff --git a/Part4IncrementalHash/public/LSINF1121_PART4_IncrementalHash.zip b/Part4IncrementalHash/public/LSINF1121_PART4_IncrementalHash.zip new file mode 100644 index 00000000..6c26e597 Binary files /dev/null and b/Part4IncrementalHash/public/LSINF1121_PART4_IncrementalHash.zip differ diff --git a/Part4IncrementalHash/run b/Part4IncrementalHash/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part4IncrementalHash/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part4IncrementalHash/src/InginiousTests.java b/Part4IncrementalHash/src/InginiousTests.java new file mode 100644 index 00000000..dac1dbc6 --- /dev/null +++ b/Part4IncrementalHash/src/InginiousTests.java @@ -0,0 +1,189 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; +import templates.*; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import java.io.IOException; +import java.util.Random; + + +public class InginiousTests { + + public static class IncrementalHashBaseLine { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHashBaseLine(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + int tmp = previousHash+Q-((t[from-1]*RM)%Q); + return ((tmp*R)%Q+t[from+M-1])%Q; + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + + } + + + public boolean correct(int size, int Q, int M, int maxChar) { + Random rnd = new Random(0); + char [] input = new char[size]; + for (int i = 0; i < input.length; i++) { + input[i] = (char) rnd.nextInt(maxChar); + } + IncrementalHash hasher = new IncrementalHash(Q,M); + IncrementalHashBaseLine hasherb = new IncrementalHashBaseLine(Q,M); + + int prevHash = hasherb.hash(input,0); + for (int i = 1; i < input.length-M; i++) { + int h1 = hasher.nextHash(input,prevHash,i); + int h2 = hasherb.nextHash(input,prevHash,i); + if (h1 != h2) return false; + prevHash = h1; + } + return true; + } + + @Test(timeout=500) + @Grade(value=80) + public void timeComplexityOK() { + /*boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + correct((int)10E5,100,3000,65536); + } + }.run(500); + assertTrue("the nextHash should execute in O(1):-100\n",timeOk);*/ + correct((int)10E5,100,3000,65536); + } + + @Test + @Grade(value=10) + public void hashCorrectOnWords5InputUpTo3() { + assertTrue("wrong nextHash value returned with input values <= 3: -40\n",correct(1000,100,5,3)); + } + + + @Test + @Grade(value=6) + public void hashCorrectOnWords5InputUpTo10() { + assertTrue("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n",correct(1000,100,5,10)); + } + + @Test + @Grade(value=4) + public void hashCorrectOnWords5InputUpTo65536() { + assertTrue("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n",correct(1000,100,5,65536)); + } + + +/* + + public void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", message}).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + + public void grade() { + int score = 0; + + boolean timeComplexityOk = timeComplexityOK(); + + if (!timeComplexityOk) { + feedback("the nextHash should execute in O(1):-100\n"); + } else { + if (hashCorrectOnWords5InputUpTo3()) + score += 50; + else { + feedback("wrong nextHash value returned with input values <= 3: -40\n"); + } + if (hashCorrectOnWords5InputUpTo10()) + score += 30; + else { + feedback("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n"); + } + if (hashCorrectOnWords5InputUpTo65536()) + score += 20; + else { + feedback("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n"); + } + } + System.out.println("%score:" + score); + try { + Runtime.getRuntime().exec("feedback-grade "+score); + + if (score == 100) { + Runtime.getRuntime().exec("feedback-result success"); + Runtime.getRuntime().exec("feedback-msg -ae -m \"congratulation\n\""); + } + else { + Runtime.getRuntime().exec("feedback-msg -ae -m \"not yet there ...\n\""); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + + public static void main(String[] args) { + new IncrementalHashTest().grade(); + System.exit(0); + }*/ +} diff --git a/Part4IncrementalHash/src/StudentTestRunner.java b/Part4IncrementalHash/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part4IncrementalHash/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part4IncrementalHash/task.yaml b/Part4IncrementalHash/task.yaml new file mode 100644 index 00000000..56f0ae9b --- /dev/null +++ b/Part4IncrementalHash/task.yaml @@ -0,0 +1,96 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: Pierre Schaus +context: |- + La fonction de Hash calculée sur le sous tableau :math:`t[from,...,from+M-1]` est calculée comme suit: + + :math:`hash([from,...,from+M-1])= \left( \sum_{i=0}^{M-1} t[from+i] \cdot R^{(M-1-i)}\right)\%Q` + + Le code pour calculer cette fonction de hash vous est donné. + Nous vous demandons de calculer + :math:`hash([from,...,from+M-1])` au départ de + :math:`hash([from-1,...,from+M-2])` en O(1). + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 4 - Incremental Hash (implem) +network_grading: false +order: 19 +problems: + TODO1: + header: |- + Mettez votre implémentation complète de ``IncrementalHash.java`` ci-dessous. + + .. code-block:: java + + public class IncrementalHash { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHash(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-2)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + // TODO, obviously this is not O(1) + return hash(t,from); + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-2)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + } + type: code + default: '' + language: java + name: IncrementalHash.java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part4IncrementalHash/templates/IncrementalHash.java b/Part4IncrementalHash/templates/IncrementalHash.java new file mode 100644 index 00000000..55f0a0f1 --- /dev/null +++ b/Part4IncrementalHash/templates/IncrementalHash.java @@ -0,0 +1,3 @@ +package templates; + +@@TODO1@@ diff --git a/Part4IncrementalHash/unit_test/IncrementalHashTest.java b/Part4IncrementalHash/unit_test/IncrementalHashTest.java new file mode 100644 index 00000000..46b3a2f3 --- /dev/null +++ b/Part4IncrementalHash/unit_test/IncrementalHashTest.java @@ -0,0 +1,186 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import java.io.IOException; +import java.util.Random; + + +public class IncrementalHashTest { + + public static class IncrementalHashBaseLine { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHashBaseLine(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + int tmp = previousHash+Q-((t[from-1]*RM)%Q); + return ((tmp*R)%Q+t[from+M-1])%Q; + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + + } + + + public boolean correct(int size, int Q, int M, int maxChar) { + Random rnd = new Random(0); + char [] input = new char[size]; + for (int i = 0; i < input.length; i++) { + input[i] = (char) rnd.nextInt(maxChar); + } + IncrementalHash hasher = new IncrementalHash(Q,M); + IncrementalHashBaseLine hasherb = new IncrementalHashBaseLine(Q,M); + + int prevHash = hasherb.hash(input,0); + for (int i = 1; i < input.length-M; i++) { + int h1 = hasher.nextHash(input,prevHash,i); + int h2 = hasherb.nextHash(input,prevHash,i); + if (h1 != h2) return false; + prevHash = h1; + } + return true; + } + + @Test(timeout=500) + @Grade(value=80) + public void timeComplexityOK() { + /*boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + correct((int)10E5,100,3000,65536); + } + }.run(500); + assertTrue("the nextHash should execute in O(1):-100\n",timeOk);*/ + correct((int)10E5,100,3000,65536); + } + + @Test + @Grade(value=10) + public void hashCorrectOnWords5InputUpTo3() { + assertTrue("wrong nextHash value returned with input values <= 3: -40\n",correct(1000,100,5,3)); + } + + + @Test + @Grade(value=6) + public void hashCorrectOnWords5InputUpTo10() { + assertTrue("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n",correct(1000,100,5,10)); + } + + @Test + @Grade(value=4) + public void hashCorrectOnWords5InputUpTo65536() { + assertTrue("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n",correct(1000,100,5,65536)); + } + + +/* + + public void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", message}).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + + public void grade() { + int score = 0; + + boolean timeComplexityOk = timeComplexityOK(); + + if (!timeComplexityOk) { + feedback("the nextHash should execute in O(1):-100\n"); + } else { + if (hashCorrectOnWords5InputUpTo3()) + score += 50; + else { + feedback("wrong nextHash value returned with input values <= 3: -40\n"); + } + if (hashCorrectOnWords5InputUpTo10()) + score += 30; + else { + feedback("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n"); + } + if (hashCorrectOnWords5InputUpTo65536()) + score += 20; + else { + feedback("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n"); + } + } + System.out.println("%score:" + score); + try { + Runtime.getRuntime().exec("feedback-grade "+score); + + if (score == 100) { + Runtime.getRuntime().exec("feedback-result success"); + Runtime.getRuntime().exec("feedback-msg -ae -m \"congratulation\n\""); + } + else { + Runtime.getRuntime().exec("feedback-msg -ae -m \"not yet there ...\n\""); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + + public static void main(String[] args) { + new IncrementalHashTest().grade(); + System.exit(0); + }*/ +} diff --git a/Part4QcmHashing/task.yaml b/Part4QcmHashing/task.yaml new file mode 100644 index 00000000..6bf16c21 --- /dev/null +++ b/Part4QcmHashing/task.yaml @@ -0,0 +1,49 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: xgillard, john Aoga +context: | + Etant donné une fonction de hachage: + + :math:`h(\left[v_0 \cdots v_{n-1} \right]) = \sum\limits_{i=0}^{n-1} v_i R^{(n-i-1)} \% M` + + dans laquelle :math:`\left[v_0 \cdots v_{n-1} \right]` dénote un vecteur de bit et :math:`R` et :math:`M` sont des facteurs constants. +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 4 - QCM Hashing +network_grading: false +order: 17 +problems: + nombre_pair: + type: multiple_choice + header: Quelle portion de la clé est utilisée si on pose :math:`R=32` et `M=1024` + ? + choices: + - text: Uniquement les bits :math:`\left[v_0 \cdots v_{1023} \right]` + - text: Tous les bits de la clé + - text: Uniquement les bits :math:`\left[v_{n-1024} \cdots v_{n-1} \right]` + - text: Uniquement les deux derniers bits + valid: true + name: Fraction de la clé utilisée (1) + limit: 0 + mult_trois: + choices: + - text: Tous les bits de la clé + - text: Uniquement les bits :math:`\left[v_0 \cdots v_{80} \right]` + - text: Uniquement les bits :math:`\left[v_{n-81} \cdots v_{n-1} \right]` + - text: Uniquement les quatre derniers bits + valid: true + header: Quelle portion de la clé est utilisée si on pose :math:`R=3` et `M=81` + ? + limit: 0 + name: Fraction de la clé utilisée (2) + type: multiple_choice +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part4QcmRk/task.yaml b/Part4QcmRk/task.yaml new file mode 100644 index 00000000..a7012f58 --- /dev/null +++ b/Part4QcmRk/task.yaml @@ -0,0 +1,128 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: Xavier Gillard, John Aoga +context: | + A la page 777 du livre "Algorithms" 4th edition, on vous propose l'implémentation suivante de l'algorithme de Rabin Karp. + + .. code-block:: java + + public class RabinKarp { + private String pat; // the pattern // needed only for Las Vegas + private long patHash; // pattern hash value + private int m; // pattern length + private long q; // a large prime, small enough to avoid long overflow + private int R; // radix + private long RM; // R^(M-1) % Q + + public RabinKarp(String pat) { + this.pat = pat; // save pattern (needed only for Las Vegas) + R = 256; + m = pat.length(); + q = longRandomPrime(); + + // precompute R^(m-1) % q for use in removing leading digit + RM = 1; + for (int i = 1; i <= m-1; i++) + RM = (R * RM) % q; + patHash = hash(pat, m); + } + + // Compute hash for key[0..m-1]. + private long hash(String key, int m) { + long h = 0; + for (int j = 0; j < m; j++) + h = (R * h + key.charAt(j)) % q; + return h; + } + + // Monte Carlo + private boolean check(int i) { + return true; + } + + // Returns the index of the first occurrrence of the pattern string in the text string. + public int search(String txt) { + int n = txt.length(); + if (n < m) return n; + long txtHash = hash(txt, m); + + // check for match at offset 0 + if ((patHash == txtHash) && check(txt, 0)) + return 0; + + // check for hash match; if hash match, check for exact match + for (int i = m; i < n; i++) { + // Remove leading digit, add trailing digit, check for match. + txtHash = (txtHash + q - RM*txt.charAt(i-m) % q) % q; + txtHash = (txtHash*R + txt.charAt(i)) % q; + + // match + int offset = i - m + 1; + if ((patHash == txtHash) && check(txt, offset)) + return offset; + } + + // no match + return n; + } + + + // a random 31-bit prime + private static long longRandomPrime() { + BigInteger prime = BigInteger.probablePrime(31, new Random()); + return prime.longValue(); + } + + } +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 4 - QCM Rabin Karp +network_grading: false +order: 18 +problems: + propositions: + header: | + On suppose que: + * :math:`n` dénote la longueur du texte (`key.length()`) dans lequel on recherche le pattern + * :math:`m` dénote la longueur du pattern à trouver dans le texte (`pat.length()`) + choices: + - feedback: :math:`O(nm)` est la complexité d'une recherche brute force. + Cette implémentation est dite `Monte Carlo` et sa complexité est :math:`O(n)` + text: La complexité de la methode ``search`` est :math:`O(nm)` + - text: La complexité de la methode ``search`` est :math:`O(n)` + valid: true + - text: La complexité de la methode ``search`` est :math:`O\left(n~log_2(m)\right)` + feedback: Le logarithme n'a aucune raison d'être. Cette implémentation + est dite `Monte Carlo` et sa complexité est :math:`O(n)` + - text: La complexité de la methode ``search`` est :math:`O(m^n)` + feedback: Il n'y a aucune raison pour qu'n apparaise en exposant. Cette + implémentation est dite `Monte Carlo` et sa complexité est :math:`O(n)` + - text: Cet implémentation renvoie toujours un résultat correct, c'est à + dire le premier indice :math:`i` telle que la souchaine :math:`key[i::i+m-1]` est + égale au pattern ``pat``, ou :math:`n` si le pattern ``pat`` ne s'y + trouve pas. + feedback: C'est faux, puisqu'il ne vérifie pas que la sous-chaine trouvée + correspond effectivement au pattern recherché, on dit que ce bout + de code implémente la variante `Monte Carlo` de l'algorithme de Rabin + Karp. Cet algorithme est très probablement correct, mais il y a une + faible probabilité pour qu'il renvoie un résultat erroné (du a une + collision sur les hash). + - text: |+ + Cet implémentation peut renvoyer un résultat incorrect, il est possible que pour l'indice :math:`i` renvoyé, la souchaine :math:`key[i::i+m-1]` ne soit pas égale au pattern ``pat``. + + + valid: true + multiple: true + limit: 0 + type: multiple_choice + name: Sélectionnez les propositions correctes +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part4RabinKarp/feedback_settings.yaml b/Part4RabinKarp/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part4RabinKarp/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part4RabinKarp/public/LSINF1121_PART4_RabinKarp.zip b/Part4RabinKarp/public/LSINF1121_PART4_RabinKarp.zip new file mode 100644 index 00000000..8d2603fc Binary files /dev/null and b/Part4RabinKarp/public/LSINF1121_PART4_RabinKarp.zip differ diff --git a/Part4RabinKarp/public/RabinKarp.java b/Part4RabinKarp/public/RabinKarp.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part4RabinKarp/public/RabinKarp.java @@ -0,0 +1 @@ +//TODO diff --git a/Part4RabinKarp/run b/Part4RabinKarp/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part4RabinKarp/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part4RabinKarp/src/InginiousTests.java b/Part4RabinKarp/src/InginiousTests.java new file mode 100644 index 00000000..0a312de3 --- /dev/null +++ b/Part4RabinKarp/src/InginiousTests.java @@ -0,0 +1,123 @@ +package src; +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + + +import java.util.Random; + +import static java.lang.Math.min; +import static org.junit.Assert.assertEquals; +import templates.*; + +public class InginiousTests { + + + @Test + @Grade(value= 10) + public void basicTest(){ + String[] pat = {"comp","like"}; + String txt = "I like computer science"; + RabinKarp rc = new RabinKarp(pat); + assertEquals(2,rc.search(txt)); + } + + + @Test + @Grade(value= 20) + public void wordNotPresentTest(){ + String[] pat = {"Yavin","C-3PO","R2-D2" }; + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + RabinKarp rc = new RabinKarp(pat); + assertEquals(txt.length(),rc.search(txt)); + } + + + @Test + @Grade(value=20) + public void randomWordTest(){ + int[] seeds = new int[]{42,56,3,9,65,99,23}; + Random rand = new Random(new Random().nextInt(seeds.length)); + String[] pat = new String[10]; + int length = 8; + + + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + + + int minIndex = txt.length(); + for(int i=0;i<10;i++){ + int startIndex = rand.nextInt(txt.length()-length); + pat[i] = txt.substring(startIndex,startIndex+length); + minIndex = min(minIndex,startIndex); + } + RabinKarp rc = new RabinKarp(pat); + assertEquals(minIndex,rc.search(txt)); + } + + private int nChar = 26; + private int patSize = 3; + private String[] patterns = new String[(int)Math.pow(nChar,patSize)]; + private int nPats = 0; + private void genAllWords(String prefix, int k) { + if (k == 0) { + this.patterns[nPats] = prefix; + this.nPats++; + return; + } + + for (int i = 0; i < nChar; ++i) { + String newPrefix = prefix + (char)('a' + i); + genAllWords(newPrefix, k - 1); + } + } + + @Test(timeout=50) + @Grade(value=50) + public void complexityTest(){ + long t0 = System.currentTimeMillis(); + genAllWords("",patSize); + RabinKarp rc = new RabinKarp(this.patterns); + + String txt = ""+ + "Ra th er t ha n pu rs ui ng m or e so ph is ti ca te d sk ip pi ng , th e Ra bi n– Ka rp a l"+ + "g or it hm s ee ks t o sp ee d up t he t es ti ng o f eq ua li ty o f th e pa tt er n to"+ + " t he s ub st ri ng s in t he t ex t by u si ng a h as h fu nc ti on . A ha sh f un ct "+ + "io n is a f un ct io n wh ic h co nv er ts e ve ry s tr in g in to a n um er ic v al ue ,"+ + " ca ll ed i ts h as h va lu e; f or e xa mp le , we m ig ht h av e ha sh (h el lo )= 5. T"; + + assertEquals(txt.length(),rc.search(txt)); + + long t1 = System.currentTimeMillis(); + System.out.println("Spent time = "+(t1-t0)); + + + } + + +} diff --git a/Part4RabinKarp/src/StudentTestRunner.java b/Part4RabinKarp/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part4RabinKarp/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part4RabinKarp/task.yaml b/Part4RabinKarp/task.yaml new file mode 100644 index 00000000..4fc2630f --- /dev/null +++ b/Part4RabinKarp/task.yaml @@ -0,0 +1,102 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: '' +context: |- + On s'intéresse à l'algorithme de Rabin-Karp. On voudrait le modifier quelque peu pour déterminer si un mot parmi une liste (tous les mots sont de même longueur) est présent dans le texte. + + Pour cela, vous devez modifier l'algorithme de Rabin-Karp qui se trouve ci-dessous (Page 777 du livre). + + + + + + + + Plus précisément, on vous demande de modifier cette classe de manière à avoir un constructeur de la forme: + + .. code-block:: java + + public RabinKarp(String[] pat) + + + De plus la fonction ``search`` doit retourner l'indice du début du premier mot (parmi le tableau ``pat``) trouvé dans le texte ou la taille du texte si aucun mot n'aparait dans le texte. + + Exemple: + Si txt = “Here find interresting exercise for Rabin Karp” et pat={“have”, “find”, “Karp”} la fonction ``search`` doit renvoyer 5 car le mot "find" présent dans le texte et dans la liste commence à l'indice 5. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 4 - Rabin Karp of k patterns (implem) +network_grading: false +order: 20 +problems: + RabinKarp: + type: code + language: '' + header: |- + Mettez votre implémentation complète de ``RabinKarp.java`` ci-dessous. + + .. code-block:: java + + public class RabinKarp + { + private String pat; // pattern (only needed for Las Vegas) + private long patHash; // pattern hash value + private int M; // pattern length + private long Q; // a large prime + private int R = 2048; // alphabet size + private long RM; // R^(M-1) % Q + + public RabinKarp(String pat) + { + this.pat = pat; // save pattern (only needed for Las Vegas) + this.M = pat.length(); + Q = 4463; + RM = 1; + for (int i = 1; i <= M-1; i++) // Compute R^(M-1) % Q for use + RM = (R * RM) % Q; // in removing leading digit. + patHash = hash(pat, M); + } + + + public boolean check(int i) // Monte Carlo (See text.) + { return true; } // For Las Vegas, check pat vs txt(i..i-M+1). + + private long hash(String key, int M) + { // Compute hash for key[0..M-1]. + long h = 0; + for (int j = 0; j < M; j++) + h = (R * h + key.charAt(j)) % Q; + return h; + } + + + public int search(String txt) + { // Search for hash match in text. + int N = txt.length(); + long txtHash = hash(txt, M); + if (patHash == txtHash) return 0; // Match at beginning. + for (int i = M; i < N; i++) + { // Remove leading digit, add trailing digit, check for match. + txtHash = (txtHash + Q - RM*txt.charAt(i-M) % Q) % Q; + txtHash = (txtHash*R + txt.charAt(i)) % Q; + if (patHash == txtHash) + if (check(i - M + 1)) return i - M + 1; // match + + } + return N; // no match found + } + } + name: Implémentation de Rabin-Karp pour une liste de mot + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part4RabinKarp/templates/RabinKarp.java b/Part4RabinKarp/templates/RabinKarp.java new file mode 100644 index 00000000..7fdb8ba7 --- /dev/null +++ b/Part4RabinKarp/templates/RabinKarp.java @@ -0,0 +1,3 @@ +package templates; + +@@RabinKarp@@ diff --git a/Part4RabinKarp/unit_test/RabinKarpTest.java b/Part4RabinKarp/unit_test/RabinKarpTest.java new file mode 100644 index 00000000..42d177b5 --- /dev/null +++ b/Part4RabinKarp/unit_test/RabinKarpTest.java @@ -0,0 +1,121 @@ +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + + +import java.util.Random; + +import static java.lang.Math.min; +import static org.junit.Assert.assertEquals; + +public class RabinKarpTest { + + + @Test + @Grade(value= 10) + public void basicTest(){ + String[] pat = {"comp","like"}; + String txt = "I like computer science"; + RabinKarp rc = new RabinKarp(pat); + assertEquals(2,rc.search(txt)); + } + + + @Test + @Grade(value= 20) + public void wordNotPresentTest(){ + String[] pat = {"Yavin","C-3PO","R2-D2" }; + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + RabinKarp rc = new RabinKarp(pat); + assertEquals(txt.length(),rc.search(txt)); + } + + + @Test + @Grade(value=20) + public void randomWordTest(){ + int[] seeds = new int[]{42,56,3,9,65,99,23}; + Random rand = new Random(new Random().nextInt(seeds.length)); + String[] pat = new String[10]; + int length = 8; + + + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + + + int minIndex = txt.length(); + for(int i=0;i<10;i++){ + int startIndex = rand.nextInt(txt.length()-length); + pat[i] = txt.substring(startIndex,startIndex+length); + minIndex = min(minIndex,startIndex); + } + RabinKarp rc = new RabinKarp(pat); + assertEquals(minIndex,rc.search(txt)); + } + + private int nChar = 26; + private int patSize = 3; + private String[] patterns = new String[(int)Math.pow(nChar,patSize)]; + private int nPats = 0; + private void genAllWords(String prefix, int k) { + if (k == 0) { + this.patterns[nPats] = prefix; + this.nPats++; + return; + } + + for (int i = 0; i < nChar; ++i) { + String newPrefix = prefix + (char)('a' + i); + genAllWords(newPrefix, k - 1); + } + } + + @Test(timeout=50) + @Grade(value=50) + public void complexityTest(){ + long t0 = System.currentTimeMillis(); + genAllWords("",patSize); + RabinKarp rc = new RabinKarp(this.patterns); + + String txt = ""+ + "Ra th er t ha n pu rs ui ng m or e so ph is ti ca te d sk ip pi ng , th e Ra bi n– Ka rp a l"+ + "g or it hm s ee ks t o sp ee d up t he t es ti ng o f eq ua li ty o f th e pa tt er n to"+ + " t he s ub st ri ng s in t he t ex t by u si ng a h as h fu nc ti on . A ha sh f un ct "+ + "io n is a f un ct io n wh ic h co nv er ts e ve ry s tr in g in to a n um er ic v al ue ,"+ + " ca ll ed i ts h as h va lu e; f or e xa mp le , we m ig ht h av e ha sh (h el lo )= 5. T"; + + assertEquals(txt.length(),rc.search(txt)); + + long t1 = System.currentTimeMillis(); + System.out.println("Spent time = "+(t1-t0)); + + + } + + +} diff --git a/globalwarming_unionfind/GlobalWarmingTest.java b/Part5GlobalWarming/GlobalWarmingTest.java similarity index 100% rename from globalwarming_unionfind/GlobalWarmingTest.java rename to Part5GlobalWarming/GlobalWarmingTest.java diff --git a/Part5GlobalWarming/feedback_settings.yaml b/Part5GlobalWarming/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part5GlobalWarming/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part5GlobalWarming/public/GlobalWarming.java b/Part5GlobalWarming/public/GlobalWarming.java new file mode 100644 index 00000000..0b5959ca --- /dev/null +++ b/Part5GlobalWarming/public/GlobalWarming.java @@ -0,0 +1,66 @@ +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + /** + * An island is a connected components of safe points wrt to waterLevel + * @return the number of islands + */ + public abstract int nbIslands(); + + /** + * + * @param p1 a point with valid coordinates on altitude matrix + * @param p2 a point with valid coordinates on altitude matrix + * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel + * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions + */ + public abstract boolean onSameIsland(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + +} diff --git a/Part5GlobalWarming/public/GlobalWarmingImpl.java b/Part5GlobalWarming/public/GlobalWarmingImpl.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part5GlobalWarming/public/GlobalWarmingImpl.java @@ -0,0 +1 @@ +//TODO diff --git a/Part5GlobalWarming/public/LSINF1121_PART5_GlobalWarming.zip b/Part5GlobalWarming/public/LSINF1121_PART5_GlobalWarming.zip new file mode 100644 index 00000000..f86b9ee6 Binary files /dev/null and b/Part5GlobalWarming/public/LSINF1121_PART5_GlobalWarming.zip differ diff --git a/globalwarming_graph/public/matrix.png b/Part5GlobalWarming/public/matrix.png similarity index 100% rename from globalwarming_graph/public/matrix.png rename to Part5GlobalWarming/public/matrix.png diff --git a/Part5GlobalWarming/run b/Part5GlobalWarming/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part5GlobalWarming/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part5GlobalWarming/src/InginiousTests.java b/Part5GlobalWarming/src/InginiousTests.java new file mode 100644 index 00000000..4cd36d88 --- /dev/null +++ b/Part5GlobalWarming/src/InginiousTests.java @@ -0,0 +1,282 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import junit.framework.AssertionFailedError; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Random; +import java.util.concurrent.*; + +import static org.junit.Assert.*; +import templates.*; +public class InginiousTests { + + final int [] seeds = new int[]{10,87,83}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix10() { + int [][] tab = new int[][] { + {0,9,0,2,4,2,7,5,3,0,}, + {1,0,9,7,3,4,3,2,1,5,}, + {0,1,9,9,4,5,8,7,8,0,}, + {8,1,9,0,5,1,8,5,7,9,}, + {1,2,8,5,9,2,7,6,9,4,}, + {2,9,0,9,2,0,5,1,0,7,}, + {6,4,3,2,5,2,6,4,0,0,}, + {2,7,6,4,6,2,5,7,4,5,}, + {3,4,4,9,8,7,0,9,8,4,}, + {3,3,3,1,7,7,6,7,1,7,} + }; + return tab; + } + + + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value=10) + public void testOnSameIslandExam() { + GlobalWarming gw = new GlobalWarmingImpl(getExamMatrix(),3); + boolean ok1 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)) == false; + boolean ok2 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(1,4)) == true; + boolean ok3 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(2,3)) == true; + boolean ok4 = gw.onSameIsland(new GlobalWarming.Point(2,3),new GlobalWarming.Point(3,4)) == false; + assertTrue(ok1 && ok2 && ok3 && ok4); + } + + @Test + @Grade(value=10) + public void testNbIslandsExam() { + GlobalWarming g = new GlobalWarmingImpl(getExamMatrix(),3); + + boolean ok = g.nbIslands()==4 || g.nbIslands()==20; + + assertTrue("islands returned (should be 4):"+g.nbIslands(),ok); + } + + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + assertTrue("error in nbIslands"+ warming.nbIslands(),warming.nbIslands()==6 ||warming.nbIslands()==78); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0,0),point(0,0))); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue("error in onSameIsland",warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessOnSameIsland() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + + for (int k = 0; k < 100; k++) { + int [][] matrix = getRandomMatrix(100,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 100; i++) { + for (int j = 0; j < 100-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + assertTrue(g1.onSameIsland(point(i,j),point(i,j+2))); + + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + assertFalse(warming.onSameIsland(point(0,0),point(0,0))); + assertFalse(warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue(warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessNbIslands() { + + int level = 200000; + + + int[][] matrix = getExamMatrix10(); + + + GlobalWarming warming = new GlobalWarmingImpl(matrix, 15); + assertTrue(warming.nbIslands()==0 || warming.nbIslands()==100); + + warming = new GlobalWarmingImpl(matrix, -15); + assertTrue(warming.nbIslands()==1); + + matrix[5][0] = 30; + matrix[0][1] = 30; + matrix[0][8] = 30; + matrix[6][0] = 30; + matrix[9][5] = 30; + matrix[9][4] = 30; + + warming = new GlobalWarmingImpl(matrix, 25); + assertTrue(warming.nbIslands()==4 ||warming.nbIslands()==98); + + + + for (int iter = 0; iter < 100; iter++) { + + + matrix = new int[100][100]; + + boolean [] generated = new boolean[10]; + int nIslandExpected = 0; + int k = 0; + int above = 0; + int count = 0; + for (int i = 0; i < rand.nextInt(10); i++) { + count = 0; + k = rand.nextInt(8); + matrix[k*10][k*10] = 1; + matrix[k*10+1][k*10] = 1; + matrix[k*10][k*10+1] = 1; + matrix[k*10+1][k*10+1] = 1; + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10+1] = 1; + count++; + } + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10] = 1; + count++; + } + if (!generated[k]) { + generated[k] = true; + nIslandExpected += 1; + above+= 4+count; + } + } + + warming = new GlobalWarmingImpl(matrix, 0); + assertTrue(warming.nbIslands()==nIslandExpected || warming.nbIslands()==nIslandExpected+10000-above); + + } + + matrix = getSimpleMatrix(); + warming = new GlobalWarmingImpl(matrix,0); + assertTrue(warming.nbIslands()==6 ||warming.nbIslands()==78); + } + + + @Test(timeout=500) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(400,2000000); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + } + + + final int [][] matrix = getRandomMatrix(500,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + @Test(timeout = 5) + @Grade(value=15) + public void timeComplexityNbIslands() { + g.nbIslands(); + } + + + + @Test(timeout = 500) + @Grade(value=15) + public void timeComplexityOnSameIsland() { + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.onSameIsland(point(i,j),point(n-1,n-1)); + } + } + } + +} diff --git a/Part5GlobalWarming/src/StudentTestRunner.java b/Part5GlobalWarming/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part5GlobalWarming/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part5GlobalWarming/task.yaml b/Part5GlobalWarming/task.yaml new file mode 100644 index 00000000..f73080eb --- /dev/null +++ b/Part5GlobalWarming/task.yaml @@ -0,0 +1,204 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: '' +context: |+ + Context + ================================================== + + Supposons la matrice 5x5 suivante: + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + + représentée dans le tableau ci-dessous : + + .. image:: Part5GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + Chaque entrée de la matrice représente une altitude. + L'objectif est d'implémenter une classe `GlobalWarmingImpl` qui implémente toutes les méthodes décrites dans `GlobalWarming` données ci-dessous. + + Un niveau d'eau global spécifié dans le constructeur modélise le fait que toutes les positions de la matrice avec une valeur <= le niveau d'eau sont inondées (sous l'eau) et donc dangereuses. + Dans l'exemple ci-dessus, le niveau d'eau est de 3, tous les points sûrs sont en vert. + + Les méthodes que vous devez implémenter sont les suivantes + + * le nombre d'îles + * un test pour vérifier si deux positions sont sur la même île + + nous supposons que les points sont **uniquement connectés verticalement ou horizontalement**. + + `Le projet IntelliJ est disponible ici `_. + + + .. code-block:: java + + + import java.util.List; + + abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * An island is a connected components of safe points wrt to waterLevel + * @return the number of islands + */ + public abstract int nbIslands(); + + /** + * + * @param p1 a point with valid coordinates on altitude matrix + * @param p2 a point with valid coordinates on altitude matrix + * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel + * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions + */ + public abstract boolean onSameIsland(Point p1, Point p2); + + + } + + + Preliminary exercises + ================================================== + + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + GlobalWarming gw = new MyGlobalWarming(tab,3); + + .. image:: Part5GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + hard_time: '120' + memory: '750' + output: '100' +name: PART 5 - Global Warming (implem) +network_grading: false +order: 24 +problems: + nbIslands: + name: nbIslands + type: match + answer: '4' + header: |- + Quel serait le résultat de + + .. code-block:: java + + gw.nbIslands() + + + attendu : un nombre + onSameIsland: + type: match + answer: 'false' + name: onSameIsland + header: |- + Quel serait le résultat de + + .. code-block:: java + + gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)); + + attendu: true/false + implementation: + language: java + type: code + header: |+ + Copier-coller et compléter le code ci-dessous. + Faites attention à la complexité temporelle prévue de chaque méthode. + Pour répondre à cette complexité temporelle, il faut déjà faire quelques pré-calculs dans le constructeur. N'hésitez pas à créer des classes internes dans GlobalWarmingImpl pour faciliter votre implémentation. + N'hésitez pas à utiliser n'importe quelle méthode ou structure de données disponible dans le langage Java et l'API. + + + .. code-block:: java + + import java.util.*; + + public class GlobalWarmingImpl extends GlobalWarming { + + public GlobalWarmingImpl(int[][] altitude, int waterLevel) { + super(altitude,waterLevel); + // expected pre-processing time in the constructror : O(n^2 log(n^2)) + // TODO + } + + public int nbIslands() { + // TODO + // expected time complexity O(1) + return 0; + } + + + public boolean onSameIsland(Point p1, Point p2) { + // TODO + // expected time complexity O(1) + return true; + } + + } + + + + + name: Remplissez la classe de manière à ce qu'elle corresponde à sa spécification. + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part5GlobalWarming/templates/GlobalWarming.java b/Part5GlobalWarming/templates/GlobalWarming.java new file mode 100644 index 00000000..84436e67 --- /dev/null +++ b/Part5GlobalWarming/templates/GlobalWarming.java @@ -0,0 +1,68 @@ +package templates; + +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + /** + * An island is a connected components of safe points wrt to waterLevel + * @return the number of islands + */ + public abstract int nbIslands(); + + /** + * + * @param p1 a point with valid coordinates on altitude matrix + * @param p2 a point with valid coordinates on altitude matrix + * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel + * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions + */ + public abstract boolean onSameIsland(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + +} diff --git a/Part5GlobalWarming/templates/GlobalWarmingImpl.java b/Part5GlobalWarming/templates/GlobalWarmingImpl.java new file mode 100644 index 00000000..f02baf3f --- /dev/null +++ b/Part5GlobalWarming/templates/GlobalWarmingImpl.java @@ -0,0 +1,3 @@ +package templates; + +@@implementation@@ diff --git a/Part5GlobalWarming/unit_test/GlobalWarmingTests.java b/Part5GlobalWarming/unit_test/GlobalWarmingTests.java new file mode 100644 index 00000000..522e9241 --- /dev/null +++ b/Part5GlobalWarming/unit_test/GlobalWarmingTests.java @@ -0,0 +1,279 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import junit.framework.AssertionFailedError; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Random; +import java.util.concurrent.*; + +import static org.junit.Assert.*; +public class GlobalWarmingTests { + + final int [] seeds = new int[]{10,87,83}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix10() { + int [][] tab = new int[][] { + {0,9,0,2,4,2,7,5,3,0,}, + {1,0,9,7,3,4,3,2,1,5,}, + {0,1,9,9,4,5,8,7,8,0,}, + {8,1,9,0,5,1,8,5,7,9,}, + {1,2,8,5,9,2,7,6,9,4,}, + {2,9,0,9,2,0,5,1,0,7,}, + {6,4,3,2,5,2,6,4,0,0,}, + {2,7,6,4,6,2,5,7,4,5,}, + {3,4,4,9,8,7,0,9,8,4,}, + {3,3,3,1,7,7,6,7,1,7,} + }; + return tab; + } + + + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value=10) + public void testOnSameIslandExam() { + GlobalWarming gw = new GlobalWarmingImpl(getExamMatrix(),3); + boolean ok1 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)) == false; + boolean ok2 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(1,4)) == true; + boolean ok3 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(2,3)) == true; + boolean ok4 = gw.onSameIsland(new GlobalWarming.Point(2,3),new GlobalWarming.Point(3,4)) == false; + assertTrue(ok1 && ok2 && ok3 && ok4); + } + + @Test + @Grade(value=10) + public void testNbIslandsExam() { + GlobalWarming g = new GlobalWarmingImpl(getExamMatrix(),3); + + boolean ok = g.nbIslands()==4 || g.nbIslands()==20; + + assertTrue("islands returned (should be 4):"+g.nbIslands(),ok); + } + + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + assertTrue("error in nbIslands"+ warming.nbIslands(),warming.nbIslands()==6 ||warming.nbIslands()==78); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0,0),point(0,0))); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue("error in onSameIsland",warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessOnSameIsland() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + + for (int k = 0; k < 100; k++) { + int [][] matrix = getRandomMatrix(100,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 100; i++) { + for (int j = 0; j < 100-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + assertTrue(g1.onSameIsland(point(i,j),point(i,j+2))); + + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + assertFalse(warming.onSameIsland(point(0,0),point(0,0))); + assertFalse(warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue(warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessNbIslands() { + + int level = 200000; + + + int[][] matrix = getExamMatrix10(); + + + GlobalWarming warming = new GlobalWarmingImpl(matrix, 15); + assertTrue(warming.nbIslands()==0 || warming.nbIslands()==100); + + warming = new GlobalWarmingImpl(matrix, -15); + assertTrue(warming.nbIslands()==1); + + matrix[5][0] = 30; + matrix[0][1] = 30; + matrix[0][8] = 30; + matrix[6][0] = 30; + matrix[9][5] = 30; + matrix[9][4] = 30; + + warming = new GlobalWarmingImpl(matrix, 25); + assertTrue(warming.nbIslands()==4 ||warming.nbIslands()==98); + + + + for (int iter = 0; iter < 100; iter++) { + + + matrix = new int[100][100]; + + boolean [] generated = new boolean[10]; + int nIslandExpected = 0; + int k = 0; + int above = 0; + int count = 0; + for (int i = 0; i < rand.nextInt(10); i++) { + count = 0; + k = rand.nextInt(8); + matrix[k*10][k*10] = 1; + matrix[k*10+1][k*10] = 1; + matrix[k*10][k*10+1] = 1; + matrix[k*10+1][k*10+1] = 1; + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10+1] = 1; + count++; + } + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10] = 1; + count++; + } + if (!generated[k]) { + generated[k] = true; + nIslandExpected += 1; + above+= 4+count; + } + } + + warming = new GlobalWarmingImpl(matrix, 0); + assertTrue(warming.nbIslands()==nIslandExpected || warming.nbIslands()==nIslandExpected+10000-above); + + } + + matrix = getSimpleMatrix(); + warming = new GlobalWarmingImpl(matrix,0); + assertTrue(warming.nbIslands()==6 ||warming.nbIslands()==78); + } + + + @Test(timeout=500) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(400,2000000); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + } + + + final int [][] matrix = getRandomMatrix(500,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + @Test(timeout = 5) + @Grade(value=15) + public void timeComplexityNbIslands() { + g.nbIslands(); + } + + + + @Test(timeout = 500) + @Grade(value=15) + public void timeComplexityOnSameIsland() { + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.onSameIsland(point(i,j),point(n-1,n-1)); + } + } + } + +} diff --git a/Part5Heap/task.yaml b/Part5Heap/task.yaml new file mode 100644 index 00000000..77e44893 --- /dev/null +++ b/Part5Heap/task.yaml @@ -0,0 +1,79 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: Frédéric Kaczynski +context: |- + Considérons la structure de données ``Heap`` dans laquelle on ajoute progressivement des nombres. + + Les questions suivantes vous demanderont d'écrire une représentation du ``Heap`` au fur et à mesure que nous y ajoutons des objets. Vous devez écrire le ``Heap`` comme s'il était stocké dans un tableau. Par exemple, si votre réponse est : + + :: + + 9 + / \ + 5 8 + / \ + 4 3 + + Vous devriez écrire: + + :: + + 9 5 8 4 3 +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + memory: '100' + output: '2' + time: '30' +name: PART 5 - Heap +network_grading: false +order: 21 +problems: + heap1: + header: 'En commençant par un ``Heap`` vide, on y ajoute "5". Le tableau contenant + le ``Heap`` est :' + name: '' + type: match + answer: '5' + heap2: + header: 'Nous ajoutons ``1`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + name: '' + answer: 5 1 + type: match + heap3: + type: match + header: 'Nous ajoutons ``9`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + answer: 9 1 5 + name: '' + heap4: + name: '' + header: 'Nous ajoutons ``3`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + type: match + answer: 9 3 5 1 + heap5: + answer: 9 8 5 1 3 + header: 'Nous ajoutons ``8`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + type: match + name: '' + heap6: + type: match + answer: 9 8 6 1 3 5 + header: 'Nous ajoutons ``6`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + name: '' + heap7: + type: match + name: '' + header: 'Nous ajoutons ``4`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + answer: 9 8 6 1 3 5 4 +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/Part5Huffman/feedback_settings.yaml b/Part5Huffman/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part5Huffman/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part5Huffman/public/Huffman.java b/Part5Huffman/public/Huffman.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part5Huffman/public/Huffman.java @@ -0,0 +1 @@ +//TODO diff --git a/Part5Huffman/public/LSINF1121_PART5_Huffman.zip b/Part5Huffman/public/LSINF1121_PART5_Huffman.zip new file mode 100644 index 00000000..4575b46a Binary files /dev/null and b/Part5Huffman/public/LSINF1121_PART5_Huffman.zip differ diff --git a/Part5Huffman/public/huffmanin.png b/Part5Huffman/public/huffmanin.png new file mode 100644 index 00000000..51b82da4 Binary files /dev/null and b/Part5Huffman/public/huffmanin.png differ diff --git a/bilan_m5_huffman/public/huffmanout.png b/Part5Huffman/public/huffmanout.png similarity index 100% rename from bilan_m5_huffman/public/huffmanout.png rename to Part5Huffman/public/huffmanout.png diff --git a/Part5Huffman/run b/Part5Huffman/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part5Huffman/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part5Huffman/src/InginiousTests.java b/Part5Huffman/src/InginiousTests.java new file mode 100644 index 00000000..00e29ff0 --- /dev/null +++ b/Part5Huffman/src/InginiousTests.java @@ -0,0 +1,139 @@ +package src; +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import java.util.*; + +import static org.junit.Assert.assertTrue; +import templates.*; + + +public class InginiousTests { + + private void collectLeafNodes(List nodes, Huffman.Node n) { + + Stack open = new Stack(); + open.add(n); + + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (curr.isLeaf()) nodes.add(curr); + else { + open.add(curr.right); + open.add(curr.left); + } + } + } + + private int[] getRandomInstance(int size, int seed) { + int[] input = new int[size]; + for (int i = 0; i < size; i++) { + input[i] = i + 1; + } + Random rnd = new Random(seed); + for (int i = 0; i < size; i++) { + int idx1 = rnd.nextInt(size); + int idx2 = rnd.nextInt(size); + int tmp = input[idx1]; + input[idx1] = input[idx2]; + input[idx2] = tmp; + } + return input; + } + + @Test + @Grade(value = 10) + public void noCharactersDeleted() { + int[] input = getRandomInstance(256, 60); + + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = new LinkedList<>(); + collectLeafNodes(leafNodes, root); + assertTrue("Le nombre de feuille devrait être égal au nombre de caractères: -10%", input.length == leafNodes.size()); + + } + + @Test + @Grade(value = 10) + public void leafNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 18); + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = buildLinkedListOfNodes(root); + for (Huffman.Node n : leafNodes) { + if (n.freq != input[n.ch]) + assertTrue("Les feuilles n'ont pas toujours les fréquences adéquates: -10%", false); + } + + } + + public LinkedList buildLinkedListOfNodes(Huffman.Node root) { + LinkedList leafNodes = new LinkedList<>(); + if (root.isLeaf()) { + leafNodes.add(root); + } else { + leafNodes.addAll(buildLinkedListOfNodes(root.left)); + leafNodes.addAll(buildLinkedListOfNodes(root.right)); + } + + return leafNodes; + } + + @Test + @Grade(value = 10) + public void internalNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 23); + Huffman.Node root = Huffman.buildTrie(input.length, input); + assertTrue("Les noeuds internes n'ont pas toujours des fréquences valides: -10%", checkSumChildrenFreqs(root, input)); + } + + private boolean checkSumChildrenFreqs(Huffman.Node n, int[] input) { + Stack open = new Stack(); + open.add(n); + boolean hasleaf = input.length > 0; + boolean flag = false; + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (!curr.isLeaf()) { + flag = true; + if (curr.freq == 0 || curr.freq != curr.left.freq + curr.right.freq) return false; + open.add(curr.right); + open.add(curr.left); + } + } + return flag == hasleaf; + } + + @Test + @Grade(value = 28) + public void minimalWeightedExternalPathLength() { + int[] input = getRandomInstance(257, 42); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + assertTrue("La taille pondérée du chemin interne n'est pas minimale, la topologie de votre arbre est incorrecte: -30%", weightedExternalPathLength(root1, 0) == 257226); + } + + @Test(timeout=300) + @Grade(value = 42) + public void complexityOk() { + int[] input = getRandomInstance(65536, 32); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + } + + + private int weightedExternalPathLength(Huffman.Node n, int depth) { + Stack> open = new Stack>(); + open.add(new AbstractMap.SimpleEntry(n, 0)); + int res = 0; + while (!open.isEmpty()) { + Map.Entry nodeDepth = open.pop(); + + Huffman.Node curr = nodeDepth.getKey(); + if (curr.isLeaf()) res += curr.freq * nodeDepth.getValue(); + else { + open.add(new AbstractMap.SimpleEntry(curr.right, nodeDepth.getValue() + 1)); + open.add(new AbstractMap.SimpleEntry(curr.left, nodeDepth.getValue() + 1)); + } + } + return res; + } +} diff --git a/Part5Huffman/src/StudentTestRunner.java b/Part5Huffman/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part5Huffman/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part5Huffman/task.yaml b/Part5Huffman/task.yaml new file mode 100644 index 00000000..02d7e7da --- /dev/null +++ b/Part5Huffman/task.yaml @@ -0,0 +1,100 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: '' +context: |- + Vous devez calculer un arbre de Huffman au départ de la fréquence donnée pour chacune des R lettres (characters). + + Pour rappel, dans un arbre de Huffman nous avons que *la somme de la fréquence associée à chaque feuille multipliée par la profondeur de celle-ci est minimale*. + + Par exemple, étant donné les fréquences suivantes: + + + .. image:: Part5Huffman/huffmanin.png + :width: 500px + :align: center + :alt: Input frequencies + + + un arbre de Huffman pourrait être: + + + .. image:: Part5Huffman/huffmanout.png + :width: 500px + :align: center + :alt: Huffman tree + + + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + memory: '100' + output: '2' +name: PART 5 - Huffman (implem) +network_grading: false +order: 23 +problems: + TODO1: + default: '' + language: java + type: code + header: |- + Le but de cette question de faire fonctionner correctement la méthode ``buildTrie``. + Vous pouvez modifier la classe ci-dessous (ajouter des méthodes, définir des inner-classes, etc) comme vous le souhaitez, mais ne changez pas la signature des méthodes existantes et le constructeur. + Mettez votre implémentation complète de ``Huffman.java`` ci-dessous. + + **Conseil**: Si vous avez besoin d'une structure de donnée auxiliaire, celle-ci est certainement disponible dans ``java.util``. Il n'est dès lors pas nécessaire de la réimplémenter. + + + .. code-block:: java + + public class Huffman { + private Huffman() { } + + // Huffman trie node + public static class Node implements Comparable { + public final int ch; + public final int freq; + public final Node left, right; + + Node(int ch, int freq, Node left, Node right) { + this.ch = ch; + this.freq = freq; + this.left = left; + this.right = right; + } + + // is the node a leaf node? + public boolean isLeaf() { + assert ((left == null) && (right == null)) || ((left != null) && (right != null)); + return (left == null) && (right == null); + } + + @Override + public int compareTo(Node that) { + return this.freq - that.freq; + } + } + + /** + * build the Huffman trie given frequencies + * corresponding to each character codes from 0 to R-1. + * freq[i] is the frequency for the character with code i + * freq.length = R. + * R is either 256 or 65536, depending on whether the user choose to use unicode or ASCII. + */ + public static Node buildTrie(int R, int[] freq) { + // TODO + return new Node(0,0,null,null); + } + } + name: Implémentation de la fonction buildTree +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part5Huffman/templates/Huffman.java b/Part5Huffman/templates/Huffman.java new file mode 100644 index 00000000..55f0a0f1 --- /dev/null +++ b/Part5Huffman/templates/Huffman.java @@ -0,0 +1,3 @@ +package templates; + +@@TODO1@@ diff --git a/Part5Huffman/unit_test/HuffmanTest.java b/Part5Huffman/unit_test/HuffmanTest.java new file mode 100644 index 00000000..8a194dd3 --- /dev/null +++ b/Part5Huffman/unit_test/HuffmanTest.java @@ -0,0 +1,137 @@ +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import java.util.*; + +import static org.junit.Assert.assertTrue; + + +public class HuffmanTest { + + private void collectLeafNodes(List nodes, Huffman.Node n) { + + Stack open = new Stack(); + open.add(n); + + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (curr.isLeaf()) nodes.add(curr); + else { + open.add(curr.right); + open.add(curr.left); + } + } + } + + private int[] getRandomInstance(int size, int seed) { + int[] input = new int[size]; + for (int i = 0; i < size; i++) { + input[i] = i + 1; + } + Random rnd = new Random(seed); + for (int i = 0; i < size; i++) { + int idx1 = rnd.nextInt(size); + int idx2 = rnd.nextInt(size); + int tmp = input[idx1]; + input[idx1] = input[idx2]; + input[idx2] = tmp; + } + return input; + } + + @Test + @Grade(value = 10) + public void noCharactersDeleted() { + int[] input = getRandomInstance(256, 60); + + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = new LinkedList<>(); + collectLeafNodes(leafNodes, root); + assertTrue("Le nombre de feuille devrait être égal au nombre de caractères: -10%", input.length == leafNodes.size()); + + } + + @Test + @Grade(value = 10) + public void leafNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 18); + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = buildLinkedListOfNodes(root); + for (Huffman.Node n : leafNodes) { + if (n.freq != input[n.ch]) + assertTrue("Les feuilles n'ont pas toujours les fréquences adéquates: -10%", false); + } + + } + + public LinkedList buildLinkedListOfNodes(Huffman.Node root) { + LinkedList leafNodes = new LinkedList<>(); + if (root.isLeaf()) { + leafNodes.add(root); + } else { + leafNodes.addAll(buildLinkedListOfNodes(root.left)); + leafNodes.addAll(buildLinkedListOfNodes(root.right)); + } + + return leafNodes; + } + + @Test + @Grade(value = 10) + public void internalNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 23); + Huffman.Node root = Huffman.buildTrie(input.length, input); + assertTrue("Les noeuds internes n'ont pas toujours des fréquences valides: -10%", checkSumChildrenFreqs(root, input)); + } + + private boolean checkSumChildrenFreqs(Huffman.Node n, int[] input) { + Stack open = new Stack(); + open.add(n); + boolean hasleaf = input.length > 0; + boolean flag = false; + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (!curr.isLeaf()) { + flag = true; + if (curr.freq == 0 || curr.freq != curr.left.freq + curr.right.freq) return false; + open.add(curr.right); + open.add(curr.left); + } + } + return flag == hasleaf; + } + + @Test + @Grade(value = 28) + public void minimalWeightedExternalPathLength() { + int[] input = getRandomInstance(257, 42); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + assertTrue("La taille pondérée du chemin interne n'est pas minimale, la topologie de votre arbre est incorrecte: -30%", weightedExternalPathLength(root1, 0) == 257226); + } + + @Test(timeout=300) + @Grade(value = 42) + public void complexityOk() { + int[] input = getRandomInstance(65536, 32); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + } + + + private int weightedExternalPathLength(Huffman.Node n, int depth) { + Stack> open = new Stack>(); + open.add(new AbstractMap.SimpleEntry(n, 0)); + int res = 0; + while (!open.isEmpty()) { + Map.Entry nodeDepth = open.pop(); + + Huffman.Node curr = nodeDepth.getKey(); + if (curr.isLeaf()) res += curr.freq * nodeDepth.getValue(); + else { + open.add(new AbstractMap.SimpleEntry(curr.right, nodeDepth.getValue() + 1)); + open.add(new AbstractMap.SimpleEntry(curr.left, nodeDepth.getValue() + 1)); + } + } + return res; + } +} diff --git a/Part5UnionFind/task.yaml b/Part5UnionFind/task.yaml new file mode 100644 index 00000000..89ea9437 --- /dev/null +++ b/Part5UnionFind/task.yaml @@ -0,0 +1,74 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: Frédéric Kaczynski +context: |- + Considérons un graphe composé de 10 nœuds disjoints (numérotés de 0 à 9). Nous utilisons une structure de données union-find pour représenter ce graphe. Dans un premier temps, chaque nœud est contenu dans une partition qui porte son nom. Ainsi, la représentation du graphique dans le tableau ``id[]`` est : + + :: + + 0 1 2 3 4 5 6 7 8 9 + + Les questions suivantes vous demanderont de donner la représentation du graphe après avoir utilisé l'algorithme **quick-find** pour ajouter une arête entre 2 noeuds. Vous devez donner cette représentation de la même manière qu'elle a été donnée ci-dessus. + + **Note:** Lorsque nous joignons ``p-q`` avec l'algorithme quick-find, la convention est de changer ``id[p]`` (et éventuellement d'autres entrées) mais pas ``id[q]``. +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 5 - Union find +network_grading: false +order: 22 +problems: + unionfind1: + type: match + answer: 0 9 2 3 4 5 6 7 8 9 + name: '' + header: Après avoir ajouté l'arête ``1-9``, ``id[] =`` + unionfind2: + name: '' + header: Après avoir ajouté l'arête ``3-8``, ``id[] =`` + answer: 0 9 2 8 4 5 6 7 8 9 + type: match + unionfind3: + name: '' + type: match + answer: 0 0 2 8 4 5 6 7 8 0 + header: Après avoir ajouté l'arête ``1-0``, ``id[] =`` + unionfind4: + name: '' + header: Après avoir ajouté l'arête ``6-7``, ``id[] =`` + type: match + answer: 0 0 2 8 4 5 7 7 8 0 + unionfind5: + type: match + header: Après avoir ajouté l'arête ``0-6``, ``id[] =`` + answer: 7 7 2 8 4 5 7 7 8 7 + name: '' + unionfind6: + answer: 7 7 2 8 8 5 7 7 8 7 + type: match + name: '' + header: Après avoir ajouté l'arête ``4-8``, ``id[] =`` + unionfind7: + type: match + header: Après avoir ajouté l'arête ``8-5``, ``id[] =`` + name: '' + answer: 7 7 2 5 5 5 7 7 5 7 + unionfind8: + header: Après avoir ajouté l'arête ``2-7``, ``id[] =`` + name: '' + answer: 7 7 7 5 5 5 7 7 5 7 + type: match + unionfind9: + answer: 5 5 5 5 5 5 5 5 5 5 + type: match + name: '' + header: Après avoir ajouté l'arête ``7-5``, ``id[] =`` +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/preexam_bfs/examples/CorrectBFS.java b/Part6BreadthFirstPaths/examples/CorrectBFS.java similarity index 100% rename from preexam_bfs/examples/CorrectBFS.java rename to Part6BreadthFirstPaths/examples/CorrectBFS.java diff --git a/Part6BreadthFirstPaths/feedback_settings.yaml b/Part6BreadthFirstPaths/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part6BreadthFirstPaths/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part6BreadthFirstPaths/public/BreadthFirstShortestPaths.java b/Part6BreadthFirstPaths/public/BreadthFirstShortestPaths.java new file mode 100644 index 00000000..b2c06c59 --- /dev/null +++ b/Part6BreadthFirstPaths/public/BreadthFirstShortestPaths.java @@ -0,0 +1,46 @@ +//TODO + +public class BreadthFirstShortestPaths { + public static final int INFINITY = Integer.MAX_VALUE; + private boolean[] marked; // marked[v] = is there an s-v path + private int[] distTo; // distTo[v] = number of edges shortest s-v path + + /** + * Computes the shortest path between any + * one of the sources and very other vertex + * @param G the graph + * @param sources the source vertices + */ + public BreadthFirstShortestPaths(Graph G, Iterable sources) { + marked = new boolean[G.V()]; + distTo = new int[G.V()]; + for (int v = 0;v < G.V();v++) { + distTo[v] = INFINITY; + } + bfs(G, sources); + } + + // Breadth-first search from multiple sources + private void bfs(Graph G, Iterable sources) { + //TODO + } + + /** + * Is there a path between (at least one of) the sources and vertex v? + * @param v the vertex + * @return true if there is a path, and false otherwise + */ + public boolean hasPathTo(int v) { + //TODO + } + + /** + * Returns the number of edges in a shortest path + * between one of the sources and vertex v? + * @param v the vertex + * @return the number of edges in a shortest path + */ + public int distTo(int v) { + //TODO + } +} diff --git a/preexam_bfs/student/Graph.java b/Part6BreadthFirstPaths/public/Graph.java similarity index 100% rename from preexam_bfs/student/Graph.java rename to Part6BreadthFirstPaths/public/Graph.java diff --git a/Part6BreadthFirstPaths/public/LSINF1121_PART6_BreadthFirstShortestPaths.zip b/Part6BreadthFirstPaths/public/LSINF1121_PART6_BreadthFirstShortestPaths.zip new file mode 100644 index 00000000..6b129e97 Binary files /dev/null and b/Part6BreadthFirstPaths/public/LSINF1121_PART6_BreadthFirstShortestPaths.zip differ diff --git a/Part6BreadthFirstPaths/run b/Part6BreadthFirstPaths/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part6BreadthFirstPaths/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part6BreadthFirstPaths/src/InginiousTests.java b/Part6BreadthFirstPaths/src/InginiousTests.java new file mode 100644 index 00000000..0091347a --- /dev/null +++ b/Part6BreadthFirstPaths/src/InginiousTests.java @@ -0,0 +1,139 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import templates.*; + +public class InginiousTests { + @Test + @Grade(value=20) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(2)); + + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5, 5-0] with [0] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5, 0); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 3, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + assertEquals(message, 1, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSources() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5] with [1, 5] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1, 5)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 0, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSourcesDisconnected() + { + String message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 2] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 2)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 0, bfs.distTo(2)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(5)); + + message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 3] as sources"; + graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 3)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 0, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 2, bfs.distTo(5)); + } +} diff --git a/Part6BreadthFirstPaths/src/StudentTestRunner.java b/Part6BreadthFirstPaths/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part6BreadthFirstPaths/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part6BreadthFirstPaths/task.yaml b/Part6BreadthFirstPaths/task.yaml new file mode 100644 index 00000000..cf5208fb --- /dev/null +++ b/Part6BreadthFirstPaths/task.yaml @@ -0,0 +1,132 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: Frédéric Kaczynski, John Aoga +context: |- + Considérez cette classe, ``BreadthFirstShortestPaths``, qui calcule le chemin le plus court entre plusieurs sources de nœuds et n'importe quel nœud dans un graphe non dirigé en utilisant un parcours BFS. + + .. code-block:: java + + // TODO + + public class BreadthFirstShortestPaths { + + private static final int INFINITY = Integer.MAX_VALUE; + private boolean[] marked; // marked[v] = is there an s-v path + private int[] distTo; // distTo[v] = number of edges shortest s-v path + + /** + * Computes the shortest path between any + * one of the sources and very other vertex + * @param G the graph + * @param sources the source vertices + */ + public BreadthFirstShortestPaths(Graph G, Iterable sources) { + marked = new boolean[G.V()]; + distTo = new int[G.V()]; + for (int v = 0;v < G.V();v++) { + distTo[v] = INFINITY; + } + bfs(G, sources); + } + + // Breadth-first search from multiple sources + private void bfs(Graph G, Iterable sources) { + // TODO + } + + /** + * Is there a path between (at least one of) the sources and vertex v? + * @param v the vertex + * @return true if there is a path, and false otherwise + */ + public boolean hasPathTo(int v) { + // TODO + } + + /** + * Returns the number of edges in a shortest path + * between one of the sources and vertex v? + * @param v the vertex + * @return the number of edges in a shortest path + */ + public int distTo(int v) { + // TODO + } + } + + La classe ``Graph`` est déjà implémentée et la voici : + + .. code-block:: java + + public class Graph { + // @return the number of vertices + public int V() { } + + // @return the number of edges + public int E() { } + + // Add edge v-w to this graph + public void addEdge(int v, int w) { } + + // @return the vertices adjacent to v + public Iterable adj(int v) { } + + // @return a string representation + public String toString() { } + } + + **Note:** Les questions suivantes vous demanderont d'implémenter tous les ``TODO`` de la classe ``BreadthFirstShortestPaths``. Vous n'avez pas besoin de mettre les accolades (``{ }``) entourant le corps de la fonction dans votre réponse. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + memory: '100' + output: '2' +name: PART 6 - Breadth First Paths (implem) +network_grading: false +order: 26 +problems: + import: + default: '' + language: java + header: |- + Vous pouvez l'utiliser pour importer des classes supplémentaires dont votre code peut avoir besoin. + + **Note:** Ceci n'est demandé que pour que votre code puisse être compilé et testé. Pendant l'examen, vous n'aurez pas besoin de fournir cette information et vous pourrez utiliser des pseudo-classes comme ``Queue``. + name: Les importations + type: code + question1: + type: code + name: Implémentation de la méthode bfs + header: |- + .. code-block:: java + + private void bfs(Graph G, Iterable sources) + language: java + default: '' + question2: + default: '' + header: |- + .. code-block:: java + + public boolean hasPathTo(int v) + type: code + name: Implémentation de la méthode hasPathTo + language: java + question3: + language: java + name: Implémentation de la méthode distTo + header: |- + .. code-block:: java + + public int distTo(int v) + default: '' + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/Part6BreadthFirstPaths/templates/BreadthFirstShortestPaths.java b/Part6BreadthFirstPaths/templates/BreadthFirstShortestPaths.java new file mode 100644 index 00000000..1ef4142f --- /dev/null +++ b/Part6BreadthFirstPaths/templates/BreadthFirstShortestPaths.java @@ -0,0 +1,49 @@ +package templates; + +///import tests.Graph; +@@import@@ + +public class BreadthFirstShortestPaths { + public static final int INFINITY = Integer.MAX_VALUE; + private boolean[] marked; // marked[v] = is there an s-v path + private int[] distTo; // distTo[v] = number of edges shortest s-v path + + /** + * Computes the shortest path between any + * one of the sources and very other vertex + * @param G the graph + * @param sources the source vertices + */ + public BreadthFirstShortestPaths(Graph G, Iterable sources) { + marked = new boolean[G.V()]; + distTo = new int[G.V()]; + for (int v = 0;v < G.V();v++) { + distTo[v] = INFINITY; + } + bfs(G, sources); + } + + // Breadth-first search from multiple sources + private void bfs(Graph G, Iterable sources) { + @@question1@@ + } + + /** + * Is there a path between (at least one of) the sources and vertex v? + * @param v the vertex + * @return true if there is a path, and false otherwise + */ + public boolean hasPathTo(int v) { + @@question2@@ + } + + /** + * Returns the number of edges in a shortest path + * between one of the sources and vertex v? + * @param v the vertex + * @return the number of edges in a shortest path + */ + public int distTo(int v) { + @@question3@@ + } +} diff --git a/Part6BreadthFirstPaths/templates/Graph.java b/Part6BreadthFirstPaths/templates/Graph.java new file mode 100644 index 00000000..4ad8cc38 --- /dev/null +++ b/Part6BreadthFirstPaths/templates/Graph.java @@ -0,0 +1,60 @@ +//package tests; +package templates; + +import java.util.ArrayList; +import java.util.List; + +public class Graph { + + private List[] edges; + + public Graph(int E) + { + this.edges = (ArrayList[]) new ArrayList[E]; + for (int i = 0;i < edges.length;i++) + { + edges[i] = new ArrayList<>(); + } + } + + /** + * @return the number of vertices + */ + public int V() { + return edges.length; + } + + /** + * @return the number of edges + */ + public int E() { + int count = 0; + for (List bag : edges) { + count += bag.size(); + } + + return count/2; + } + + /** + * Add edge v-w to this graph + */ + public void addEdge(int v, int w) { + edges[v].add(w); + edges[w].add(v); + } + + /** + * @return the vertices adjacent to v + */ + public Iterable adj(int v) { + return edges[v]; + } + + /** + * @return a string representation + */ + public String toString() { + return "Ne devrait pas être utilisé"; + } +} diff --git a/Part6BreadthFirstPaths/unit_test/Tests.java b/Part6BreadthFirstPaths/unit_test/Tests.java new file mode 100644 index 00000000..838fa9f7 --- /dev/null +++ b/Part6BreadthFirstPaths/unit_test/Tests.java @@ -0,0 +1,136 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; + +public class Tests { + @Test + @Grade(value=20) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(2)); + + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5, 5-0] with [0] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5, 0); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 3, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + assertEquals(message, 1, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSources() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5] with [1, 5] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1, 5)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 0, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSourcesDisconnected() + { + String message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 2] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 2)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 0, bfs.distTo(2)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(5)); + + message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 3] as sources"; + graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 3)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 0, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 2, bfs.distTo(5)); + } +} diff --git a/Part6ConnectedComponents/feedback_settings.yaml b/Part6ConnectedComponents/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part6ConnectedComponents/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part6ConnectedComponents/public/ConnectedComponents.java b/Part6ConnectedComponents/public/ConnectedComponents.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part6ConnectedComponents/public/ConnectedComponents.java @@ -0,0 +1 @@ +//TODO diff --git a/Part6ConnectedComponents/public/Graph.java b/Part6ConnectedComponents/public/Graph.java new file mode 100644 index 00000000..5ba4d0e6 --- /dev/null +++ b/Part6ConnectedComponents/public/Graph.java @@ -0,0 +1,140 @@ +import java.util.LinkedList; +import java.util.NoSuchElementException; + +/** + * The {@code Graph} class represents an undirected graph of vertices + * named 0 through V - 1. + * It supports the following two primary operations: add an edge to the graph, + * iterate over all of the vertices adjacent to a vertex. It also provides + * methods for returning the number of vertices V and the number + * of edges E. Parallel edges and self-loops are permitted. + * By convention, a self-loop v-v appears in the + * adjacency list of v twice and contributes two to the degree + * of v. + *

+ * This implementation uses an adjacency-lists representation. + * All operations take constant time (in the worst case) except + * iterating over the vertices adjacent to a given vertex, which takes + * time proportional to the number of such vertices. + *

+ * For additional documentation, see Section 4.1 + * of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class Graph { + private static final String NEWLINE = System.getProperty("line.separator"); + + private final int V; + private int E; + private LinkedList[] adj; + + /** + * Initializes an empty graph with {@code V} vertices and 0 edges. + * param V the number of vertices + * + * @param V number of vertices + * @throws IllegalArgumentException if {@code V < 0} + */ + public Graph(int V) { + if (V < 0) throw new IllegalArgumentException("Number of vertices must be nonnegative"); + this.V = V; + this.E = 0; + adj = (LinkedList[]) new LinkedList[V]; + for (int v = 0; v < V; v++) { + adj[v] = new LinkedList(); + } + } + + + + + + /** + * Returns the number of vertices in this graph. + * + * @return the number of vertices in this graph + */ + public int V() { + return V; + } + + /** + * Returns the number of edges in this graph. + * + * @return the number of edges in this graph + */ + public int E() { + return E; + } + + // throw an IllegalArgumentException unless {@code 0 <= v < V} + private void validateVertex(int v) { + if (v < 0 || v >= V) + throw new IllegalArgumentException("vertex " + v + " is not between 0 and " + (V-1)); + } + + /** + * Adds the undirected edge v-w to this graph. + * + * @param v one vertex in the edge + * @param w the other vertex in the edge + * @throws IllegalArgumentException unless both {@code 0 <= v < V} and {@code 0 <= w < V} + */ + public void addEdge(int v, int w) { + validateVertex(v); + validateVertex(w); + E++; + adj[v].add(w); + adj[w].add(v); + } + + + /** + * Returns the vertices adjacent to vertex {@code v}. + * + * @param v the vertex + * @return the vertices adjacent to vertex {@code v}, as an iterable + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public Iterable adj(int v) { + validateVertex(v); + return adj[v]; + } + + /** + * Returns the degree of vertex {@code v}. + * + * @param v the vertex + * @return the degree of vertex {@code v} + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public int degree(int v) { + validateVertex(v); + return adj[v].size(); + } + + + /** + * Returns a string representation of this graph. + * + * @return the number of vertices V, followed by the number of edges E, + * followed by the V adjacency lists + */ + public String toString() { + StringBuilder s = new StringBuilder(); + s.append(V + " vertices, " + E + " edges " + NEWLINE); + for (int v = 0; v < V; v++) { + s.append(v + ": "); + for (int w : adj[v]) { + s.append(w + " "); + } + s.append(NEWLINE); + } + return s.toString(); + } + + + +} diff --git a/Part6ConnectedComponents/public/LSINF1121_PART6_ConnectedComponents.zip b/Part6ConnectedComponents/public/LSINF1121_PART6_ConnectedComponents.zip new file mode 100644 index 00000000..6d71aa99 Binary files /dev/null and b/Part6ConnectedComponents/public/LSINF1121_PART6_ConnectedComponents.zip differ diff --git a/Part6ConnectedComponents/public/graph.png b/Part6ConnectedComponents/public/graph.png new file mode 100644 index 00000000..32416e11 Binary files /dev/null and b/Part6ConnectedComponents/public/graph.png differ diff --git a/bilan_m6_cc/public/javadoc.zip b/Part6ConnectedComponents/public/javadoc.zip similarity index 100% rename from bilan_m6_cc/public/javadoc.zip rename to Part6ConnectedComponents/public/javadoc.zip diff --git a/Part6ConnectedComponents/run b/Part6ConnectedComponents/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part6ConnectedComponents/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part6ConnectedComponents/src/InginiousTests.java b/Part6ConnectedComponents/src/InginiousTests.java new file mode 100644 index 00000000..b30b1acc --- /dev/null +++ b/Part6ConnectedComponents/src/InginiousTests.java @@ -0,0 +1,130 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import java.util.Random; +import static org.junit.Assert.assertEquals; +import templates.*; + +public class InginiousTests { + + private static class WeightedQuickUnionUF { + private int[] parent; // parent[i] = parent of i + private int[] size; // size[i] = number of sites in subtree rooted at i + private int count; // number of components + + public WeightedQuickUnionUF(int n) { + count = n; + parent = new int[n]; + size = new int[n]; + for (int i = 0; i < n; i++) { + parent[i] = i; + size[i] = 1; + } + } + + + public int count() { + return count; + } + + public int find(int p) { + validate(p); + while (p != parent[p]) + p = parent[p]; + return p; + } + + // validate that p is a valid index + private void validate(int p) { + int n = parent.length; + if (p < 0 || p >= n) { + throw new IndexOutOfBoundsException("index " + p + " is not between 0 and " + (n - 1)); + } + } + + public boolean connected(int p, int q) { + return find(p) == find(q); + } + + public void union(int p, int q) { + int rootP = find(p); + int rootQ = find(q); + if (rootP == rootQ) return; + + // make smaller root point to larger one + if (size[rootP] < size[rootQ]) { + parent[rootP] = rootQ; + size[rootQ] += size[rootP]; + } else { + parent[rootQ] = rootP; + size[rootP] += size[rootQ]; + } + count--; + } + } + + public void testRandomGraphOk(int n, int e) { + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + Random r = new Random(6); + for (int i = 0; i < e; i++) { + int orig = r.nextInt(n); + int dest = r.nextInt(n); + g.addEdge(orig,dest); + uf.union(orig,dest); + } + int nbCC = ConnectedComponents.numberOfConnectedComponents(g); + assertEquals(uf.count(),nbCC); + } + + @Test + @Grade(value=25) + public void cycleGraphOk() { + int n = 1002; + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + g.addEdge(0,n-1); + uf.union(0,n-1); + + for (int i = 1; i < n; i++) { + g.addEdge(i,(i-1)%n); + uf.union(i,(i-1)%n); + } + + assertEquals(uf.count(), ConnectedComponents.numberOfConnectedComponents(g)); + } + + + @Test(timeout = 3000) + @Grade(value = 25) + public void complexityOk() { + //long t0 = System.currentTimeMillis(); + int n = 7002; + Graph g = new Graph(n); + for (int i = 0; i < n; i++) { + g.addEdge(i,(i+2)%n); + } + ConnectedComponents.numberOfConnectedComponents(g); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + + } + + @Test + @Grade(value = 50) + public void correctness(){ + testRandomGraphOk(600,120); + testRandomGraphOk(220,7); + testRandomGraphOk(105,3); + testRandomGraphOk(0,0); + testRandomGraphOk(10,2*10); + testRandomGraphOk(42,23); + testRandomGraphOk(420,123); + testRandomGraphOk(90,40); + } + +} diff --git a/Part6ConnectedComponents/src/StudentTestRunner.java b/Part6ConnectedComponents/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part6ConnectedComponents/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part6ConnectedComponents/task.yaml b/Part6ConnectedComponents/task.yaml new file mode 100644 index 00000000..fb3c0865 --- /dev/null +++ b/Part6ConnectedComponents/task.yaml @@ -0,0 +1,58 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: psc, John Aoga +context: |- + Il vous ait demandé d'implémenter la classe des composants connexes ``ConnectedComponent`` étant donnée un graphe. + La classe `Graph `_ disponible dans le code est celle de l'API de la classe `Java `_. + + .. code-block:: java + + public class ConnectedComponents { + /** + * @return the number of connected components in g + */ + public static int numberOfConnectedComponents(Graph g) { + // TODO + return 0; + } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + hard_time: '30' + memory: '250' + output: '2' +name: PART 6 - Connected Components (implem) +network_grading: false +order: 28 +problems: + TODO0: + answer: '3' + header: |- + Combien de composante(s) connexe(s) y a-t-il dans le graph suivant? + + .. image:: Part6ConnectedComponents/graph.png + :width: 30% + :align: center + :alt: graph example + name: Exercice préliminaire + type: match + TODO1: + default: '' + language: java + type: code + name: Code + header: |+ + Mettez votre implémentation complète de ``ConnectedComponents.java`` ci-dessous. + **Conseil:* N'hésitez pas à ajouter des méthodes ou même des inner-class (``private static class``) pour vous aider mais ne modifiez pas le nom de la classe ni la signature de la méthode ``numberOfConnectedComponents``. N'oubliez pas d'ajouter les imports au début de votre code si vous utilisez des objets de l'API de `Java `_. + +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part6ConnectedComponents/templates/ConnectedComponents.java b/Part6ConnectedComponents/templates/ConnectedComponents.java new file mode 100644 index 00000000..55f0a0f1 --- /dev/null +++ b/Part6ConnectedComponents/templates/ConnectedComponents.java @@ -0,0 +1,3 @@ +package templates; + +@@TODO1@@ diff --git a/Part6ConnectedComponents/templates/Graph.java b/Part6ConnectedComponents/templates/Graph.java new file mode 100644 index 00000000..03c00b77 --- /dev/null +++ b/Part6ConnectedComponents/templates/Graph.java @@ -0,0 +1,143 @@ +/// +package templates; + +import java.util.LinkedList; +import java.util.NoSuchElementException; + +/** + * The {@code Graph} class represents an undirected graph of vertices + * named 0 through V - 1. + * It supports the following two primary operations: add an edge to the graph, + * iterate over all of the vertices adjacent to a vertex. It also provides + * methods for returning the number of vertices V and the number + * of edges E. Parallel edges and self-loops are permitted. + * By convention, a self-loop v-v appears in the + * adjacency list of v twice and contributes two to the degree + * of v. + *

+ * This implementation uses an adjacency-lists representation. + * All operations take constant time (in the worst case) except + * iterating over the vertices adjacent to a given vertex, which takes + * time proportional to the number of such vertices. + *

+ * For additional documentation, see Section 4.1 + * of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class Graph { + private static final String NEWLINE = System.getProperty("line.separator"); + + private final int V; + private int E; + private LinkedList[] adj; + + /** + * Initializes an empty graph with {@code V} vertices and 0 edges. + * param V the number of vertices + * + * @param V number of vertices + * @throws IllegalArgumentException if {@code V < 0} + */ + public Graph(int V) { + if (V < 0) throw new IllegalArgumentException("Number of vertices must be nonnegative"); + this.V = V; + this.E = 0; + adj = (LinkedList[]) new LinkedList[V]; + for (int v = 0; v < V; v++) { + adj[v] = new LinkedList(); + } + } + + + + + + /** + * Returns the number of vertices in this graph. + * + * @return the number of vertices in this graph + */ + public int V() { + return V; + } + + /** + * Returns the number of edges in this graph. + * + * @return the number of edges in this graph + */ + public int E() { + return E; + } + + // throw an IllegalArgumentException unless {@code 0 <= v < V} + private void validateVertex(int v) { + if (v < 0 || v >= V) + throw new IllegalArgumentException("vertex " + v + " is not between 0 and " + (V-1)); + } + + /** + * Adds the undirected edge v-w to this graph. + * + * @param v one vertex in the edge + * @param w the other vertex in the edge + * @throws IllegalArgumentException unless both {@code 0 <= v < V} and {@code 0 <= w < V} + */ + public void addEdge(int v, int w) { + validateVertex(v); + validateVertex(w); + E++; + adj[v].add(w); + adj[w].add(v); + } + + + /** + * Returns the vertices adjacent to vertex {@code v}. + * + * @param v the vertex + * @return the vertices adjacent to vertex {@code v}, as an iterable + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public Iterable adj(int v) { + validateVertex(v); + return adj[v]; + } + + /** + * Returns the degree of vertex {@code v}. + * + * @param v the vertex + * @return the degree of vertex {@code v} + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public int degree(int v) { + validateVertex(v); + return adj[v].size(); + } + + + /** + * Returns a string representation of this graph. + * + * @return the number of vertices V, followed by the number of edges E, + * followed by the V adjacency lists + */ + public String toString() { + StringBuilder s = new StringBuilder(); + s.append(V + " vertices, " + E + " edges " + NEWLINE); + for (int v = 0; v < V; v++) { + s.append(v + ": "); + for (int w : adj[v]) { + s.append(w + " "); + } + s.append(NEWLINE); + } + return s.toString(); + } + + + +} diff --git a/Part6ConnectedComponents/unit_test/ConnectedComponentsTest.java b/Part6ConnectedComponents/unit_test/ConnectedComponentsTest.java new file mode 100644 index 00000000..54cad037 --- /dev/null +++ b/Part6ConnectedComponents/unit_test/ConnectedComponentsTest.java @@ -0,0 +1,127 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import java.util.Random; +import static org.junit.Assert.assertEquals; + +public class ConnectedComponentsTest { + + private static class WeightedQuickUnionUF { + private int[] parent; // parent[i] = parent of i + private int[] size; // size[i] = number of sites in subtree rooted at i + private int count; // number of components + + public WeightedQuickUnionUF(int n) { + count = n; + parent = new int[n]; + size = new int[n]; + for (int i = 0; i < n; i++) { + parent[i] = i; + size[i] = 1; + } + } + + + public int count() { + return count; + } + + public int find(int p) { + validate(p); + while (p != parent[p]) + p = parent[p]; + return p; + } + + // validate that p is a valid index + private void validate(int p) { + int n = parent.length; + if (p < 0 || p >= n) { + throw new IndexOutOfBoundsException("index " + p + " is not between 0 and " + (n - 1)); + } + } + + public boolean connected(int p, int q) { + return find(p) == find(q); + } + + public void union(int p, int q) { + int rootP = find(p); + int rootQ = find(q); + if (rootP == rootQ) return; + + // make smaller root point to larger one + if (size[rootP] < size[rootQ]) { + parent[rootP] = rootQ; + size[rootQ] += size[rootP]; + } else { + parent[rootQ] = rootP; + size[rootP] += size[rootQ]; + } + count--; + } + } + + public void testRandomGraphOk(int n, int e) { + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + Random r = new Random(6); + for (int i = 0; i < e; i++) { + int orig = r.nextInt(n); + int dest = r.nextInt(n); + g.addEdge(orig,dest); + uf.union(orig,dest); + } + int nbCC = ConnectedComponents.numberOfConnectedComponents(g); + assertEquals(uf.count(),nbCC); + } + + @Test + @Grade(value=25) + public void cycleGraphOk() { + int n = 1002; + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + g.addEdge(0,n-1); + uf.union(0,n-1); + + for (int i = 1; i < n; i++) { + g.addEdge(i,(i-1)%n); + uf.union(i,(i-1)%n); + } + + assertEquals(uf.count(), ConnectedComponents.numberOfConnectedComponents(g)); + } + + + @Test(timeout = 3000) + @Grade(value = 25) + public void complexityOk() { + //long t0 = System.currentTimeMillis(); + int n = 7002; + Graph g = new Graph(n); + for (int i = 0; i < n; i++) { + g.addEdge(i,(i+2)%n); + } + ConnectedComponents.numberOfConnectedComponents(g); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + + } + + @Test + @Grade(value = 50) + public void correctness(){ + testRandomGraphOk(600,120); + testRandomGraphOk(220,7); + testRandomGraphOk(105,3); + testRandomGraphOk(0,0); + testRandomGraphOk(10,2*10); + testRandomGraphOk(42,23); + testRandomGraphOk(420,123); + testRandomGraphOk(90,40); + } + +} diff --git a/preexam_dfs/examples/CorrectDFS.java b/Part6DepthFirstPaths/examples/CorrectDFS.java similarity index 100% rename from preexam_dfs/examples/CorrectDFS.java rename to Part6DepthFirstPaths/examples/CorrectDFS.java diff --git a/preexam_dfs/examples/OutOfMemoryDFS.java b/Part6DepthFirstPaths/examples/OutOfMemoryDFS.java similarity index 96% rename from preexam_dfs/examples/OutOfMemoryDFS.java rename to Part6DepthFirstPaths/examples/OutOfMemoryDFS.java index 35812207..f2eda6d7 100644 --- a/preexam_dfs/examples/OutOfMemoryDFS.java +++ b/Part6DepthFirstPaths/examples/OutOfMemoryDFS.java @@ -5,7 +5,7 @@ // 2) for (int i = 0; i < marked.length;i++) { marked[i] = false; - edgeTo[i] = false; + edgeTo[i] = 0; } Stack stack = new Stack(); diff --git a/Part6DepthFirstPaths/feedback_settings.yaml b/Part6DepthFirstPaths/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part6DepthFirstPaths/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part6DepthFirstPaths/public/DepthFirstPaths.java b/Part6DepthFirstPaths/public/DepthFirstPaths.java new file mode 100644 index 00000000..b557ca56 --- /dev/null +++ b/Part6DepthFirstPaths/public/DepthFirstPaths.java @@ -0,0 +1,44 @@ +//TODO + +public class DepthFirstPaths { + private boolean[] marked; // marked[v] = is there an s-v path? + private int[] edgeTo; // edgeTo[v] = last edge on s-v path + private final int s; + + /** + * Computes a path between s and every other vertex in graph G + * @param G the graph + * @param s the source vertex + */ + public DepthFirstPaths(Graph G, int s) { + this.s = s; + edgeTo = new int[G.V()]; + marked = new boolean[G.V()]; + dfs(G, s); + } + + // Depth first search from v + private void dfs(Graph G, int v) { + //TODO + } + + /** + * Is there a path between the source s and vertex v? + * @param v the vertex + * @return true if there is a path, false otherwise + */ + public boolean hasPathTo(int v) { + //TODO + } + + /** + * Returns a path between the source vertex s and vertex v, or + * null if no such path + * @param v the vertex + * @return the sequence of vertices on a path between the source vertex + * s and vertex v, as an Iterable + */ + public Iterable pathTo(int v) { + //TODO + } +} diff --git a/preexam_dfs/student/Graph.java b/Part6DepthFirstPaths/public/Graph.java similarity index 100% rename from preexam_dfs/student/Graph.java rename to Part6DepthFirstPaths/public/Graph.java diff --git a/Part6DepthFirstPaths/public/LSINF1121_PART6_DepthFirstPaths.zip b/Part6DepthFirstPaths/public/LSINF1121_PART6_DepthFirstPaths.zip new file mode 100644 index 00000000..56b5215b Binary files /dev/null and b/Part6DepthFirstPaths/public/LSINF1121_PART6_DepthFirstPaths.zip differ diff --git a/Part6DepthFirstPaths/run b/Part6DepthFirstPaths/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part6DepthFirstPaths/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part6DepthFirstPaths/src/InginiousTests.java b/Part6DepthFirstPaths/src/InginiousTests.java new file mode 100644 index 00000000..53d647dd --- /dev/null +++ b/Part6DepthFirstPaths/src/InginiousTests.java @@ -0,0 +1,141 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; +import templates.*; + +public class InginiousTests { + + @Test + @Grade(value=25) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(1)); + assertTrue(message, dfs.hasPathTo(2)); + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(2)); + assertFalse(message, dfs.hasPathTo(3)); + assertFalse(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDiconnectedBis(){ + String message = "Test [0-1, 1-2, 3-4,4-5,5-6,5-7,7-8, 9-10,10-11,11-12] with 8 as source"; + Graph graph = new Graph(13); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5,6); + graph.addEdge(5,7); + graph.addEdge(7,8); + graph.addEdge(9,10); + graph.addEdge(10,11); + graph.addEdge(11,12); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 8); + + assertFalse(message, dfs.hasPathTo(0)); + assertFalse(message, dfs.hasPathTo(1)); + assertFalse(message, dfs.hasPathTo(2)); + + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(message, dfs.hasPathTo(5)); + assertTrue(message, dfs.hasPathTo(6)); + assertTrue(message, dfs.hasPathTo(7)); + + assertFalse(message, dfs.hasPathTo(9)); + assertFalse(message, dfs.hasPathTo(10)); + assertFalse(message, dfs.hasPathTo(11)); + assertFalse(message, dfs.hasPathTo(12)); + } + + @Test + @Grade(value=25) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 0 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 0); + + assertTrue(message, dfs.hasPathTo(4)); + } + + /*@Test + @Grade(value=20) + public void testIterator() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 3 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 3); + int[] pathCorr = new int[] {4, 0, 1, 2, 3}; + + assertFalse(message, dfs.hasPathTo(5)); + assertFalse(dfs.pathTo(5) != null); + + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(dfs.pathTo(4) != null); + Iterable path = dfs.pathTo(4); + int k = 0; + for (int i : path) { + assertTrue(message,i == pathCorr[k++]); + } + + }*/ +} diff --git a/Part6DepthFirstPaths/src/StudentTestRunner.java b/Part6DepthFirstPaths/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part6DepthFirstPaths/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part6DepthFirstPaths/task.yaml b/Part6DepthFirstPaths/task.yaml new file mode 100644 index 00000000..964a71da --- /dev/null +++ b/Part6DepthFirstPaths/task.yaml @@ -0,0 +1,129 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +context: |- + Considérez cette classe, ``DepthFirstPaths``, qui calcule les chemins vers n'importe quel noeud connecté à partir d'un noeud source ``s`` dans un graphe non dirigé en utilisant un parcours DFS. + + .. code-block:: java + + // TODO + + public class DepthFirstPaths { + private boolean[] marked; // marked[v] = is there an s-v path? + private int[] edgeTo; // edgeTo[v] = last edge on s-v path + private final int s; + + /** + * Computes a path between s and every other vertex in graph G + * @param G the graph + * @param s the source vertex + */ + public DepthFirstPaths(Graph G, int s) { + this.s = s; + edgeTo = new int[G.V()]; + marked = new boolean[G.V()]; + dfs(G, s); + } + + // Depth first search from v + private void dfs(Graph G, int v) { + // TODO + } + + /** + * Is there a path between the source s and vertex v? + * @param v the vertex + * @return true if there is a path, false otherwise + */ + public boolean hasPathTo(int v) { + // TODO + } + + /** + * Returns a path between the source vertex s and vertex v, or + * null if no such path + * @param v the vertex + * @return the sequence of vertices on a path between the source vertex + * s and vertex v, as an Iterable + */ + public Iterable pathTo(int v) { + // TODO + } + } + + La classe ``Graph`` est déjà implémentée. En voici la spécification : + + .. code-block:: java + + public class Graph { + // @return the number of vertices + public int V() { } + + // @return the number of edges + public int E() { } + + // Add edge v-w to this graph + public void addEdge(int v, int w) { } + + // @return the vertices adjacent to v + public Iterable adj(int v) { } + + // @return a string representation + public String toString() { } + } + + **Note:** Les questions suivantes vous demanderont d'implémenter tous les ``TODO`` de la classe ``DepthFirstPaths``. Vous n'avez pas besoin de mettre les accolades (``{ }``) entourant le corps de la fonction dans votre réponse. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 6 - Depth First Paths (implem) +network_grading: false +order: 27 +problems: + import: + default: '' + header: |- + Vous pouvez l'utiliser pour importer des classes supplémentaires dont votre code peut avoir besoin. + + **Note:** Ceci n'est demandé que pour que votre code puisse être compilé et testé. Pendant l'examen, vous n'aurez pas besoin de fournir cette information et vous pourrez utiliser des pseudo-classes comme ``Queue``. + language: java + type: code + name: Les importations + question1: + name: Implémentation de la méthode dfs + language: java + header: |- + .. code-block:: java + + private void dfs(Graph G, int v) + default: '' + type: code + question2: + default: '' + header: |- + .. code-block:: java + + public boolean hasPathTo(int v) + language: java + name: Implémentation de la méthode hasPathTo + type: code + question3: + header: |- + .. code-block:: java + + public Iterable pathTo(int v) + default: '' + name: Implémentation de la méthode distTo + language: java + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part6DepthFirstPaths/templates/DepthFirstPaths.java b/Part6DepthFirstPaths/templates/DepthFirstPaths.java new file mode 100644 index 00000000..6a035da4 --- /dev/null +++ b/Part6DepthFirstPaths/templates/DepthFirstPaths.java @@ -0,0 +1,46 @@ +package templates; + +@@import@@ + +public class DepthFirstPaths { + private boolean[] marked; // marked[v] = is there an s-v path? + private int[] edgeTo; // edgeTo[v] = last edge on s-v path + private final int s; + + /** + * Computes a path between s and every other vertex in graph G + * @param G the graph + * @param s the source vertex + */ + public DepthFirstPaths(Graph G, int s) { + this.s = s; + edgeTo = new int[G.V()]; + marked = new boolean[G.V()]; + dfs(G, s); + } + + // Depth first search from v + private void dfs(Graph G, int v) { + @ @question1@@ + } + + /** + * Is there a path between the source s and vertex v? + * @param v the vertex + * @return true if there is a path, false otherwise + */ + public boolean hasPathTo(int v) { + @ @question2@@ + } + + /** + * Returns a path between the source vertex s and vertex v, or + * null if no such path + * @param v the vertex + * @return the sequence of vertices on a path between the source vertex + * s and vertex v, as an Iterable + */ + public Iterable pathTo(int v) { + @ @question3@@ + } +} diff --git a/Part6DepthFirstPaths/templates/Graph.java b/Part6DepthFirstPaths/templates/Graph.java new file mode 100644 index 00000000..2c1a87fb --- /dev/null +++ b/Part6DepthFirstPaths/templates/Graph.java @@ -0,0 +1,59 @@ +package templates; + +import java.util.ArrayList; +import java.util.List; + +public class Graph { + + private List[] edges; + + public Graph(int E) + { + this.edges = (ArrayList[]) new ArrayList[E]; + for (int i = 0;i < edges.length;i++) + { + edges[i] = new ArrayList<>(); + } + } + + /** + * @return the number of vertices + */ + public int V() { + return edges.length; + } + + /** + * @return the number of edges + */ + public int E() { + int count = 0; + for (List bag : edges) { + count += bag.size(); + } + + return count/2; + } + + /** + * Add edge v-w to this graph + */ + public void addEdge(int v, int w) { + edges[v].add(w); + edges[w].add(v); + } + + /** + * @return the vertices adjacent to v + */ + public Iterable adj(int v) { + return edges[v]; + } + + /** + * @return a string representation + */ + public String toString() { + return "Ne devrait pas être utilisé"; + } +} diff --git a/Part6DepthFirstPaths/unit_test/Tests.java b/Part6DepthFirstPaths/unit_test/Tests.java new file mode 100644 index 00000000..3fd4bb1c --- /dev/null +++ b/Part6DepthFirstPaths/unit_test/Tests.java @@ -0,0 +1,138 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +public class Tests { + + @Test + @Grade(value=25) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(1)); + assertTrue(message, dfs.hasPathTo(2)); + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(2)); + assertFalse(message, dfs.hasPathTo(3)); + assertFalse(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDiconnectedBis(){ + String message = "Test [0-1, 1-2, 3-4,4-5,5-6,5-7,7-8, 9-10,10-11,11-12] with 8 as source"; + Graph graph = new Graph(13); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5,6); + graph.addEdge(5,7); + graph.addEdge(7,8); + graph.addEdge(9,10); + graph.addEdge(10,11); + graph.addEdge(11,12); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 8); + + assertFalse(message, dfs.hasPathTo(0)); + assertFalse(message, dfs.hasPathTo(1)); + assertFalse(message, dfs.hasPathTo(2)); + + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(message, dfs.hasPathTo(5)); + assertTrue(message, dfs.hasPathTo(6)); + assertTrue(message, dfs.hasPathTo(7)); + + assertFalse(message, dfs.hasPathTo(9)); + assertFalse(message, dfs.hasPathTo(10)); + assertFalse(message, dfs.hasPathTo(11)); + assertFalse(message, dfs.hasPathTo(12)); + } + + @Test + @Grade(value=25) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 0 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 0); + + assertTrue(message, dfs.hasPathTo(4)); + } + + /*@Test + @Grade(value=20) + public void testIterator() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 3 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 3); + int[] pathCorr = new int[] {4, 0, 1, 2, 3}; + + assertFalse(message, dfs.hasPathTo(5)); + assertFalse(dfs.pathTo(5) != null); + + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(dfs.pathTo(4) != null); + Iterable path = dfs.pathTo(4); + int k = 0; + for (int i : path) { + assertTrue(message,i == pathCorr[k++]); + } + + }*/ +} diff --git a/Part6Digraph/feedback_settings.yaml b/Part6Digraph/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part6Digraph/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part6Digraph/public/Digraph.java b/Part6Digraph/public/Digraph.java new file mode 100644 index 00000000..a350e29a --- /dev/null +++ b/Part6Digraph/public/Digraph.java @@ -0,0 +1,29 @@ +public interface Digraph { + + /** + * The number of vertices + */ + public int V(); + + /** + * The number of edges + */ + public int E(); + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w); + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v); + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse(); + + +} diff --git a/Part6Digraph/public/DigraphImplem.java b/Part6Digraph/public/DigraphImplem.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part6Digraph/public/DigraphImplem.java @@ -0,0 +1 @@ +//TODO diff --git a/Part6Digraph/public/LSINF1121_PART6_Digraph.zip b/Part6Digraph/public/LSINF1121_PART6_Digraph.zip new file mode 100644 index 00000000..aae9b006 Binary files /dev/null and b/Part6Digraph/public/LSINF1121_PART6_Digraph.zip differ diff --git a/Part6Digraph/run b/Part6Digraph/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part6Digraph/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part6Digraph/src/StudentTestRunner.java b/Part6Digraph/src/StudentTestRunner.java new file mode 100644 index 00000000..0330429b --- /dev/null +++ b/Part6Digraph/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(TestDigraphComplexity.class, TestDigraphEval.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part6Digraph/src/TestDigraphComplexity.java b/Part6Digraph/src/TestDigraphComplexity.java new file mode 100644 index 00000000..fce80d33 --- /dev/null +++ b/Part6Digraph/src/TestDigraphComplexity.java @@ -0,0 +1,92 @@ +package src; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + + +@RunWith(Parameterized.class) +public class TestDigraphComplexity { + private Digraph student; + private Digraph expected; + + public TestDigraphComplexity(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + + @Test(timeout=500) + @Grade(value=25) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + + int n = 10000; + + Digraph student1 = new DigraphImplem(n); + Digraph correct1 = new DigraphImplemCorrect(n); + + for (int k = 0; k < n; k++) { + + student1.addEdge(k, (k + 1) % n); + correct1.addEdge(k, (k + 1) % n); + + } + data.add(new Object[]{student1, correct1}); + + Digraph student2 = new DigraphImplem(n); + Digraph correct2 = new DigraphImplemCorrect(n); + + for (int k = 1; k < n; k++) { + + student2.addEdge(0, k); + correct2.addEdge(0, k); + + } + data.add(new Object[]{student2, correct2}); + + + return data; + } +} diff --git a/Part6Digraph/src/TestDigraphEval.java b/Part6Digraph/src/TestDigraphEval.java new file mode 100644 index 00000000..c2825a2a --- /dev/null +++ b/Part6Digraph/src/TestDigraphEval.java @@ -0,0 +1,89 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class TestDigraphEval { + private Digraph student; + private Digraph expected; + + public TestDigraphEval(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + @Test + @Grade(value=0.5) + public void sameGraph() { + assertEqualsGraph(student,expected); + } + + @Test + @Grade(value=0.5) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + Random r1 = new Random(); + Random r2 = new Random(r1.nextInt(4)); + + for (int i = 0; i < 50; i++) { + + boolean [][] matrix = new boolean[10][10]; + + Digraph student = new DigraphImplem(10); + Digraph correct = new DigraphImplemCorrect(10); + + for (int k = 0; k < 20; k++) { + int v = r2.nextInt(10); + int w = r2.nextInt(10); + if(v != w && !matrix[v][w]) { + student.addEdge(v,w); + correct.addEdge(v,w); + matrix[v][w] = true; + } + } + data.add(new Object[]{student,correct}); + } + return data; + } +} diff --git a/Part6Digraph/task.yaml b/Part6Digraph/task.yaml new file mode 100644 index 00000000..b81f2f19 --- /dev/null +++ b/Part6Digraph/task.yaml @@ -0,0 +1,103 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: Pierre Schaus +context: |- + Implémentez l'interface ``Digraph.java`` dans la classe ``DigraphImplem.java`` à l'aide d'une structure de donnée de type ``liste d'adjacence`` pour représenter les graphes dirigés. + + .. code-block:: java + + package student; + + public interface Digraph { + + /** + * The number of vertices + */ + public int V(); + + /** + * The number of edges + */ + public int E(); + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w); + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v); + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse(); + + } + + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '15' + memory: '1000' + output: '2' +name: PART 6 - Digraph (implem) +network_grading: false +order: 30 +problems: + implementation: + name: Implementation de Digraph.java + language: java + type: code + header: |- + .. code-block:: java + + package student; + + public class DigraphImplem implements Digraph { + + /** + * @param V is the number of vertices + */ + public DigraphImplem(int V) { + // TODO + } + + public int V() { + // TODO + return 0; + } + + public int E() { + // TODO + return 0; + } + + public void addEdge(int v, int w) { + // TODO + } + + public Iterable adj(int v) { + return null; + // TODO + } + + public Digraph reverse() { + return null; + // TODO + } + } + + Copier votre implementation complète de ``DigraphImplem.java`` ci-desssous en completant la classe. Vous pouvez changer tout ce que vous souhaitez dans la classe sauf le nom du package et les signature des méthodes. + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part6Digraph/templates/Digraph.java b/Part6Digraph/templates/Digraph.java new file mode 100644 index 00000000..d524e568 --- /dev/null +++ b/Part6Digraph/templates/Digraph.java @@ -0,0 +1,31 @@ +package templates; + +public interface Digraph { + + /** + * The number of vertices + */ + public int V(); + + /** + * The number of edges + */ + public int E(); + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w); + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v); + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse(); + + +} diff --git a/Part6Digraph/templates/DigraphImplem.java b/Part6Digraph/templates/DigraphImplem.java new file mode 100644 index 00000000..3a86b01b --- /dev/null +++ b/Part6Digraph/templates/DigraphImplem.java @@ -0,0 +1,3 @@ +package templates; + +@ @implementation@@ diff --git a/Part6Digraph/templates/DigraphImplemCorrect.java b/Part6Digraph/templates/DigraphImplemCorrect.java new file mode 100644 index 00000000..68f10b90 --- /dev/null +++ b/Part6Digraph/templates/DigraphImplemCorrect.java @@ -0,0 +1,61 @@ +package templates; + +import java.util.LinkedList; +import java.util.List; + +public class DigraphImplemCorrect implements Digraph { + + private List [] outEdges; + private int nE = 0; + + public DigraphImplemCorrect(int V) { + outEdges = new List[V]; + for (int i = 0; i < V; i++) { + outEdges[i] = new LinkedList<>(); + } + } + + /** + * The number of vertices + */ + public int V() { + return outEdges.length; + } + + /** + * The number of edges + */ + public int E() { + return nE; + } + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w) { + outEdges[v].add(w); + nE ++; + } + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v) { + return outEdges[v]; + } + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse() { + Digraph g = new DigraphImplemCorrect(V()); + for (int v = 0; v < outEdges.length; v++) { + for (int w: adj(v)) { + g.addEdge(w,v); + } + } + return g; + } + + +} diff --git a/Part6Digraph/unit_test/TestDigraphComplexity.java b/Part6Digraph/unit_test/TestDigraphComplexity.java new file mode 100644 index 00000000..7ccede00 --- /dev/null +++ b/Part6Digraph/unit_test/TestDigraphComplexity.java @@ -0,0 +1,90 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + + +@RunWith(Parameterized.class) +public class TestDigraphComplexity { + private Digraph student; + private Digraph expected; + + public TestDigraphComplexity(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + + @Test(timeout=500) + @Grade(value=25) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + + int n = 10000; + + Digraph student1 = new DigraphImplem(n); + Digraph correct1 = new DigraphImplemCorrect(n); + + for (int k = 0; k < n; k++) { + + student1.addEdge(k, (k + 1) % n); + correct1.addEdge(k, (k + 1) % n); + + } + data.add(new Object[]{student1, correct1}); + + Digraph student2 = new DigraphImplem(n); + Digraph correct2 = new DigraphImplemCorrect(n); + + for (int k = 1; k < n; k++) { + + student2.addEdge(0, k); + correct2.addEdge(0, k); + + } + data.add(new Object[]{student2, correct2}); + + + return data; + } +} diff --git a/Part6Digraph/unit_test/TestDigraphEval.java b/Part6Digraph/unit_test/TestDigraphEval.java new file mode 100644 index 00000000..143f741c --- /dev/null +++ b/Part6Digraph/unit_test/TestDigraphEval.java @@ -0,0 +1,86 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class TestDigraphEval { + private Digraph student; + private Digraph expected; + + public TestDigraphEval(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + @Test + @Grade(value=0.5) + public void sameGraph() { + assertEqualsGraph(student,expected); + } + + @Test + @Grade(value=0.5) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + Random r1 = new Random(); + Random r2 = new Random(r1.nextInt(4)); + + for (int i = 0; i < 50; i++) { + + boolean [][] matrix = new boolean[10][10]; + + Digraph student = new DigraphImplem(10); + Digraph correct = new DigraphImplemCorrect(10); + + for (int k = 0; k < 20; k++) { + int v = r2.nextInt(10); + int w = r2.nextInt(10); + if(v != w && !matrix[v][w]) { + student.addEdge(v,w); + correct.addEdge(v,w); + matrix[v][w] = true; + } + } + data.add(new Object[]{student,correct}); + } + return data; + } +} diff --git a/Part6DijkstraForWordTransformation/feedback_settings.yaml b/Part6DijkstraForWordTransformation/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part6DijkstraForWordTransformation/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part6DijkstraForWordTransformation/public/LSINF1121_PART6_WordTransformation.zip b/Part6DijkstraForWordTransformation/public/LSINF1121_PART6_WordTransformation.zip new file mode 100644 index 00000000..ad8229b2 Binary files /dev/null and b/Part6DijkstraForWordTransformation/public/LSINF1121_PART6_WordTransformation.zip differ diff --git a/Part6DijkstraForWordTransformation/public/WordTransformationSP.java b/Part6DijkstraForWordTransformation/public/WordTransformationSP.java new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/Part6DijkstraForWordTransformation/public/WordTransformationSP.java @@ -0,0 +1 @@ +//TODO diff --git a/Part6DijkstraForWordTransformation/run b/Part6DijkstraForWordTransformation/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part6DijkstraForWordTransformation/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part6DijkstraForWordTransformation/src/Helpers.java b/Part6DijkstraForWordTransformation/src/Helpers.java new file mode 100644 index 00000000..a3b208cd --- /dev/null +++ b/Part6DijkstraForWordTransformation/src/Helpers.java @@ -0,0 +1,43 @@ +package src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Helpers { + public static String generateWord(int size,int seed) { + int leftLimit = 97; // letter 'a' + int rightLimit = 122; // letter 'z' + Random random = new Random(seed); + StringBuilder buffer = new StringBuilder(size); + for (int i = 0; i < size; i++) { + int randomLimitedInt = leftLimit + (int) + (random.nextFloat() * (rightLimit - leftLimit + 1)); + buffer.append((char) randomLimitedInt); + } + + return buffer.toString(); + } + + public static String shuffle(String input, int seed){ + Random r = new Random(seed); + + List characters = new ArrayList(); + for(char c:input.toCharArray()){ + characters.add(c); + } + StringBuilder output = new StringBuilder(input.length()); + while(characters.size()!=0){ + int randPicker = (int)(r.nextFloat()*characters.size()); + output.append(characters.remove(randPicker)); + } + + return output.toString(); + } + + public static String repeat(String s, int times) { + if (times <= 0) return ""; + else return s + repeat(s, times-1); + } + +} diff --git a/Part6DijkstraForWordTransformation/src/StudentTestRunner.java b/Part6DijkstraForWordTransformation/src/StudentTestRunner.java new file mode 100644 index 00000000..7c3319bf --- /dev/null +++ b/Part6DijkstraForWordTransformation/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(WTSPComplexityTests.class, WTSPCorrectnessTests.class, WTSPStaticTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part6DijkstraForWordTransformation/src/WTSPComplexityTests.java b/Part6DijkstraForWordTransformation/src/WTSPComplexityTests.java new file mode 100644 index 00000000..47a8ffc0 --- /dev/null +++ b/Part6DijkstraForWordTransformation/src/WTSPComplexityTests.java @@ -0,0 +1,64 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.*; +import templates.*; + +@RunWith(Parameterized.class) +public class WTSPComplexityTests { + private String from; + private static final int SIZE_OF_WORD = 6; //<=10 + private static final int TOTAL_OF_WORD = 8; //<=10 + private static final int TEST_SIZE = 10; + private static int[] seeds = {24, 123, 1234, 12345 }; + + public WTSPComplexityTests(String from) { + this.from = from; + } + + @Test(timeout=20) + @Grade(value=4) //4*10 = 40 + public void runAsExpected() { + Random r = new Random(seeds[2]); + long t0 = System.currentTimeMillis(); + String s = from; + String d = Helpers.shuffle(s, r.nextInt()); + WordTransformationSP.minimalCost(s, d); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=1000) + @Grade(value=1) //1*10 = 10 + public void runAsExtreme() { + Random r = new Random(seeds[1]); + + long t0 = System.currentTimeMillis(); + + String s = from+Helpers.generateWord(TOTAL_OF_WORD- SIZE_OF_WORD,seeds[3]); + String d = Helpers.shuffle(s,seeds[0]); + + WordTransformationSP.minimalCost(s, d); + + long t1 = System.currentTimeMillis(); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(seeds[0]); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/Part6DijkstraForWordTransformation/src/WTSPCorrectnessTests.java b/Part6DijkstraForWordTransformation/src/WTSPCorrectnessTests.java new file mode 100644 index 00000000..46859645 --- /dev/null +++ b/Part6DijkstraForWordTransformation/src/WTSPCorrectnessTests.java @@ -0,0 +1,47 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +import java.util.*; +import templates.*; + +@RunWith(Parameterized.class) +public class WTSPCorrectnessTests { + private String from; + private static final int SIZE_OF_WORD = 7; //<=10 + private static final int TEST_SIZE = 10; + + public WTSPCorrectnessTests(String from) { + this.from = from; + } + + @Test + @Grade(value = 2) + public void simpleTest() { + Random r = new Random(45); + int x = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2, y = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2; + int start = Math.min(x,y), end = Math.max(x,y); + + String s = from; + String d = WordTransformationSP.rotation(s,start,end); + assertEquals(end-start, WordTransformationSP.minimalCost(s, d)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(12345L); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/Part6DijkstraForWordTransformation/src/WTSPStaticTests.java b/Part6DijkstraForWordTransformation/src/WTSPStaticTests.java new file mode 100644 index 00000000..85bbae1c --- /dev/null +++ b/Part6DijkstraForWordTransformation/src/WTSPStaticTests.java @@ -0,0 +1,74 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; +import templates.*; + +@RunWith(Parameterized.class) +public class WTSPStaticTests { + private Instance instance; + + public WTSPStaticTests(Instance instance) { + this.instance = instance; + } + + @Test + @Grade(value = 1) + public void staticTest() { + assertEquals(instance.cost, WordTransformationSP.minimalCost(instance.from, instance.to)); + } + + @Parameterized.Parameters + public static Instance[] data() { + return new Instance[]{ + new Instance("wdaowkl", "aowlwkd", 12), + new Instance("fxuldkv", "kfdxvul", 13), + new Instance("bzwxnxg", "wxbxgnz", 12), + new Instance("hkhddmc", "ckhddhm", 9), + new Instance("fcavjtb", "bftjcva", 12), + new Instance("qqbtghc", "tbqhqcg", 10), + new Instance("zexqiig", "xezgiqi", 8), + new Instance("ikstclp", "ktsilpc", 9), + new Instance("cuwpysz", "cpysuzw", 10), + new Instance("cvnooos", "oconosv", 10), + new Instance("zumnlit", "zutnlmi", 8), + new Instance("wefscav", "aecvsfw", 14), + new Instance("pvgzoxg", "zvgxpgo", 12), + new Instance("lgeiyzm", "gezymli", 11), + new Instance("ofimxuj", "xumifoj", 8), + new Instance("bvzjphs", "jhbzspv", 12), + new Instance("nnyiqgx", "xiyqngn", 13), + new Instance("lqllyat", "qlltayl", 6), + new Instance("uacfnsi", "aucinfs", 7), + new Instance("vfwtotc", "ofwttcv", 12), + new Instance("ftfxxha", "txfxhaf", 11), + new Instance("defrhmz", "zefdrhm", 12), + new Instance("mrxcrbk", "cbrkrxm", 13), + new Instance("dkwohei", "odkhewi", 10), + new Instance("ahraabk", "akbraah", 9), + new Instance("lgwhpak", "wkphgal", 13), + new Instance("wjeekzr", "rwejkez", 10), + new Instance("xotudui", "ouuxitd", 13), + new Instance("ucuadky", "cuydauk", 8), + new Instance("kcraftl", "tlafcrk", 13) + }; + } + + private static class Instance { + public String from; + public String to; + public int cost; + + public Instance(String from, String to, int cost) { + this.from = from; + this.to = to; + this.cost = cost; + } + + } + +} diff --git a/Part6DijkstraForWordTransformation/task.yaml b/Part6DijkstraForWordTransformation/task.yaml new file mode 100644 index 00000000..e7d44624 --- /dev/null +++ b/Part6DijkstraForWordTransformation/task.yaml @@ -0,0 +1,72 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +context: |- + On vous demande d'implémenter la classe ``WordTransformationSP`` qui permet de trouver le plus court chemin permettant de passer d'un string *A* à un autre string *B* (avec la certitude qu'il y a bien un chemin permettant de transformer *A* en *B*). + + + Pour cela on definit une opération ``rotation(x, y)`` qui inverse l’ordre des lettres entre la position x et y (non-inclus). + Par exemple, avec A=``HAMBURGER``, si l'on fait ``rotation(A, 4, 8)``, cela nous donne ``HAMBEGRUR``. Vous pouvez donc constater que la sous-string ``URGE`` a été inversé en ``EGRU`` et le reste de la chaine est resté inchangé: ``HAMB`` + ``ECRU`` + ``R`` = ``HAMBEGRUR``. + + Disons qu’une ``rotation(x, y)`` a un cout de y-x. Par exemple passer de ``HAMBURGER`` à ``HAMBEGRUR`` coût *8-4 = 4*. + + La question est de savoir quel est le coût minimum pour atteindre une string B à partir A? + + Vous devez donc inmplémenter la méthode une fonction ``public static int minimalCost(String A, String B)`` qui retourne le cout minimal pour atteindre le String B depuis A en utilisant l'opération rotation. + + .. code-block:: java + + import java.util.*; + + public class WordTransformationSP { + /** + * + * Rotate the substring between start and end of a given string s + * eg. s = HAMBURGER, rotation(s,4,8) = HAMBEGRUR i.e. HAMB + EGRU + R + * @param s + * @param start + * @param end + * @return rotated string + */ + public static String rotation(String s, int start, int end) { + return s.substring(0,start)+new StringBuilder(s.substring(start,end)).reverse().toString()+s.substring(end); + } + + /** + * Compute the minimal cost from string "from" to string "to" representing the shortest path + * @param from + * @param to + * @return + */ + public static int minimalCost(String from, String to) { + //TODO + return 0; + } + } + + `Le projet IntelliJ est disponible ici `_. + + **Note:** vous pouvez ajouter d'autres fonctions et des private classes si vous le désirez. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + time: '300' + memory: '2500' +name: PART 6 - Word Transformation Shortest Path (implem) +network_grading: false +order: 31 +problems: + implem: + default: '' + name: Code + language: java + header: | + Coller tout le contenu de votre classe ``WordTransformationSP`` ici : + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part6DijkstraForWordTransformation/templates/WordTransformationSP.java b/Part6DijkstraForWordTransformation/templates/WordTransformationSP.java new file mode 100644 index 00000000..c1f35bfb --- /dev/null +++ b/Part6DijkstraForWordTransformation/templates/WordTransformationSP.java @@ -0,0 +1,3 @@ +package templates; + +@@implem@@ diff --git a/Part6DijkstraForWordTransformation/unit_test/Helpers.java b/Part6DijkstraForWordTransformation/unit_test/Helpers.java new file mode 100644 index 00000000..174ef83f --- /dev/null +++ b/Part6DijkstraForWordTransformation/unit_test/Helpers.java @@ -0,0 +1,43 @@ +package tests; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Helpers { + public static String generateWord(int size,int seed) { + int leftLimit = 97; // letter 'a' + int rightLimit = 122; // letter 'z' + Random random = new Random(seed); + StringBuilder buffer = new StringBuilder(size); + for (int i = 0; i < size; i++) { + int randomLimitedInt = leftLimit + (int) + (random.nextFloat() * (rightLimit - leftLimit + 1)); + buffer.append((char) randomLimitedInt); + } + + return buffer.toString(); + } + + public static String shuffle(String input, int seed){ + Random r = new Random(seed); + + List characters = new ArrayList(); + for(char c:input.toCharArray()){ + characters.add(c); + } + StringBuilder output = new StringBuilder(input.length()); + while(characters.size()!=0){ + int randPicker = (int)(r.nextFloat()*characters.size()); + output.append(characters.remove(randPicker)); + } + + return output.toString(); + } + + public static String repeat(String s, int times) { + if (times <= 0) return ""; + else return s + repeat(s, times-1); + } + +} diff --git a/Part6DijkstraForWordTransformation/unit_test/WTSPComplexityTests.java b/Part6DijkstraForWordTransformation/unit_test/WTSPComplexityTests.java new file mode 100644 index 00000000..c151479a --- /dev/null +++ b/Part6DijkstraForWordTransformation/unit_test/WTSPComplexityTests.java @@ -0,0 +1,61 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.*; + +@RunWith(Parameterized.class) +public class WTSPComplexityTests { + private String from; + private static final int SIZE_OF_WORD = 6; //<=10 + private static final int TOTAL_OF_WORD = 8; //<=10 + private static final int TEST_SIZE = 10; + private static int[] seeds = {24, 123, 1234, 12345 }; + + public WTSPComplexityTests(String from) { + this.from = from; + } + + @Test(timeout=20) + @Grade(value=4) //4*10 = 40 + public void runAsExpected() { + Random r = new Random(seeds[2]); + long t0 = System.currentTimeMillis(); + String s = from; + String d = Helpers.shuffle(s, r.nextInt()); + WordTransformationSP.minimalCost(s, d); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=1000) + @Grade(value=1) //1*10 = 10 + public void runAsExtreme() { + Random r = new Random(seeds[1]); + + long t0 = System.currentTimeMillis(); + + String s = from+Helpers.generateWord(TOTAL_OF_WORD- SIZE_OF_WORD,seeds[3]); + String d = Helpers.shuffle(s,seeds[0]); + + WordTransformationSP.minimalCost(s, d); + + long t1 = System.currentTimeMillis(); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(seeds[0]); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/Part6DijkstraForWordTransformation/unit_test/WTSPCorrectnessTests.java b/Part6DijkstraForWordTransformation/unit_test/WTSPCorrectnessTests.java new file mode 100644 index 00000000..b09274c4 --- /dev/null +++ b/Part6DijkstraForWordTransformation/unit_test/WTSPCorrectnessTests.java @@ -0,0 +1,44 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +import java.util.*; + +@RunWith(Parameterized.class) +public class WTSPCorrectnessTests { + private String from; + private static final int SIZE_OF_WORD = 7; //<=10 + private static final int TEST_SIZE = 10; + + public WTSPCorrectnessTests(String from) { + this.from = from; + } + + @Test + @Grade(value = 2) + public void simpleTest() { + Random r = new Random(45); + int x = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2, y = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2; + int start = Math.min(x,y), end = Math.max(x,y); + + String s = from; + String d = WordTransformationSP.rotation(s,start,end); + assertEquals(end-start, WordTransformationSP.minimalCost(s, d)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(12345L); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/Part6DijkstraForWordTransformation/unit_test/WTSPStaticTests.java b/Part6DijkstraForWordTransformation/unit_test/WTSPStaticTests.java new file mode 100644 index 00000000..682d157e --- /dev/null +++ b/Part6DijkstraForWordTransformation/unit_test/WTSPStaticTests.java @@ -0,0 +1,71 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; + +@RunWith(Parameterized.class) +public class WTSPStaticTests { + private Instance instance; + + public WTSPStaticTests(Instance instance) { + this.instance = instance; + } + + @Test + @Grade(value = 1) + public void staticTest() { + assertEquals(instance.cost, WordTransformationSP.minimalCost(instance.from, instance.to)); + } + + @Parameterized.Parameters + public static Instance[] data() { + return new Instance[]{ + new Instance("wdaowkl", "aowlwkd", 12), + new Instance("fxuldkv", "kfdxvul", 13), + new Instance("bzwxnxg", "wxbxgnz", 12), + new Instance("hkhddmc", "ckhddhm", 9), + new Instance("fcavjtb", "bftjcva", 12), + new Instance("qqbtghc", "tbqhqcg", 10), + new Instance("zexqiig", "xezgiqi", 8), + new Instance("ikstclp", "ktsilpc", 9), + new Instance("cuwpysz", "cpysuzw", 10), + new Instance("cvnooos", "oconosv", 10), + new Instance("zumnlit", "zutnlmi", 8), + new Instance("wefscav", "aecvsfw", 14), + new Instance("pvgzoxg", "zvgxpgo", 12), + new Instance("lgeiyzm", "gezymli", 11), + new Instance("ofimxuj", "xumifoj", 8), + new Instance("bvzjphs", "jhbzspv", 12), + new Instance("nnyiqgx", "xiyqngn", 13), + new Instance("lqllyat", "qlltayl", 6), + new Instance("uacfnsi", "aucinfs", 7), + new Instance("vfwtotc", "ofwttcv", 12), + new Instance("ftfxxha", "txfxhaf", 11), + new Instance("defrhmz", "zefdrhm", 12), + new Instance("mrxcrbk", "cbrkrxm", 13), + new Instance("dkwohei", "odkhewi", 10), + new Instance("ahraabk", "akbraah", 9), + new Instance("lgwhpak", "wkphgal", 13), + new Instance("wjeekzr", "rwejkez", 10), + new Instance("xotudui", "ouuxitd", 13), + new Instance("ucuadky", "cuydauk", 8), + new Instance("kcraftl", "tlafcrk", 13) + }; + } + + private static class Instance { + public String from; + public String to; + public int cost; + + public Instance(String from, String to, int cost) { + this.from = from; + this.to = to; + this.cost = cost; + } + + } + +} diff --git a/Part6GlobalWarming/feedback_settings.yaml b/Part6GlobalWarming/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part6GlobalWarming/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part6GlobalWarming/public/GlobalWarming.java b/Part6GlobalWarming/public/GlobalWarming.java new file mode 100644 index 00000000..65dd531a --- /dev/null +++ b/Part6GlobalWarming/public/GlobalWarming.java @@ -0,0 +1,62 @@ +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + public final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * + * @param p1 a safe point with valid coordinates on altitude matrix + * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix + * @return the shortest simple path (vertical/horizontal moves) if any between from p1 to p2 using only vertical/horizontal moves on safe points. + * an empty list if not path exists (i.e. p1 and p2 are not on the same island). + */ + public abstract List shortestPath(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + + +} diff --git a/Part6GlobalWarming/public/GlobalWarmingImpl.java b/Part6GlobalWarming/public/GlobalWarmingImpl.java new file mode 100644 index 00000000..70b786d1 --- /dev/null +++ b/Part6GlobalWarming/public/GlobalWarmingImpl.java @@ -0,0 +1 @@ +// TODO diff --git a/Part6GlobalWarming/public/LSINF1121_PART6_GlobalWarming.zip b/Part6GlobalWarming/public/LSINF1121_PART6_GlobalWarming.zip new file mode 100644 index 00000000..7b5b3c21 Binary files /dev/null and b/Part6GlobalWarming/public/LSINF1121_PART6_GlobalWarming.zip differ diff --git a/globalwarming_unionfind/public/matrix.png b/Part6GlobalWarming/public/matrix.png similarity index 100% rename from globalwarming_unionfind/public/matrix.png rename to Part6GlobalWarming/public/matrix.png diff --git a/Part6GlobalWarming/run b/Part6GlobalWarming/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part6GlobalWarming/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part6GlobalWarming/src/InginiousTests.java b/Part6GlobalWarming/src/InginiousTests.java new file mode 100644 index 00000000..86887063 --- /dev/null +++ b/Part6GlobalWarming/src/InginiousTests.java @@ -0,0 +1,206 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.*; +import templates.*; + +public class InginiousTests { + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + + @Test + @Grade(value = 15) + public void testShortestPathExam() { + List path = new GlobalWarmingImpl(getExamMatrix(), 3).shortestPath(new GlobalWarming.Point(1, 0), new GlobalWarming.Point(3, 1)); + assertTrue( path != null && path.size() == 4 && validPath(getExamMatrix(),3,point(1,0),point(3,1),path) ); + } + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value = 10) + public void testSimpleAll() { + assertTrue(simpleAll()); + } + public boolean simpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path1 = warming.shortestPath(point(1,1),point(1,1)); + + if (!validPath(matrix,0,point(1,1),point(1,1),path1)) { + System.out.println("1::error in shortestPath"); + return false; + } + + if (warming.shortestPath(point(9,9),point(9,9)) != null) { + if(!warming.shortestPath(point(9,9),point(9,9)).isEmpty()) { + System.out.println("2::error in shortestPath"); + return false; + } + } + + if (warming.shortestPath(point(0,9),point(9,9)) != null ) { + if(!warming.shortestPath(point(0,9),point(9,9)).isEmpty()) { + System.out.println("3::error in shortestPath"); + return false; + } + } + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + System.out.println("4::error in shortestPath, path not valid"); + return false; + } + + if (path2.size() != 8) { + System.out.println("error in shortestPath, not correct length"); + System.out.println(path2.size()); + return false; + } + return true; + } + + @Test + @Grade(value = 25) + public void testCorrectnessShortestPath() { + assertTrue(correctnessShortestPath()); + } + + private boolean correctnessShortestPath() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + for (int k = 0; k < 50; k++) { + int [][] matrix = getRandomMatrix(50,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 50; i++) { + for (int j = 0; j < 50-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + + List path = g1.shortestPath(point(i,j),point(i,j+2)); + + if (path.size() != 3 && !validPath(matrix,level,point(i,j),point(i,j+2),path)) { + return false; + } + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + return false; + } + + if (path2.size() != 8) { + return false; + } + return true; + } + + + public boolean validPath(int [][] matrix, int level, GlobalWarming.Point p1, GlobalWarming.Point p2, List path) { + for (GlobalWarming.Point p: path) { + if (matrix[p.x][p.y] <= level) return false; + } + for (int i = 0; i < path.size()-1; i++) { + if (!neighbors(path.get(i),path.get(i+1))) { + return false; + } + } + if (matrix[p1.x][p1.y] <= level && !path.isEmpty()) return false; + if (matrix[p2.x][p2.y] <= level && !path.isEmpty()) return false; + + return !path.isEmpty() && path.get(0).equals(p1) && path.get(path.size()-1).equals(p2); + } + + + public boolean neighbors(GlobalWarming.Point p1,GlobalWarming.Point p2) { + return Math.abs(p1.x-p2.x) + Math.abs(p1.y-p2.y) == 1; + } + + + @Test (timeout = 10) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(100,2000000); + + int max = 0; + // do some computation here + long t0 = System.currentTimeMillis(); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + long t1 = System.currentTimeMillis(); + System.out.println("time constructor:"+(t1-t0)); + } + + @Test (timeout = 250) + @Grade(value = 40) + public void timeComplexityShortestPath() { + final int [][] matrix = getRandomMatrix(70,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + long t0 = System.currentTimeMillis(); + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.shortestPath(point(i,j),point(n-1,n-1)); + } + } + long t1 = System.currentTimeMillis(); + System.out.println("time shortestPath:"+(t1-t0)); + + } + +} diff --git a/Part6GlobalWarming/src/StudentTestRunner.java b/Part6GlobalWarming/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part6GlobalWarming/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part6GlobalWarming/task.yaml b/Part6GlobalWarming/task.yaml new file mode 100644 index 00000000..87445f62 --- /dev/null +++ b/Part6GlobalWarming/task.yaml @@ -0,0 +1,172 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +context: |+ + Context + ================================================== + + Supposons la matrice 5x5 suivante: + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + + représentée dans le tableau ci-dessous : + + .. image:: Part6GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + Chaque entrée de la matrice représente une altitude. + L'objectif est d'implémenter une classe `GlobalWarmingImpl` qui implémente toutes les méthodes décrites dans `GlobalWarming` données ci-dessous. + + Un niveau d'eau global spécifié dans le constructeur modélise le fait que toutes les positions de la matrice avec une valeur <= le niveau d'eau sont inondées (sous l'eau) et donc dangereuses. + Dans l'exemple ci-dessus, le niveau d'eau est de 3, tous les points sûrs sont en vert. + + La méthode que vous devez implémenter doit permettre de calculer le chemin le plus court entre deux positions sont sur la même île + + nous supposons que les points sont **uniquement connectés verticalement ou horizontalement**. + + `Le projet IntelliJ est disponible ici `_. + + .. code-block:: java + + + import java.util.List; + + abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * + * @param p1 a safe point with valid coordinates on altitude matrix + * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix + * @return the shortest simple path (vertical/horizontal moves) if any between from p1 to p2 using only vertical/horizontal moves on safe points. + * an empty list if not path exists (i.e. p1 and p2 are not on the same island). + */ + public abstract List shortestPath(Point p1, Point p2); + + } + + + + Exercices Preliminaires + ================================================== + + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + GlobalWarming gw = new MyGlobalWarming(tab,3); + + .. image:: Part6GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '120' + memory: '750' + output: '100' +name: PART 6 - Global Warming (implem) +network_grading: false +order: 29 +problems: + shortestPath: + answer: (1,0),(2,0),(2,1),(3,1) + name: shortestPath + type: match + header: |- + Quel résultat on obtiendra avec cet appel? + + .. code-block:: java + + gw.shortestPath(new GlobalWarming.Point(1,0),new GlobalWarming.Point(3,1)); + + *Format du résultat attendu:* une liste de positions séparées par des virgules comme suit: (1,0),(1,1),(2,1),(3,1) + implementation: + name: Fill in the class such that it corresponds to its specification. + language: java + type: code + header: |+ + Copier-coller et compléter le code ci-dessous. + Faites attention à la complexité temporelle prévue de chaque méthode. + Pour répondre à cette complexité temporelle, il faut déjà faire quelques pré-calculs dans le constructeur. N'hésitez pas à créer des classes internes dans GlobalWarmingImpl pour faciliter votre implémentation. + N'hésitez pas à utiliser n'importe quelle méthode ou structure de données disponible dans le langage Java et l'API. + + .. code-block:: java + + import java.util.*; + + public class GlobalWarmingImpl extends GlobalWarming { + + public GlobalWarmingImpl(int[][] altitude, int waterLevel) { + super(altitude,waterLevel); + // TODO + } + + + public List shortestPath(Point p1, Point p2) { + // TODO + // expected time complexity O(n^2) + return new ArrayList(); + } + + } + + + + + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part6GlobalWarming/templates/GlobalWarming.java b/Part6GlobalWarming/templates/GlobalWarming.java new file mode 100644 index 00000000..7f4b6eb1 --- /dev/null +++ b/Part6GlobalWarming/templates/GlobalWarming.java @@ -0,0 +1,64 @@ +package templates; + +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + public final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * + * @param p1 a safe point with valid coordinates on altitude matrix + * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix + * @return the shortest simple path (vertical/horizontal moves) if any between from p1 to p2 using only vertical/horizontal moves on safe points. + * an empty list if not path exists (i.e. p1 and p2 are not on the same island). + */ + public abstract List shortestPath(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + + +} diff --git a/Part6GlobalWarming/templates/GlobalWarmingImpl.java b/Part6GlobalWarming/templates/GlobalWarmingImpl.java new file mode 100644 index 00000000..f02baf3f --- /dev/null +++ b/Part6GlobalWarming/templates/GlobalWarmingImpl.java @@ -0,0 +1,3 @@ +package templates; + +@@implementation@@ diff --git a/Part6GlobalWarming/unit_test/GlobalWarmingTest.java b/Part6GlobalWarming/unit_test/GlobalWarmingTest.java new file mode 100644 index 00000000..1934a195 --- /dev/null +++ b/Part6GlobalWarming/unit_test/GlobalWarmingTest.java @@ -0,0 +1,206 @@ +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.*; + +import student.GlobalWarmingImpl; +import student.GlobalWarming; + +public class GlobalWarmingTest { + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + + @Test + @Grade(value = 15) + public void testShortestPathExam() { + List path = new GlobalWarmingImpl(getExamMatrix(), 3).shortestPath(new GlobalWarming.Point(1, 0), new GlobalWarming.Point(3, 1)); + assertTrue( path != null && path.size() == 4 && validPath(getExamMatrix(),3,point(1,0),point(3,1),path) ); + } + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value = 10) + public void testSimpleAll() { + assertTrue(simpleAll()); + } + public boolean simpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path1 = warming.shortestPath(point(1,1),point(1,1)); + + if (!validPath(matrix,0,point(1,1),point(1,1),path1)) { + System.out.println("1::error in shortestPath"); + return false; + } + + if (warming.shortestPath(point(9,9),point(9,9)) != null) { + if(!warming.shortestPath(point(9,9),point(9,9)).isEmpty()) { + System.out.println("2::error in shortestPath"); + return false; + } + } + + if (warming.shortestPath(point(0,9),point(9,9)) != null ) { + if(!warming.shortestPath(point(0,9),point(9,9)).isEmpty()) { + System.out.println("3::error in shortestPath"); + return false; + } + } + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + System.out.println("4::error in shortestPath, path not valid"); + return false; + } + + if (path2.size() != 8) { + System.out.println("error in shortestPath, not correct length"); + System.out.println(path2.size()); + return false; + } + return true; + } + + @Test + @Grade(value = 25) + public void testCorrectnessShortestPath() { + assertTrue(correctnessShortestPath()); + } + + private boolean correctnessShortestPath() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + for (int k = 0; k < 50; k++) { + int [][] matrix = getRandomMatrix(50,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 50; i++) { + for (int j = 0; j < 50-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + + List path = g1.shortestPath(point(i,j),point(i,j+2)); + + if (path.size() != 3 && !validPath(matrix,level,point(i,j),point(i,j+2),path)) { + return false; + } + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + return false; + } + + if (path2.size() != 8) { + return false; + } + return true; + } + + + public boolean validPath(int [][] matrix, int level, GlobalWarming.Point p1, GlobalWarming.Point p2, List path) { + for (GlobalWarming.Point p: path) { + if (matrix[p.x][p.y] <= level) return false; + } + for (int i = 0; i < path.size()-1; i++) { + if (!neighbors(path.get(i),path.get(i+1))) { + return false; + } + } + if (matrix[p1.x][p1.y] <= level && !path.isEmpty()) return false; + if (matrix[p2.x][p2.y] <= level && !path.isEmpty()) return false; + + return !path.isEmpty() && path.get(0).equals(p1) && path.get(path.size()-1).equals(p2); + } + + + public boolean neighbors(GlobalWarming.Point p1,GlobalWarming.Point p2) { + return Math.abs(p1.x-p2.x) + Math.abs(p1.y-p2.y) == 1; + } + + + @Test (timeout = 10) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(100,2000000); + + int max = 0; + // do some computation here + long t0 = System.currentTimeMillis(); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + long t1 = System.currentTimeMillis(); + System.out.println("time constructor:"+(t1-t0)); + } + + @Test (timeout = 250) + @Grade(value = 40) + public void timeComplexityShortestPath() { + final int [][] matrix = getRandomMatrix(70,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + long t0 = System.currentTimeMillis(); + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.shortestPath(point(i,j),point(n-1,n-1)); + } + } + long t1 = System.currentTimeMillis(); + System.out.println("time shortestPath:"+(t1-t0)); + + } + +} diff --git a/Part6Maze/feedback_settings.yaml b/Part6Maze/feedback_settings.yaml new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/Part6Maze/feedback_settings.yaml @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/Part6Maze/maze.txt b/Part6Maze/maze.txt new file mode 100644 index 00000000..dced61ab --- /dev/null +++ b/Part6Maze/maze.txt @@ -0,0 +1,24 @@ +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010E01000000000000000000000001000000000000000000010000000000000000000000000000000000000000000000010000000101 +01010001000101010101010101010001000101010101000100010101010100010101010101010101010101010101010100010001000101 +01010001000000010001000000000001000100000000000100000000000000010000000100000000000000000001000100010001000101 +01010001010100010001000101010101010100010101010101010101010101010001010100010101010100010001000100010001000101 +01010000000000010001000000000000000100010000000000010000000100000000000000010000000000010000000100010001000101 +01010101010101010001010101010101000100010001010100010001000101010001010101010001010101010101000100010101000101 +01010000000000000001000000000000000100000000000100000001000000010000000100000001000000010000000100000001000101 +01010001010101010101000101010101010101010101010101010101010100010101010100010101000101010001010101010001000101 +01010000000000000000000100000001000000000000000100000000000000010000000000010000000100000001000000000001000101 +01010001010101010101010100010001000100010101000100010101010101010001010101010001010100010101000101010101000101 +01010000000000000001000000010001000100010000000100010000000100000001000000000001000000000001000100000001000101 +01010101010101010001010100010001000100010001010100010001010100010001010101010001000101010101000100010001000101 +01010001000000010000000000010001000100010000000000010001000000010001000000010000000100010000000100010000000101 +01010001000100010101010101010001010100010101010101010001000101010001000100010001010100010001010100010101000101 +01010000000100000000000000010000000100010000000000000000000100010000000100010000000000010001000000010001000101 +01010001010101010101000101010101000100010001010101010101010100010101010100010101010100010001000101010001000101 +01010001000000000001000100000001000100010000000000000000000100000001000000010000000100010001000000010001000101 +01010001000101010001000100010001000100010101010101010101000101010001000101010001000101010001010100010001000101 +010100000001000000010000000100000000000100000000000000000000000000010000000000010000000000000000000100000S0101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 + diff --git a/Part6Maze/public/LSINF1121_PART6_Maze.zip b/Part6Maze/public/LSINF1121_PART6_Maze.zip new file mode 100644 index 00000000..784b6562 Binary files /dev/null and b/Part6Maze/public/LSINF1121_PART6_Maze.zip differ diff --git a/Part6Maze/public/Maze.java b/Part6Maze/public/Maze.java new file mode 100644 index 00000000..88fd6b68 --- /dev/null +++ b/Part6Maze/public/Maze.java @@ -0,0 +1 @@ +@@implem@@ \ No newline at end of file diff --git a/Part6Maze/run b/Part6Maze/run new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/Part6Maze/run @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/Part6Maze/src/InginiousTests.java b/Part6Maze/src/InginiousTests.java new file mode 100644 index 00000000..32d3f9ec --- /dev/null +++ b/Part6Maze/src/InginiousTests.java @@ -0,0 +1,159 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import static org.junit.Assert.*; + +import java.util.*; +import templates.*; + +public class InginiousTests{ + + public int [][] maze1 = new int[][] { + {0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0}, + {0,0,0,0,0,1,0}, + {0,1,1,1,1,1,1}, + {0,0,0,0,1,0,0}, + {1,1,0,0,1,0,0}, + {0,0,0,0,1,0,0} + }; + + public int [][] maze2 = new int[][] { + {0,0,0,1,0,0,0}, + {1,1,0,0,0,1,0} + }; + + @Test + @Grade(value=10) + public void testMaze1a() { + Iterable path = Maze.shortestPath(maze1,0,0,6,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,6,0,maze1,path)); + assertTrue(pathArray.length == 15); + } + + @Test + @Grade(value=10) + public void testMaze1b() { + // should not have a path + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,0,0,6,6).iterator().hasNext()); + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,6,6,0,0).iterator().hasNext()); + // start position is a wall + assertTrue(!Maze.shortestPath(maze1,1,0,6,0).iterator().hasNext()); + // end position is a wall + assertTrue(!Maze.shortestPath(maze1,6,0,1,0).iterator().hasNext()); + } + + @Test + @Grade(value=20) + public void testMaze1c() { + Iterable path = Maze.shortestPath(maze1,0,0,0,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,0,0,maze1,path)); + assertTrue(pathArray.length == 1); + } + + @Test + @Grade(value=20) + public void testMaze2a() { + Iterable path = Maze.shortestPath(maze2,0,0,1,6); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,1,6,maze2,path)); + assertTrue(pathArray.length == 10); + } + + @Test (timeout = 20) + @Grade(value=40) + public void testComplexity() { + int positions[][] = new int[2][2]; + int[][] maze = getMaze("maze.txt",24,110, positions); + + long t0 = System.currentTimeMillis(); + Iterable path = Maze.shortestPath(maze, positions[0][0], positions[0][1], positions[1][0], positions[1][1]); + long t1 = System.currentTimeMillis(); + + int count = 0; + for (Integer it: path) { count++; } + //System.out.println(count); + + assertEquals(count, 125); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + private int[][] getMaze(String filename, int row, int col, int positions[][]) { + String line; + int[][] maze = new int[row][col]; + try { + + BufferedReader br = new BufferedReader(new FileReader(filename)); + if (!br.ready()) { + throw new IOException(); + } + int j = 0; + int pos = 0; + while ((line = br.readLine()) != null) { + for(int i = 0; i < line.length(); i++) { + try { + maze[j][i] = Integer.parseInt(line.charAt(i) + ""); + } catch (NumberFormatException r) { + positions[pos][0] = j; + positions[pos][1] = i; + pos++; + ///System.out.println(j+" "+i); + maze[j][i] = 0; + } + } + j++; + } + br.close(); + } catch (IOException e) { + System.out.println(e); + } + return maze; + } + + + public Integer[] toArray(Iterable path) { + LinkedList list = new LinkedList(); + path.forEach(list::add); + return list.toArray(new Integer[0]); + } + + + public static int row(int pos, int mCols) { return pos / mCols; } + + public static int col(int pos, int mCols) { return pos % mCols; } + + public boolean validPathSourceToDest(int x1, int y1, int x2, int y2, int [][] maze, Iterable path) { + int n = maze.length; + int m = maze[0].length; + Iterator ite = path.iterator(); + if (!ite.hasNext()) return false; + int p = ite.next(); + int x = row(p,m); + int y = col(p,m); + if (x != x1 || y != y1) return false; + while (ite.hasNext()) { + p = ite.next(); + int x_ = row(p,m); + int y_ = col(p,m); + if (maze[x][y] == 1) return false; + if (Math.abs(x_-x)+Math.abs(y_-y) != 1) return false; + x = x_; y = y_; + } + if (x != x2 || y != y2) return false; + return true; + } + +} diff --git a/Part6Maze/src/StudentTestRunner.java b/Part6Maze/src/StudentTestRunner.java new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/Part6Maze/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/Part6Maze/task.yaml b/Part6Maze/task.yaml new file mode 100644 index 00000000..36ddf52b --- /dev/null +++ b/Part6Maze/task.yaml @@ -0,0 +1,84 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +categories: [] +context: |- + Nous sommes intéressés par la résolution de labyrinthe (labyrinthe) représenté par une matrice d'entiers 0-1 de taille `nxm`. Cette matrice est un tableau à deux dimensions. Une entrée égale à '1' signifie qu'il y a un mur et que cette position n'est donc pas accessible, tandis que '0' signifie que la position est libre. + + Nous vous demandons d'écrire un code Java pour découvrir le chemin le plus court entre deux coordonnées sur cette matrice de (x1, y1) à (x2, y2). + + Les déplacements ne peuvent être que verticaux ou horizontaux (pas en diagonale), un pas à la fois. + + Le résultat du chemin est un ``Iterable`` de coordonnées de l'origine à la destination. Ces coordonnées sont représentées par des entiers compris entre 0 et `n * m-1`, où un entier 'a' représente la position `x =a/m` et `y=a%m`. + + Si la position de début ou de fin est un mur ou s’il n’ya pas de chemin, il faut renvoyer un ``Iterable`` vide. Il en va de même s'il n'y a pas de chemin entre l'origine et la destination. + + .. code-block:: java + + import java.util.LinkedList; + + public class Maze { + public static Iterable shortestPath(int [][] maze, int x1, int y1, int x2, int y2) { + //TODO + return new LinkedList<>(); + } + + public static int ind(int x,int y, int lg) {return x*lg + y;} + + public static int row(int pos, int mCols) { return pos / mCols; } + + public static int col(int pos, int mCols) { return pos % mCols; } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: 'PART 6 : Maze (implem)' +network_grading: false +order: 32 +problems: + prelim: + type: code_single_line + header: |- + Etant donné un labyrinthe de taille `7x7` + + .. code-block:: java + + public int [][] maze = new int[][] { + // --y--> + {0,0,0,0,0,0,0}, // | + {1,1,0,0,0,0,0}, // x + {0,0,0,0,0,1,0}, // | + {0,1,1,1,1,1,1}, // V + {0,0,0,0,1,0,0}, + {1,1,0,0,1,0,0}, + {0,0,0,0,1,0,0} + }; + + Quel est le chemin le plus court entre la position-origine `(x1 = 0, y1 = 1)` et la position-destination `(x2 = 2, y2 = 1)`? + La réponse est une liste de numéros séparés par des virgules, de l'origine à la destination. Une position (x, y) est représentée par ``x * numColumns + y``. + + **Exemple de résultat:** par exemple pour le chemin allant de `(x1 = 4, y1 = 1)` à `(x2 = 5, y2 = 2)` on note: ``29,30,37`` + default: '' + name: Question préliminaire + implem: + default: '' + type: code + name: Implementation + header: | + Ne changez pas la signature des méthodes existances. Cependant, n'hésitez pas à ajouter d'autres méthodes et à utiliser n'importe quelle collection de l'API Java. + + Coller tout le contenu de votre classe ``Maze`` ici : + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/Part6Maze/templates/Maze.java b/Part6Maze/templates/Maze.java new file mode 100644 index 00000000..0d403130 --- /dev/null +++ b/Part6Maze/templates/Maze.java @@ -0,0 +1,3 @@ +package templates; + +@@implem@@ \ No newline at end of file diff --git a/Part6Maze/unit_test/TestMaze.java b/Part6Maze/unit_test/TestMaze.java new file mode 100644 index 00000000..8a4fbce3 --- /dev/null +++ b/Part6Maze/unit_test/TestMaze.java @@ -0,0 +1,157 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import static org.junit.Assert.*; + +import java.util.*; + + +public class TestMaze{ + + public int [][] maze1 = new int[][] { + {0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0}, + {0,0,0,0,0,1,0}, + {0,1,1,1,1,1,1}, + {0,0,0,0,1,0,0}, + {1,1,0,0,1,0,0}, + {0,0,0,0,1,0,0} + }; + + public int [][] maze2 = new int[][] { + {0,0,0,1,0,0,0}, + {1,1,0,0,0,1,0} + }; + + @Test + @Grade(value=10) + public void testMaze1a() { + Iterable path = Maze.shortestPath(maze1,0,0,6,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,6,0,maze1,path)); + assertTrue(pathArray.length == 15); + } + + @Test + @Grade(value=10) + public void testMaze1b() { + // should not have a path + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,0,0,6,6).iterator().hasNext()); + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,6,6,0,0).iterator().hasNext()); + // start position is a wall + assertTrue(!Maze.shortestPath(maze1,1,0,6,0).iterator().hasNext()); + // end position is a wall + assertTrue(!Maze.shortestPath(maze1,6,0,1,0).iterator().hasNext()); + } + + @Test + @Grade(value=20) + public void testMaze1c() { + Iterable path = Maze.shortestPath(maze1,0,0,0,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,0,0,maze1,path)); + assertTrue(pathArray.length == 1); + } + + @Test + @Grade(value=20) + public void testMaze2a() { + Iterable path = Maze.shortestPath(maze2,0,0,1,6); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,1,6,maze2,path)); + assertTrue(pathArray.length == 10); + } + + @Test (timeout = 20) + @Grade(value=40) + public void testComplexity() { + int positions[][] = new int[2][2]; + int[][] maze = getMaze("maze.txt",24,110, positions); + + long t0 = System.currentTimeMillis(); + Iterable path = Maze.shortestPath(maze, positions[0][0], positions[0][1], positions[1][0], positions[1][1]); + long t1 = System.currentTimeMillis(); + + int count = 0; + for (Integer it: path) { count++; } + //System.out.println(count); + + assertEquals(count, 125); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + private int[][] getMaze(String filename, int row, int col, int positions[][]) { + String line; + int[][] maze = new int[row][col]; + try { + + BufferedReader br = new BufferedReader(new FileReader(filename)); + if (!br.ready()) { + throw new IOException(); + } + int j = 0; + int pos = 0; + while ((line = br.readLine()) != null) { + for(int i = 0; i < line.length(); i++) { + try { + maze[j][i] = Integer.parseInt(line.charAt(i) + ""); + } catch (NumberFormatException r) { + positions[pos][0] = j; + positions[pos][1] = i; + pos++; + ///System.out.println(j+" "+i); + maze[j][i] = 0; + } + } + j++; + } + br.close(); + } catch (IOException e) { + System.out.println(e); + } + return maze; + } + + + public Integer[] toArray(Iterable path) { + LinkedList list = new LinkedList(); + path.forEach(list::add); + return list.toArray(new Integer[0]); + } + + + public static int row(int pos, int mCols) { return pos / mCols; } + + public static int col(int pos, int mCols) { return pos % mCols; } + + public boolean validPathSourceToDest(int x1, int y1, int x2, int y2, int [][] maze, Iterable path) { + int n = maze.length; + int m = maze[0].length; + Iterator ite = path.iterator(); + if (!ite.hasNext()) return false; + int p = ite.next(); + int x = row(p,m); + int y = col(p,m); + if (x != x1 || y != y1) return false; + while (ite.hasNext()) { + p = ite.next(); + int x_ = row(p,m); + int y_ = col(p,m); + if (maze[x][y] == 1) return false; + if (Math.abs(x_-x)+Math.abs(y_-y) != 1) return false; + x = x_; y = y_; + } + if (x != x2 || y != y2) return false; + return true; + } + +} diff --git a/bilan_hashing/task.yaml b/bilan_hashing/task.yaml deleted file mode 100644 index 16b82bc0..00000000 --- a/bilan_hashing/task.yaml +++ /dev/null @@ -1,44 +0,0 @@ -accessible: false -author: xgillard -context: | - Etant donné une fonction de hachage :math:`h(\left[v_0 \cdots v_n \right]) = \sum_{i=0}^{n} v_i R^{(n-i-1)} \% M` dans laquelle :math:`\left[v_0 \cdots v_n \right]` dénote un vecteur de bit et :math:`R` et :math:`M` sont des facteurs constants. -environment: python3 -evaluate: best -groups: false -limits: - memory: '100' - output: '2' - time: '30' -name: Bilan Hashing -network_grading: false -problems: - nombre_pair: - type: multiple_choice - limit: 0 - choices: - - text: Uniquement les bits :math:`\left[v_0 \cdots v_{1023} \right]` - - text: Tous les bits de la clé - - text: Uniquement les bits :math:`\left[v_{n-1024} \cdots v_{n} \right]` - - text: Uniquement les deux derniers bits - valid: true - header: Quelle portion de la clé est utilisée si on pose :math:`R=32` et `M=1024` - ? - name: Fraction de la clé utilisée (1) - mult_trois: - type: multiple_choice - choices: - - text: Tous les bits de la clé - - text: Uniquement les bits :math:`\left[v_0 \cdots v_{80} \right]` - - text: Uniquement les bits :math:`\left[v_{n-81} \cdots v_{n} \right]` - - valid: true - text: Uniquement les quatre derniers bits - limit: 0 - header: Quelle portion de la clé est utilisée si on pose :math:`R=3` et `M=81` - ? - name: Fraction de la clé utilisée (2) -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -weight: 1.0 -order: 19 diff --git a/bilan_m1/._run b/bilan_m1/._run new file mode 100644 index 00000000..36c7285c Binary files /dev/null and b/bilan_m1/._run differ diff --git a/bilan_m1/task.yaml b/bilan_m1/task.yaml index 05b1bd6f..d592f272 100644 --- a/bilan_m1/task.yaml +++ b/bilan_m1/task.yaml @@ -60,45 +60,44 @@ groups: false input_random: '0' limits: output: '2' - memory: '1500' time: '300' -name: Bilan M1 - Circular LinkedList + memory: '1500' +name: '[old] Bilan M1 - Circular LinkedList' network_grading: false -order: 6 +order: 36 problems: size: header: '' - name: size - language: java default: '' + language: java + name: size type: code isEmpty: - default: '' - header: '' - type: code language: java + default: '' name: isEmpty - front: type: code - name: front + header: '' + front: language: java header: '' + type: code + name: front default: '' enqueue: + language: java + type: code default: '' header: '' - language: java name: enqueue - type: code dequeue: - language: java type: code - default: '' name: dequeue header: '' + language: java + default: '' stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 diff --git a/bilan_m2_global_warming/task.yaml b/bilan_m2_global_warming/task.yaml deleted file mode 100644 index 9879cec1..00000000 --- a/bilan_m2_global_warming/task.yaml +++ /dev/null @@ -1,144 +0,0 @@ -accessible: false -author: Pierre Schaus -context: |+ - Context - ================================================== - - Assume the following 5x5 matrix: - - .. code-block:: java - - int [][] tab = new int[][] {{1,3,3,1,3}, - {4,2,2,4,5}, - {4,4,1,4,2}, - {1,4,2,3,6}, - {1,1,1,6,3}}; - - represented in the array here under: - - .. image:: bilan_m2_global_warming/matrix.png - :width: 200px - :align: center - :alt: matrix example - - Each entry of the matrix represents an altitude. - The objective is to implement a class `GlobalWarmingImpl` that the method described in `GlobalWarming` given next. - - Given a global water level, all the positions of the matrix with a value <= the water level are flooded (under the water) and thus unsafe. So assuming the water level is 3, all the safe points are green. - - The methods you must implement is - - * the computations of the number of safe-points given a specified water level - - - .. code-block:: java - - - import java.util.List; - - abstract class GlobalWarming { - - - final int[][] altitude; - - /** - * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) - */ - public GlobalWarming(int[][] altitude) { - this.altitude = altitude; - } - - /** - * - * @param waterLevel - * @return the number of entries in altitude matrix that would be above - * the specified waterLevel. - * Warning: this is not the waterLevel given in the constructor/ - */ - public abstract int nbSafePoints(int waterLevel); - - } - - - - Preliminary exercises - ================================================== - - - .. code-block:: java - - int [][] tab = new int[][] {{1,3,3,1,3}, - {4,2,2,4,5}, - {4,4,1,4,2}, - {1,4,2,3,6}, - {1,1,1,6,3}}; - GlobalWarming gw = new MyGlobalWarming(tab); - - - -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - output: '100' - memory: '750' - time: '120' -name: Bilan M3 - Global Warming -network_grading: false -order: 12 -problems: - nbSafePoints: - type: match - header: |- - What would be the result of - - .. code-block:: java - - gw.nbSafePoints(2) - - - expected: a number - name: nbSafePoints - answer: '14' - implementation: - language: java - header: |+ - Copy-paste and complete the code below. - Be careful with the expected time-complexity in each method. - To meet these time-complexity some precomputation should already be done in the constructor. Don't hesitate to create inner classes in GlobalWarmingImpl to facilitate your implementation. - Feel free to use any method or data-structure available in the Java language and API. - - .. code-block:: java - - import java.util.*; - - public class GlobalWarmingImpl extends GlobalWarming { - - public GlobalWarmingImpl(int[][] altitude) { - super(altitude); - // expected pre-processing time in the constructror : O(n^2 log(n^2)) - // TODO - } - - - public int nbSafePoints(int waterLevel) { - // TODO - // expected time complexity O(log(n^2)) - return 0; - } - - } - - - - - type: code - default: '' - name: '' -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 1.0 diff --git a/bilan_m4_incrementalhash/task.yaml b/bilan_m4_incrementalhash/task.yaml index 472f755b..43969a70 100644 --- a/bilan_m4_incrementalhash/task.yaml +++ b/bilan_m4_incrementalhash/task.yaml @@ -1,7 +1,7 @@ accessible: false author: Pierre Schaus context: |+ - La fonction de Hash calculée sur le sous tableau t[from,...,from+M-1] est calculée comme suit: + La fonction de Hash calculée sur le sous tableau :math:`t[from,...,from+M-1]` est calculée comme suit: :math:`hash([from,...,from+M-1])= \left( \sum_{i=0}^{M-1} t[from+i] \cdot R^{(M-1-i)}\right)\%Q` @@ -16,17 +16,18 @@ evaluate: best groups: false input_random: '0' limits: + time: '30' output: '2' memory: '100' - time: '30' -name: Bilan M4 - Incremental Hash +name: '[old] Bilan M4 Incremental Hash (implem)' network_grading: false -order: 18 +order: 55 problems: TODO1: - default: '' - language: java name: IncrementalHash.java + language: java + default: '' + type: code header: |- Mettez votre implémentation complète de ``IncrementalHash.java`` ci-dessous. Conseil: copiez-collez d'abord tout le code source de la classe ci-dessous (celle-ci devrait compiler mais son contenu n'est pas correct). Voir le TODO ci-dessous. La réponse ne devrait pas prendre plus de deux lignes de code à ajouter. @@ -87,10 +88,8 @@ problems: return h; } } - type: code stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 diff --git a/bilan_m5_huffman/Huffman.java b/bilan_m5_huffman/Huffman.java deleted file mode 100644 index 6aeefbbc..00000000 --- a/bilan_m5_huffman/Huffman.java +++ /dev/null @@ -1,2 +0,0 @@ -@@TODO1@@ - diff --git a/bilan_m5_huffman/HuffmanTest.java b/bilan_m5_huffman/HuffmanTest.java deleted file mode 100644 index 22b1a855..00000000 --- a/bilan_m5_huffman/HuffmanTest.java +++ /dev/null @@ -1,233 +0,0 @@ - -import java.io.IOException; -import java.util.*; - - -public class HuffmanTest { - public static class MyNodeComparator implements Comparator { - @Override - public int compare(Huffman.Node o1, Huffman.Node o2) { - return o1.freq - o2.freq; - } - } - - - // build the Huffman trie given frequencies - private Huffman.Node buildTrie1(int[] freq) { - - // initialze priority queue with singleton trees - MinPQ pq = new MinPQ(0,new MyNodeComparator()); - - - for (int i = 0; i < freq.length; i++) { - if (freq[i] > 0) - pq.insert(new Huffman.Node(i, freq[i], null, null)); - } - - // special case in case there is only one character with a nonzero frequency - if (pq.size() == 1) { - if (freq[0] == 0) pq.insert(new Huffman.Node(0, 0, null, null)); - else pq.insert(new Huffman.Node(1, 0, null, null)); - } - - // merge two smallest trees - while (pq.size() > 1) { - Huffman.Node left = pq.delMin(); - Huffman.Node right = pq.delMin(); - Huffman.Node parent = new Huffman.Node(0, left.freq + right.freq, left, right); - pq.insert(parent); - } - return pq.delMin(); - } - - - private void collectLeafNodes(List nodes, Huffman.Node n) { - - Stack open = new Stack(); - open.add(n); - - while (!open.isEmpty()) { - Huffman.Node curr = open.pop(); - if (curr.isLeaf()) nodes.add(curr); - else { - open.add(curr.right); - open.add(curr.left); - } - } - } - - private int[] getRandomInstance(int size, int seed) { - int [] input = new int[size]; - for (int i = 0; i < size; i++) { - input[i] = i+1; - } - Random rnd = new Random(seed); - for (int i = 0; i < size; i++) { - int idx1 = rnd.nextInt(size); - int idx2 = rnd.nextInt(size); - int tmp = input[idx1]; - input[idx1] = input[idx2]; - input[idx2] = tmp; - } - return input; - } - - - - public boolean noCharactersDeleted() { - int [] input = getRandomInstance(256, 0); - - Huffman.Node root = Huffman.buildTrie(input.length, input); - LinkedList leafNodes = new LinkedList<>(); - collectLeafNodes(leafNodes,root); - return input.length == leafNodes.size(); - - } - - - public boolean leafNodesHaveTheCorrectFrequencies() { - int [] input = getRandomInstance(256, 1); - Huffman.Node root = Huffman.buildTrie(input.length, input); - LinkedList leafNodes = new LinkedList<>(); - for (Huffman.Node n: leafNodes) { - if (n.freq != input[n.ch]) return false; - } - return true; - } - - - public boolean internalNodesHaveTheCorrectFrequencies() { - int [] input = getRandomInstance(256, 2); - Huffman.Node root = Huffman.buildTrie(input.length, input); - return checkSumChildrenFreqs(root); - } - - private boolean checkSumChildrenFreqs(Huffman.Node n) { - Stack open = new Stack(); - open.add(n); - while (!open.isEmpty()) { - Huffman.Node curr = open.pop(); - if (!curr.isLeaf()) { - if (curr.freq != curr.left.freq+curr.right.freq) return false; - open.add(curr.right); - open.add(curr.left); - } - } - return true; - } - - - public boolean minimalWeightedExternalPathLength() { - int [] input = getRandomInstance(256, 3); - Huffman.Node root1 = Huffman.buildTrie(input.length, input); - Huffman.Node root2= buildTrie1(input); - return weightedExternalPathLength(root1,0) == weightedExternalPathLength(root2,0); - } - - public boolean complexityOk() { - int[] input = getRandomInstance(65536, 3); - - boolean timeOk = new TimeLimitedCodeBlock() { - @Override - public void codeBlock() { - Huffman.Node root1 = Huffman.buildTrie(input.length, input); - } - }.run(300); - if (!timeOk) return false; - else return true; - } - - - private int weightedExternalPathLength(Huffman.Node n, int depth) { - Stack> open = new Stack>(); - open.add(new AbstractMap.SimpleEntry(n,0)); - int res = 0; - while (!open.isEmpty()) { - Map.Entry nodeDepth = open.pop(); - - Huffman.Node curr = nodeDepth.getKey(); - if (curr.isLeaf()) res += curr.freq*nodeDepth.getValue(); - else { - open.add(new AbstractMap.SimpleEntry(curr.right,nodeDepth.getValue()+1)); - open.add(new AbstractMap.SimpleEntry(curr.left,nodeDepth.getValue()+1)); - } - } - return res; - } - - public void feedback(String message) { - System.out.println(message); - try { - Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n"+message+"\n"}).waitFor(); - } - catch (IOException e) {e.printStackTrace(); } - catch (InterruptedException e) {e.printStackTrace(); } - } - - public void testGrade() { - try{ - int score = 0; - - - if (noCharactersDeleted()) - score += 10; - else { - feedback("Le nombre de feuille devrait être égal au nombre de caractères: -10%"); - } - - if (leafNodesHaveTheCorrectFrequencies()) - score += 10; - else { - feedback("Les feuilles n'ont pas toujours les fréquences adéquates: -10%"); - } - - if (internalNodesHaveTheCorrectFrequencies()) - score += 10; - else { - feedback("Les noeuds internes n'ont pas toujours des fréquences valides: -10%"); - } - - if (minimalWeightedExternalPathLength()) - score += 30; - else { - feedback("La taille pondérée du chemin interne n'est pas minimale, la topologie de votre arbre est incorrecte: -30%"); - } - - if (score < 60) { - feedback( "Votre programme étant incorrect, la vérification de la complexité temporelle n'est pas effectuée: -40%"); - } else { - if (complexityOk()) - score += 40; - else { - feedback("Complexité temporelle trop élevée: -40%"); - } - } - - System.out.println("%score:" + score); - try { - Runtime.getRuntime().exec("feedback-grade "+score).waitFor(); - - if (score == 100) { - Runtime.getRuntime().exec("feedback-result success").waitFor(); - feedback("Félicitations!"); - } - else { - feedback("Il vous reste des problèmes à résoudre..."); - Runtime.getRuntime().exec("feedback-result failed").waitFor(); - } - - } catch (IOException e) { - e.printStackTrace(); - } - -} catch(InterruptedException e) {} - } - - - public static void main(String[] args) { - new HuffmanTest().testGrade(); - System.exit(0); - } - - -} \ No newline at end of file diff --git a/bilan_m5_huffman/MinPQ.java b/bilan_m5_huffman/MinPQ.java deleted file mode 100644 index c2bd3d48..00000000 --- a/bilan_m5_huffman/MinPQ.java +++ /dev/null @@ -1,232 +0,0 @@ -import java.util.Comparator; -import java.util.Iterator; -import java.util.NoSuchElementException; - - -import java.util.NoSuchElementException; - -public class MinPQ implements Iterable { - private Key[] pq; // store items at indices 1 to n - private int n; // number of items on priority queue - private Comparator comparator; // optional comparator - - /** - * Initializes an empty priority queue with the given initial capacity. - * - * @param initCapacity the initial capacity of this priority queue - */ - public MinPQ(int initCapacity) { - pq = (Key[]) new Object[initCapacity + 1]; - n = 0; - } - - /** - * Initializes an empty priority queue. - */ - public MinPQ() { - this(1); - } - - /** - * Initializes an empty priority queue with the given initial capacity, - * using the given comparator. - * - * @param initCapacity the initial capacity of this priority queue - * @param comparator the order to use when comparing keys - */ - public MinPQ(int initCapacity, Comparator comparator) { - this.comparator = comparator; - pq = (Key[]) new Object[initCapacity + 1]; - n = 0; - } - - /** - * Initializes an empty priority queue using the given comparator. - * - * @param comparator the order to use when comparing keys - */ - public MinPQ(Comparator comparator) { - this(1, comparator); - } - - /** - * Initializes a priority queue from the array of keys. - *

- * Takes time proportional to the number of keys, using sink-based heap construction. - * - * @param keys the array of keys - */ - public MinPQ(Key[] keys) { - n = keys.length; - pq = (Key[]) new Object[keys.length + 1]; - for (int i = 0; i < n; i++) - pq[i+1] = keys[i]; - for (int k = n/2; k >= 1; k--) - sink(k); - assert isMinHeap(); - } - - /** - * Returns true if this priority queue is empty. - * - * @return {@code true} if this priority queue is empty; - * {@code false} otherwise - */ - public boolean isEmpty() { - return n == 0; - } - - /** - * Returns the number of keys on this priority queue. - * - * @return the number of keys on this priority queue - */ - public int size() { - return n; - } - - /** - * Returns a smallest key on this priority queue. - * - * @return a smallest key on this priority queue - * @throws NoSuchElementException if this priority queue is empty - */ - public Key min() { - if (isEmpty()) throw new NoSuchElementException("Priority queue underflow"); - return pq[1]; - } - - // helper function to double the size of the heap array - private void resize(int capacity) { - assert capacity > n; - Key[] temp = (Key[]) new Object[capacity]; - for (int i = 1; i <= n; i++) { - temp[i] = pq[i]; - } - pq = temp; - } - - /** - * Adds a new key to this priority queue. - * - * @param x the key to add to this priority queue - */ - public void insert(Key x) { - // double size of array if necessary - if (n == pq.length - 1) resize(2 * pq.length); - - // add x, and percolate it up to maintain heap invariant - pq[++n] = x; - swim(n); - assert isMinHeap(); - } - - /** - * Removes and returns a smallest key on this priority queue. - * - * @return a smallest key on this priority queue - * @throws NoSuchElementException if this priority queue is empty - */ - public Key delMin() { - if (isEmpty()) throw new NoSuchElementException("Priority queue underflow"); - exch(1, n); - Key min = pq[n--]; - sink(1); - pq[n+1] = null; // avoid loitering and help with garbage collection - if ((n > 0) && (n == (pq.length - 1) / 4)) resize(pq.length / 2); - assert isMinHeap(); - return min; - } - - - /*************************************************************************** - * Helper functions to restore the heap invariant. - ***************************************************************************/ - - private void swim(int k) { - while (k > 1 && greater(k/2, k)) { - exch(k, k/2); - k = k/2; - } - } - - private void sink(int k) { - while (2*k <= n) { - int j = 2*k; - if (j < n && greater(j, j+1)) j++; - if (!greater(k, j)) break; - exch(k, j); - k = j; - } - } - - /*************************************************************************** - * Helper functions for compares and swaps. - ***************************************************************************/ - private boolean greater(int i, int j) { - if (comparator == null) { - return ((Comparable) pq[i]).compareTo(pq[j]) > 0; - } - else { - return comparator.compare(pq[i], pq[j]) > 0; - } - } - - private void exch(int i, int j) { - Key swap = pq[i]; - pq[i] = pq[j]; - pq[j] = swap; - } - - // is pq[1..N] a min heap? - private boolean isMinHeap() { - return isMinHeap(1); - } - - // is subtree of pq[1..n] rooted at k a min heap? - private boolean isMinHeap(int k) { - if (k > n) return true; - int left = 2*k; - int right = 2*k + 1; - if (left <= n && greater(k, left)) return false; - if (right <= n && greater(k, right)) return false; - return isMinHeap(left) && isMinHeap(right); - } - - - /** - * Returns an iterator that iterates over the keys on this priority queue - * in ascending order. - *

- * The iterator doesn't implement {@code remove()} since it's optional. - * - * @return an iterator that iterates over the keys in ascending order - */ - public Iterator iterator() { return new HeapIterator(); } - - private class HeapIterator implements Iterator { - // create a new pq - private MinPQ copy; - - // add all items to copy of heap - // takes linear time since already in heap order so no keys move - public HeapIterator() { - if (comparator == null) copy = new MinPQ(size()); - else copy = new MinPQ(size(), comparator); - for (int i = 1; i <= n; i++) - copy.insert(pq[i]); - } - - public boolean hasNext() { return !copy.isEmpty(); } - public void remove() { throw new UnsupportedOperationException(); } - - public Key next() { - if (!hasNext()) throw new NoSuchElementException(); - return copy.delMin(); - } - } - - - -} - diff --git a/bilan_m5_huffman/TimeLimitedCodeBlock.java b/bilan_m5_huffman/TimeLimitedCodeBlock.java deleted file mode 100644 index 5790761b..00000000 --- a/bilan_m5_huffman/TimeLimitedCodeBlock.java +++ /dev/null @@ -1,38 +0,0 @@ -import java.util.concurrent.*; - - - -public abstract class TimeLimitedCodeBlock { - - public boolean run(long time) { - final Runnable stuffToDo = new Thread() { - @Override - public void run() { - codeBlock(); - } - }; - - final ExecutorService executor = Executors.newSingleThreadExecutor(); - final Future future = executor.submit(stuffToDo); - executor.shutdown(); // This does not cancel the already-scheduled task. - boolean ok = true; - try { - future.get(time, TimeUnit.MILLISECONDS); - } catch (InterruptedException ie) { - ok = false; - } catch (ExecutionException ee) { - ok = false; - } catch (TimeoutException te) { - ok = false; - } - if (!executor.isTerminated()) { - future.cancel(true); - executor.shutdownNow(); - executor.shutdownNow(); // If you want to stop the code that hasn't finished. - } - return ok; - } - - public abstract void codeBlock(); -} - diff --git a/bilan_m5_huffman/public/huffmanin.png b/bilan_m5_huffman/public/huffmanin.png deleted file mode 100644 index bbf60de1..00000000 Binary files a/bilan_m5_huffman/public/huffmanin.png and /dev/null differ diff --git a/bilan_m5_huffman/run b/bilan_m5_huffman/run deleted file mode 100644 index 19624b77..00000000 --- a/bilan_m5_huffman/run +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -export LC_ALL=en_US.UTF-8 -export LANG=en_US.UTF-8 -export LANGUAGE=en_US.UTF-8 - - -#produce the output directory -mkdir output - -# parse templates -parsetemplate Huffman.java - -# run sur un seul exemple pour les erreurs de compilation etc - -javac -Xlint:none -cp . HuffmanTest.java 2> output/comp.err - -java -cp . HuffmanTest 2> output/run.err > output/std.out - - -# add files to archive -#archive -a Median.java -#for f in $(ls output); do -#archive -a output/$f -#done - -# run feedback -if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error - echo "compilation error" - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" - cat output/comp.err | rst-code | feedback-msg -a - exit -fi - - - - - -if [ -s output/run.err ]; then # error in main() - echo "runtime error" - feedback-grade 0 - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" - cat output/run.err | rst-code | feedback-msg -a - exit -fi -echo "testing ok" - diff --git a/bilan_m5_huffman/task.yaml b/bilan_m5_huffman/task.yaml deleted file mode 100644 index e680ce02..00000000 --- a/bilan_m5_huffman/task.yaml +++ /dev/null @@ -1,86 +0,0 @@ -accessible: false -author: '' -context: |- - Vous devez calculer un arbre de Huffman au départ de la fréquence donnée pour chacune des R lettres (characters). - - Pour rappel, dans un arbre de Huffman nous avons que *la somme de la fréquence associée à chaque feuille multipliée par la profondeur de celle-ci est minimale*. - - Par exemple, étant donné les fréquences suivantes: - - .. image:: bilan_m5_huffman/huffmanin.png - :width: 500px - :align: center - :alt: Input frequencies - - un arbre de Huffman pourrait être: - - .. image:: bilan_m5_huffman/huffmanout.png - :width: 500px - :align: center - :alt: Huffman tree -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - output: '2' - memory: '100' - time: '30' -name: Bilan M5 - Huffman -network_grading: false -order: 24 -problems: - TODO1: - default: '' - language: java - name: '' - header: |- - Le but de cette question de faire fonctionner correctement la méthode ``buildTree``. - Vous pouvez modifier la classe ci-dessous (ajouter des méthodes, définir des inner-classes, etc) comme vous le souhaitez, mais ne changez pas la signature des méthodes existantes et le constructeur. - Mettez votre implémentation complète de ``Huffman.java`` ci-dessous. Conseil: copiez-collez d'abord tout le code source de la classe ci-dessus (celle-ci devrait compiler mais son contenu n'est pas correct). Si vous avez besoin d'une structure de donnée auxiliaire, celle-ci est certainement disponible dans ``java.util``. Il n'est dès lors pas nécessaire de la réimplémenter. - - - .. code-block:: java - - public class Huffman { - private Huffman() { } - - // Huffman trie node - public static class Node { - public final int ch; - public final int freq; - public final Node left, right; - - Node(int ch, int freq, Node left, Node right) { - this.ch = ch; - this.freq = freq; - this.left = left; - this.right = right; - } - - // is the node a leaf node? - public boolean isLeaf() { - assert ((left == null) && (right == null)) || ((left != null) && (right != null)); - return (left == null) && (right == null); - } - } - - /** - * build the Huffman trie given frequencies - * corresponding to each character codes from 0 to R-1. - * freq[i] is the frequency for the character with code i - * freq.length = R. - * R is either 256 or 65536, depending on whether the user choose to use unicode or ASCII. - */ - public static Node buildTrie(int R, int[] freq) { - // TODO - return new Node(0,0,null,null); - } - } - type: code -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 1.0 diff --git a/bilan_m6_cc/ConnectedComponents.java b/bilan_m6_cc/ConnectedComponents.java deleted file mode 100644 index 345f0738..00000000 --- a/bilan_m6_cc/ConnectedComponents.java +++ /dev/null @@ -1,2 +0,0 @@ - -@@TODO1@@ \ No newline at end of file diff --git a/bilan_m6_cc/ConnectedComponentsTest.java b/bilan_m6_cc/ConnectedComponentsTest.java deleted file mode 100644 index 51cb4112..00000000 --- a/bilan_m6_cc/ConnectedComponentsTest.java +++ /dev/null @@ -1,207 +0,0 @@ - -import java.io.IOException; - -import java.util.Random; - -public class ConnectedComponentsTest { - - private class Feedback { - public String value; - public Feedback () {} - } - - private static class WeightedQuickUnionUF { - private int[] parent; // parent[i] = parent of i - private int[] size; // size[i] = number of sites in subtree rooted at i - private int count; // number of components - - public WeightedQuickUnionUF(int n) { - count = n; - parent = new int[n]; - size = new int[n]; - for (int i = 0; i < n; i++) { - parent[i] = i; - size[i] = 1; - } - } - - - public int count() { - return count; - } - - public int find(int p) { - validate(p); - while (p != parent[p]) - p = parent[p]; - return p; - } - - // validate that p is a valid index - private void validate(int p) { - int n = parent.length; - if (p < 0 || p >= n) { - throw new IndexOutOfBoundsException("index " + p + " is not between 0 and " + (n - 1)); - } - } - - public boolean connected(int p, int q) { - return find(p) == find(q); - } - - public void union(int p, int q) { - int rootP = find(p); - int rootQ = find(q); - if (rootP == rootQ) return; - - // make smaller root point to larger one - if (size[rootP] < size[rootQ]) { - parent[rootP] = rootQ; - size[rootQ] += size[rootP]; - } else { - parent[rootQ] = rootP; - size[rootP] += size[rootQ]; - } - count--; - } - } - - public boolean testRandomGraphOk(int n, int e, Feedback f) { - Graph g = new Graph(n); - WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); - Random r = new Random(6); - for (int i = 0; i < e; i++) { - int orig = r.nextInt(n); - int dest = r.nextInt(n); - uf.union(orig,dest); - g.addEdge(orig,dest); - } - int nbCC = ConnectedComponents.numberOfConnectedComponents(g); - int expectedCC = uf.count(); - if (expectedCC == nbCC) { - return true; - } else { - f.value = "Number of connected components on a random graph with " + n + " node(s) and " + e + " edge(s) is incorrect (Expected: " - + expectedCC + ", Got: " + nbCC + ")"; - return false; - } - } - - public boolean cycleGraphOk() { - int n = 1000; - Graph g = new Graph(n); - WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); - for (int i = 0; i < n; i++) { - uf.union(i,(i+1)%n); - g.addEdge(i,(i+1)%n); - } - return (uf.count() == ConnectedComponents.numberOfConnectedComponents(g)); - } - - - public boolean complexityOk() { - int n = 10000; - Graph g = new Graph(n); - for (int i = 0; i < n; i++) { - g.addEdge(i,(i+1)%n); - } - boolean timeOk = new TimeLimitedCodeBlock() { - @Override - public void codeBlock() { - ConnectedComponents.numberOfConnectedComponents(g); - } - }.run(300); - if (!timeOk) return false; - else return true; - } - - public void feedback(String message) { - System.out.println(message); - try { - Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n"+message+"\n"}).waitFor(); - } - catch (IOException e) {e.printStackTrace(); } - catch (InterruptedException e) {e.printStackTrace(); } - } - - - public void grade() { - try{ - int score = 0; - - Feedback f = new Feedback(); - if (testRandomGraphOk(600,120,f)) - score += 10; - else { - feedback(f.value); - } - - if (testRandomGraphOk(220,7,f)) - score += 10; - else { - feedback(f.value); - } - - if (testRandomGraphOk(105,3,f)) - score += 10; - else { - feedback(f.value); - } - - if (testRandomGraphOk(0,0,f)) - score += 10; - else { - feedback(f.value); - } - - if (testRandomGraphOk(10,2*10,f)) - score += 10; - else { - feedback(f.value); - } - - if (cycleGraphOk()) - score += 10; - else { - feedback("number of connected components on cycle not ok:-10"); - } - - - if (score < 60) { - feedback( "while not everything is correct, time complexity verification skipped:-40"); - } else { - if (complexityOk()) - score += 40; - else { - feedback("time complexity too high:-40"); - } - } - - System.out.println("%score:" + score); - try { - Runtime.getRuntime().exec("feedback-grade "+score).waitFor(); - - if (score == 100) { - Runtime.getRuntime().exec("feedback-result success").waitFor(); - feedback("congratulation"); - } - else { - feedback("not yet there ..."); - Runtime.getRuntime().exec("feedback-result failed").waitFor(); - } - - } catch (IOException e) { - e.printStackTrace(); - } - - } catch(InterruptedException e) {} - } - - - public static void main(String[] args) { - new ConnectedComponentsTest().grade(); - System.exit(0); - - } - -} \ No newline at end of file diff --git a/bilan_m6_cc/Graph.java b/bilan_m6_cc/Graph.java deleted file mode 100644 index 9395522d..00000000 --- a/bilan_m6_cc/Graph.java +++ /dev/null @@ -1,142 +0,0 @@ - -import java.util.LinkedList; -import java.util.NoSuchElementException; - -/** - * The {@code Graph} class represents an undirected graph of vertices - * named 0 through V - 1. - * It supports the following two primary operations: add an edge to the graph, - * iterate over all of the vertices adjacent to a vertex. It also provides - * methods for returning the number of vertices V and the number - * of edges E. Parallel edges and self-loops are permitted. - * By convention, a self-loop v-v appears in the - * adjacency list of v twice and contributes two to the degree - * of v. - *

- * This implementation uses an adjacency-lists representation. - * All operations take constant time (in the worst case) except - * iterating over the vertices adjacent to a given vertex, which takes - * time proportional to the number of such vertices. - *

- * For additional documentation, see Section 4.1 - * of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. - * - * @author Robert Sedgewick - * @author Kevin Wayne - */ -public class Graph { - private static final String NEWLINE = System.getProperty("line.separator"); - - private final int V; - private int E; - private LinkedList[] adj; - - /** - * Initializes an empty graph with {@code V} vertices and 0 edges. - * param V the number of vertices - * - * @param V number of vertices - * @throws IllegalArgumentException if {@code V < 0} - */ - public Graph(int V) { - if (V < 0) throw new IllegalArgumentException("Number of vertices must be nonnegative"); - this.V = V; - this.E = 0; - adj = (LinkedList[]) new LinkedList[V]; - for (int v = 0; v < V; v++) { - adj[v] = new LinkedList(); - } - } - - - - - - /** - * Returns the number of vertices in this graph. - * - * @return the number of vertices in this graph - */ - public int V() { - return V; - } - - /** - * Returns the number of edges in this graph. - * - * @return the number of edges in this graph - */ - public int E() { - return E; - } - - // throw an IllegalArgumentException unless {@code 0 <= v < V} - private void validateVertex(int v) { - if (v < 0 || v >= V) - throw new IllegalArgumentException("vertex " + v + " is not between 0 and " + (V-1)); - } - - /** - * Adds the undirected edge v-w to this graph. - * - * @param v one vertex in the edge - * @param w the other vertex in the edge - * @throws IllegalArgumentException unless both {@code 0 <= v < V} and {@code 0 <= w < V} - */ - public void addEdge(int v, int w) { - validateVertex(v); - validateVertex(w); - E++; - adj[v].add(w); - adj[w].add(v); - } - - - /** - * Returns the vertices adjacent to vertex {@code v}. - * - * @param v the vertex - * @return the vertices adjacent to vertex {@code v}, as an iterable - * @throws IllegalArgumentException unless {@code 0 <= v < V} - */ - public Iterable adj(int v) { - validateVertex(v); - return adj[v]; - } - - /** - * Returns the degree of vertex {@code v}. - * - * @param v the vertex - * @return the degree of vertex {@code v} - * @throws IllegalArgumentException unless {@code 0 <= v < V} - */ - public int degree(int v) { - validateVertex(v); - return adj[v].size(); - } - - - /** - * Returns a string representation of this graph. - * - * @return the number of vertices V, followed by the number of edges E, - * followed by the V adjacency lists - */ - public String toString() { - StringBuilder s = new StringBuilder(); - s.append(V + " vertices, " + E + " edges " + NEWLINE); - for (int v = 0; v < V; v++) { - s.append(v + ": "); - for (int w : adj[v]) { - s.append(w + " "); - } - s.append(NEWLINE); - } - return s.toString(); - } - - - -} - diff --git a/bilan_m6_cc/TimeLimitedCodeBlock.java b/bilan_m6_cc/TimeLimitedCodeBlock.java deleted file mode 100644 index f8d00b22..00000000 --- a/bilan_m6_cc/TimeLimitedCodeBlock.java +++ /dev/null @@ -1,37 +0,0 @@ - -import java.util.concurrent.*; - - -public abstract class TimeLimitedCodeBlock { - - public boolean run(long time) { - final Runnable stuffToDo = new Thread() { - @Override - public void run() { - codeBlock(); - } - }; - - final ExecutorService executor = Executors.newSingleThreadExecutor(); - final Future future = executor.submit(stuffToDo); - executor.shutdown(); // This does not cancel the already-scheduled task. - - try { - future.get(time, TimeUnit.MILLISECONDS); - } catch (InterruptedException ie) { - /* Handle the interruption. Or ignore it. */ - return false; - } catch (ExecutionException ee) { - /* Handle the error. Or ignore it. */ - } catch (TimeoutException te) { - /* Handle the timeout. Or ignore it. */ - return false; - } - if (!executor.isTerminated()) - executor.shutdownNow(); // If you want to stop the code that hasn't finished. - return true; - } - - public abstract void codeBlock(); -} - diff --git a/bilan_m6_cc/public/graph.png b/bilan_m6_cc/public/graph.png deleted file mode 100644 index e58f0494..00000000 Binary files a/bilan_m6_cc/public/graph.png and /dev/null differ diff --git a/bilan_m6_cc/run b/bilan_m6_cc/run deleted file mode 100644 index 588b54c3..00000000 --- a/bilan_m6_cc/run +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -export LC_ALL=en_US.UTF-8 -export LANG=en_US.UTF-8 -export LANGUAGE=en_US.UTF-8 - - - - -# test preliminary question - -a=`getinput TODO0` -if [ "$a" -ne 3 ]; then - echo "failed"; - feedback-result failed - feedback-msg -ae -m "Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice \n" - exit -fi - -#produce the output directory -mkdir output - -# parse templates -parsetemplate ConnectedComponents.java - -# run sur un seul exemple pour les erreurs de compilation etc - -javac -Xlint:none -cp . ConnectedComponentsTest.java 2> output/comp.err - -java -cp . ConnectedComponentsTest 2> output/run.err > output/std.out - - -# add files to archive -#archive -a Median.java -#for f in $(ls output); do -#archive -a output/$f -#done - -# run feedback -if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error - echo "compilation error" - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" - cat output/comp.err | rst-code | feedback-msg -a - exit -fi - - - - - -if [ -s output/run.err ]; then # error in main() - echo "runtime error" - feedback-grade 0 - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" - cat output/run.err | rst-code | feedback-msg -a - exit -fi -echo "testing ok" - diff --git a/bilan_m6_cc/task.yaml b/bilan_m6_cc/task.yaml index 3ca2f6be..f4c32814 100644 --- a/bilan_m6_cc/task.yaml +++ b/bilan_m6_cc/task.yaml @@ -22,15 +22,15 @@ evaluate: best groups: false input_random: '0' limits: - output: '2' - memory: '250' - hard_time: '30' time: '30' -name: Bilan M6 - Connected Components + hard_time: '30' + memory: '250' + output: '2' +name: '[old] Bilan M6 - Connected Components' network_grading: false -order: 32 problems: TODO0: + answer: '3' header: |- Combien de composante(s) connexe(s) y a-t-il dans le graph suivant? @@ -38,12 +38,12 @@ problems: :width: 300px :align: center :alt: graph example - answer: '3' - type: match name: Exercice préliminaire + type: match TODO1: default: '' language: java + type: code name: Code header: |+ Mettez votre implémentation complète de ``ConnectedComponents.java`` ci-dessous. @@ -51,10 +51,9 @@ problems: N'hésitez pas à ajouter des méthodes ou des même des inner-class (``private static class`` ...) pour vous aider mais ne modifiez pas le nom de la classe ni la signature de la méthode ``numberOfConnectedComponents``. N'oubliez pas d'ajouter les imports au début de votre code si vous utilisez des objets de l'API de `Java `_. - type: code stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 +order: 43 diff --git a/build b/build old mode 100755 new mode 100644 diff --git a/closestpair/.DS_Store b/closestpair/.DS_Store new file mode 100644 index 00000000..fb962304 Binary files /dev/null and b/closestpair/.DS_Store differ diff --git a/closestpair/._.DS_Store b/closestpair/._.DS_Store new file mode 100644 index 00000000..3fe8c188 Binary files /dev/null and b/closestpair/._.DS_Store differ diff --git a/closestpair/._foo.java b/closestpair/._foo.java new file mode 100644 index 00000000..9784aee3 Binary files /dev/null and b/closestpair/._foo.java differ diff --git a/p1circularlinkedlist/._libs b/closestpair/._libs similarity index 95% rename from p1circularlinkedlist/._libs rename to closestpair/._libs index 32d2afa8..1c3fb689 100644 Binary files a/p1circularlinkedlist/._libs and b/closestpair/._libs differ diff --git a/closestpair/._public b/closestpair/._public new file mode 100644 index 00000000..1730ccfe Binary files /dev/null and b/closestpair/._public differ diff --git a/closestpair/._run b/closestpair/._run new file mode 100644 index 00000000..6697211c Binary files /dev/null and b/closestpair/._run differ diff --git a/closestpair/._student b/closestpair/._student new file mode 100644 index 00000000..f4f5a410 Binary files /dev/null and b/closestpair/._student differ diff --git a/p1circularlinkedlist/._task.yaml b/closestpair/._task.yaml similarity index 93% rename from p1circularlinkedlist/._task.yaml rename to closestpair/._task.yaml index 72e11ebd..0772ed10 100644 Binary files a/p1circularlinkedlist/._task.yaml and b/closestpair/._task.yaml differ diff --git a/p1circularlinkedlist/._tests b/closestpair/._tests similarity index 95% rename from p1circularlinkedlist/._tests rename to closestpair/._tests index 31a07eb4..7e62cd0f 100644 Binary files a/p1circularlinkedlist/._tests and b/closestpair/._tests differ diff --git a/closestpair/foo.java b/closestpair/foo.java new file mode 100644 index 00000000..ab170a28 --- /dev/null +++ b/closestpair/foo.java @@ -0,0 +1,13 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run(ClosestPairTest.class); + } +} \ No newline at end of file diff --git a/p1circularlinkedlist/libs/._JavaGrading-0.1.jar b/closestpair/libs/._JavaGrading-0.1.jar similarity index 95% rename from p1circularlinkedlist/libs/._JavaGrading-0.1.jar rename to closestpair/libs/._JavaGrading-0.1.jar index 836bfb91..1a2ff4bb 100644 Binary files a/p1circularlinkedlist/libs/._JavaGrading-0.1.jar and b/closestpair/libs/._JavaGrading-0.1.jar differ diff --git a/closestpair/libs/._hamcrest-core-1.3 2.jar b/closestpair/libs/._hamcrest-core-1.3 2.jar new file mode 100644 index 00000000..e36c5a06 Binary files /dev/null and b/closestpair/libs/._hamcrest-core-1.3 2.jar differ diff --git a/p1circularlinkedlist/libs/._hamcrest-core-1.3.jar b/closestpair/libs/._hamcrest-core-1.3.jar similarity index 95% rename from p1circularlinkedlist/libs/._hamcrest-core-1.3.jar rename to closestpair/libs/._hamcrest-core-1.3.jar index 1547ba0e..f8955351 100644 Binary files a/p1circularlinkedlist/libs/._hamcrest-core-1.3.jar and b/closestpair/libs/._hamcrest-core-1.3.jar differ diff --git a/p1circularlinkedlist/libs/._junit-4.12.jar b/closestpair/libs/._junit-4.12.jar similarity index 95% rename from p1circularlinkedlist/libs/._junit-4.12.jar rename to closestpair/libs/._junit-4.12.jar index e6856e23..4c3cdaf6 100644 Binary files a/p1circularlinkedlist/libs/._junit-4.12.jar and b/closestpair/libs/._junit-4.12.jar differ diff --git a/closestpair/libs/JavaGrading-0.1.jar b/closestpair/libs/JavaGrading-0.1.jar new file mode 100644 index 00000000..8fba7674 Binary files /dev/null and b/closestpair/libs/JavaGrading-0.1.jar differ diff --git a/p1circularlinkedlist/.DS_Store b/closestpair/libs/hamcrest-core-1.3 2.jar similarity index 100% rename from p1circularlinkedlist/.DS_Store rename to closestpair/libs/hamcrest-core-1.3 2.jar diff --git a/closestpair/libs/hamcrest-core-1.3.jar b/closestpair/libs/hamcrest-core-1.3.jar new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/closestpair/libs/hamcrest-core-1.3.jar differ diff --git a/closestpair/libs/junit-4.12.jar b/closestpair/libs/junit-4.12.jar new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/closestpair/libs/junit-4.12.jar differ diff --git a/closestpair/public/._project.zip b/closestpair/public/._project.zip new file mode 100644 index 00000000..e10d9f95 Binary files /dev/null and b/closestpair/public/._project.zip differ diff --git a/closestpair/public/project.zip b/closestpair/public/project.zip new file mode 100644 index 00000000..9c972b92 Binary files /dev/null and b/closestpair/public/project.zip differ diff --git a/closestpair/run b/closestpair/run new file mode 100644 index 00000000..f9d604b2 --- /dev/null +++ b/closestpair/run @@ -0,0 +1,39 @@ +#! /bin/python3 +# coding: utf-8 + +from inginious import input +from inginious import feedback +import subprocess +from inginious import rst +import re + + +input.parse_template("student/ClosestPair.java") + +compile_error = subprocess.call('javac -cp ".:student:libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar" tests/*.java student/ClosestPair.java 2>&1', shell=True, stdout=open('compiler.out', 'w')) + +if compile_error != 0: + codeblock = rst.get_codeblock("java", open('compiler.out').read()) + feedback.set_global_feedback("Votre code ne compile pas: \n\n" + codeblock, True) + feedback.set_global_result("failed") + exit(0) + + + +try: + out = subprocess.check_output('java -cp "libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar:." tests/RunTests', shell=True).decode('utf8') + + grade = re.findall(r"^TOTAL ([0-9\.]+)/([0-9\.]+)$", out, re.MULTILINE)[-1] + grade = 100.0*float(grade[0])/float(grade[1]) + + feedback.set_grade(grade) + codeblock = rst.get_codeblock("java", out) + feedback.set_global_feedback("Résultat des tests: \n\n" + codeblock, True) + + if grade < 99.99 : + feedback.set_global_result("failed") + else: + feedback.set_global_result("success") +except Exception as e: + feedback.set_global_feedback("Une erreur s'est produite!." + str(e), True) + feedback.set_global_result("failed") \ No newline at end of file diff --git a/closestpair/student/._ClosestPair.java b/closestpair/student/._ClosestPair.java new file mode 100644 index 00000000..d45ff074 Binary files /dev/null and b/closestpair/student/._ClosestPair.java differ diff --git a/closestpair/student/ClosestPair.java b/closestpair/student/ClosestPair.java new file mode 100644 index 00000000..0f875c5b --- /dev/null +++ b/closestpair/student/ClosestPair.java @@ -0,0 +1,2 @@ +package student; +@@code1@@ \ No newline at end of file diff --git a/closestpair/task.yaml b/closestpair/task.yaml new file mode 100644 index 00000000..d390dcdb --- /dev/null +++ b/closestpair/task.yaml @@ -0,0 +1,65 @@ +accessible: true +author: '' +context: | + Implémentez un algorithme qui reçoit en entrée un tableau d'entiers et qui trouve deux valeurs issues de tableau dont la somme se rapproche le plus d'une valeur entière donnée :math:`x`. Soiet :math:`(a,b)` les deux valeurs trouvées, celles-ci doivent donc minimiser :math:`|x-(a+b)|`. + Les deux valeurs peuvent correspondre à la même entrée du tableau. + + Par exemple pour le tableau suivant + + .. code-block:: java + + int [] input = new int [] {5,10,1,75,150,151,155,18,75,50,30}; + + + * x=20, il faut retourner [10,10]. + * x=153, il faut retrouner [1,151] + * x=13, il faut retrouner [1,10] + * x=140 il faut retourner [75,75] + * x=170 il faut retourner [18,151] + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '100' + time: '30' + output: '2' +name: 'Mid-Term Quizz: Closest Pair' +network_grading: false +order: 1 +problems: + code1: + header: |- + .. code-block:: java + + public class ClosestPair { + + /** + * + * @param input a non empty array + * @return an array containing two values a,b + in the input array (possibly the same value) + * such that |x-(a+b)| is minimum + * + */ + public static int[] closestPair(int [] input, int x) { + return new int []{input[0],input[0]}; + } + + } + + + Copiez le contenu de la classe ClostestPair ci-dessus et complétez celle-ci + afin que la méthode closestPair s'exécute correctement en maximum O(n.log(n)) + où n est la taille du tableau en entrée. + name: '' + type: code + default: '' + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/closestpair/tests/._ClosestPairTest.java b/closestpair/tests/._ClosestPairTest.java new file mode 100644 index 00000000..9eb29225 Binary files /dev/null and b/closestpair/tests/._ClosestPairTest.java differ diff --git a/closestpair/tests/._RunTests.java b/closestpair/tests/._RunTests.java new file mode 100644 index 00000000..ef630318 Binary files /dev/null and b/closestpair/tests/._RunTests.java differ diff --git a/closestpair/tests/ClosestPairTest.java b/closestpair/tests/ClosestPairTest.java new file mode 100644 index 00000000..c9d55b6d --- /dev/null +++ b/closestpair/tests/ClosestPairTest.java @@ -0,0 +1,216 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import student.ClosestPair; +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +public class ClosestPairTest { + + public static int[] closestPairCorrect(int [] input, int x) { + Arrays.sort(input); + int best = 0; + int [] res = new int []{input[0],input[0]}; + int i = 0; + int j = input.length-1; + while (i < j) { + if (input[i]+input[j] > x) { + j--; + } + else if (input[i]+input[j] < x) { + i++; + } + else { + res[0] = input[i]; + res[1] = input[j]; + return res; + } + if (Math.abs(x-input[i]-input[j]) < Math.abs(x-res[0]-res[1])) { + res[0] = input[i]; + res[1] = input[j]; + } + } + return res; + } + + + /** + * + * @param input + * @param res + * @return true iff res[0] and res[1] are values from input + */ + public boolean inArray(int [] input, int [] res) { + boolean a = false; + boolean b = false; + for (int v : input) { + a |= (v == res[0]); + b |= (v == res[1]); + if (a && b) return true; + } + return false; + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair0() { + int [] input = new int [] {-5}; + + int x = 155; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(165,Math.abs(x-res[0]-res[1])); + } + + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair1() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 155; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(x,res[0]+res[1]); + } + + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair2() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 36; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(x,res[0]+res[1]); + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair3() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 13; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(2,Math.abs(x-res[0]-res[1])); + + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair4() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 170; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(1,Math.abs(x-res[0]-res[1])); + } + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair5() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = -1; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(3,Math.abs(x-res[0]-res[1])); + } + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair6() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 1000; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(690,Math.abs(x-res[0]-res[1])); + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair7() { + int [] input = new int [] {5,10,1,75,150,151,155,18,75,50,30}; + + int x = 140; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(10,Math.abs(x-res[0]-res[1])); + } + + @Test(timeout=1000) + @Grade(value=92) + public void testClosestPairRandomWithTimeComplexity() { + Random r = new Random(); + + + for (int i = 0; i < 100; i++) { + + int n = 100; + int [] input = new int [n]; + for (int j = 0; j < n; j++) { + input[j] = r.nextInt(n*n); + } + + int x = n*n/2; + int [] resCorrect = closestPairCorrect(input.clone(),x); + int [] res = ClosestPair.closestPair(input.clone(),x); + + assertTrue(inArray(input,res)); + assertEquals(Math.abs(x-resCorrect[0]-resCorrect[1]),Math.abs(x-res[0]-res[1])); + } + + for (int i = 0; i < 5; i++) { + + int n = 100000; + int [] input = new int [n]; + for (int j = 0; j < n; j++) { + input[j] = r.nextInt(n*n); + } + + int x = n*n/2; + int [] resCorrect = closestPairCorrect(input.clone(),x); + int [] res = ClosestPair.closestPair(input.clone(),x); + + assertTrue(inArray(input,res)); + assertEquals(Math.abs(x-resCorrect[0]-resCorrect[1]),Math.abs(x-res[0]-res[1])); + } + + } + + +} + + diff --git a/closestpair/tests/RunTests.java b/closestpair/tests/RunTests.java new file mode 100644 index 00000000..ab170a28 --- /dev/null +++ b/closestpair/tests/RunTests.java @@ -0,0 +1,13 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run(ClosestPairTest.class); + } +} \ No newline at end of file diff --git a/course.yaml b/course.yaml index 4af788e0..f5024d9a 100644 --- a/course.yaml +++ b/course.yaml @@ -6,14 +6,17 @@ admins: - jaoga - guest6 - hcambazard +- rucquoya +- jyakoub +- pironhe +- bastinjul accessible: true registration: true registration_password: null groups: false tutors: [] registration_ac: null -registration_ac_list: -- '' +registration_ac_list: [] groups_student_choice: true use_classrooms: false allow_unregister: true diff --git a/demo/.DS_Store b/demo/.DS_Store new file mode 100644 index 00000000..3b0398e4 Binary files /dev/null and b/demo/.DS_Store differ diff --git a/demo/._Factsheet (1).pdf b/demo/._Factsheet (1).pdf new file mode 100644 index 00000000..11798a7f Binary files /dev/null and b/demo/._Factsheet (1).pdf differ diff --git a/demo/Factsheet (1).pdf b/demo/Factsheet (1).pdf new file mode 100644 index 00000000..048971e8 Binary files /dev/null and b/demo/Factsheet (1).pdf differ diff --git a/demo/visicut/._COPYING.LESSER b/demo/visicut/._COPYING.LESSER new file mode 100644 index 00000000..e0200419 Binary files /dev/null and b/demo/visicut/._COPYING.LESSER differ diff --git a/demo/visicut/._LICENSE b/demo/visicut/._LICENSE new file mode 100644 index 00000000..fe5dd8ec Binary files /dev/null and b/demo/visicut/._LICENSE differ diff --git a/demo/visicut/._README b/demo/visicut/._README new file mode 100644 index 00000000..d23a56c6 Binary files /dev/null and b/demo/visicut/._README differ diff --git a/p1circularlinkedlist/._public b/demo/visicut/._VisiCut.Linux similarity index 100% rename from p1circularlinkedlist/._public rename to demo/visicut/._VisiCut.Linux diff --git a/p1circularlinkedlist/._student b/demo/visicut/._VisiCut.MacOS similarity index 100% rename from p1circularlinkedlist/._student rename to demo/visicut/._VisiCut.MacOS diff --git a/demo/visicut/._VisiCut.exe b/demo/visicut/._VisiCut.exe new file mode 100644 index 00000000..fabfe18f Binary files /dev/null and b/demo/visicut/._VisiCut.exe differ diff --git a/demo/visicut/._Visicut.jar b/demo/visicut/._Visicut.jar new file mode 100644 index 00000000..3f7b7f8a Binary files /dev/null and b/demo/visicut/._Visicut.jar differ diff --git a/p1circularlinkedlist/student/.DS_Store b/demo/visicut/._devices similarity index 100% rename from p1circularlinkedlist/student/.DS_Store rename to demo/visicut/._devices diff --git a/demo/visicut/._examples b/demo/visicut/._examples new file mode 100644 index 00000000..ee7d2233 Binary files /dev/null and b/demo/visicut/._examples differ diff --git a/demo/visicut/._laserprofiles b/demo/visicut/._laserprofiles new file mode 100644 index 00000000..539a4b3b Binary files /dev/null and b/demo/visicut/._laserprofiles differ diff --git a/demo/visicut/._lib b/demo/visicut/._lib new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/._ls-mime.xml b/demo/visicut/._ls-mime.xml new file mode 100644 index 00000000..c50f8b96 Binary files /dev/null and b/demo/visicut/._ls-mime.xml differ diff --git a/demo/visicut/._materials b/demo/visicut/._materials new file mode 100644 index 00000000..99ea77b6 Binary files /dev/null and b/demo/visicut/._materials differ diff --git a/demo/visicut/._plf-mime.xml b/demo/visicut/._plf-mime.xml new file mode 100644 index 00000000..2e42a250 Binary files /dev/null and b/demo/visicut/._plf-mime.xml differ diff --git a/demo/visicut/._profiles b/demo/visicut/._profiles new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/._settings b/demo/visicut/._settings new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/COPYING.LESSER b/demo/visicut/COPYING.LESSER new file mode 100644 index 00000000..341c30bd --- /dev/null +++ b/demo/visicut/COPYING.LESSER @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + diff --git a/demo/visicut/LICENSE b/demo/visicut/LICENSE new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/README b/demo/visicut/README new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/VisiCut.Linux b/demo/visicut/VisiCut.Linux new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/VisiCut.MacOS b/demo/visicut/VisiCut.MacOS new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/VisiCut.exe b/demo/visicut/VisiCut.exe new file mode 100644 index 00000000..86046155 Binary files /dev/null and b/demo/visicut/VisiCut.exe differ diff --git a/demo/visicut/Visicut.jar b/demo/visicut/Visicut.jar new file mode 100644 index 00000000..6d1199ea Binary files /dev/null and b/demo/visicut/Visicut.jar differ diff --git a/demo/visicut/devices/._Epilog Helix.png b/demo/visicut/devices/._Epilog Helix.png new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/._Epilog Mini.png b/demo/visicut/devices/._Epilog Mini.png new file mode 100644 index 00000000..4a04edd7 Binary files /dev/null and b/demo/visicut/devices/._Epilog Mini.png differ diff --git a/demo/visicut/devices/._Epilog ZING.png b/demo/visicut/devices/._Epilog ZING.png new file mode 100644 index 00000000..899f5220 Binary files /dev/null and b/demo/visicut/devices/._Epilog ZING.png differ diff --git a/demo/visicut/devices/._Epilog_32_Helix.xml b/demo/visicut/devices/._Epilog_32_Helix.xml new file mode 100644 index 00000000..9fa8dbe2 Binary files /dev/null and b/demo/visicut/devices/._Epilog_32_Helix.xml differ diff --git a/demo/visicut/devices/._Epilog_32_Zing.xml b/demo/visicut/devices/._Epilog_32_Zing.xml new file mode 100644 index 00000000..472ba413 Binary files /dev/null and b/demo/visicut/devices/._Epilog_32_Zing.xml differ diff --git a/demo/visicut/devices/._LAOS HPC.png b/demo/visicut/devices/._LAOS HPC.png new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/._LAOS-HPC.xml b/demo/visicut/devices/._LAOS-HPC.xml new file mode 100644 index 00000000..bcbadf03 Binary files /dev/null and b/demo/visicut/devices/._LAOS-HPC.xml differ diff --git a/demo/visicut/devices/._LAOS-Suda.png b/demo/visicut/devices/._LAOS-Suda.png new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/._LAOS_32_HPC.xml b/demo/visicut/devices/._LAOS_32_HPC.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/Epilog Helix.png b/demo/visicut/devices/Epilog Helix.png new file mode 100644 index 00000000..5645eb47 Binary files /dev/null and b/demo/visicut/devices/Epilog Helix.png differ diff --git a/demo/visicut/devices/Epilog Mini.png b/demo/visicut/devices/Epilog Mini.png new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/Epilog ZING.png b/demo/visicut/devices/Epilog ZING.png new file mode 100644 index 00000000..a5f67daa Binary files /dev/null and b/demo/visicut/devices/Epilog ZING.png differ diff --git a/demo/visicut/devices/Epilog_32_Helix.xml b/demo/visicut/devices/Epilog_32_Helix.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/Epilog_32_Zing.xml b/demo/visicut/devices/Epilog_32_Zing.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/LAOS HPC.png b/demo/visicut/devices/LAOS HPC.png new file mode 100644 index 00000000..e7f5e51c Binary files /dev/null and b/demo/visicut/devices/LAOS HPC.png differ diff --git a/demo/visicut/devices/LAOS-HPC.png b/demo/visicut/devices/LAOS-HPC.png new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/LAOS-HPC.xml b/demo/visicut/devices/LAOS-HPC.xml new file mode 100644 index 00000000..bc0d2194 --- /dev/null +++ b/demo/visicut/devices/LAOS-HPC.xml @@ -0,0 +1,27 @@ + + Job was sent as '$jobname' +Please: +-Close the lid +-Turn on the Ventilation +-And press 'start' on the Lasercutter $name + visicut + + false + 5.0 + true + false + true + 192.168.123.111 + 69 + 0.001 + -1.0 + -1.0 + -1 + 0.0 + 300.0 + 210.0 + + LAOS-HPC.png + www.laoslaser.org + LAOS-HPC + \ No newline at end of file diff --git a/demo/visicut/devices/LAOS-Suda.png b/demo/visicut/devices/LAOS-Suda.png new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/devices/LAOS_32_HPC.xml b/demo/visicut/devices/LAOS_32_HPC.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/._Basic b/demo/visicut/examples/._Basic new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/._Laser-Script b/demo/visicut/examples/._Laser-Script new file mode 100644 index 00000000..05503add Binary files /dev/null and b/demo/visicut/examples/._Laser-Script differ diff --git a/demo/visicut/examples/._Parametric b/demo/visicut/examples/._Parametric new file mode 100644 index 00000000..a92ce749 Binary files /dev/null and b/demo/visicut/examples/._Parametric differ diff --git a/demo/visicut/examples/._bendable-material.svg b/demo/visicut/examples/._bendable-material.svg new file mode 100644 index 00000000..a6c4d7c5 Binary files /dev/null and b/demo/visicut/examples/._bendable-material.svg differ diff --git a/demo/visicut/examples/._fablab-schluesselanhaenger.plf b/demo/visicut/examples/._fablab-schluesselanhaenger.plf new file mode 100644 index 00000000..6041591d Binary files /dev/null and b/demo/visicut/examples/._fablab-schluesselanhaenger.plf differ diff --git a/demo/visicut/examples/Basic/._circle-20mm-red.svg b/demo/visicut/examples/Basic/._circle-20mm-red.svg new file mode 100644 index 00000000..7fb91854 Binary files /dev/null and b/demo/visicut/examples/Basic/._circle-20mm-red.svg differ diff --git a/demo/visicut/examples/Basic/._rectangle-20mm-green.svg b/demo/visicut/examples/Basic/._rectangle-20mm-green.svg new file mode 100644 index 00000000..5689b766 Binary files /dev/null and b/demo/visicut/examples/Basic/._rectangle-20mm-green.svg differ diff --git a/demo/visicut/examples/Basic/._text.svg b/demo/visicut/examples/Basic/._text.svg new file mode 100644 index 00000000..d5554421 Binary files /dev/null and b/demo/visicut/examples/Basic/._text.svg differ diff --git a/demo/visicut/examples/Basic/._visicut-icon.png b/demo/visicut/examples/Basic/._visicut-icon.png new file mode 100644 index 00000000..0435fde6 Binary files /dev/null and b/demo/visicut/examples/Basic/._visicut-icon.png differ diff --git a/demo/visicut/examples/Basic/circle-20mm-red.svg b/demo/visicut/examples/Basic/circle-20mm-red.svg new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Basic/rectangle-20mm-green.svg b/demo/visicut/examples/Basic/rectangle-20mm-green.svg new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Basic/text.svg b/demo/visicut/examples/Basic/text.svg new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Basic/visicut-icon.png b/demo/visicut/examples/Basic/visicut-icon.png new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Laser-Script/._LaserScriptExample.ls b/demo/visicut/examples/Laser-Script/._LaserScriptExample.ls new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Laser-Script/._LaserScriptFocustest.ls b/demo/visicut/examples/Laser-Script/._LaserScriptFocustest.ls new file mode 100644 index 00000000..3fcb863e Binary files /dev/null and b/demo/visicut/examples/Laser-Script/._LaserScriptFocustest.ls differ diff --git a/demo/visicut/examples/Laser-Script/LaserScriptExample.ls b/demo/visicut/examples/Laser-Script/LaserScriptExample.ls new file mode 100644 index 00000000..da19c3a6 --- /dev/null +++ b/demo/visicut/examples/Laser-Script/LaserScriptExample.ls @@ -0,0 +1,18 @@ +function rectangle(x, y, width, height) +{ + move(x, y); + line(x+width, y); + line(x+width, y+height); + line(x, y+height); + line(x, y); +} +for (var power = 0; power < 100; power += 10) +{ + set("power", power); + for (var speed = 0; speed < 100; speed += 10) + { + set("speed", speed); + rectangle(11*power/10.0, 11*speed/10.0, 10, 10); + } +} + diff --git a/demo/visicut/examples/Laser-Script/LaserScriptFocustest.ls b/demo/visicut/examples/Laser-Script/LaserScriptFocustest.ls new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Parametric/._CableHolder.parametric.svg b/demo/visicut/examples/Parametric/._CableHolder.parametric.svg new file mode 100644 index 00000000..d192cace Binary files /dev/null and b/demo/visicut/examples/Parametric/._CableHolder.parametric.svg differ diff --git a/demo/visicut/examples/Parametric/._CandleHolder.parametric.svg b/demo/visicut/examples/Parametric/._CandleHolder.parametric.svg new file mode 100644 index 00000000..54f0c166 Binary files /dev/null and b/demo/visicut/examples/Parametric/._CandleHolder.parametric.svg differ diff --git a/demo/visicut/examples/Parametric/._Card.parametric.svg b/demo/visicut/examples/Parametric/._Card.parametric.svg new file mode 100644 index 00000000..c24915ad Binary files /dev/null and b/demo/visicut/examples/Parametric/._Card.parametric.svg differ diff --git a/demo/visicut/examples/Parametric/CableHolder.parametric.svg b/demo/visicut/examples/Parametric/CableHolder.parametric.svg new file mode 100644 index 00000000..e689474c --- /dev/null +++ b/demo/visicut/examples/Parametric/CableHolder.parametric.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/demo/visicut/examples/Parametric/CandleHolder.parametric.svg b/demo/visicut/examples/Parametric/CandleHolder.parametric.svg new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Parametric/Card.parametric.svg b/demo/visicut/examples/Parametric/Card.parametric.svg new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/Parametric/Smiley.parametric.svg b/demo/visicut/examples/Parametric/Smiley.parametric.svg new file mode 100644 index 00000000..f19d492d --- /dev/null +++ b/demo/visicut/examples/Parametric/Smiley.parametric.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/demo/visicut/examples/bendable-material.svg b/demo/visicut/examples/bendable-material.svg new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/examples/box-6x3x3-on-3mm.svg b/demo/visicut/examples/box-6x3x3-on-3mm.svg new file mode 100644 index 00000000..e5ba704f --- /dev/null +++ b/demo/visicut/examples/box-6x3x3-on-3mm.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/visicut/examples/fablab-schluesselanhaenger.plf b/demo/visicut/examples/fablab-schluesselanhaenger.plf new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/illustrator_script/._OpenWithVisiCut.scpt b/demo/visicut/illustrator_script/._OpenWithVisiCut.scpt new file mode 100644 index 00000000..0e70d90e Binary files /dev/null and b/demo/visicut/illustrator_script/._OpenWithVisiCut.scpt differ diff --git a/demo/visicut/illustrator_script/OpenWithVisiCut.scpt b/demo/visicut/illustrator_script/OpenWithVisiCut.scpt new file mode 100644 index 00000000..22fba1d9 Binary files /dev/null and b/demo/visicut/illustrator_script/OpenWithVisiCut.scpt differ diff --git a/demo/visicut/inkscape_extension/._daemonize.py b/demo/visicut/inkscape_extension/._daemonize.py new file mode 100644 index 00000000..8e8f28a0 Binary files /dev/null and b/demo/visicut/inkscape_extension/._daemonize.py differ diff --git a/demo/visicut/inkscape_extension/._visicut_export.inx b/demo/visicut/inkscape_extension/._visicut_export.inx new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/inkscape_extension/._visicut_export.py b/demo/visicut/inkscape_extension/._visicut_export.py new file mode 100644 index 00000000..ce7e416a Binary files /dev/null and b/demo/visicut/inkscape_extension/._visicut_export.py differ diff --git a/demo/visicut/inkscape_extension/._visicut_export_replace.inx b/demo/visicut/inkscape_extension/._visicut_export_replace.inx new file mode 100644 index 00000000..d694a15b Binary files /dev/null and b/demo/visicut/inkscape_extension/._visicut_export_replace.inx differ diff --git a/demo/visicut/inkscape_extension/daemonize.py b/demo/visicut/inkscape_extension/daemonize.py new file mode 100644 index 00000000..7653b9d6 --- /dev/null +++ b/demo/visicut/inkscape_extension/daemonize.py @@ -0,0 +1,210 @@ +## {{{ http://code.activestate.com/recipes/278731/ (r6) +"""Disk And Execution MONitor (Daemon) + +Configurable daemon behaviors: + + 1.) The current working directory set to the "/" directory. + 2.) The current file creation mode mask set to 0. + 3.) Close all open files (1024). + 4.) Redirect standard I/O streams to "/dev/null". + +A failed call to fork() now raises an exception. + +References: + 1) Advanced Programming in the Unix Environment: W. Richard Stevens + 2) Unix Programming Frequently Asked Questions: + http://www.erlenstar.demon.co.uk/unix/faq_toc.html +""" + +__author__ = "Chad J. Schroeder" +__copyright__ = "Copyright (C) 2005 Chad J. Schroeder" + +__revision__ = "$Id$" +__version__ = "0.2" + +# Standard Python modules. +import os # Miscellaneous OS interfaces. +import sys # System-specific parameters and functions. + +# Default daemon parameters. +# File mode creation mask of the daemon. +UMASK = 0 + +# Default working directory for the daemon. +WORKDIR = "/" + +# Default maximum for the number of available file descriptors. +MAXFD = 1024 + +# The standard I/O file descriptors are redirected to /dev/null by default. +if (hasattr(os, "devnull")): + REDIRECT_TO = os.devnull +else: + REDIRECT_TO = "/dev/null" + +def createDaemon(): + """Detach a process from the controlling terminal and run it in the + background as a daemon. + """ + + try: + # Fork a child process so the parent can exit. This returns control to + # the command-line or shell. It also guarantees that the child will not + # be a process group leader, since the child receives a new process ID + # and inherits the parent's process group ID. This step is required + # to insure that the next call to os.setsid is successful. + pid = os.fork() + except OSError, e: + raise Exception, "%s [%d]" % (e.strerror, e.errno) + + if (pid == 0): # The first child. + # To become the session leader of this new session and the process group + # leader of the new process group, we call os.setsid(). The process is + # also guaranteed not to have a controlling terminal. + os.setsid() + + # Is ignoring SIGHUP necessary? + # + # It's often suggested that the SIGHUP signal should be ignored before + # the second fork to avoid premature termination of the process. The + # reason is that when the first child terminates, all processes, e.g. + # the second child, in the orphaned group will be sent a SIGHUP. + # + # "However, as part of the session management system, there are exactly + # two cases where SIGHUP is sent on the death of a process: + # + # 1) When the process that dies is the session leader of a session that + # is attached to a terminal device, SIGHUP is sent to all processes + # in the foreground process group of that terminal device. + # 2) When the death of a process causes a process group to become + # orphaned, and one or more processes in the orphaned group are + # stopped, then SIGHUP and SIGCONT are sent to all members of the + # orphaned group." [2] + # + # The first case can be ignored since the child is guaranteed not to have + # a controlling terminal. The second case isn't so easy to dismiss. + # The process group is orphaned when the first child terminates and + # POSIX.1 requires that every STOPPED process in an orphaned process + # group be sent a SIGHUP signal followed by a SIGCONT signal. Since the + # second child is not STOPPED though, we can safely forego ignoring the + # SIGHUP signal. In any case, there are no ill-effects if it is ignored. + # + # import signal # Set handlers for asynchronous events. + # signal.signal(signal.SIGHUP, signal.SIG_IGN) + + try: + # Fork a second child and exit immediately to prevent zombies. This + # causes the second child process to be orphaned, making the init + # process responsible for its cleanup. And, since the first child is + # a session leader without a controlling terminal, it's possible for + # it to acquire one by opening a terminal in the future (System V- + # based systems). This second fork guarantees that the child is no + # longer a session leader, preventing the daemon from ever acquiring + # a controlling terminal. + pid = os.fork() # Fork a second child. + except OSError, e: + raise Exception, "%s [%d]" % (e.strerror, e.errno) + + if (pid == 0): # The second child. + # Since the current working directory may be a mounted filesystem, we + # avoid the issue of not being able to unmount the filesystem at + # shutdown time by changing it to the root directory. + os.chdir(WORKDIR) + # We probably don't want the file mode creation mask inherited from + # the parent, so we give the child complete control over permissions. + os.umask(UMASK) + else: + # exit() or _exit()? See below. + os._exit(0) # Exit parent (the first child) of the second child. + else: + # exit() or _exit()? + # _exit is like exit(), but it doesn't call any functions registered + # with atexit (and on_exit) or any registered signal handlers. It also + # closes any open file descriptors. Using exit() may cause all stdio + # streams to be flushed twice and any temporary files may be unexpectedly + # removed. It's therefore recommended that child branches of a fork() + # and the parent branch(es) of a daemon use _exit(). + os._exit(0) # Exit parent of the first child. + + # Close all open file descriptors. This prevents the child from keeping + # open any file descriptors inherited from the parent. There is a variety + # of methods to accomplish this task. Three are listed below. + # + # Try the system configuration variable, SC_OPEN_MAX, to obtain the maximum + # number of open file descriptors to close. If it doesn't exists, use + # the default value (configurable). + # + # try: + # maxfd = os.sysconf("SC_OPEN_MAX") + # except (AttributeError, ValueError): + # maxfd = MAXFD + # + # OR + # + # if (os.sysconf_names.has_key("SC_OPEN_MAX")): + # maxfd = os.sysconf("SC_OPEN_MAX") + # else: + # maxfd = MAXFD + # + # OR + # + # Use the getrlimit method to retrieve the maximum file descriptor number + # that can be opened by this process. If there is not limit on the + # resource, use the default value. + # + import resource # Resource usage information. + maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1] + if (maxfd == resource.RLIM_INFINITY): + maxfd = MAXFD + + # Iterate through and close all file descriptors. + for fd in range(0, maxfd): + try: + os.close(fd) + except OSError: # ERROR, fd wasn't open to begin with (ignored) + pass + + # Redirect the standard I/O file descriptors to the specified file. Since + # the daemon has no controlling terminal, most daemons redirect stdin, + # stdout, and stderr to /dev/null. This is done to prevent side-effects + # from reads and writes to the standard I/O file descriptors. + + # This call to open is guaranteed to return the lowest file descriptor, + # which will be 0 (stdin), since it was closed above. + os.open(REDIRECT_TO, os.O_RDWR) # standard input (0) + + # Duplicate standard input to standard output and standard error. + os.dup2(0, 1) # standard output (1) + os.dup2(0, 2) # standard error (2) + + return(0) + +if __name__ == "__main__": + + retCode = createDaemon() + + # The code, as is, will create a new file in the root directory, when + # executed with superuser privileges. The file will contain the following + # daemon related process parameters: return code, process ID, parent + # process group ID, session ID, user ID, effective user ID, real group ID, + # and the effective group ID. Notice the relationship between the daemon's + # process ID, process group ID, and its parent's process ID. + + procParams = """ + return code = %s + process ID = %s + parent process ID = %s + process group ID = %s + session ID = %s + user ID = %s + effective user ID = %s + real group ID = %s + effective group ID = %s + """ % (retCode, os.getpid(), os.getppid(), os.getpgrp(), os.getsid(0), + os.getuid(), os.geteuid(), os.getgid(), os.getegid()) + + open("createDaemon.log", "w").write(procParams + "\n") + + sys.exit(retCode) +## end of http://code.activestate.com/recipes/278731/ }}} + diff --git a/demo/visicut/inkscape_extension/visicut_export.inx b/demo/visicut/inkscape_extension/visicut_export.inx new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/inkscape_extension/visicut_export.py b/demo/visicut/inkscape_extension/visicut_export.py new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/inkscape_extension/visicut_export_replace.inx b/demo/visicut/inkscape_extension/visicut_export_replace.inx new file mode 100644 index 00000000..2b4f4c7e --- /dev/null +++ b/demo/visicut/inkscape_extension/visicut_export_replace.inx @@ -0,0 +1,16 @@ + + + <_name>Open in VisiCut + visicut.export_replace + visicut_export.py + false + + path + + + + + + diff --git a/demo/visicut/laserprofiles/._Epilog_32_Zing b/demo/visicut/laserprofiles/._Epilog_32_Zing new file mode 100644 index 00000000..71c8372f Binary files /dev/null and b/demo/visicut/laserprofiles/._Epilog_32_Zing differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_ new file mode 100644 index 00000000..29be8838 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Alu_32_Profil_32__40_eloxiert_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Alu_32_Profil_32__40_eloxiert_41_ new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Auge_32__40_bis_32_-1.5_32_Dioptrin_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Auge_32__40_bis_32_-1.5_32_Dioptrin_41_ new file mode 100644 index 00000000..38f706af Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Auge_32__40_bis_32_-1.5_32_Dioptrin_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Birkensperrholz_40_Multiplex_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Birkensperrholz_40_Multiplex_41_ new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Bleistift b/demo/visicut/laserprofiles/Epilog_32_Zing/._Bleistift new file mode 100644 index 00000000..29e9bf8e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Bleistift differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Braunpappe b/demo/visicut/laserprofiles/Epilog_32_Zing/._Braunpappe new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Bristolkarton b/demo/visicut/laserprofiles/Epilog_32_Zing/._Bristolkarton new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Buche b/demo/visicut/laserprofiles/Epilog_32_Zing/._Buche new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Dicke_32_Wellpappe b/demo/visicut/laserprofiles/Epilog_32_Zing/._Dicke_32_Wellpappe new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Expo_32_Giveaway_32_Pappe b/demo/visicut/laserprofiles/Epilog_32_Zing/._Expo_32_Giveaway_32_Pappe new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Filz_40_Girlsday_95_Blume_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Filz_40_Girlsday_95_Blume_41_ new file mode 100644 index 00000000..61c8305f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Filz_40_Girlsday_95_Blume_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Finnpappe b/demo/visicut/laserprofiles/Epilog_32_Zing/._Finnpappe new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Flexfolie_32__40_T-Shirt_32_druck_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Flexfolie_32__40_T-Shirt_32_druck_41_ new file mode 100644 index 00000000..52785703 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Flexfolie_32__40_T-Shirt_32_druck_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Flockfolie_32__40_T-Shirt_32_druck_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Flockfolie_32__40_T-Shirt_32_druck_41_ new file mode 100644 index 00000000..5c5ba892 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Flockfolie_32__40_T-Shirt_32_druck_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_ new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Folie_40_Plexiglass_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Folie_40_Plexiglass_41_ new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Furnier_32_Kirschbaum b/demo/visicut/laserprofiles/Epilog_32_Zing/._Furnier_32_Kirschbaum new file mode 100644 index 00000000..df745b22 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Furnier_32_Kirschbaum differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Graupappe b/demo/visicut/laserprofiles/Epilog_32_Zing/._Graupappe new file mode 100644 index 00000000..2435aced Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Graupappe differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Kapton_40_Makerbot_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kapton_40_Makerbot_41_ new file mode 100644 index 00000000..ff7715b8 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kapton_40_Makerbot_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Karton b/demo/visicut/laserprofiles/Epilog_32_Zing/._Karton new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Karton_40_300gr_44_schwarz_44_dick_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Karton_40_300gr_44_schwarz_44_dick_41_ new file mode 100644 index 00000000..af79aa29 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Karton_40_300gr_44_schwarz_44_dick_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Kiefer b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kiefer new file mode 100644 index 00000000..7d33d245 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kiefer differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_ new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Kokosschale_32_3-4mm b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kokosschale_32_3-4mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Kopierfolie_40_Soennecken_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kopierfolie_40_Soennecken_41_ new file mode 100644 index 00000000..f929235d Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kopierfolie_40_Soennecken_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Kunstleder_32__40_Sarahs_32_Kalender_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kunstleder_32__40_Sarahs_32_Kalender_41_ new file mode 100644 index 00000000..1df60fde Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Kunstleder_32__40_Sarahs_32_Kalender_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Laseracryl b/demo/visicut/laserprofiles/Epilog_32_Zing/._Laseracryl new file mode 100644 index 00000000..77316039 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Laseracryl differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Laseracryl_32__40_Nametags_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Laseracryl_32__40_Nametags_41_ new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Leder b/demo/visicut/laserprofiles/Epilog_32_Zing/._Leder new file mode 100644 index 00000000..8035925a Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Leder differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Linde_40_Holzart_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Linde_40_Holzart_41_ new file mode 100644 index 00000000..d077f5f2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Linde_40_Holzart_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._MDF b/demo/visicut/laserprofiles/Epilog_32_Zing/._MDF new file mode 100644 index 00000000..4f84f7ea Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._MDF differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Moosgummi_32_PU_32__40_Polyuretan_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Moosgummi_32_PU_32__40_Polyuretan_41_ new file mode 100644 index 00000000..9a029a48 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Moosgummi_32_PU_32__40_Polyuretan_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Multiplex b/demo/visicut/laserprofiles/Epilog_32_Zing/._Multiplex new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Nessel_40_aus_32_Baumwolle_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Nessel_40_aus_32_Baumwolle_41_ new file mode 100644 index 00000000..49557263 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Nessel_40_aus_32_Baumwolle_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Organza_40_Stoff_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Organza_40_Stoff_41_ new file mode 100644 index 00000000..ee0367cb Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Organza_40_Stoff_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._PP_32_Folie b/demo/visicut/laserprofiles/Epilog_32_Zing/._PP_32_Folie new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._PP_40_Kunststoff_41_Dvd_95_Huelle b/demo/visicut/laserprofiles/Epilog_32_Zing/._PP_40_Kunststoff_41_Dvd_95_Huelle new file mode 100644 index 00000000..4ec1c275 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._PP_40_Kunststoff_41_Dvd_95_Huelle differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_ new file mode 100644 index 00000000..28179eec Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Papier b/demo/visicut/laserprofiles/Epilog_32_Zing/._Papier new file mode 100644 index 00000000..08b396a4 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Papier differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Papier_40_120gr_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Papier_40_120gr_41_ new file mode 100644 index 00000000..77d82def Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Papier_40_120gr_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Pappel b/demo/visicut/laserprofiles/Epilog_32_Zing/._Pappel new file mode 100644 index 00000000..b76adae2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Pappel differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Pappel_40_Sperrholz_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._Pappel_40_Sperrholz_41_ new file mode 100644 index 00000000..94e0a045 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Pappel_40_Sperrholz_41_ differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Plexiglass b/demo/visicut/laserprofiles/Epilog_32_Zing/._Plexiglass new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Polycarbonat b/demo/visicut/laserprofiles/Epilog_32_Zing/._Polycarbonat new file mode 100644 index 00000000..d069d4a6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Polycarbonat differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Rubber b/demo/visicut/laserprofiles/Epilog_32_Zing/._Rubber new file mode 100644 index 00000000..80d4478f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Rubber differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Schellackplatte b/demo/visicut/laserprofiles/Epilog_32_Zing/._Schellackplatte new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Silikon_32_rot b/demo/visicut/laserprofiles/Epilog_32_Zing/._Silikon_32_rot new file mode 100644 index 00000000..0f2199cd Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/._Silikon_32_rot differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._Textil_32_Curv_44_Textil_32_Membran b/demo/visicut/laserprofiles/Epilog_32_Zing/._Textil_32_Curv_44_Textil_32_Membran new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/._elring_32_AbilN_40_Pappeart_41_ b/demo/visicut/laserprofiles/Epilog_32_Zing/._elring_32_AbilN_40_Pappeart_41_ new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/._0.0mm new file mode 100644 index 00000000..03050e9b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..28e51b6f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_/0.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..fbfc73dd Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..fe664603 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Alu_32_Profil_32__40_eloxiert_41_/0.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/._0.0mm new file mode 100644 index 00000000..aee1341b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..12dc8414 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..0fff6f68 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..030fd80e --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 4 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/._4.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/._4.0mm new file mode 100644 index 00000000..3fe8476e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/._4.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._cut.xml new file mode 100644 index 00000000..28ea9129 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._mark.xml new file mode 100644 index 00000000..d032c072 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/cut.xml new file mode 100644 index 00000000..fc97f0b7 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 20 + 0.0 + 500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Birkensperrholz_40_Multiplex_41_/4.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/._0.0mm new file mode 100644 index 00000000..e4308eeb Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/._engrave.xml new file mode 100644 index 00000000..564f070b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/engrave.xml new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bleistift/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/._1.0mm new file mode 100644 index 00000000..2e3eece6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/._1.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._cut.xml new file mode 100644 index 00000000..f4b415e4 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._engrave.xml new file mode 100644 index 00000000..4c4e25e7 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._mark.xml new file mode 100644 index 00000000..7f7254c2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/cut.xml new file mode 100644 index 00000000..138c91e3 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 55 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Braunpappe/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/._0.6mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/._0.6mm new file mode 100644 index 00000000..8b6e1266 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/._0.6mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/._cut.xml new file mode 100644 index 00000000..bce24441 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/cut.xml new file mode 100644 index 00000000..68b97b9b --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/cut.xml @@ -0,0 +1,8 @@ + + + 18 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Bristolkarton/0.6mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/._0.8mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/._0.8mm new file mode 100644 index 00000000..1873a101 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/._0.8mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/._cut.xml new file mode 100644 index 00000000..8ec89e8d Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/._engrave.xml new file mode 100644 index 00000000..c3e4a9bf Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Buche/0.8mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/._cut.xml new file mode 100644 index 00000000..b3c6ecc3 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/._mark.xml new file mode 100644 index 00000000..8864eb96 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/engrave.xml new file mode 100644 index 00000000..9dd731cd --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 50 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Dicke_32_Wellpappe/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/._cut.xml new file mode 100644 index 00000000..84fe1817 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/engrave.xml new file mode 100644 index 00000000..fb1f487b --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 12 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Expo_32_Giveaway_32_Pappe/0.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/._0.0mm new file mode 100644 index 00000000..da2139ee Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..e11269b0 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Filz_40_Girlsday_95_Blume_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._1.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._1.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._1.5mm new file mode 100644 index 00000000..e9110b0b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._1.5mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._2.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._2.0mm new file mode 100644 index 00000000..cbd5090d Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._2.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._3.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._3.0mm new file mode 100644 index 00000000..5852303e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._3.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._4.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._4.0mm new file mode 100644 index 00000000..0c20e861 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/._4.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/._engrave.xml new file mode 100644 index 00000000..80e26cf9 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/cut.xml new file mode 100644 index 00000000..ba0227c4 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 30 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._engrave.xml new file mode 100644 index 00000000..427c8206 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._mark.xml new file mode 100644 index 00000000..f89b13ed Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/cut.xml new file mode 100644 index 00000000..70ed5a9e --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/cut.xml @@ -0,0 +1,8 @@ + + + 50 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/1.5mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/2.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/._mark.xml new file mode 100644 index 00000000..5d12143e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/cut.xml new file mode 100644 index 00000000..b51a05c6 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 70 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/3.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._cut.xml new file mode 100644 index 00000000..b243ea01 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._engrave.xml new file mode 100644 index 00000000..55f3485d Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._mark.xml new file mode 100644 index 00000000..183af37b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/cut.xml new file mode 100644 index 00000000..3955a21e --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 80 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Finnpappe/4.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/._0.0mm new file mode 100644 index 00000000..78ea6629 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..566adf77 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..513b8550 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flexfolie_32__40_T-Shirt_32_druck_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Flockfolie_32__40_T-Shirt_32_druck_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/._1.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._cut.xml new file mode 100644 index 00000000..09ec47df Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._engrave.xml new file mode 100644 index 00000000..da532442 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._mark.xml new file mode 100644 index 00000000..3f81b1fa Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie/1.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/._0.2mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/._0.2mm new file mode 100644 index 00000000..a7acb3f2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/._0.2mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_/0.2mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/._0.4mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/._0.4mm new file mode 100644 index 00000000..b5df3f24 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/._0.4mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._engrave.xml new file mode 100644 index 00000000..e22167f5 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._mark.xml new file mode 100644 index 00000000..3e1a1134 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/cut.xml new file mode 100644 index 00000000..337bbaed --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/cut.xml @@ -0,0 +1,8 @@ + + + 15 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Folie_40_Plexiglass_41_/0.4mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/._0.6mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/._0.6mm new file mode 100644 index 00000000..627a368d Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/._0.6mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._cut.xml new file mode 100644 index 00000000..b936c88c Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._mark.xml new file mode 100644 index 00000000..87ce86f7 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Furnier_32_Kirschbaum/0.6mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._0.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._0.5mm new file mode 100644 index 00000000..5429f7a2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._0.5mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._1.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._1.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._1.5mm new file mode 100644 index 00000000..11d3e1b4 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._1.5mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._2.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._2.5mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._3.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._3.0mm new file mode 100644 index 00000000..4c2e5b8e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/._3.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._engrave.xml new file mode 100644 index 00000000..b62cf1d7 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._mark.xml new file mode 100644 index 00000000..486d8dd6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/cut.xml new file mode 100644 index 00000000..1d216441 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/cut.xml @@ -0,0 +1,8 @@ + + + 25 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/0.5mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/._engrave.xml new file mode 100644 index 00000000..fd2e1ab7 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/._mark.xml new file mode 100644 index 00000000..b135e568 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/cut.xml new file mode 100644 index 00000000..acb5ed9c --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 45 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._cut.xml new file mode 100644 index 00000000..6f44c096 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._engrave.xml new file mode 100644 index 00000000..55f4c3f6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._mark.xml new file mode 100644 index 00000000..5fa38f27 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/cut.xml new file mode 100644 index 00000000..4b466169 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/cut.xml @@ -0,0 +1,8 @@ + + + 60 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/1.5mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._cut.xml new file mode 100644 index 00000000..edc7d851 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._engrave.xml new file mode 100644 index 00000000..4a7817c9 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._mark.xml new file mode 100644 index 00000000..69955121 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/cut.xml new file mode 100644 index 00000000..15e08d46 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 70 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/2.5mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._cut.xml new file mode 100644 index 00000000..106910ef Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._engrave.xml new file mode 100644 index 00000000..ac9c3cbe Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Graupappe/3.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/._2.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/._2.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._cut.xml new file mode 100644 index 00000000..c3524125 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._engrave.xml new file mode 100644 index 00000000..c8b59206 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Gummi_44_schwarz/2.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/._0.0mm new file mode 100644 index 00000000..2a1463fe Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..d9a99304 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..8ee4e005 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Kapton_40_Makerbot_41_/0.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/._mark.xml new file mode 100644 index 00000000..bcee8c2c Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton/0.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/._0.0mm new file mode 100644 index 00000000..7a00d02f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..d9fe9c2c Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..71e9fddb Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/cut.xml new file mode 100644 index 00000000..bb25e684 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 40 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Karton_40_300gr_44_schwarz_44_dick_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Kiefer/4.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..26c58cca Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..2871fc10 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/cut.xml new file mode 100644 index 00000000..3d77de34 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 30 + 100 + 0.0 + 300 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/._0.0mm new file mode 100644 index 00000000..3a82d959 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kokosschale_32_3-4mm/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/._0.1mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/._0.1mm new file mode 100644 index 00000000..b20e9e0b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/._0.1mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/._mark.xml new file mode 100644 index 00000000..cdd32bdd Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Kopierfolie_40_Soennecken_41_/0.1mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/._0.0mm new file mode 100644 index 00000000..ff69b753 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Kunstleder_32__40_Sarahs_32_Kalender_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/._5.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/._5.0mm new file mode 100644 index 00000000..7a2c0385 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/._5.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laser_32_acrylic/5.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._cut.xml new file mode 100644 index 00000000..a88c35e0 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._mark.xml new file mode 100644 index 00000000..c551caf7 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl/0.8mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..d8160012 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..0b0accc1 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Laseracryl_32__40_Nametags_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/._0.4mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/._0.4mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/._mark.xml new file mode 100644 index 00000000..f4be2b98 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/cut.xml new file mode 100644 index 00000000..5b999045 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/cut.xml @@ -0,0 +1,8 @@ + + + 2 + 13 + 0.0 + 100 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Latex/0.4mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/._0.0mm new file mode 100644 index 00000000..fa438d96 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/._cut.xml new file mode 100644 index 00000000..2c6f9b35 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Leder/0.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._1.0mm new file mode 100644 index 00000000..d1c6b998 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._1.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._3.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._3.0mm new file mode 100644 index 00000000..bd690e08 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._3.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._6.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._6.0mm new file mode 100644 index 00000000..79c3b9a1 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/._6.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/._engrave.xml new file mode 100644 index 00000000..d25b2d3d Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/._mark.xml new file mode 100644 index 00000000..1c89bcb9 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/3.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._cut.xml new file mode 100644 index 00000000..47e2d887 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._engrave.xml new file mode 100644 index 00000000..35eac31c Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._mark.xml new file mode 100644 index 00000000..9c350c1e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Linde_40_Holzart_41_/6.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._1.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._2.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._2.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._3.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._3.0mm new file mode 100644 index 00000000..550d32dd Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._3.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._4.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._4.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._5.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._5.0mm new file mode 100644 index 00000000..04e53f80 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._5.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._6.3mm b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._6.3mm new file mode 100644 index 00000000..ee27a91c Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/._6.3mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._cut.xml new file mode 100644 index 00000000..3d8c6051 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._engrave.xml new file mode 100644 index 00000000..8e1cf61e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._mark.xml new file mode 100644 index 00000000..6ef9d540 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/cut.xml new file mode 100644 index 00000000..31cea999 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 90 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/._engrave.xml new file mode 100644 index 00000000..2affe583 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/mark.xml new file mode 100644 index 00000000..337bbaed --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/2.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 15 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._cut.xml new file mode 100644 index 00000000..87ad54a3 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._engrave.xml new file mode 100644 index 00000000..dd8605de Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._mark.xml new file mode 100644 index 00000000..7ee402c2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/3.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._cut.xml new file mode 100644 index 00000000..c319629a Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._engrave.xml new file mode 100644 index 00000000..ba42c274 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._mark.xml new file mode 100644 index 00000000..223fa2b2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/4.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/._cut.xml new file mode 100644 index 00000000..9a9c7260 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/._engrave.xml new file mode 100644 index 00000000..1ab96e2f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/5.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._cut.xml new file mode 100644 index 00000000..66826fb1 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._engrave.xml new file mode 100644 index 00000000..441a8b45 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._mark.xml new file mode 100644 index 00000000..b77ccdbc Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/cut.xml new file mode 100644 index 00000000..bfcd1f3f --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 21 + 0.0 + 2058 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/MDF/6.3mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/._2.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/._2.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/._mark.xml new file mode 100644 index 00000000..58a638e6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_32_PU_32__40_Polyuretan_41_/2.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/._3.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/._3.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._cut.xml new file mode 100644 index 00000000..fa7e278a Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._engrave.xml new file mode 100644 index 00000000..546fb6d1 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._mark.xml new file mode 100644 index 00000000..ffa9f8e9 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/mark.xml new file mode 100644 index 00000000..1606a862 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Moosgummi_44_braun/3.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 6 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/._3.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/._3.5mm new file mode 100644 index 00000000..d7cdd33f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/._3.5mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._cut.xml new file mode 100644 index 00000000..ab9da4b6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._engrave.xml new file mode 100644 index 00000000..6d95fd6b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/cut.xml new file mode 100644 index 00000000..cb44096f --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 30 + 0.0 + 500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/engrave.xml new file mode 100644 index 00000000..9dd731cd --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/engrave.xml @@ -0,0 +1,7 @@ + + + 50 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Multiplex/3.5mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/._0.0mm new file mode 100644 index 00000000..ae6d8aae Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..8b146d69 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..eb8b401f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..5a3e358f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/cut.xml new file mode 100644 index 00000000..ab095836 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 25 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Nessel_40_aus_32_Baumwolle_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..8f1cf3e8 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Organza_40_Stoff_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/._0.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/._0.5mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/._cut.xml new file mode 100644 index 00000000..0bc81d40 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_32_Folie/0.5mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/._0.9mm b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/._0.9mm new file mode 100644 index 00000000..001fc593 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/._0.9mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/._cut.xml new file mode 100644 index 00000000..0e8a7ea6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/cut.xml new file mode 100644 index 00000000..146c5d4a --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/cut.xml @@ -0,0 +1,8 @@ + + + 45 + 60 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/PP_40_Kunststoff_41_Dvd_95_Huelle/0.9mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/._1.0mm new file mode 100644 index 00000000..b32ade54 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/._1.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/._engrave.xml new file mode 100644 index 00000000..d6e45d5b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/cut.xml new file mode 100644 index 00000000..b7d4fc2c --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 45 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/._0.0mm new file mode 100644 index 00000000..0f13042a Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._cut.xml new file mode 100644 index 00000000..1a1382e0 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._engrave.xml new file mode 100644 index 00000000..14b9c0b4 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._mark.xml new file mode 100644 index 00000000..6a9c03e5 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/engrave.xml new file mode 100644 index 00000000..1442158a --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 5 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..0dd53d16 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..700e75d3 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._mark.xml new file mode 100644 index 00000000..ff7a0f39 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/cut.xml new file mode 100644 index 00000000..f9e37988 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 6 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..467e56d9 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 30 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Papier_40_120gr_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/._6.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/._6.0mm new file mode 100644 index 00000000..6bf08f81 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/._6.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/._mark.xml new file mode 100644 index 00000000..9739ea39 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/cut.xml new file mode 100644 index 00000000..69e98512 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 30 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/engrave.xml new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel/6.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/._4.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/._4.0mm new file mode 100644 index 00000000..8938e69c Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/._4.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/._cut.xml new file mode 100644 index 00000000..e152fee1 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Pappel_40_Sperrholz_41_/4.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._0.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._0.5mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._0.8mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._0.8mm new file mode 100644 index 00000000..100946a4 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._0.8mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._1.0mm new file mode 100644 index 00000000..ce8d598e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._1.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._1.5mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._1.5mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._2.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._2.0mm new file mode 100644 index 00000000..b7abca3f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._2.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._3.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._3.0mm new file mode 100644 index 00000000..c9fa59ac Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._3.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._4.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._4.0mm new file mode 100644 index 00000000..660ac21e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._4.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._5.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._5.0mm new file mode 100644 index 00000000..0f008d99 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/._5.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._cut.xml new file mode 100644 index 00000000..b4963143 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._engrave.xml new file mode 100644 index 00000000..803bef4c Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/mark.xml new file mode 100644 index 00000000..9bf6543f --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.5mm/mark.xml @@ -0,0 +1,8 @@ + + + 9 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._cut.xml new file mode 100644 index 00000000..da23bd43 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._engrave.xml new file mode 100644 index 00000000..8a05caca Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._mark.xml new file mode 100644 index 00000000..41f47939 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/cut.xml new file mode 100644 index 00000000..c4e41584 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/cut.xml @@ -0,0 +1,8 @@ + + + 50 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/0.8mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._cut.xml new file mode 100644 index 00000000..7723b139 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._engrave.xml new file mode 100644 index 00000000..89911c85 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._mark.xml new file mode 100644 index 00000000..320dfa0a Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/._cut.xml new file mode 100644 index 00000000..2b63cad6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/._engrave.xml new file mode 100644 index 00000000..fcd9e313 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/engrave.xml new file mode 100644 index 00000000..467e56d9 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/engrave.xml @@ -0,0 +1,7 @@ + + + 30 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/1.5mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._cut.xml new file mode 100644 index 00000000..7199111e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._engrave.xml new file mode 100644 index 00000000..faf898f3 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._mark.xml new file mode 100644 index 00000000..a4fccab5 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/cut.xml new file mode 100644 index 00000000..7c2b87e6 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 40 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/engrave.xml new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/2.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/._mark.xml new file mode 100644 index 00000000..1d5e57e8 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/engrave.xml new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/mark.xml new file mode 100644 index 00000000..53ea2c49 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/3.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 70 + 30 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._cut.xml new file mode 100644 index 00000000..675b75d2 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._mark.xml new file mode 100644 index 00000000..eba4e630 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/cut.xml new file mode 100644 index 00000000..69e98512 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 30 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/engrave.xml new file mode 100644 index 00000000..1ce88a3d --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 35 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/4.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._cut.xml new file mode 100644 index 00000000..3ecf2c1f Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._engrave.xml new file mode 100644 index 00000000..d0292439 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._mark.xml new file mode 100644 index 00000000..875d31d4 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Plexiglass/5.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/._2.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/._2.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/._cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/._engrave.xml new file mode 100644 index 00000000..498f72e9 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Polycarbonat/2.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/._0.0mm new file mode 100644 index 00000000..d1d72730 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._cut.xml new file mode 100644 index 00000000..0ef8c36b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._mark.xml new file mode 100644 index 00000000..2d3650e1 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/cut.xml new file mode 100644 index 00000000..7509576d --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 10 + 15 + 0.0 + 100 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Rubber/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/._0.0mm new file mode 100644 index 00000000..e5aa52a6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/._0.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/._cut.xml new file mode 100644 index 00000000..3bcd40b8 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Schellackplatte/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/._1.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/._1.0mm new file mode 100644 index 00000000..2ca93f87 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/._1.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/._2.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/._2.0mm new file mode 100644 index 00000000..b140ec5e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/._2.0mm differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._cut.xml new file mode 100644 index 00000000..492b102e Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._engrave.xml new file mode 100644 index 00000000..4f5fd11b Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._mark.xml new file mode 100644 index 00000000..57cf8b28 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/._mark.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/engrave.xml new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/1.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._cut.xml new file mode 100644 index 00000000..c540bd54 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._engrave.xml new file mode 100644 index 00000000..c1ceaba6 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/cut.xml new file mode 100644 index 00000000..3ade4bd1 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 100 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/mark.xml new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Silikon_32_rot/2.0mm/mark.xml @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/._0.0mm b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/._0.0mm new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/._cut.xml new file mode 100644 index 00000000..b1663ef0 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/._engrave.xml new file mode 100644 index 00000000..47105944 Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/._engrave.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/cut.xml new file mode 100644 index 00000000..71763ef9 --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/cut.xml @@ -0,0 +1,8 @@ + + + 10 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/engrave.xml new file mode 100644 index 00000000..1442158a --- /dev/null +++ b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/engrave.xml @@ -0,0 +1,7 @@ + + + 5 + 100 + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/Textil_32_Curv_44_Textil_32_Membran/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/._cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/._cut.xml new file mode 100644 index 00000000..eeae0abf Binary files /dev/null and b/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/._cut.xml differ diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/._engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/._engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/cut.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/engrave.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/engrave.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/mark.xml b/demo/visicut/laserprofiles/Epilog_32_Zing/elring_32_AbilN_40_Pappeart_41_/0.0mm/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._AbsoluteLayout.jar b/demo/visicut/lib/._AbsoluteLayout.jar new file mode 100644 index 00000000..6c4c21f3 Binary files /dev/null and b/demo/visicut/lib/._AbsoluteLayout.jar differ diff --git a/demo/visicut/lib/._AppleJavaExtensions.jar b/demo/visicut/lib/._AppleJavaExtensions.jar new file mode 100644 index 00000000..39fe28f4 Binary files /dev/null and b/demo/visicut/lib/._AppleJavaExtensions.jar differ diff --git a/demo/visicut/lib/._BrowserLoginDialog.jar b/demo/visicut/lib/._BrowserLoginDialog.jar new file mode 100644 index 00000000..9517aedc Binary files /dev/null and b/demo/visicut/lib/._BrowserLoginDialog.jar differ diff --git a/demo/visicut/lib/._appframework-1.0.3.jar b/demo/visicut/lib/._appframework-1.0.3.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._batik-all.jar b/demo/visicut/lib/._batik-all.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._beansbinding-1.2.1.jar b/demo/visicut/lib/._beansbinding-1.2.1.jar new file mode 100644 index 00000000..8ab178f0 Binary files /dev/null and b/demo/visicut/lib/._beansbinding-1.2.1.jar differ diff --git a/demo/visicut/lib/._commons-io-2.4.jar b/demo/visicut/lib/._commons-io-2.4.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._commons-net-3.1.jar b/demo/visicut/lib/._commons-net-3.1.jar new file mode 100644 index 00000000..49e1ba26 Binary files /dev/null and b/demo/visicut/lib/._commons-net-3.1.jar differ diff --git a/demo/visicut/lib/._core-3.2.1-20150223.162544-2.jar b/demo/visicut/lib/._core-3.2.1-20150223.162544-2.jar new file mode 100644 index 00000000..42153d23 Binary files /dev/null and b/demo/visicut/lib/._core-3.2.1-20150223.162544-2.jar differ diff --git a/demo/visicut/lib/._corn-httpclient-1.0.12.jar b/demo/visicut/lib/._corn-httpclient-1.0.12.jar new file mode 100644 index 00000000..6e5bc764 Binary files /dev/null and b/demo/visicut/lib/._corn-httpclient-1.0.12.jar differ diff --git a/demo/visicut/lib/._freehep-psviewer-2.0-standalone.jar b/demo/visicut/lib/._freehep-psviewer-2.0-standalone.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._gtkjfilechooser.jar b/demo/visicut/lib/._gtkjfilechooser.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._httpclient-4.3.6.jar b/demo/visicut/lib/._httpclient-4.3.6.jar new file mode 100644 index 00000000..4e69dcd6 Binary files /dev/null and b/demo/visicut/lib/._httpclient-4.3.6.jar differ diff --git a/demo/visicut/lib/._httpcore-4.3.3.jar b/demo/visicut/lib/._httpcore-4.3.3.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._httpmime-4.3.6.jar b/demo/visicut/lib/._httpmime-4.3.6.jar new file mode 100644 index 00000000..71983ef8 Binary files /dev/null and b/demo/visicut/lib/._httpmime-4.3.6.jar differ diff --git a/demo/visicut/lib/._javase-3.2.1-20150223.162559-2.jar b/demo/visicut/lib/._javase-3.2.1-20150223.162559-2.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._javassist-3.16.1-GA.jar b/demo/visicut/lib/._javassist-3.16.1-GA.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._jna-4.0.0.jar b/demo/visicut/lib/._jna-4.0.0.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._json-simple-1.1.1.jar b/demo/visicut/lib/._json-simple-1.1.1.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._kabeja-0.4.jar b/demo/visicut/lib/._kabeja-0.4.jar new file mode 100644 index 00000000..f7d999fb Binary files /dev/null and b/demo/visicut/lib/._kabeja-0.4.jar differ diff --git a/demo/visicut/lib/._kabeja-xslt.jar b/demo/visicut/lib/._kabeja-xslt.jar new file mode 100644 index 00000000..81c6bb25 Binary files /dev/null and b/demo/visicut/lib/._kabeja-xslt.jar differ diff --git a/demo/visicut/lib/._miethxml-toolkit.jar b/demo/visicut/lib/._miethxml-toolkit.jar new file mode 100644 index 00000000..de60788f Binary files /dev/null and b/demo/visicut/lib/._miethxml-toolkit.jar differ diff --git a/demo/visicut/lib/._miethxml-ui.jar b/demo/visicut/lib/._miethxml-ui.jar new file mode 100644 index 00000000..8de0cd8c Binary files /dev/null and b/demo/visicut/lib/._miethxml-ui.jar differ diff --git a/demo/visicut/lib/._ognl-3.0.5.jar b/demo/visicut/lib/._ognl-3.0.5.jar new file mode 100644 index 00000000..d249a33e Binary files /dev/null and b/demo/visicut/lib/._ognl-3.0.5.jar differ diff --git a/demo/visicut/lib/._pdf-transcoder.jar b/demo/visicut/lib/._pdf-transcoder.jar new file mode 100644 index 00000000..4d9023d2 Binary files /dev/null and b/demo/visicut/lib/._pdf-transcoder.jar differ diff --git a/demo/visicut/lib/._purejavacomm-0.0.22.jar b/demo/visicut/lib/._purejavacomm-0.0.22.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._scribe-1.3.7_useragent_mod.jar b/demo/visicut/lib/._scribe-1.3.7_useragent_mod.jar new file mode 100644 index 00000000..e6e91c2c Binary files /dev/null and b/demo/visicut/lib/._scribe-1.3.7_useragent_mod.jar differ diff --git a/demo/visicut/lib/._slf4j-api-1.7.2.jar b/demo/visicut/lib/._slf4j-api-1.7.2.jar new file mode 100644 index 00000000..f7dccb90 Binary files /dev/null and b/demo/visicut/lib/._slf4j-api-1.7.2.jar differ diff --git a/demo/visicut/lib/._slf4j-api-1.7.5.jar b/demo/visicut/lib/._slf4j-api-1.7.5.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._slf4j-nop-1.7.5.jar b/demo/visicut/lib/._slf4j-nop-1.7.5.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._svg-salamander-core.jar b/demo/visicut/lib/._svg-salamander-core.jar new file mode 100644 index 00000000..82b3dbe8 Binary files /dev/null and b/demo/visicut/lib/._svg-salamander-core.jar differ diff --git a/demo/visicut/lib/._swing-worker-1.1.jar b/demo/visicut/lib/._swing-worker-1.1.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._thymeleaf-2.0.17-SNAPSHOT.jar b/demo/visicut/lib/._thymeleaf-2.0.17-SNAPSHOT.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._webcam-capture-0.3.11-20141227.105512-4.jar b/demo/visicut/lib/._webcam-capture-0.3.11-20141227.105512-4.jar new file mode 100644 index 00000000..39c0b5ae Binary files /dev/null and b/demo/visicut/lib/._webcam-capture-0.3.11-20141227.105512-4.jar differ diff --git a/demo/visicut/lib/._xml-apis-ext.jar b/demo/visicut/lib/._xml-apis-ext.jar new file mode 100644 index 00000000..c240a356 Binary files /dev/null and b/demo/visicut/lib/._xml-apis-ext.jar differ diff --git a/demo/visicut/lib/._xml-apis.jar b/demo/visicut/lib/._xml-apis.jar new file mode 100644 index 00000000..fede2005 Binary files /dev/null and b/demo/visicut/lib/._xml-apis.jar differ diff --git a/demo/visicut/lib/._xpp3-1.1.4c.jar b/demo/visicut/lib/._xpp3-1.1.4c.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/._xstream-1.4.3.jar b/demo/visicut/lib/._xstream-1.4.3.jar new file mode 100644 index 00000000..6b5c058b Binary files /dev/null and b/demo/visicut/lib/._xstream-1.4.3.jar differ diff --git a/demo/visicut/lib/AbsoluteLayout.jar b/demo/visicut/lib/AbsoluteLayout.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/AppleJavaExtensions.jar b/demo/visicut/lib/AppleJavaExtensions.jar new file mode 100644 index 00000000..6659a81c Binary files /dev/null and b/demo/visicut/lib/AppleJavaExtensions.jar differ diff --git a/demo/visicut/lib/BrowserLoginDialog.jar b/demo/visicut/lib/BrowserLoginDialog.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/Jama-1.0.3.jar b/demo/visicut/lib/Jama-1.0.3.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/LibLaserCut.jar b/demo/visicut/lib/LibLaserCut.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/appframework-1.0.3.jar b/demo/visicut/lib/appframework-1.0.3.jar new file mode 100644 index 00000000..0b8ff014 Binary files /dev/null and b/demo/visicut/lib/appframework-1.0.3.jar differ diff --git a/demo/visicut/lib/batik-all.jar b/demo/visicut/lib/batik-all.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/beansbinding-1.2.1.jar b/demo/visicut/lib/beansbinding-1.2.1.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/bridj-0.6.2.jar b/demo/visicut/lib/bridj-0.6.2.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/commons-io-2.4.jar b/demo/visicut/lib/commons-io-2.4.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/commons-net-3.1.jar b/demo/visicut/lib/commons-net-3.1.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/core-3.2.1-20150223.162544-2.jar b/demo/visicut/lib/core-3.2.1-20150223.162544-2.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/corn-httpclient-1.0.12.jar b/demo/visicut/lib/corn-httpclient-1.0.12.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/freehep-psviewer-2.0-standalone.jar b/demo/visicut/lib/freehep-psviewer-2.0-standalone.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/gtkjfilechooser.jar b/demo/visicut/lib/gtkjfilechooser.jar new file mode 100644 index 00000000..62224b8c Binary files /dev/null and b/demo/visicut/lib/gtkjfilechooser.jar differ diff --git a/demo/visicut/lib/httpclient-4.3.6.jar b/demo/visicut/lib/httpclient-4.3.6.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/httpcore-4.3.3.jar b/demo/visicut/lib/httpcore-4.3.3.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/httpmime-4.3.6.jar b/demo/visicut/lib/httpmime-4.3.6.jar new file mode 100644 index 00000000..aa01f76d Binary files /dev/null and b/demo/visicut/lib/httpmime-4.3.6.jar differ diff --git a/demo/visicut/lib/javase-3.2.1-20150223.162559-2.jar b/demo/visicut/lib/javase-3.2.1-20150223.162559-2.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/javassist-3.16.1-GA.jar b/demo/visicut/lib/javassist-3.16.1-GA.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/jna-4.0.0.jar b/demo/visicut/lib/jna-4.0.0.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/js.jar b/demo/visicut/lib/js.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/json-simple-1.1.1.jar b/demo/visicut/lib/json-simple-1.1.1.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/kabeja-0.4.jar b/demo/visicut/lib/kabeja-0.4.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/kabeja-svg-0.4.jar b/demo/visicut/lib/kabeja-svg-0.4.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/kabeja-xslt.jar b/demo/visicut/lib/kabeja-xslt.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/miethxml-toolkit.jar b/demo/visicut/lib/miethxml-toolkit.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/miethxml-ui.jar b/demo/visicut/lib/miethxml-ui.jar new file mode 100644 index 00000000..63635306 Binary files /dev/null and b/demo/visicut/lib/miethxml-ui.jar differ diff --git a/demo/visicut/lib/ognl-3.0.5.jar b/demo/visicut/lib/ognl-3.0.5.jar new file mode 100644 index 00000000..cd6dbaad Binary files /dev/null and b/demo/visicut/lib/ognl-3.0.5.jar differ diff --git a/demo/visicut/lib/pdf-transcoder.jar b/demo/visicut/lib/pdf-transcoder.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/purejavacomm-0.0.22.jar b/demo/visicut/lib/purejavacomm-0.0.22.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/scribe-1.3.7_useragent_mod.jar b/demo/visicut/lib/scribe-1.3.7_useragent_mod.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/slf4j-api-1.7.2.jar b/demo/visicut/lib/slf4j-api-1.7.2.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/slf4j-api-1.7.5.jar b/demo/visicut/lib/slf4j-api-1.7.5.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/slf4j-nop-1.7.5.jar b/demo/visicut/lib/slf4j-nop-1.7.5.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/svg-salamander-core.jar b/demo/visicut/lib/svg-salamander-core.jar new file mode 100644 index 00000000..c82273b7 Binary files /dev/null and b/demo/visicut/lib/svg-salamander-core.jar differ diff --git a/demo/visicut/lib/swing-worker-1.1.jar b/demo/visicut/lib/swing-worker-1.1.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/thymeleaf-2.0.17-SNAPSHOT.jar b/demo/visicut/lib/thymeleaf-2.0.17-SNAPSHOT.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/webcam-capture-0.3.11-20141227.105512-4.jar b/demo/visicut/lib/webcam-capture-0.3.11-20141227.105512-4.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/xml-apis-ext.jar b/demo/visicut/lib/xml-apis-ext.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/lib/xml-apis.jar b/demo/visicut/lib/xml-apis.jar new file mode 100644 index 00000000..d42c0ea6 Binary files /dev/null and b/demo/visicut/lib/xml-apis.jar differ diff --git a/demo/visicut/lib/xpp3-1.1.4c.jar b/demo/visicut/lib/xpp3-1.1.4c.jar new file mode 100644 index 00000000..451ac82a Binary files /dev/null and b/demo/visicut/lib/xpp3-1.1.4c.jar differ diff --git a/demo/visicut/lib/xstream-1.4.3.jar b/demo/visicut/lib/xstream-1.4.3.jar new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/ls-mime.xml b/demo/visicut/ls-mime.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml b/demo/visicut/materials/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml new file mode 100644 index 00000000..9c31ff6f Binary files /dev/null and b/demo/visicut/materials/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml differ diff --git a/demo/visicut/materials/._Acrylic.png b/demo/visicut/materials/._Acrylic.png new file mode 100644 index 00000000..6c47dfef Binary files /dev/null and b/demo/visicut/materials/._Acrylic.png differ diff --git a/demo/visicut/materials/._Acrylic.xml b/demo/visicut/materials/._Acrylic.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Alu_32_Profil_32__40_eloxiert_41_.xml b/demo/visicut/materials/._Alu_32_Profil_32__40_eloxiert_41_.xml new file mode 100644 index 00000000..618fade1 Binary files /dev/null and b/demo/visicut/materials/._Alu_32_Profil_32__40_eloxiert_41_.xml differ diff --git a/demo/visicut/materials/._Birkensperrholz_40_Multiplex_41_.xml b/demo/visicut/materials/._Birkensperrholz_40_Multiplex_41_.xml new file mode 100644 index 00000000..0b7cedb1 Binary files /dev/null and b/demo/visicut/materials/._Birkensperrholz_40_Multiplex_41_.xml differ diff --git a/demo/visicut/materials/._Bleistift.xml b/demo/visicut/materials/._Bleistift.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Braunpappe.xml b/demo/visicut/materials/._Braunpappe.xml new file mode 100644 index 00000000..3ad3933b Binary files /dev/null and b/demo/visicut/materials/._Braunpappe.xml differ diff --git a/demo/visicut/materials/._Bristolkarton.xml b/demo/visicut/materials/._Bristolkarton.xml new file mode 100644 index 00000000..2c1a6185 Binary files /dev/null and b/demo/visicut/materials/._Bristolkarton.xml differ diff --git a/demo/visicut/materials/._Buche.xml b/demo/visicut/materials/._Buche.xml new file mode 100644 index 00000000..b3cf3c06 Binary files /dev/null and b/demo/visicut/materials/._Buche.xml differ diff --git a/demo/visicut/materials/._Dicke_32_Wellpappe.xml b/demo/visicut/materials/._Dicke_32_Wellpappe.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Expo_32_Giveaway_32_Pappe.xml b/demo/visicut/materials/._Expo_32_Giveaway_32_Pappe.xml new file mode 100644 index 00000000..ff60768a Binary files /dev/null and b/demo/visicut/materials/._Expo_32_Giveaway_32_Pappe.xml differ diff --git a/demo/visicut/materials/._Filz_40_Girlsday_95_Blume_41_.xml b/demo/visicut/materials/._Filz_40_Girlsday_95_Blume_41_.xml new file mode 100644 index 00000000..178e4467 Binary files /dev/null and b/demo/visicut/materials/._Filz_40_Girlsday_95_Blume_41_.xml differ diff --git a/demo/visicut/materials/._Finnpappe.xml b/demo/visicut/materials/._Finnpappe.xml new file mode 100644 index 00000000..92bc3271 Binary files /dev/null and b/demo/visicut/materials/._Finnpappe.xml differ diff --git a/demo/visicut/materials/._Flexfolie_32__40_T-Shirt_32_druck_41_.xml b/demo/visicut/materials/._Flexfolie_32__40_T-Shirt_32_druck_41_.xml new file mode 100644 index 00000000..0738a034 Binary files /dev/null and b/demo/visicut/materials/._Flexfolie_32__40_T-Shirt_32_druck_41_.xml differ diff --git a/demo/visicut/materials/._Flockfolie_32__40_T-Shirt_32_druck_41_.xml b/demo/visicut/materials/._Flockfolie_32__40_T-Shirt_32_druck_41_.xml new file mode 100644 index 00000000..a872d021 Binary files /dev/null and b/demo/visicut/materials/._Flockfolie_32__40_T-Shirt_32_druck_41_.xml differ diff --git a/demo/visicut/materials/._Folie.xml b/demo/visicut/materials/._Folie.xml new file mode 100644 index 00000000..93c23f09 Binary files /dev/null and b/demo/visicut/materials/._Folie.xml differ diff --git a/demo/visicut/materials/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml b/demo/visicut/materials/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml new file mode 100644 index 00000000..8a4a0404 Binary files /dev/null and b/demo/visicut/materials/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml differ diff --git a/demo/visicut/materials/._Folie_40_Plexiglass_41_.xml b/demo/visicut/materials/._Folie_40_Plexiglass_41_.xml new file mode 100644 index 00000000..ae2cdf21 Binary files /dev/null and b/demo/visicut/materials/._Folie_40_Plexiglass_41_.xml differ diff --git a/demo/visicut/materials/._Furnier_32_Kirschbaum.xml b/demo/visicut/materials/._Furnier_32_Kirschbaum.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Graupappe.xml b/demo/visicut/materials/._Graupappe.xml new file mode 100644 index 00000000..93848f5f Binary files /dev/null and b/demo/visicut/materials/._Graupappe.xml differ diff --git a/demo/visicut/materials/._Gummi_44_schwarz.xml b/demo/visicut/materials/._Gummi_44_schwarz.xml new file mode 100644 index 00000000..629ebf43 Binary files /dev/null and b/demo/visicut/materials/._Gummi_44_schwarz.xml differ diff --git a/demo/visicut/materials/._Kapton_40_Makerbot_41_.xml b/demo/visicut/materials/._Kapton_40_Makerbot_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Karton.xml b/demo/visicut/materials/._Karton.xml new file mode 100644 index 00000000..68494756 Binary files /dev/null and b/demo/visicut/materials/._Karton.xml differ diff --git a/demo/visicut/materials/._Karton_40_300gr_44_schwarz_44_dick_41_.xml b/demo/visicut/materials/._Karton_40_300gr_44_schwarz_44_dick_41_.xml new file mode 100644 index 00000000..e20af508 Binary files /dev/null and b/demo/visicut/materials/._Karton_40_300gr_44_schwarz_44_dick_41_.xml differ diff --git a/demo/visicut/materials/._Kiefer.xml b/demo/visicut/materials/._Kiefer.xml new file mode 100644 index 00000000..2fc491c8 Binary files /dev/null and b/demo/visicut/materials/._Kiefer.xml differ diff --git a/demo/visicut/materials/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml b/demo/visicut/materials/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml new file mode 100644 index 00000000..c4279a9d Binary files /dev/null and b/demo/visicut/materials/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml differ diff --git a/demo/visicut/materials/._Kokosschale_32_3-4mm.xml b/demo/visicut/materials/._Kokosschale_32_3-4mm.xml new file mode 100644 index 00000000..ee753aa0 Binary files /dev/null and b/demo/visicut/materials/._Kokosschale_32_3-4mm.xml differ diff --git a/demo/visicut/materials/._Kopierfolie_40_Soennecken_41_.xml b/demo/visicut/materials/._Kopierfolie_40_Soennecken_41_.xml new file mode 100644 index 00000000..b354828a Binary files /dev/null and b/demo/visicut/materials/._Kopierfolie_40_Soennecken_41_.xml differ diff --git a/demo/visicut/materials/._Kunstleder_32__40_Sarahs_32_Kalender_41_.xml b/demo/visicut/materials/._Kunstleder_32__40_Sarahs_32_Kalender_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Laser_32_acrylic.xml b/demo/visicut/materials/._Laser_32_acrylic.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Laseracryl.xml b/demo/visicut/materials/._Laseracryl.xml new file mode 100644 index 00000000..18ccb262 Binary files /dev/null and b/demo/visicut/materials/._Laseracryl.xml differ diff --git a/demo/visicut/materials/._Laseracryl_32__40_Nametags_41_.xml b/demo/visicut/materials/._Laseracryl_32__40_Nametags_41_.xml new file mode 100644 index 00000000..c42f96b9 Binary files /dev/null and b/demo/visicut/materials/._Laseracryl_32__40_Nametags_41_.xml differ diff --git a/demo/visicut/materials/._Latex.xml b/demo/visicut/materials/._Latex.xml new file mode 100644 index 00000000..11a87ceb Binary files /dev/null and b/demo/visicut/materials/._Latex.xml differ diff --git a/demo/visicut/materials/._Leder.xml b/demo/visicut/materials/._Leder.xml new file mode 100644 index 00000000..ab9c8b96 Binary files /dev/null and b/demo/visicut/materials/._Leder.xml differ diff --git a/demo/visicut/materials/._Linde_40_Holzart_41_.xml b/demo/visicut/materials/._Linde_40_Holzart_41_.xml new file mode 100644 index 00000000..e210061c Binary files /dev/null and b/demo/visicut/materials/._Linde_40_Holzart_41_.xml differ diff --git a/demo/visicut/materials/._MDF.xml b/demo/visicut/materials/._MDF.xml new file mode 100644 index 00000000..a24dfc84 Binary files /dev/null and b/demo/visicut/materials/._MDF.xml differ diff --git a/demo/visicut/materials/._Moosgummi_32_PU_32__40_Polyuretan_41_.xml b/demo/visicut/materials/._Moosgummi_32_PU_32__40_Polyuretan_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Moosgummi_44_braun.xml b/demo/visicut/materials/._Moosgummi_44_braun.xml new file mode 100644 index 00000000..7caec020 Binary files /dev/null and b/demo/visicut/materials/._Moosgummi_44_braun.xml differ diff --git a/demo/visicut/materials/._Multiplex.xml b/demo/visicut/materials/._Multiplex.xml new file mode 100644 index 00000000..b6e695a5 Binary files /dev/null and b/demo/visicut/materials/._Multiplex.xml differ diff --git a/demo/visicut/materials/._Nessel_40_aus_32_Baumwolle_41_.xml b/demo/visicut/materials/._Nessel_40_aus_32_Baumwolle_41_.xml new file mode 100644 index 00000000..8e93677e Binary files /dev/null and b/demo/visicut/materials/._Nessel_40_aus_32_Baumwolle_41_.xml differ diff --git a/demo/visicut/materials/._Organza_40_Stoff_41_.xml b/demo/visicut/materials/._Organza_40_Stoff_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._PP_32_Folie.xml b/demo/visicut/materials/._PP_32_Folie.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._PP_40_Kunststoff_41_Dvd_95_Huelle.xml b/demo/visicut/materials/._PP_40_Kunststoff_41_Dvd_95_Huelle.xml new file mode 100644 index 00000000..cc7dfd93 Binary files /dev/null and b/demo/visicut/materials/._PP_40_Kunststoff_41_Dvd_95_Huelle.xml differ diff --git a/demo/visicut/materials/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml b/demo/visicut/materials/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml new file mode 100644 index 00000000..a14a9924 Binary files /dev/null and b/demo/visicut/materials/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml differ diff --git a/demo/visicut/materials/._Paper.xml b/demo/visicut/materials/._Paper.xml new file mode 100644 index 00000000..f1dd7f21 Binary files /dev/null and b/demo/visicut/materials/._Paper.xml differ diff --git a/demo/visicut/materials/._Papier.xml b/demo/visicut/materials/._Papier.xml new file mode 100644 index 00000000..dab6230f Binary files /dev/null and b/demo/visicut/materials/._Papier.xml differ diff --git a/demo/visicut/materials/._Papier_40_120gr_41_.xml b/demo/visicut/materials/._Papier_40_120gr_41_.xml new file mode 100644 index 00000000..fa9b6510 Binary files /dev/null and b/demo/visicut/materials/._Papier_40_120gr_41_.xml differ diff --git a/demo/visicut/materials/._Pappel.xml b/demo/visicut/materials/._Pappel.xml new file mode 100644 index 00000000..8c503471 Binary files /dev/null and b/demo/visicut/materials/._Pappel.xml differ diff --git a/demo/visicut/materials/._Pappel_40_Sperrholz_41_.xml b/demo/visicut/materials/._Pappel_40_Sperrholz_41_.xml new file mode 100644 index 00000000..c3abde54 Binary files /dev/null and b/demo/visicut/materials/._Pappel_40_Sperrholz_41_.xml differ diff --git a/demo/visicut/materials/._Plexiglass.xml b/demo/visicut/materials/._Plexiglass.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/._Polycarbonat.xml b/demo/visicut/materials/._Polycarbonat.xml new file mode 100644 index 00000000..822c1045 Binary files /dev/null and b/demo/visicut/materials/._Polycarbonat.xml differ diff --git a/demo/visicut/materials/._Rubber.xml b/demo/visicut/materials/._Rubber.xml new file mode 100644 index 00000000..97c0904c Binary files /dev/null and b/demo/visicut/materials/._Rubber.xml differ diff --git a/demo/visicut/materials/._Schellackplatte.xml b/demo/visicut/materials/._Schellackplatte.xml new file mode 100644 index 00000000..d2da1d00 Binary files /dev/null and b/demo/visicut/materials/._Schellackplatte.xml differ diff --git a/demo/visicut/materials/._Silikon_32_rot.xml b/demo/visicut/materials/._Silikon_32_rot.xml new file mode 100644 index 00000000..0a37aa21 Binary files /dev/null and b/demo/visicut/materials/._Silikon_32_rot.xml differ diff --git a/demo/visicut/materials/._Textil_32_Curv_44_Textil_32_Membran.xml b/demo/visicut/materials/._Textil_32_Curv_44_Textil_32_Membran.xml new file mode 100644 index 00000000..363303b4 Binary files /dev/null and b/demo/visicut/materials/._Textil_32_Curv_44_Textil_32_Membran.xml differ diff --git a/demo/visicut/materials/._elring_32_AbilN_40_Pappeart_41_.xml b/demo/visicut/materials/._elring_32_AbilN_40_Pappeart_41_.xml new file mode 100644 index 00000000..938aad52 Binary files /dev/null and b/demo/visicut/materials/._elring_32_AbilN_40_Pappeart_41_.xml differ diff --git a/demo/visicut/materials/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml b/demo/visicut/materials/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml new file mode 100644 index 00000000..fad05cac --- /dev/null +++ b/demo/visicut/materials/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Acrylic-Plastik (Corona Kopfhoerer,Plastik_Huelle) + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Acrylic.png b/demo/visicut/materials/Acrylic.png new file mode 100644 index 00000000..2bad202e Binary files /dev/null and b/demo/visicut/materials/Acrylic.png differ diff --git a/demo/visicut/materials/Acrylic.xml b/demo/visicut/materials/Acrylic.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Alu_32_Profil_32__40_eloxiert_41_.xml b/demo/visicut/materials/Alu_32_Profil_32__40_eloxiert_41_.xml new file mode 100644 index 00000000..3f5b470b --- /dev/null +++ b/demo/visicut/materials/Alu_32_Profil_32__40_eloxiert_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Alu Profil (eloxiert) + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_.xml b/demo/visicut/materials/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Birkensperrholz_40_Multiplex_41_.xml b/demo/visicut/materials/Birkensperrholz_40_Multiplex_41_.xml new file mode 100644 index 00000000..568abd3b --- /dev/null +++ b/demo/visicut/materials/Birkensperrholz_40_Multiplex_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Birkensperrholz(Multiplex) + + 4.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Bleistift.xml b/demo/visicut/materials/Bleistift.xml new file mode 100644 index 00000000..eb1a154c --- /dev/null +++ b/demo/visicut/materials/Bleistift.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Bleistift + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Braunpappe.xml b/demo/visicut/materials/Braunpappe.xml new file mode 100644 index 00000000..24d58a0e --- /dev/null +++ b/demo/visicut/materials/Braunpappe.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Braunpappe + + 1.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Bristolkarton.xml b/demo/visicut/materials/Bristolkarton.xml new file mode 100644 index 00000000..17850867 --- /dev/null +++ b/demo/visicut/materials/Bristolkarton.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Bristolkarton + + 0.6 + + \ No newline at end of file diff --git a/demo/visicut/materials/Buche.xml b/demo/visicut/materials/Buche.xml new file mode 100644 index 00000000..61cbf467 --- /dev/null +++ b/demo/visicut/materials/Buche.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Buche + + 0.8 + + \ No newline at end of file diff --git a/demo/visicut/materials/Dicke_32_Wellpappe.xml b/demo/visicut/materials/Dicke_32_Wellpappe.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Expo_32_Giveaway_32_Pappe.xml b/demo/visicut/materials/Expo_32_Giveaway_32_Pappe.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Filz_40_Girlsday_95_Blume_41_.xml b/demo/visicut/materials/Filz_40_Girlsday_95_Blume_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Finnpappe.xml b/demo/visicut/materials/Finnpappe.xml new file mode 100644 index 00000000..9e2a72fc --- /dev/null +++ b/demo/visicut/materials/Finnpappe.xml @@ -0,0 +1,14 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Finnpappe + + 1.0 + 1.5 + 2.0 + 3.0 + 4.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Flexfolie_32__40_T-Shirt_32_druck_41_.xml b/demo/visicut/materials/Flexfolie_32__40_T-Shirt_32_druck_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Flockfolie_32__40_T-Shirt_32_druck_41_.xml b/demo/visicut/materials/Flockfolie_32__40_T-Shirt_32_druck_41_.xml new file mode 100644 index 00000000..7757c575 --- /dev/null +++ b/demo/visicut/materials/Flockfolie_32__40_T-Shirt_32_druck_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Flockfolie (T-Shirt druck) + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Folie.xml b/demo/visicut/materials/Folie.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml b/demo/visicut/materials/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Folie_40_Plexiglass_41_.xml b/demo/visicut/materials/Folie_40_Plexiglass_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Furnier_32_Kirschbaum.xml b/demo/visicut/materials/Furnier_32_Kirschbaum.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Graupappe.xml b/demo/visicut/materials/Graupappe.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Gummi_44_schwarz.xml b/demo/visicut/materials/Gummi_44_schwarz.xml new file mode 100644 index 00000000..3640ab42 --- /dev/null +++ b/demo/visicut/materials/Gummi_44_schwarz.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Gummi,schwarz + + 2.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Kapton_40_Makerbot_41_.xml b/demo/visicut/materials/Kapton_40_Makerbot_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Karton.xml b/demo/visicut/materials/Karton.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Karton_40_300gr_44_schwarz_44_dick_41_.xml b/demo/visicut/materials/Karton_40_300gr_44_schwarz_44_dick_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Kiefer.xml b/demo/visicut/materials/Kiefer.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml b/demo/visicut/materials/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Kokosschale_32_3-4mm.xml b/demo/visicut/materials/Kokosschale_32_3-4mm.xml new file mode 100644 index 00000000..443b10d4 --- /dev/null +++ b/demo/visicut/materials/Kokosschale_32_3-4mm.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Kokosschale 3-4mm + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Kopierfolie_40_Soennecken_41_.xml b/demo/visicut/materials/Kopierfolie_40_Soennecken_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Kunstleder_32__40_Sarahs_32_Kalender_41_.xml b/demo/visicut/materials/Kunstleder_32__40_Sarahs_32_Kalender_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Laser_32_acrylic.xml b/demo/visicut/materials/Laser_32_acrylic.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Laseracryl.xml b/demo/visicut/materials/Laseracryl.xml new file mode 100644 index 00000000..5e110319 --- /dev/null +++ b/demo/visicut/materials/Laseracryl.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Laseracryl + + 0.8 + + \ No newline at end of file diff --git a/demo/visicut/materials/Laseracryl_32__40_Nametags_41_.xml b/demo/visicut/materials/Laseracryl_32__40_Nametags_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Latex.xml b/demo/visicut/materials/Latex.xml new file mode 100644 index 00000000..4142ff9a --- /dev/null +++ b/demo/visicut/materials/Latex.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Latex + + 0.4 + + \ No newline at end of file diff --git a/demo/visicut/materials/Leder.xml b/demo/visicut/materials/Leder.xml new file mode 100644 index 00000000..b3123281 --- /dev/null +++ b/demo/visicut/materials/Leder.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Leder + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Linde_40_Holzart_41_.xml b/demo/visicut/materials/Linde_40_Holzart_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/MDF.xml b/demo/visicut/materials/MDF.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Moosgummi_32_PU_32__40_Polyuretan_41_.xml b/demo/visicut/materials/Moosgummi_32_PU_32__40_Polyuretan_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Moosgummi_44_braun.xml b/demo/visicut/materials/Moosgummi_44_braun.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Multiplex.xml b/demo/visicut/materials/Multiplex.xml new file mode 100644 index 00000000..f139cf0f --- /dev/null +++ b/demo/visicut/materials/Multiplex.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Multiplex + + 3.5 + + \ No newline at end of file diff --git a/demo/visicut/materials/Nessel_40_aus_32_Baumwolle_41_.xml b/demo/visicut/materials/Nessel_40_aus_32_Baumwolle_41_.xml new file mode 100644 index 00000000..ef20e47b --- /dev/null +++ b/demo/visicut/materials/Nessel_40_aus_32_Baumwolle_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Nessel(aus Baumwolle) + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Organza_40_Stoff_41_.xml b/demo/visicut/materials/Organza_40_Stoff_41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/PP_32_Folie.xml b/demo/visicut/materials/PP_32_Folie.xml new file mode 100644 index 00000000..52148ae3 --- /dev/null +++ b/demo/visicut/materials/PP_32_Folie.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + PP Folie + + 0.5 + + \ No newline at end of file diff --git a/demo/visicut/materials/PP_40_Kunststoff_41_Dvd_95_Huelle.xml b/demo/visicut/materials/PP_40_Kunststoff_41_Dvd_95_Huelle.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml b/demo/visicut/materials/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Paper.png b/demo/visicut/materials/Paper.png new file mode 100644 index 00000000..f1d77453 Binary files /dev/null and b/demo/visicut/materials/Paper.png differ diff --git a/demo/visicut/materials/Paper.xml b/demo/visicut/materials/Paper.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Papier.xml b/demo/visicut/materials/Papier.xml new file mode 100644 index 00000000..1f98837c --- /dev/null +++ b/demo/visicut/materials/Papier.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Papier + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Papier_40_120gr_41_.xml b/demo/visicut/materials/Papier_40_120gr_41_.xml new file mode 100644 index 00000000..03cf8414 --- /dev/null +++ b/demo/visicut/materials/Papier_40_120gr_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Papier(120gr) + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Pappel.xml b/demo/visicut/materials/Pappel.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Pappel_40_Sperrholz_41_.xml b/demo/visicut/materials/Pappel_40_Sperrholz_41_.xml new file mode 100644 index 00000000..21316cd3 --- /dev/null +++ b/demo/visicut/materials/Pappel_40_Sperrholz_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Pappel(Sperrholz) + + 4.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Plexiglass.xml b/demo/visicut/materials/Plexiglass.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Polycarbonat.xml b/demo/visicut/materials/Polycarbonat.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Rubber.xml b/demo/visicut/materials/Rubber.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Schellackplatte.xml b/demo/visicut/materials/Schellackplatte.xml new file mode 100644 index 00000000..d2566134 --- /dev/null +++ b/demo/visicut/materials/Schellackplatte.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Schellackplatte + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/materials/Silikon_32_rot.xml b/demo/visicut/materials/Silikon_32_rot.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/Textil_32_Curv_44_Textil_32_Membran.xml b/demo/visicut/materials/Textil_32_Curv_44_Textil_32_Membran.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/materials/elring_32_AbilN_40_Pappeart_41_.xml b/demo/visicut/materials/elring_32_AbilN_40_Pappeart_41_.xml new file mode 100644 index 00000000..ff98d555 --- /dev/null +++ b/demo/visicut/materials/elring_32_AbilN_40_Pappeart_41_.xml @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + elring AbilN(Pappeart) + + 0.0 + + \ No newline at end of file diff --git a/demo/visicut/plf-mime.xml b/demo/visicut/plf-mime.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/profiles/._engrave.xml b/demo/visicut/profiles/._engrave.xml new file mode 100644 index 00000000..130181a9 Binary files /dev/null and b/demo/visicut/profiles/._engrave.xml differ diff --git a/demo/visicut/profiles/._engrave_32_3d.xml b/demo/visicut/profiles/._engrave_32_3d.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/profiles/._mark.xml b/demo/visicut/profiles/._mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/profiles/cut.xml b/demo/visicut/profiles/cut.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/profiles/engrave.xml b/demo/visicut/profiles/engrave.xml new file mode 100644 index 00000000..63146d61 --- /dev/null +++ b/demo/visicut/profiles/engrave.xml @@ -0,0 +1,11 @@ + + 500.0 + Engrave + engrave + false + 0 + + + 0 + + \ No newline at end of file diff --git a/demo/visicut/profiles/engrave_32_3d.xml b/demo/visicut/profiles/engrave_32_3d.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/profiles/mark.xml b/demo/visicut/profiles/mark.xml new file mode 100644 index 00000000..e69de29b diff --git a/demo/visicut/settings/._epilog-zing.png b/demo/visicut/settings/._epilog-zing.png new file mode 100644 index 00000000..a49f5b74 Binary files /dev/null and b/demo/visicut/settings/._epilog-zing.png differ diff --git a/demo/visicut/settings/epilog-zing.png b/demo/visicut/settings/epilog-zing.png new file mode 100644 index 00000000..57f9a3b0 Binary files /dev/null and b/demo/visicut/settings/epilog-zing.png differ diff --git a/demo/visicut/settings/settings.xml b/demo/visicut/settings/settings.xml new file mode 100644 index 00000000..c13861fe --- /dev/null +++ b/demo/visicut/settings/settings.xml @@ -0,0 +1,21 @@ + + + 0 + 0 + 1192 + 792 + + true + + /home/thommy/.visicut/examples/visicut-icon.png + + MDF + Epilog Zing + + com.t_oster.visicut.model.graphicelements.svgsupport.SVGImporter + com.t_oster.visicut.model.graphicelements.jpgpngsupport.JPGPNGImporter + com.t_oster.visicut.model.graphicelements.dxfsupport.DXFImporter + com.t_oster.visicut.model.graphicelements.epssupport.EPSImporter + + true + \ No newline at end of file diff --git a/globalwarming_graph/GlobalWarming.java b/globalwarming_graph/GlobalWarming.java deleted file mode 100644 index 26af7a94..00000000 --- a/globalwarming_graph/GlobalWarming.java +++ /dev/null @@ -1,50 +0,0 @@ -import java.util.List; - -abstract class GlobalWarming { - - /** - * A class to represent the coordinates on the altitude matrix - */ - public static class Point { - - final int x, y; - - Point(int x, int y) { - this.x = x; - this.y = y; - } - - @Override - public boolean equals(Object obj) { - Point p = (Point) obj; - return p.x == x && p.y == y; - } - } - - final int[][] altitude; - final int waterLevel; - - /** - * In the following, we assume that the points are connected to - * horizontal or vertical neighbors but not to the diagonal ones - * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) - * @param waterLevel is the water level, every entry <= waterLevel is flooded - */ - public GlobalWarming(int[][] altitude, int waterLevel) { - this.altitude = altitude; - this.waterLevel = waterLevel; - } - - - /** - * - * @param p1 a safe point with valid coordinates on altitude matrix - * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix - * @return the shortest simple safe path (vertical/horizontal moves) if any between from p1 to p2 using - * only vertical/horizontal moves and safe points. - * an empty list if not path exists (p1 and p2 are not on the same island). - */ - public abstract List shortestPath(Point p1, Point p2); - - -} \ No newline at end of file diff --git a/globalwarming_graph/GlobalWarmingImpl.java b/globalwarming_graph/GlobalWarmingImpl.java deleted file mode 100644 index ed8e78d5..00000000 --- a/globalwarming_graph/GlobalWarmingImpl.java +++ /dev/null @@ -1,2 +0,0 @@ -@@implementation@@ - diff --git a/globalwarming_graph/GlobalWarmingTest.java b/globalwarming_graph/GlobalWarmingTest.java deleted file mode 100644 index e0b65177..00000000 --- a/globalwarming_graph/GlobalWarmingTest.java +++ /dev/null @@ -1,336 +0,0 @@ - - -import java.io.IOException; -import java.util.List; -import java.util.List; -import java.util.Random; -import java.util.concurrent.*; - - -public class GlobalWarmingTest { - - final int [] seeds = new int[]{0,7,13}; - - Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); - - abstract class TimeLimitedCodeBlock { - - public boolean run(long time) { - final Runnable stuffToDo = new Thread() { - @Override - public void run() { - codeBlock(); - } - }; - - final ExecutorService executor = Executors.newSingleThreadExecutor(); - final Future future = executor.submit(stuffToDo); - executor.shutdown(); // This does not cancel the already-scheduled task. - boolean ok = true; - try { - future.get(time, TimeUnit.MILLISECONDS); - } catch (InterruptedException ie) { - ok = false; - } catch (ExecutionException ee) { - ok = false; - } catch (TimeoutException te) { - ok = false; - } - if (!executor.isTerminated()) { - future.cancel(true); - executor.shutdownNow(); - executor.shutdownNow(); // If you want to stop the code that hasn't finished. - } - return ok; - } - - public abstract void codeBlock(); - } - - - - - public int [][] getSimpleMatrix() { - int[][] matrix = new int[][]{ - {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, - {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, - {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, - {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, - {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, - {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - }; - return matrix; - } - - - public int [][] getExamMatrix() { - int [][] tab = new int[][] {{1,3,3,1,3}, - {4,2,2,4,5}, - {4,4,1,4,2}, - {1,4,2,3,6}, - {1,1,1,6,3}}; - return tab; - } - - - - - public boolean testShortestPathExam() { - List path = new GlobalWarmingImpl(getExamMatrix(), 3).shortestPath(new GlobalWarming.Point(1, 0), new GlobalWarming.Point(3, 1)); - return path != null && path.size() == 4 && validPath(getExamMatrix(),3,point(1,0),point(3,1),path); - } - - - public int [][] getRandomMatrix(int n,int bound) { - int[][] matrix = new int[n][n]; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - matrix[i][j] = rand.nextInt(bound); - } - } - return matrix; - } - - - public static GlobalWarming.Point point(int x, int y) { - return new GlobalWarming.Point(x,y); - } - - public boolean testSimpleAll() { - int [][] matrix = getSimpleMatrix(); - GlobalWarming warming = new GlobalWarmingImpl(matrix,0); - - List path1 = warming.shortestPath(point(1,1),point(1,1)); - - if (!validPath(matrix,0,point(1,1),point(1,1),path1)) { - System.out.println("error in shortestPath"); - return false; - } - - if (!warming.shortestPath(point(9,9),point(9,9)).isEmpty()) { - System.out.println("error in shortestPath"); - return false; - } - - if (!warming.shortestPath(point(0,9),point(9,9)).isEmpty()) { - System.out.println("error in shortestPath"); - return false; - } - - List path2 = warming.shortestPath(point(4,5),point(1,7)); - if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { - System.out.println("error in shortestPath, path not valid"); - return false; - } - - - if (path2.size() != 8) { - System.out.println("error in shortestPath, not correct length"); - System.out.println(path2.size()); - return false; - } - return true; - } - - - public boolean testCorrectnessShortestPath() { - int level = 200000; - GlobalWarming.Point p1 = point(10,10); - GlobalWarming.Point p2 = point(15,15); - - for (int k = 0; k < 50; k++) { - int [][] matrix = getRandomMatrix(50,1000000); - GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); - - for (int i = 0; i < 50; i++) { - for (int j = 0; j < 50-3; j++) { - if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { - - List path = g1.shortestPath(point(i,j),point(i,j+2)); - - if (path.size() != 3 && !validPath(matrix,level,point(i,j),point(i,j+2),path)) { - return false; - } - } - } - } - } - int [][] matrix = getSimpleMatrix(); - GlobalWarming warming = new GlobalWarmingImpl(matrix,0); - /* - List path1 = warming.shortestPath(point(1,1),point(1,1)); - - if (!validPath(matrix,0,point(1,1),point(1,1),path1)) { - return false; - } - if (!warming.shortestPath(point(9,9),point(9,9)).isEmpty()) { - return false; - } - if (!warming.shortestPath(point(0,9),point(9,9)).isEmpty()) { - return false; - }*/ - - List path2 = warming.shortestPath(point(4,5),point(1,7)); - if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { - return false; - } - - if (path2.size() != 8) { - return false; - } - return true; - } - - - public boolean validPath(int [][] matrix, int level, GlobalWarming.Point p1, GlobalWarming.Point p2, List path) { - for (GlobalWarming.Point p: path) { - if (matrix[p.x][p.y] <= level) return false; - } - for (int i = 0; i < path.size()-1; i++) { - if (!neighbors(path.get(i),path.get(i+1))) { - return false; - } - } - if (matrix[p1.x][p1.y] <= level && !path.isEmpty()) return false; - if (matrix[p2.x][p2.y] <= level && !path.isEmpty()) return false; - - return !path.isEmpty() && path.get(0).equals(p1) && path.get(path.size()-1).equals(p2); - } - - - public boolean neighbors(GlobalWarming.Point p1,GlobalWarming.Point p2) { - return Math.abs(p1.x-p2.x) + Math.abs(p1.y-p2.y) == 1; - } - - - public boolean timeComplexityConstructorCorrect() { - try { - - final int [][] matrix = getRandomMatrix(100,2000000); - - boolean timeOk = new TimeLimitedCodeBlock() { - @Override - public void codeBlock() { - int max = 0; - // do some computation here - long t0 = System.currentTimeMillis(); - GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); - long t1 = System.currentTimeMillis(); - System.out.println("time constructor:"+(t1-t0)); - } - }.run(500); - if (!timeOk) return false; - - } catch (AssertionError e) { - return false; - } - return true; - } - - public boolean timeComplexityShortestPath() { - try { - - final int [][] matrix = getRandomMatrix(70,2000000); - final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); - - boolean timeOk = new TimeLimitedCodeBlock() { - @Override - public void codeBlock() { - int max = 0; - // do some computation here - long t0 = System.currentTimeMillis(); - int n = matrix.length; - for (int i = 0; i < n; i++){ - for (int j = 0; j < n; j++) { - g.shortestPath(point(i,j),point(n-1,n-1)); - } - } - long t1 = System.currentTimeMillis(); - System.out.println("time shortestPath:"+(t1-t0)); - } - }.run(1000); - if (!timeOk) return false; - - } catch (AssertionError e) { - return false; - } - return true; - } - - - private void exec(String cmd) { - try { - Runtime.getRuntime().exec(cmd).waitFor(); - } - catch (IOException e) {e.printStackTrace(); } - catch (InterruptedException e) {e.printStackTrace(); } - } - - private void feedback(String message) { - System.out.println(message); - try { - Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n"+message+"\n"}).waitFor(); - } - catch (IOException e) {e.printStackTrace(); } - catch (InterruptedException e) {e.printStackTrace(); } - } - - - public void testGrade() { - int score = 0; - - try { - - - if (testShortestPathExam()) { - score += 15; - } else { - feedback("test exam shortest path -15"); - } - - - if (testCorrectnessShortestPath()) { - score += 35; - - if (timeComplexityShortestPath()) { - score += 50; - } else { - feedback("test complexity shortestPath (hint:could you stop earlier, do you really need to visit all positions?):-50"); - } - - } else { - feedback("test correctness Path on random graphs:-35"); - } - - - } catch (Exception e) { - - } - - System.out.println("%score:" + score); - - - exec("feedback-grade "+score); - - - if (Math.min(score,100) == 100) { - feedback("Congratulations"); - exec("feedback-result success"); - } - else { - feedback("Not yet there"); - exec("feedback-result failed"); - } - - - } - - public static void main(String[] args) { - new GlobalWarmingTest().testGrade(); - } -} - diff --git a/globalwarming_graph/run b/globalwarming_graph/run deleted file mode 100644 index efd90994..00000000 --- a/globalwarming_graph/run +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -export LC_ALL=en_US.UTF-8 -export LANG=en_US.UTF-8 -export LANGUAGE=en_US.UTF-8 - - - - -# test preliminary question - -a=`getinput shortestPath` -if [[ "$a" != "(1,0),(2,0),(2,1),(3,1)" ]]; then - echo "failed"; - feedback-result failed - feedback-msg -ae -m "Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice shortestPath \n" - exit -fi - - -#produce the output directory -mkdir output - -# parse templates -parsetemplate GlobalWarmingImpl.java - -# run sur un seul exemple pour les erreurs de compilation etc - -javac -Xlint:none -cp . GlobalWarmingTest.java 2> output/comp.err - -java -cp . GlobalWarmingTest 2> output/run.err > output/std.out - - -# add files to archive -#archive -a Median.java -#for f in $(ls output); do -#archive -a output/$f -#done - -# run feedback -if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error - echo "compilation error" - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" - cat output/comp.err | rst-code | feedback-msg -a - exit -fi - - - - - -if [ -s output/run.err ]; then # error in main() - echo "runtime error" - feedback-grade 0 - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" - cat output/run.err | rst-code | feedback-msg -a - exit -fi -echo "testing ok" - diff --git a/globalwarming_graph/task.yaml b/globalwarming_graph/task.yaml index a9cbf1c7..66b29e3d 100644 --- a/globalwarming_graph/task.yaml +++ b/globalwarming_graph/task.yaml @@ -110,16 +110,16 @@ evaluate: best groups: false input_random: '0' limits: - output: '100' - memory: '750' time: '120' -name: Bilan M6 - Global Warming + memory: '750' + output: '100' +name: '[old] Bilan M6 - Global Warming' network_grading: false -order: 33 problems: shortestPath: - type: match + answer: (1,0),(2,0),(2,1),(3,1) name: shortestPath + type: match header: |- What would be the result of @@ -128,9 +128,10 @@ problems: gw.shortestPath(new GlobalWarming.Point(1,0),new GlobalWarming.Point(3,1)); expected: a list of comma separated positions such as (1,0),(1,1),(2,1),(3,1) - answer: (1,0),(2,0),(2,1),(3,1) implementation: + name: Fill in the class such that it corresponds to its specification. language: java + type: code header: |+ Copy-paste and complete the code below. Be careful with the expected time-complexity in each method. @@ -161,11 +162,9 @@ problems: default: '' - name: Fill in the class such that it corresponds to its specification. - type: code stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 +order: 42 diff --git a/globalwarming_unionfind/GlobalWarming.java b/globalwarming_unionfind/GlobalWarming.java deleted file mode 100644 index d4522a5f..00000000 --- a/globalwarming_unionfind/GlobalWarming.java +++ /dev/null @@ -1,66 +0,0 @@ -import java.util.List; - -abstract class GlobalWarming { - - /** - * A class to represent the coordinates on the altitude matrix - */ - public static class Point { - - final int x, y; - - Point(int x, int y) { - this.x = x; - this.y = y; - } - - @Override - public boolean equals(Object obj) { - Point p = (Point) obj; - return p.x == x && p.y == y; - } - } - - final int[][] altitude; - final int waterLevel; - - /** - * In the following, we assume that the points are connected to - * horizontal or vertical neighbors but not to the diagonal ones - * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) - * @param waterLevel is the water level, every entry <= waterLevel is flooded - */ - public GlobalWarming(int[][] altitude, int waterLevel) { - this.altitude = altitude; - this.waterLevel = waterLevel; - } - - /** - * An island is a connected components of safe points wrt to waterLevel - * @return the number of islands - */ - public abstract int nbIslands(); - - /** - * - * @param p1 a point with valid coordinates on altitude matrix - * @param p2 a point with valid coordinates on altitude matrix - * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel - * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions - */ - public abstract boolean onSameIsland(Point p1, Point p2); - - - public int nbSafePointsCorrect(int waterLevel) { - int res = 0; - for (int i = 0; i < altitude.length; i++) { - for (int j = 0; j < altitude.length; j++) { - if (altitude[i][j] > waterLevel) { - res++; - } - } - } - return res; - } - -} \ No newline at end of file diff --git a/globalwarming_unionfind/GlobalWarmingImpl.java b/globalwarming_unionfind/GlobalWarmingImpl.java deleted file mode 100644 index ed8e78d5..00000000 --- a/globalwarming_unionfind/GlobalWarmingImpl.java +++ /dev/null @@ -1,2 +0,0 @@ -@@implementation@@ - diff --git a/globalwarming_unionfind/run b/globalwarming_unionfind/run deleted file mode 100644 index 86de9b79..00000000 --- a/globalwarming_unionfind/run +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash -export LC_ALL=en_US.UTF-8 -export LANG=en_US.UTF-8 -export LANGUAGE=en_US.UTF-8 - - -# test preliminary question - -a=`getinput nbIslands` -if [ $a -ne 4 ]; then - echo "failed"; - feedback-result failed - feedback-msg -ae -m "Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice nbIslands \n" - exit -fi - -a=`getinput onSameIsland` -if [[ "$a" != "false" ]]; then - echo "failed"; - feedback-result failed - feedback-msg -ae -m "Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice onSameIsland \n" - exit -fi - -#produce the output directory -mkdir output - -# parse templates -parsetemplate GlobalWarmingImpl.java - -# run sur un seul exemple pour les erreurs de compilation etc - -javac -Xlint:none -cp . GlobalWarmingTest.java 2> output/comp.err - -java -cp . GlobalWarmingTest 2> output/run.err > output/std.out - - -# add files to archive -#archive -a Median.java -#for f in $(ls output); do -#archive -a output/$f -#done - -# run feedback -if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error - echo "compilation error" - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" - cat output/comp.err | rst-code | feedback-msg -a - exit -fi - - - -if [ -s output/run.err ]; then # error in main() - echo "runtime error" - feedback-grade 0 - feedback-result failed - feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" - cat output/run.err | rst-code | feedback-msg -a - exit -fi -echo "testing ok" - diff --git a/globalwarming_unionfind/task.yaml b/globalwarming_unionfind/task.yaml deleted file mode 100644 index 47690c79..00000000 --- a/globalwarming_unionfind/task.yaml +++ /dev/null @@ -1,201 +0,0 @@ -accessible: false -author: '' -context: |+ - Context - ================================================== - - Assume the following 5x5 matrix: - - .. code-block:: java - - int [][] tab = new int[][] {{1,3,3,1,3}, - {4,2,2,4,5}, - {4,4,1,4,2}, - {1,4,2,3,6}, - {1,1,1,6,3}}; - - represented in the array here under: - - .. image:: globalwarming_unionfind/matrix.png - :width: 200px - :align: center - :alt: matrix example - - Each entry of the matrix represents an altitude. - The objective is to implement a class `GlobalWarmingImpl` that implements all the methods described in `GlobalWarming` given next. - - A global water level specified in the constructor models the fact that all the positions of the matrix with a value <= the water level are flooded (under the water) and thus unsafe. - In the above example, the water level is 3, all the safe points are green. - - The methods you must implement are - - * the number of islands - * a test to verify if two positions are on the same island - - we assume that points are **only connected vertially or horizontally**. - - .. code-block:: java - - - import java.util.List; - - abstract class GlobalWarming { - - /** - * A class to represent the coordinates on the altitude matrix - */ - public static class Point { - - final int x, y; - - Point(int x, int y) { - this.x = x; - this.y = y; - } - - @Override - public boolean equals(Object obj) { - Point p = (Point) obj; - return p.x == x && p.y == y; - } - } - - final int[][] altitude; - final int waterLevel; - - - /** - * In the following, we assume that the points are connected to - * horizontal or vertical neighbors but not to the diagonal ones - * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) - * @param waterLevel is the water level, every entry <= waterLevel is flooded - */ - public GlobalWarming(int[][] altitude, int waterLevel) { - this.altitude = altitude; - this.waterLevel = waterLevel; - } - - - /** - * An island is a connected components of safe points wrt to waterLevel - * @return the number of islands - */ - public abstract int nbIslands(); - - /** - * - * @param p1 a point with valid coordinates on altitude matrix - * @param p2 a point with valid coordinates on altitude matrix - * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel - * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions - */ - public abstract boolean onSameIsland(Point p1, Point p2); - - - } - - - Preliminary exercises - ================================================== - - - .. code-block:: java - - int [][] tab = new int[][] {{1,3,3,1,3}, - {4,2,2,4,5}, - {4,4,1,4,2}, - {1,4,2,3,6}, - {1,1,1,6,3}}; - GlobalWarming gw = new MyGlobalWarming(tab,3); - - .. image:: globalwarming_unionfind/matrix.png - :width: 200px - :align: center - :alt: matrix example - - -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - output: '100' - memory: '750' - hard_time: '120' - time: '30' -name: Bilan M5 - Global Warming -network_grading: false -order: 25 -problems: - nbIslands: - name: nbIslands - header: |- - What would be the result of - - .. code-block:: java - - gw.nbIslands() - - - expected: a number - type: match - answer: '4' - onSameIsland: - name: onSameIsland - answer: 'false' - header: |- - What would be the result of - - .. code-block:: java - - gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)); - - expected: true/false - type: match - implementation: - language: java - header: |+ - Copy-paste and complete the code below. - Be careful with the expected time-complexity in each method. - To meet these time-complexity some precomputation should already be done in the constructor. Don't hesitate to create inner classes in GlobalWarmingImpl to facilitate your implementation. - Feel free to use any method or data-structure available in the Java language and API. - - .. code-block:: java - - import java.util.*; - - public class GlobalWarmingImpl extends GlobalWarming { - - public GlobalWarmingImpl(int[][] altitude, int waterLevel) { - super(altitude,waterLevel); - // expected pre-processing time in the constructror : O(n^2 log(n^2)) - // TODO - } - - public int nbIslands() { - // TODO - // expected time complexity O(1) - return 0; - } - - - public boolean onSameIsland(Point p1, Point p2) { - // TODO - // expected time complexity O(1) - return true; - } - - } - - - - - default: '' - name: Fill in the class such that it corresponds to its specification. - type: code -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 1.0 diff --git a/lost+found/.DS_Store-H0d3f6 b/lost+found/.DS_Store-H0d3f6 new file mode 100644 index 00000000..83fcafbf Binary files /dev/null and b/lost+found/.DS_Store-H0d3f6 differ diff --git a/p1circularlinkedlist/tests/.DS_Store b/lost+found/.DS_Store-mmLMEM similarity index 100% rename from p1circularlinkedlist/tests/.DS_Store rename to lost+found/.DS_Store-mmLMEM diff --git a/lost+found/.DS_Store-pJIs14 b/lost+found/.DS_Store-pJIs14 new file mode 100644 index 00000000..fb962304 Binary files /dev/null and b/lost+found/.DS_Store-pJIs14 differ diff --git a/lost+found/.DS_Store-smOnzU b/lost+found/.DS_Store-smOnzU new file mode 100644 index 00000000..3b0398e4 Binary files /dev/null and b/lost+found/.DS_Store-smOnzU differ diff --git a/lost+found/._.DS_Store-aZ33ib b/lost+found/._.DS_Store-aZ33ib new file mode 100644 index 00000000..1262150a Binary files /dev/null and b/lost+found/._.DS_Store-aZ33ib differ diff --git a/lost+found/._.DS_Store-b9GmwK b/lost+found/._.DS_Store-b9GmwK new file mode 100644 index 00000000..49f02e40 Binary files /dev/null and b/lost+found/._.DS_Store-b9GmwK differ diff --git a/lost+found/._.DS_Store-bsI6qc b/lost+found/._.DS_Store-bsI6qc new file mode 100644 index 00000000..3fe8c188 Binary files /dev/null and b/lost+found/._.DS_Store-bsI6qc differ diff --git a/lost+found/._0.0mm-0X61pM b/lost+found/._0.0mm-0X61pM new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-3Ws1SY b/lost+found/._0.0mm-3Ws1SY new file mode 100644 index 00000000..d1d72730 Binary files /dev/null and b/lost+found/._0.0mm-3Ws1SY differ diff --git a/lost+found/._0.0mm-7PzIOc b/lost+found/._0.0mm-7PzIOc new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-8C0U1x b/lost+found/._0.0mm-8C0U1x new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-BDkMxI b/lost+found/._0.0mm-BDkMxI new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-J8LVNV b/lost+found/._0.0mm-J8LVNV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-JkY0Ks b/lost+found/._0.0mm-JkY0Ks new file mode 100644 index 00000000..0f13042a Binary files /dev/null and b/lost+found/._0.0mm-JkY0Ks differ diff --git a/lost+found/._0.0mm-McK2oU b/lost+found/._0.0mm-McK2oU new file mode 100644 index 00000000..03050e9b Binary files /dev/null and b/lost+found/._0.0mm-McK2oU differ diff --git a/lost+found/._0.0mm-NPo4Nz b/lost+found/._0.0mm-NPo4Nz new file mode 100644 index 00000000..78ea6629 Binary files /dev/null and b/lost+found/._0.0mm-NPo4Nz differ diff --git a/lost+found/._0.0mm-OIljXD b/lost+found/._0.0mm-OIljXD new file mode 100644 index 00000000..fa438d96 Binary files /dev/null and b/lost+found/._0.0mm-OIljXD differ diff --git a/lost+found/._0.0mm-SCoeDb b/lost+found/._0.0mm-SCoeDb new file mode 100644 index 00000000..aee1341b Binary files /dev/null and b/lost+found/._0.0mm-SCoeDb differ diff --git a/lost+found/._0.0mm-W28And b/lost+found/._0.0mm-W28And new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-XiYcA8 b/lost+found/._0.0mm-XiYcA8 new file mode 100644 index 00000000..e5aa52a6 Binary files /dev/null and b/lost+found/._0.0mm-XiYcA8 differ diff --git a/lost+found/._0.0mm-Zee84v b/lost+found/._0.0mm-Zee84v new file mode 100644 index 00000000..da2139ee Binary files /dev/null and b/lost+found/._0.0mm-Zee84v differ diff --git a/lost+found/._0.0mm-euPIEc b/lost+found/._0.0mm-euPIEc new file mode 100644 index 00000000..7a00d02f Binary files /dev/null and b/lost+found/._0.0mm-euPIEc differ diff --git a/lost+found/._0.0mm-exyia7 b/lost+found/._0.0mm-exyia7 new file mode 100644 index 00000000..ff69b753 Binary files /dev/null and b/lost+found/._0.0mm-exyia7 differ diff --git a/lost+found/._0.0mm-hzvyQZ b/lost+found/._0.0mm-hzvyQZ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-ijSd0L b/lost+found/._0.0mm-ijSd0L new file mode 100644 index 00000000..3a82d959 Binary files /dev/null and b/lost+found/._0.0mm-ijSd0L differ diff --git a/lost+found/._0.0mm-nFooUn b/lost+found/._0.0mm-nFooUn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.0mm-phpRQa b/lost+found/._0.0mm-phpRQa new file mode 100644 index 00000000..e4308eeb Binary files /dev/null and b/lost+found/._0.0mm-phpRQa differ diff --git a/lost+found/._0.0mm-ru0hHq b/lost+found/._0.0mm-ru0hHq new file mode 100644 index 00000000..ae6d8aae Binary files /dev/null and b/lost+found/._0.0mm-ru0hHq differ diff --git a/lost+found/._0.0mm-sYXhAL b/lost+found/._0.0mm-sYXhAL new file mode 100644 index 00000000..2a1463fe Binary files /dev/null and b/lost+found/._0.0mm-sYXhAL differ diff --git a/lost+found/._0.1mm-whp32g b/lost+found/._0.1mm-whp32g new file mode 100644 index 00000000..b20e9e0b Binary files /dev/null and b/lost+found/._0.1mm-whp32g differ diff --git a/lost+found/._0.2mm-EIWDeV b/lost+found/._0.2mm-EIWDeV new file mode 100644 index 00000000..a7acb3f2 Binary files /dev/null and b/lost+found/._0.2mm-EIWDeV differ diff --git a/lost+found/._0.4mm-A88fm7 b/lost+found/._0.4mm-A88fm7 new file mode 100644 index 00000000..b5df3f24 Binary files /dev/null and b/lost+found/._0.4mm-A88fm7 differ diff --git a/lost+found/._0.4mm-zyCSzx b/lost+found/._0.4mm-zyCSzx new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.5mm-Xe5uz1 b/lost+found/._0.5mm-Xe5uz1 new file mode 100644 index 00000000..5429f7a2 Binary files /dev/null and b/lost+found/._0.5mm-Xe5uz1 differ diff --git a/lost+found/._0.5mm-f3dh49 b/lost+found/._0.5mm-f3dh49 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.5mm-jB2EZ5 b/lost+found/._0.5mm-jB2EZ5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._0.6mm-Y5aEew b/lost+found/._0.6mm-Y5aEew new file mode 100644 index 00000000..8b6e1266 Binary files /dev/null and b/lost+found/._0.6mm-Y5aEew differ diff --git a/lost+found/._0.6mm-yxRzBC b/lost+found/._0.6mm-yxRzBC new file mode 100644 index 00000000..627a368d Binary files /dev/null and b/lost+found/._0.6mm-yxRzBC differ diff --git a/lost+found/._0.8mm-GNnZNG b/lost+found/._0.8mm-GNnZNG new file mode 100644 index 00000000..100946a4 Binary files /dev/null and b/lost+found/._0.8mm-GNnZNG differ diff --git a/lost+found/._0.8mm-hFi8Yn b/lost+found/._0.8mm-hFi8Yn new file mode 100644 index 00000000..1873a101 Binary files /dev/null and b/lost+found/._0.8mm-hFi8Yn differ diff --git a/lost+found/._0.9mm-JD37Dr b/lost+found/._0.9mm-JD37Dr new file mode 100644 index 00000000..001fc593 Binary files /dev/null and b/lost+found/._0.9mm-JD37Dr differ diff --git a/lost+found/._1.0mm-767jVz b/lost+found/._1.0mm-767jVz new file mode 100644 index 00000000..2ca93f87 Binary files /dev/null and b/lost+found/._1.0mm-767jVz differ diff --git a/lost+found/._1.0mm-9Lof2Q b/lost+found/._1.0mm-9Lof2Q new file mode 100644 index 00000000..d1c6b998 Binary files /dev/null and b/lost+found/._1.0mm-9Lof2Q differ diff --git a/lost+found/._1.0mm-K8s0Xj b/lost+found/._1.0mm-K8s0Xj new file mode 100644 index 00000000..ce8d598e Binary files /dev/null and b/lost+found/._1.0mm-K8s0Xj differ diff --git a/lost+found/._1.0mm-Qb3K0i b/lost+found/._1.0mm-Qb3K0i new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._1.0mm-dmGl2W b/lost+found/._1.0mm-dmGl2W new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._1.0mm-lLZPNX b/lost+found/._1.0mm-lLZPNX new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._1.0mm-lN4rra b/lost+found/._1.0mm-lN4rra new file mode 100644 index 00000000..2e3eece6 Binary files /dev/null and b/lost+found/._1.0mm-lN4rra differ diff --git a/lost+found/._1.0mm-qlZRKF b/lost+found/._1.0mm-qlZRKF new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._1.0mm-zxYc9F b/lost+found/._1.0mm-zxYc9F new file mode 100644 index 00000000..b32ade54 Binary files /dev/null and b/lost+found/._1.0mm-zxYc9F differ diff --git a/lost+found/._1.5mm-L9UQiR b/lost+found/._1.5mm-L9UQiR new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._1.5mm-jHCnZJ b/lost+found/._1.5mm-jHCnZJ new file mode 100644 index 00000000..e9110b0b Binary files /dev/null and b/lost+found/._1.5mm-jHCnZJ differ diff --git a/lost+found/._1.5mm-loF44j b/lost+found/._1.5mm-loF44j new file mode 100644 index 00000000..11d3e1b4 Binary files /dev/null and b/lost+found/._1.5mm-loF44j differ diff --git a/lost+found/._2.0mm-35Bd5z b/lost+found/._2.0mm-35Bd5z new file mode 100644 index 00000000..b140ec5e Binary files /dev/null and b/lost+found/._2.0mm-35Bd5z differ diff --git a/lost+found/._2.0mm-Fbv4gW b/lost+found/._2.0mm-Fbv4gW new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._2.0mm-KKffTB b/lost+found/._2.0mm-KKffTB new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._2.0mm-cqAPvS b/lost+found/._2.0mm-cqAPvS new file mode 100644 index 00000000..cbd5090d Binary files /dev/null and b/lost+found/._2.0mm-cqAPvS differ diff --git a/lost+found/._2.0mm-hW3L4W b/lost+found/._2.0mm-hW3L4W new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._2.0mm-mizNr2 b/lost+found/._2.0mm-mizNr2 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._2.0mm-r9byzb b/lost+found/._2.0mm-r9byzb new file mode 100644 index 00000000..b7abca3f Binary files /dev/null and b/lost+found/._2.0mm-r9byzb differ diff --git a/lost+found/._2.5mm-zws0Pe b/lost+found/._2.5mm-zws0Pe new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._3.0mm-6aWAyF b/lost+found/._3.0mm-6aWAyF new file mode 100644 index 00000000..4c2e5b8e Binary files /dev/null and b/lost+found/._3.0mm-6aWAyF differ diff --git a/lost+found/._3.0mm-LZfmh6 b/lost+found/._3.0mm-LZfmh6 new file mode 100644 index 00000000..550d32dd Binary files /dev/null and b/lost+found/._3.0mm-LZfmh6 differ diff --git a/lost+found/._3.0mm-NNzG96 b/lost+found/._3.0mm-NNzG96 new file mode 100644 index 00000000..bd690e08 Binary files /dev/null and b/lost+found/._3.0mm-NNzG96 differ diff --git a/lost+found/._3.0mm-NvTQim b/lost+found/._3.0mm-NvTQim new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._3.0mm-TBIKYC b/lost+found/._3.0mm-TBIKYC new file mode 100644 index 00000000..c9fa59ac Binary files /dev/null and b/lost+found/._3.0mm-TBIKYC differ diff --git a/lost+found/._3.0mm-yUQHus b/lost+found/._3.0mm-yUQHus new file mode 100644 index 00000000..5852303e Binary files /dev/null and b/lost+found/._3.0mm-yUQHus differ diff --git a/lost+found/._3.5mm-lmeMC9 b/lost+found/._3.5mm-lmeMC9 new file mode 100644 index 00000000..d7cdd33f Binary files /dev/null and b/lost+found/._3.5mm-lmeMC9 differ diff --git a/lost+found/._4.0mm-IlzW9A b/lost+found/._4.0mm-IlzW9A new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._4.0mm-NFqJNg b/lost+found/._4.0mm-NFqJNg new file mode 100644 index 00000000..8938e69c Binary files /dev/null and b/lost+found/._4.0mm-NFqJNg differ diff --git a/lost+found/._4.0mm-QZubQD b/lost+found/._4.0mm-QZubQD new file mode 100644 index 00000000..0c20e861 Binary files /dev/null and b/lost+found/._4.0mm-QZubQD differ diff --git a/lost+found/._4.0mm-gNQQ0w b/lost+found/._4.0mm-gNQQ0w new file mode 100644 index 00000000..660ac21e Binary files /dev/null and b/lost+found/._4.0mm-gNQQ0w differ diff --git a/lost+found/._4.0mm-tGYI5O b/lost+found/._4.0mm-tGYI5O new file mode 100644 index 00000000..3fe8476e Binary files /dev/null and b/lost+found/._4.0mm-tGYI5O differ diff --git a/lost+found/._5.0mm-3mLoi5 b/lost+found/._5.0mm-3mLoi5 new file mode 100644 index 00000000..04e53f80 Binary files /dev/null and b/lost+found/._5.0mm-3mLoi5 differ diff --git a/lost+found/._5.0mm-Rk7BVs b/lost+found/._5.0mm-Rk7BVs new file mode 100644 index 00000000..0f008d99 Binary files /dev/null and b/lost+found/._5.0mm-Rk7BVs differ diff --git a/lost+found/._5.0mm-TYHD29 b/lost+found/._5.0mm-TYHD29 new file mode 100644 index 00000000..7a2c0385 Binary files /dev/null and b/lost+found/._5.0mm-TYHD29 differ diff --git a/lost+found/._6.0mm-7JXQ7n b/lost+found/._6.0mm-7JXQ7n new file mode 100644 index 00000000..79c3b9a1 Binary files /dev/null and b/lost+found/._6.0mm-7JXQ7n differ diff --git a/lost+found/._6.0mm-ozmR0Z b/lost+found/._6.0mm-ozmR0Z new file mode 100644 index 00000000..6bf08f81 Binary files /dev/null and b/lost+found/._6.0mm-ozmR0Z differ diff --git a/lost+found/._6.3mm-CXfFJG b/lost+found/._6.3mm-CXfFJG new file mode 100644 index 00000000..ee27a91c Binary files /dev/null and b/lost+found/._6.3mm-CXfFJG differ diff --git a/lost+found/._AbsoluteLayout.jar-4uQ14V b/lost+found/._AbsoluteLayout.jar-4uQ14V new file mode 100644 index 00000000..6c4c21f3 Binary files /dev/null and b/lost+found/._AbsoluteLayout.jar-4uQ14V differ diff --git a/lost+found/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_-Rh8QqB b/lost+found/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_-Rh8QqB new file mode 100644 index 00000000..29be8838 Binary files /dev/null and b/lost+found/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_-Rh8QqB differ diff --git a/lost+found/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml-cDuR8r b/lost+found/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml-cDuR8r new file mode 100644 index 00000000..9c31ff6f Binary files /dev/null and b/lost+found/._Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml-cDuR8r differ diff --git a/lost+found/._Acrylic.png-CEK2KV b/lost+found/._Acrylic.png-CEK2KV new file mode 100644 index 00000000..6c47dfef Binary files /dev/null and b/lost+found/._Acrylic.png-CEK2KV differ diff --git a/lost+found/._Acrylic.xml-e28lbe b/lost+found/._Acrylic.xml-e28lbe new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Alu_32_Profil_32__40_eloxiert_41_-omeCai b/lost+found/._Alu_32_Profil_32__40_eloxiert_41_-omeCai new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Alu_32_Profil_32__40_eloxiert_41_.xml-FXqo4f b/lost+found/._Alu_32_Profil_32__40_eloxiert_41_.xml-FXqo4f new file mode 100644 index 00000000..618fade1 Binary files /dev/null and b/lost+found/._Alu_32_Profil_32__40_eloxiert_41_.xml-FXqo4f differ diff --git a/lost+found/._AppleJavaExtensions.jar-SsRJOk b/lost+found/._AppleJavaExtensions.jar-SsRJOk new file mode 100644 index 00000000..39fe28f4 Binary files /dev/null and b/lost+found/._AppleJavaExtensions.jar-SsRJOk differ diff --git a/lost+found/._Auge_32__40_bis_32_-1.5_32_Dioptrin_41_-jQx2NG b/lost+found/._Auge_32__40_bis_32_-1.5_32_Dioptrin_41_-jQx2NG new file mode 100644 index 00000000..38f706af Binary files /dev/null and b/lost+found/._Auge_32__40_bis_32_-1.5_32_Dioptrin_41_-jQx2NG differ diff --git a/lost+found/._Basic-SH8c3w b/lost+found/._Basic-SH8c3w new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Birkensperrholz_40_Multiplex_41_-7uP5dL b/lost+found/._Birkensperrholz_40_Multiplex_41_-7uP5dL new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Birkensperrholz_40_Multiplex_41_.xml-QvOGvL b/lost+found/._Birkensperrholz_40_Multiplex_41_.xml-QvOGvL new file mode 100644 index 00000000..0b7cedb1 Binary files /dev/null and b/lost+found/._Birkensperrholz_40_Multiplex_41_.xml-QvOGvL differ diff --git a/lost+found/._Bleistift-TH51da b/lost+found/._Bleistift-TH51da new file mode 100644 index 00000000..29e9bf8e Binary files /dev/null and b/lost+found/._Bleistift-TH51da differ diff --git a/lost+found/._Bleistift.xml-Oq9l3Z b/lost+found/._Bleistift.xml-Oq9l3Z new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Braunpappe-EJL3ie b/lost+found/._Braunpappe-EJL3ie new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Braunpappe.xml-WuPx17 b/lost+found/._Braunpappe.xml-WuPx17 new file mode 100644 index 00000000..3ad3933b Binary files /dev/null and b/lost+found/._Braunpappe.xml-WuPx17 differ diff --git a/lost+found/._Bristolkarton-llElpH b/lost+found/._Bristolkarton-llElpH new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Bristolkarton.xml-gkFG9E b/lost+found/._Bristolkarton.xml-gkFG9E new file mode 100644 index 00000000..2c1a6185 Binary files /dev/null and b/lost+found/._Bristolkarton.xml-gkFG9E differ diff --git a/lost+found/._BrowserLoginDialog.jar-zoMPdL b/lost+found/._BrowserLoginDialog.jar-zoMPdL new file mode 100644 index 00000000..9517aedc Binary files /dev/null and b/lost+found/._BrowserLoginDialog.jar-zoMPdL differ diff --git a/lost+found/._Buche-FnfTwa b/lost+found/._Buche-FnfTwa new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Buche.xml-EBm1he b/lost+found/._Buche.xml-EBm1he new file mode 100644 index 00000000..b3cf3c06 Binary files /dev/null and b/lost+found/._Buche.xml-EBm1he differ diff --git a/lost+found/._COPYING.LESSER-fE7P0Y b/lost+found/._COPYING.LESSER-fE7P0Y new file mode 100644 index 00000000..e0200419 Binary files /dev/null and b/lost+found/._COPYING.LESSER-fE7P0Y differ diff --git a/lost+found/._CableHolder.parametric.svg-vVcUvy b/lost+found/._CableHolder.parametric.svg-vVcUvy new file mode 100644 index 00000000..d192cace Binary files /dev/null and b/lost+found/._CableHolder.parametric.svg-vVcUvy differ diff --git a/lost+found/._CandleHolder.parametric.svg-nERKwx b/lost+found/._CandleHolder.parametric.svg-nERKwx new file mode 100644 index 00000000..54f0c166 Binary files /dev/null and b/lost+found/._CandleHolder.parametric.svg-nERKwx differ diff --git a/lost+found/._Card.parametric.svg-srvG4x b/lost+found/._Card.parametric.svg-srvG4x new file mode 100644 index 00000000..c24915ad Binary files /dev/null and b/lost+found/._Card.parametric.svg-srvG4x differ diff --git a/lost+found/._ClosestPair.java-wbHJrF b/lost+found/._ClosestPair.java-wbHJrF new file mode 100644 index 00000000..d45ff074 Binary files /dev/null and b/lost+found/._ClosestPair.java-wbHJrF differ diff --git a/lost+found/._ClosestPairTest.java-D1UQki b/lost+found/._ClosestPairTest.java-D1UQki new file mode 100644 index 00000000..9eb29225 Binary files /dev/null and b/lost+found/._ClosestPairTest.java-D1UQki differ diff --git a/lost+found/._Dicke_32_Wellpappe-XZwOFD b/lost+found/._Dicke_32_Wellpappe-XZwOFD new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Dicke_32_Wellpappe.xml-yAhgXL b/lost+found/._Dicke_32_Wellpappe.xml-yAhgXL new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Epilog Helix.png-4Jmmj9 b/lost+found/._Epilog Helix.png-4Jmmj9 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Epilog Mini.png-AxuhYq b/lost+found/._Epilog Mini.png-AxuhYq new file mode 100644 index 00000000..4a04edd7 Binary files /dev/null and b/lost+found/._Epilog Mini.png-AxuhYq differ diff --git a/lost+found/._Epilog ZING.png-XEv6DI b/lost+found/._Epilog ZING.png-XEv6DI new file mode 100644 index 00000000..899f5220 Binary files /dev/null and b/lost+found/._Epilog ZING.png-XEv6DI differ diff --git a/lost+found/._Epilog_32_Helix.xml-rmK8m2 b/lost+found/._Epilog_32_Helix.xml-rmK8m2 new file mode 100644 index 00000000..9fa8dbe2 Binary files /dev/null and b/lost+found/._Epilog_32_Helix.xml-rmK8m2 differ diff --git a/lost+found/._Epilog_32_Zing-2i5Kds b/lost+found/._Epilog_32_Zing-2i5Kds new file mode 100644 index 00000000..71c8372f Binary files /dev/null and b/lost+found/._Epilog_32_Zing-2i5Kds differ diff --git a/lost+found/._Epilog_32_Zing.xml-iGAjan b/lost+found/._Epilog_32_Zing.xml-iGAjan new file mode 100644 index 00000000..472ba413 Binary files /dev/null and b/lost+found/._Epilog_32_Zing.xml-iGAjan differ diff --git a/lost+found/._Expo_32_Giveaway_32_Pappe-ONIUP6 b/lost+found/._Expo_32_Giveaway_32_Pappe-ONIUP6 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Expo_32_Giveaway_32_Pappe.xml-tpEA0w b/lost+found/._Expo_32_Giveaway_32_Pappe.xml-tpEA0w new file mode 100644 index 00000000..ff60768a Binary files /dev/null and b/lost+found/._Expo_32_Giveaway_32_Pappe.xml-tpEA0w differ diff --git a/lost+found/._Factsheet (1).pdf-2CdEfj b/lost+found/._Factsheet (1).pdf-2CdEfj new file mode 100644 index 00000000..11798a7f Binary files /dev/null and b/lost+found/._Factsheet (1).pdf-2CdEfj differ diff --git a/lost+found/._Filz_40_Girlsday_95_Blume_41_-9ImDiD b/lost+found/._Filz_40_Girlsday_95_Blume_41_-9ImDiD new file mode 100644 index 00000000..61c8305f Binary files /dev/null and b/lost+found/._Filz_40_Girlsday_95_Blume_41_-9ImDiD differ diff --git a/lost+found/._Filz_40_Girlsday_95_Blume_41_.xml-Nrjm37 b/lost+found/._Filz_40_Girlsday_95_Blume_41_.xml-Nrjm37 new file mode 100644 index 00000000..178e4467 Binary files /dev/null and b/lost+found/._Filz_40_Girlsday_95_Blume_41_.xml-Nrjm37 differ diff --git a/lost+found/._Finnpappe-oCH74z b/lost+found/._Finnpappe-oCH74z new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Finnpappe.xml-eZcy5R b/lost+found/._Finnpappe.xml-eZcy5R new file mode 100644 index 00000000..92bc3271 Binary files /dev/null and b/lost+found/._Finnpappe.xml-eZcy5R differ diff --git a/lost+found/._Flexfolie_32__40_T-Shirt_32_druck_41_-9f0AtY b/lost+found/._Flexfolie_32__40_T-Shirt_32_druck_41_-9f0AtY new file mode 100644 index 00000000..52785703 Binary files /dev/null and b/lost+found/._Flexfolie_32__40_T-Shirt_32_druck_41_-9f0AtY differ diff --git a/lost+found/._Flexfolie_32__40_T-Shirt_32_druck_41_.xml-fRrW4u b/lost+found/._Flexfolie_32__40_T-Shirt_32_druck_41_.xml-fRrW4u new file mode 100644 index 00000000..0738a034 Binary files /dev/null and b/lost+found/._Flexfolie_32__40_T-Shirt_32_druck_41_.xml-fRrW4u differ diff --git a/lost+found/._Flockfolie_32__40_T-Shirt_32_druck_41_-uM6CDE b/lost+found/._Flockfolie_32__40_T-Shirt_32_druck_41_-uM6CDE new file mode 100644 index 00000000..5c5ba892 Binary files /dev/null and b/lost+found/._Flockfolie_32__40_T-Shirt_32_druck_41_-uM6CDE differ diff --git a/lost+found/._Flockfolie_32__40_T-Shirt_32_druck_41_.xml-WnVqI1 b/lost+found/._Flockfolie_32__40_T-Shirt_32_druck_41_.xml-WnVqI1 new file mode 100644 index 00000000..a872d021 Binary files /dev/null and b/lost+found/._Flockfolie_32__40_T-Shirt_32_druck_41_.xml-WnVqI1 differ diff --git a/lost+found/._Folie.xml-veWgeG b/lost+found/._Folie.xml-veWgeG new file mode 100644 index 00000000..93c23f09 Binary files /dev/null and b/lost+found/._Folie.xml-veWgeG differ diff --git a/lost+found/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_-yDZwp3 b/lost+found/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_-yDZwp3 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml-uSudyl b/lost+found/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml-uSudyl new file mode 100644 index 00000000..8a4a0404 Binary files /dev/null and b/lost+found/._Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml-uSudyl differ diff --git a/lost+found/._Folie_40_Plexiglass_41_-c8K3Kw b/lost+found/._Folie_40_Plexiglass_41_-c8K3Kw new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Folie_40_Plexiglass_41_.xml-ihqcfV b/lost+found/._Folie_40_Plexiglass_41_.xml-ihqcfV new file mode 100644 index 00000000..ae2cdf21 Binary files /dev/null and b/lost+found/._Folie_40_Plexiglass_41_.xml-ihqcfV differ diff --git a/lost+found/._Furnier_32_Kirschbaum-EkmNCL b/lost+found/._Furnier_32_Kirschbaum-EkmNCL new file mode 100644 index 00000000..df745b22 Binary files /dev/null and b/lost+found/._Furnier_32_Kirschbaum-EkmNCL differ diff --git a/lost+found/._Furnier_32_Kirschbaum.xml-FnzsTx b/lost+found/._Furnier_32_Kirschbaum.xml-FnzsTx new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Graupappe-w1UWqf b/lost+found/._Graupappe-w1UWqf new file mode 100644 index 00000000..2435aced Binary files /dev/null and b/lost+found/._Graupappe-w1UWqf differ diff --git a/lost+found/._Graupappe.xml-gBA0fw b/lost+found/._Graupappe.xml-gBA0fw new file mode 100644 index 00000000..93848f5f Binary files /dev/null and b/lost+found/._Graupappe.xml-gBA0fw differ diff --git a/lost+found/._Gummi_44_schwarz.xml-oDXf7j b/lost+found/._Gummi_44_schwarz.xml-oDXf7j new file mode 100644 index 00000000..629ebf43 Binary files /dev/null and b/lost+found/._Gummi_44_schwarz.xml-oDXf7j differ diff --git a/lost+found/._JavaGrading-0.1.jar-fpWDju b/lost+found/._JavaGrading-0.1.jar-fpWDju new file mode 100644 index 00000000..1a2ff4bb Binary files /dev/null and b/lost+found/._JavaGrading-0.1.jar-fpWDju differ diff --git a/lost+found/._Kapton_40_Makerbot_41_-E5KvWS b/lost+found/._Kapton_40_Makerbot_41_-E5KvWS new file mode 100644 index 00000000..ff7715b8 Binary files /dev/null and b/lost+found/._Kapton_40_Makerbot_41_-E5KvWS differ diff --git a/lost+found/._Kapton_40_Makerbot_41_.xml-v5ZgSj b/lost+found/._Kapton_40_Makerbot_41_.xml-v5ZgSj new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Karton-m9qCa0 b/lost+found/._Karton-m9qCa0 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Karton.xml-nbPa7Q b/lost+found/._Karton.xml-nbPa7Q new file mode 100644 index 00000000..68494756 Binary files /dev/null and b/lost+found/._Karton.xml-nbPa7Q differ diff --git a/lost+found/._Karton_40_300gr_44_schwarz_44_dick_41_-y8w8yx b/lost+found/._Karton_40_300gr_44_schwarz_44_dick_41_-y8w8yx new file mode 100644 index 00000000..af79aa29 Binary files /dev/null and b/lost+found/._Karton_40_300gr_44_schwarz_44_dick_41_-y8w8yx differ diff --git a/lost+found/._Karton_40_300gr_44_schwarz_44_dick_41_.xml-AwW62F b/lost+found/._Karton_40_300gr_44_schwarz_44_dick_41_.xml-AwW62F new file mode 100644 index 00000000..e20af508 Binary files /dev/null and b/lost+found/._Karton_40_300gr_44_schwarz_44_dick_41_.xml-AwW62F differ diff --git a/lost+found/._Kiefer-x0qDad b/lost+found/._Kiefer-x0qDad new file mode 100644 index 00000000..7d33d245 Binary files /dev/null and b/lost+found/._Kiefer-x0qDad differ diff --git a/lost+found/._Kiefer.xml-B6AM5p b/lost+found/._Kiefer.xml-B6AM5p new file mode 100644 index 00000000..2fc491c8 Binary files /dev/null and b/lost+found/._Kiefer.xml-B6AM5p differ diff --git a/lost+found/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_-WJ63Jt b/lost+found/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_-WJ63Jt new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml-LUR5Qa b/lost+found/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml-LUR5Qa new file mode 100644 index 00000000..c4279a9d Binary files /dev/null and b/lost+found/._Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml-LUR5Qa differ diff --git a/lost+found/._Kokosschale_32_3-4mm-rEyRkX b/lost+found/._Kokosschale_32_3-4mm-rEyRkX new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Kokosschale_32_3-4mm.xml-YD6UlW b/lost+found/._Kokosschale_32_3-4mm.xml-YD6UlW new file mode 100644 index 00000000..ee753aa0 Binary files /dev/null and b/lost+found/._Kokosschale_32_3-4mm.xml-YD6UlW differ diff --git a/lost+found/._Kopierfolie_40_Soennecken_41_-qVKIjH b/lost+found/._Kopierfolie_40_Soennecken_41_-qVKIjH new file mode 100644 index 00000000..f929235d Binary files /dev/null and b/lost+found/._Kopierfolie_40_Soennecken_41_-qVKIjH differ diff --git a/lost+found/._Kopierfolie_40_Soennecken_41_.xml-GjRzzI b/lost+found/._Kopierfolie_40_Soennecken_41_.xml-GjRzzI new file mode 100644 index 00000000..b354828a Binary files /dev/null and b/lost+found/._Kopierfolie_40_Soennecken_41_.xml-GjRzzI differ diff --git a/lost+found/._Kunstleder_32__40_Sarahs_32_Kalender_41_-49U3Po b/lost+found/._Kunstleder_32__40_Sarahs_32_Kalender_41_-49U3Po new file mode 100644 index 00000000..1df60fde Binary files /dev/null and b/lost+found/._Kunstleder_32__40_Sarahs_32_Kalender_41_-49U3Po differ diff --git a/lost+found/._Kunstleder_32__40_Sarahs_32_Kalender_41_.xml-nM3hS5 b/lost+found/._Kunstleder_32__40_Sarahs_32_Kalender_41_.xml-nM3hS5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._LAOS HPC.png-xam7nA b/lost+found/._LAOS HPC.png-xam7nA new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._LAOS-HPC.xml-xuo7ob b/lost+found/._LAOS-HPC.xml-xuo7ob new file mode 100644 index 00000000..bcbadf03 Binary files /dev/null and b/lost+found/._LAOS-HPC.xml-xuo7ob differ diff --git a/lost+found/._LAOS-Suda.png-HYPju1 b/lost+found/._LAOS-Suda.png-HYPju1 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._LAOS_32_HPC.xml-yPCDBs b/lost+found/._LAOS_32_HPC.xml-yPCDBs new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._LICENSE-q67njq b/lost+found/._LICENSE-q67njq new file mode 100644 index 00000000..fe5dd8ec Binary files /dev/null and b/lost+found/._LICENSE-q67njq differ diff --git a/lost+found/._Laser-Script-Ku6cM1 b/lost+found/._Laser-Script-Ku6cM1 new file mode 100644 index 00000000..05503add Binary files /dev/null and b/lost+found/._Laser-Script-Ku6cM1 differ diff --git a/lost+found/._LaserScriptExample.ls-5E2FOK b/lost+found/._LaserScriptExample.ls-5E2FOK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._LaserScriptFocustest.ls-CyfOFH b/lost+found/._LaserScriptFocustest.ls-CyfOFH new file mode 100644 index 00000000..3fcb863e Binary files /dev/null and b/lost+found/._LaserScriptFocustest.ls-CyfOFH differ diff --git a/lost+found/._Laser_32_acrylic.xml-Fg7lUR b/lost+found/._Laser_32_acrylic.xml-Fg7lUR new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Laseracryl-PzP696 b/lost+found/._Laseracryl-PzP696 new file mode 100644 index 00000000..77316039 Binary files /dev/null and b/lost+found/._Laseracryl-PzP696 differ diff --git a/lost+found/._Laseracryl.xml-ERcqDi b/lost+found/._Laseracryl.xml-ERcqDi new file mode 100644 index 00000000..18ccb262 Binary files /dev/null and b/lost+found/._Laseracryl.xml-ERcqDi differ diff --git a/lost+found/._Laseracryl_32__40_Nametags_41_-RcuxXq b/lost+found/._Laseracryl_32__40_Nametags_41_-RcuxXq new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Laseracryl_32__40_Nametags_41_.xml-OZm4L6 b/lost+found/._Laseracryl_32__40_Nametags_41_.xml-OZm4L6 new file mode 100644 index 00000000..c42f96b9 Binary files /dev/null and b/lost+found/._Laseracryl_32__40_Nametags_41_.xml-OZm4L6 differ diff --git a/lost+found/._Latex.xml-HsVxWV b/lost+found/._Latex.xml-HsVxWV new file mode 100644 index 00000000..11a87ceb Binary files /dev/null and b/lost+found/._Latex.xml-HsVxWV differ diff --git a/lost+found/._Leder-A6VKQK b/lost+found/._Leder-A6VKQK new file mode 100644 index 00000000..8035925a Binary files /dev/null and b/lost+found/._Leder-A6VKQK differ diff --git a/lost+found/._Leder.xml-N22F9L b/lost+found/._Leder.xml-N22F9L new file mode 100644 index 00000000..ab9c8b96 Binary files /dev/null and b/lost+found/._Leder.xml-N22F9L differ diff --git a/lost+found/._Linde_40_Holzart_41_-2YWXup b/lost+found/._Linde_40_Holzart_41_-2YWXup new file mode 100644 index 00000000..d077f5f2 Binary files /dev/null and b/lost+found/._Linde_40_Holzart_41_-2YWXup differ diff --git a/lost+found/._Linde_40_Holzart_41_.xml-6YPhiD b/lost+found/._Linde_40_Holzart_41_.xml-6YPhiD new file mode 100644 index 00000000..e210061c Binary files /dev/null and b/lost+found/._Linde_40_Holzart_41_.xml-6YPhiD differ diff --git a/lost+found/._MDF-ogkUma b/lost+found/._MDF-ogkUma new file mode 100644 index 00000000..4f84f7ea Binary files /dev/null and b/lost+found/._MDF-ogkUma differ diff --git a/lost+found/._MDF.xml-Nt1d6u b/lost+found/._MDF.xml-Nt1d6u new file mode 100644 index 00000000..a24dfc84 Binary files /dev/null and b/lost+found/._MDF.xml-Nt1d6u differ diff --git a/lost+found/._Moosgummi_32_PU_32__40_Polyuretan_41_-s4Q5rU b/lost+found/._Moosgummi_32_PU_32__40_Polyuretan_41_-s4Q5rU new file mode 100644 index 00000000..9a029a48 Binary files /dev/null and b/lost+found/._Moosgummi_32_PU_32__40_Polyuretan_41_-s4Q5rU differ diff --git a/lost+found/._Moosgummi_32_PU_32__40_Polyuretan_41_.xml-LTaH1D b/lost+found/._Moosgummi_32_PU_32__40_Polyuretan_41_.xml-LTaH1D new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Moosgummi_44_braun.xml-dih3Mn b/lost+found/._Moosgummi_44_braun.xml-dih3Mn new file mode 100644 index 00000000..7caec020 Binary files /dev/null and b/lost+found/._Moosgummi_44_braun.xml-dih3Mn differ diff --git a/lost+found/._Multiplex-akRC5U b/lost+found/._Multiplex-akRC5U new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Multiplex.xml-S95E2g b/lost+found/._Multiplex.xml-S95E2g new file mode 100644 index 00000000..b6e695a5 Binary files /dev/null and b/lost+found/._Multiplex.xml-S95E2g differ diff --git a/lost+found/._Nessel_40_aus_32_Baumwolle_41_-UQAFDK b/lost+found/._Nessel_40_aus_32_Baumwolle_41_-UQAFDK new file mode 100644 index 00000000..49557263 Binary files /dev/null and b/lost+found/._Nessel_40_aus_32_Baumwolle_41_-UQAFDK differ diff --git a/lost+found/._Nessel_40_aus_32_Baumwolle_41_.xml-trSl2a b/lost+found/._Nessel_40_aus_32_Baumwolle_41_.xml-trSl2a new file mode 100644 index 00000000..8e93677e Binary files /dev/null and b/lost+found/._Nessel_40_aus_32_Baumwolle_41_.xml-trSl2a differ diff --git a/lost+found/._OpenWithVisiCut.scpt-D1rmN7 b/lost+found/._OpenWithVisiCut.scpt-D1rmN7 new file mode 100644 index 00000000..0e70d90e Binary files /dev/null and b/lost+found/._OpenWithVisiCut.scpt-D1rmN7 differ diff --git a/lost+found/._Organza_40_Stoff_41_-ABQTxB b/lost+found/._Organza_40_Stoff_41_-ABQTxB new file mode 100644 index 00000000..ee0367cb Binary files /dev/null and b/lost+found/._Organza_40_Stoff_41_-ABQTxB differ diff --git a/lost+found/._Organza_40_Stoff_41_.xml-nVMFaq b/lost+found/._Organza_40_Stoff_41_.xml-nVMFaq new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._PP_32_Folie-zpD0qp b/lost+found/._PP_32_Folie-zpD0qp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._PP_32_Folie.xml-K491kc b/lost+found/._PP_32_Folie.xml-K491kc new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._PP_40_Kunststoff_41_Dvd_95_Huelle-wzrdSl b/lost+found/._PP_40_Kunststoff_41_Dvd_95_Huelle-wzrdSl new file mode 100644 index 00000000..4ec1c275 Binary files /dev/null and b/lost+found/._PP_40_Kunststoff_41_Dvd_95_Huelle-wzrdSl differ diff --git a/lost+found/._PP_40_Kunststoff_41_Dvd_95_Huelle.xml-0pzhuZ b/lost+found/._PP_40_Kunststoff_41_Dvd_95_Huelle.xml-0pzhuZ new file mode 100644 index 00000000..cc7dfd93 Binary files /dev/null and b/lost+found/._PP_40_Kunststoff_41_Dvd_95_Huelle.xml-0pzhuZ differ diff --git a/lost+found/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_-HvUath b/lost+found/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_-HvUath new file mode 100644 index 00000000..28179eec Binary files /dev/null and b/lost+found/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_-HvUath differ diff --git a/lost+found/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml-YbO2HW b/lost+found/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml-YbO2HW new file mode 100644 index 00000000..a14a9924 Binary files /dev/null and b/lost+found/._PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml-YbO2HW differ diff --git a/lost+found/._Paper.xml-3oipcT b/lost+found/._Paper.xml-3oipcT new file mode 100644 index 00000000..f1dd7f21 Binary files /dev/null and b/lost+found/._Paper.xml-3oipcT differ diff --git a/lost+found/._Papier-GrX5Ub b/lost+found/._Papier-GrX5Ub new file mode 100644 index 00000000..08b396a4 Binary files /dev/null and b/lost+found/._Papier-GrX5Ub differ diff --git a/lost+found/._Papier.xml-4dIgJQ b/lost+found/._Papier.xml-4dIgJQ new file mode 100644 index 00000000..dab6230f Binary files /dev/null and b/lost+found/._Papier.xml-4dIgJQ differ diff --git a/lost+found/._Papier_40_120gr_41_-fYyy86 b/lost+found/._Papier_40_120gr_41_-fYyy86 new file mode 100644 index 00000000..77d82def Binary files /dev/null and b/lost+found/._Papier_40_120gr_41_-fYyy86 differ diff --git a/lost+found/._Papier_40_120gr_41_.xml-wstFjP b/lost+found/._Papier_40_120gr_41_.xml-wstFjP new file mode 100644 index 00000000..fa9b6510 Binary files /dev/null and b/lost+found/._Papier_40_120gr_41_.xml-wstFjP differ diff --git a/lost+found/._Pappel-FDlfa3 b/lost+found/._Pappel-FDlfa3 new file mode 100644 index 00000000..b76adae2 Binary files /dev/null and b/lost+found/._Pappel-FDlfa3 differ diff --git a/lost+found/._Pappel.xml-Eh7oIO b/lost+found/._Pappel.xml-Eh7oIO new file mode 100644 index 00000000..8c503471 Binary files /dev/null and b/lost+found/._Pappel.xml-Eh7oIO differ diff --git a/lost+found/._Pappel_40_Sperrholz_41_-Rpf7VZ b/lost+found/._Pappel_40_Sperrholz_41_-Rpf7VZ new file mode 100644 index 00000000..94e0a045 Binary files /dev/null and b/lost+found/._Pappel_40_Sperrholz_41_-Rpf7VZ differ diff --git a/lost+found/._Pappel_40_Sperrholz_41_.xml-ljdXPO b/lost+found/._Pappel_40_Sperrholz_41_.xml-ljdXPO new file mode 100644 index 00000000..c3abde54 Binary files /dev/null and b/lost+found/._Pappel_40_Sperrholz_41_.xml-ljdXPO differ diff --git a/lost+found/._Parametric-W5eoVG b/lost+found/._Parametric-W5eoVG new file mode 100644 index 00000000..a92ce749 Binary files /dev/null and b/lost+found/._Parametric-W5eoVG differ diff --git a/lost+found/._Plexiglass-PBYv2T b/lost+found/._Plexiglass-PBYv2T new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Plexiglass.xml-w6pDzY b/lost+found/._Plexiglass.xml-w6pDzY new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Polycarbonat-lWJeKW b/lost+found/._Polycarbonat-lWJeKW new file mode 100644 index 00000000..d069d4a6 Binary files /dev/null and b/lost+found/._Polycarbonat-lWJeKW differ diff --git a/lost+found/._Polycarbonat.xml-JNdQfQ b/lost+found/._Polycarbonat.xml-JNdQfQ new file mode 100644 index 00000000..822c1045 Binary files /dev/null and b/lost+found/._Polycarbonat.xml-JNdQfQ differ diff --git a/lost+found/._README-vzEJY5 b/lost+found/._README-vzEJY5 new file mode 100644 index 00000000..d23a56c6 Binary files /dev/null and b/lost+found/._README-vzEJY5 differ diff --git a/lost+found/._Rubber-KFNeWU b/lost+found/._Rubber-KFNeWU new file mode 100644 index 00000000..80d4478f Binary files /dev/null and b/lost+found/._Rubber-KFNeWU differ diff --git a/lost+found/._Rubber.xml-dvwl1R b/lost+found/._Rubber.xml-dvwl1R new file mode 100644 index 00000000..97c0904c Binary files /dev/null and b/lost+found/._Rubber.xml-dvwl1R differ diff --git a/lost+found/._RunTests.java-BWRxBP b/lost+found/._RunTests.java-BWRxBP new file mode 100644 index 00000000..ef630318 Binary files /dev/null and b/lost+found/._RunTests.java-BWRxBP differ diff --git a/lost+found/._Schellackplatte-QGAZxT b/lost+found/._Schellackplatte-QGAZxT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Schellackplatte.xml-yCrbyU b/lost+found/._Schellackplatte.xml-yCrbyU new file mode 100644 index 00000000..d2da1d00 Binary files /dev/null and b/lost+found/._Schellackplatte.xml-yCrbyU differ diff --git a/lost+found/._Silikon_32_rot-5omjXT b/lost+found/._Silikon_32_rot-5omjXT new file mode 100644 index 00000000..0f2199cd Binary files /dev/null and b/lost+found/._Silikon_32_rot-5omjXT differ diff --git a/lost+found/._Silikon_32_rot.xml-xHeaUX b/lost+found/._Silikon_32_rot.xml-xHeaUX new file mode 100644 index 00000000..0a37aa21 Binary files /dev/null and b/lost+found/._Silikon_32_rot.xml-xHeaUX differ diff --git a/lost+found/._Textil_32_Curv_44_Textil_32_Membran-gEwsmo b/lost+found/._Textil_32_Curv_44_Textil_32_Membran-gEwsmo new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._Textil_32_Curv_44_Textil_32_Membran.xml-a3RSq3 b/lost+found/._Textil_32_Curv_44_Textil_32_Membran.xml-a3RSq3 new file mode 100644 index 00000000..363303b4 Binary files /dev/null and b/lost+found/._Textil_32_Curv_44_Textil_32_Membran.xml-a3RSq3 differ diff --git a/lost+found/._VisiCut.Linux-mXMvZP b/lost+found/._VisiCut.Linux-mXMvZP new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._VisiCut.MacOS-3l8mpg b/lost+found/._VisiCut.MacOS-3l8mpg new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._VisiCut.exe-1vsP0e b/lost+found/._VisiCut.exe-1vsP0e new file mode 100644 index 00000000..fabfe18f Binary files /dev/null and b/lost+found/._VisiCut.exe-1vsP0e differ diff --git a/lost+found/._Visicut.jar-h8CQoW b/lost+found/._Visicut.jar-h8CQoW new file mode 100644 index 00000000..3f7b7f8a Binary files /dev/null and b/lost+found/._Visicut.jar-h8CQoW differ diff --git a/lost+found/._appframework-1.0.3.jar-vQFQBH b/lost+found/._appframework-1.0.3.jar-vQFQBH new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._batik-all.jar-LBjBzr b/lost+found/._batik-all.jar-LBjBzr new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._beansbinding-1.2.1.jar-u9XDKP b/lost+found/._beansbinding-1.2.1.jar-u9XDKP new file mode 100644 index 00000000..8ab178f0 Binary files /dev/null and b/lost+found/._beansbinding-1.2.1.jar-u9XDKP differ diff --git a/lost+found/._bendable-material.svg-tJKsCu b/lost+found/._bendable-material.svg-tJKsCu new file mode 100644 index 00000000..a6c4d7c5 Binary files /dev/null and b/lost+found/._bendable-material.svg-tJKsCu differ diff --git a/lost+found/._circle-20mm-red.svg-TjGAjy b/lost+found/._circle-20mm-red.svg-TjGAjy new file mode 100644 index 00000000..7fb91854 Binary files /dev/null and b/lost+found/._circle-20mm-red.svg-TjGAjy differ diff --git a/lost+found/._commons-io-2.4.jar-zNFEyb b/lost+found/._commons-io-2.4.jar-zNFEyb new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._commons-net-3.1.jar-7AzPTG b/lost+found/._commons-net-3.1.jar-7AzPTG new file mode 100644 index 00000000..49e1ba26 Binary files /dev/null and b/lost+found/._commons-net-3.1.jar-7AzPTG differ diff --git a/lost+found/._core-3.2.1-20150223.162544-2.jar-7odYGy b/lost+found/._core-3.2.1-20150223.162544-2.jar-7odYGy new file mode 100644 index 00000000..42153d23 Binary files /dev/null and b/lost+found/._core-3.2.1-20150223.162544-2.jar-7odYGy differ diff --git a/lost+found/._corn-httpclient-1.0.12.jar-XJ4nfr b/lost+found/._corn-httpclient-1.0.12.jar-XJ4nfr new file mode 100644 index 00000000..6e5bc764 Binary files /dev/null and b/lost+found/._corn-httpclient-1.0.12.jar-XJ4nfr differ diff --git a/lost+found/._cut.xml-0jra49 b/lost+found/._cut.xml-0jra49 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-3ZtUsy b/lost+found/._cut.xml-3ZtUsy new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-4nT9GU b/lost+found/._cut.xml-4nT9GU new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-6tZmEb b/lost+found/._cut.xml-6tZmEb new file mode 100644 index 00000000..b4963143 Binary files /dev/null and b/lost+found/._cut.xml-6tZmEb differ diff --git a/lost+found/._cut.xml-6uYJDb b/lost+found/._cut.xml-6uYJDb new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-81C4pO b/lost+found/._cut.xml-81C4pO new file mode 100644 index 00000000..eeae0abf Binary files /dev/null and b/lost+found/._cut.xml-81C4pO differ diff --git a/lost+found/._cut.xml-8fFfRn b/lost+found/._cut.xml-8fFfRn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-A1fKCv b/lost+found/._cut.xml-A1fKCv new file mode 100644 index 00000000..b936c88c Binary files /dev/null and b/lost+found/._cut.xml-A1fKCv differ diff --git a/lost+found/._cut.xml-ABnyzC b/lost+found/._cut.xml-ABnyzC new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-AU0zvR b/lost+found/._cut.xml-AU0zvR new file mode 100644 index 00000000..e152fee1 Binary files /dev/null and b/lost+found/._cut.xml-AU0zvR differ diff --git a/lost+found/._cut.xml-DdokuM b/lost+found/._cut.xml-DdokuM new file mode 100644 index 00000000..675b75d2 Binary files /dev/null and b/lost+found/._cut.xml-DdokuM differ diff --git a/lost+found/._cut.xml-Dl747G b/lost+found/._cut.xml-Dl747G new file mode 100644 index 00000000..f4b415e4 Binary files /dev/null and b/lost+found/._cut.xml-Dl747G differ diff --git a/lost+found/._cut.xml-EcZ7QV b/lost+found/._cut.xml-EcZ7QV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-Eepwma b/lost+found/._cut.xml-Eepwma new file mode 100644 index 00000000..26c58cca Binary files /dev/null and b/lost+found/._cut.xml-Eepwma differ diff --git a/lost+found/._cut.xml-GHxpWN b/lost+found/._cut.xml-GHxpWN new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-GZW9NG b/lost+found/._cut.xml-GZW9NG new file mode 100644 index 00000000..7199111e Binary files /dev/null and b/lost+found/._cut.xml-GZW9NG differ diff --git a/lost+found/._cut.xml-GphQqD b/lost+found/._cut.xml-GphQqD new file mode 100644 index 00000000..0bc81d40 Binary files /dev/null and b/lost+found/._cut.xml-GphQqD differ diff --git a/lost+found/._cut.xml-HeYq16 b/lost+found/._cut.xml-HeYq16 new file mode 100644 index 00000000..bce24441 Binary files /dev/null and b/lost+found/._cut.xml-HeYq16 differ diff --git a/lost+found/._cut.xml-IFC5EV b/lost+found/._cut.xml-IFC5EV new file mode 100644 index 00000000..fa7e278a Binary files /dev/null and b/lost+found/._cut.xml-IFC5EV differ diff --git a/lost+found/._cut.xml-IyJPc9 b/lost+found/._cut.xml-IyJPc9 new file mode 100644 index 00000000..ab9da4b6 Binary files /dev/null and b/lost+found/._cut.xml-IyJPc9 differ diff --git a/lost+found/._cut.xml-IyxuUs b/lost+found/._cut.xml-IyxuUs new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-JAMEi3 b/lost+found/._cut.xml-JAMEi3 new file mode 100644 index 00000000..87ad54a3 Binary files /dev/null and b/lost+found/._cut.xml-JAMEi3 differ diff --git a/lost+found/._cut.xml-JzpbQ2 b/lost+found/._cut.xml-JzpbQ2 new file mode 100644 index 00000000..8ec89e8d Binary files /dev/null and b/lost+found/._cut.xml-JzpbQ2 differ diff --git a/lost+found/._cut.xml-K0QyZX b/lost+found/._cut.xml-K0QyZX new file mode 100644 index 00000000..28e51b6f Binary files /dev/null and b/lost+found/._cut.xml-K0QyZX differ diff --git a/lost+found/._cut.xml-LIGJSO b/lost+found/._cut.xml-LIGJSO new file mode 100644 index 00000000..106910ef Binary files /dev/null and b/lost+found/._cut.xml-LIGJSO differ diff --git a/lost+found/._cut.xml-MdNXa1 b/lost+found/._cut.xml-MdNXa1 new file mode 100644 index 00000000..1a1382e0 Binary files /dev/null and b/lost+found/._cut.xml-MdNXa1 differ diff --git a/lost+found/._cut.xml-OV62p9 b/lost+found/._cut.xml-OV62p9 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-OfgBA1 b/lost+found/._cut.xml-OfgBA1 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-QO37wh b/lost+found/._cut.xml-QO37wh new file mode 100644 index 00000000..0dd53d16 Binary files /dev/null and b/lost+found/._cut.xml-QO37wh differ diff --git a/lost+found/._cut.xml-R5TSyC b/lost+found/._cut.xml-R5TSyC new file mode 100644 index 00000000..8b146d69 Binary files /dev/null and b/lost+found/._cut.xml-R5TSyC differ diff --git a/lost+found/._cut.xml-TLuZ5n b/lost+found/._cut.xml-TLuZ5n new file mode 100644 index 00000000..0ef8c36b Binary files /dev/null and b/lost+found/._cut.xml-TLuZ5n differ diff --git a/lost+found/._cut.xml-VJmR7d b/lost+found/._cut.xml-VJmR7d new file mode 100644 index 00000000..28ea9129 Binary files /dev/null and b/lost+found/._cut.xml-VJmR7d differ diff --git a/lost+found/._cut.xml-VZTNxZ b/lost+found/._cut.xml-VZTNxZ new file mode 100644 index 00000000..b1663ef0 Binary files /dev/null and b/lost+found/._cut.xml-VZTNxZ differ diff --git a/lost+found/._cut.xml-WKeESE b/lost+found/._cut.xml-WKeESE new file mode 100644 index 00000000..0e8a7ea6 Binary files /dev/null and b/lost+found/._cut.xml-WKeESE differ diff --git a/lost+found/._cut.xml-Xcpsy1 b/lost+found/._cut.xml-Xcpsy1 new file mode 100644 index 00000000..09ec47df Binary files /dev/null and b/lost+found/._cut.xml-Xcpsy1 differ diff --git a/lost+found/._cut.xml-YE5aCX b/lost+found/._cut.xml-YE5aCX new file mode 100644 index 00000000..a88c35e0 Binary files /dev/null and b/lost+found/._cut.xml-YE5aCX differ diff --git a/lost+found/._cut.xml-ZlceRl b/lost+found/._cut.xml-ZlceRl new file mode 100644 index 00000000..c540bd54 Binary files /dev/null and b/lost+found/._cut.xml-ZlceRl differ diff --git a/lost+found/._cut.xml-aNaL6Q b/lost+found/._cut.xml-aNaL6Q new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-ajS9Do b/lost+found/._cut.xml-ajS9Do new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-d4EIGx b/lost+found/._cut.xml-d4EIGx new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-dLPgej b/lost+found/._cut.xml-dLPgej new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-dR5jIa b/lost+found/._cut.xml-dR5jIa new file mode 100644 index 00000000..3ecf2c1f Binary files /dev/null and b/lost+found/._cut.xml-dR5jIa differ diff --git a/lost+found/._cut.xml-dRddGB b/lost+found/._cut.xml-dRddGB new file mode 100644 index 00000000..3bcd40b8 Binary files /dev/null and b/lost+found/._cut.xml-dRddGB differ diff --git a/lost+found/._cut.xml-ej8InB b/lost+found/._cut.xml-ej8InB new file mode 100644 index 00000000..492b102e Binary files /dev/null and b/lost+found/._cut.xml-ej8InB differ diff --git a/lost+found/._cut.xml-fX0Ise b/lost+found/._cut.xml-fX0Ise new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-ff6YFa b/lost+found/._cut.xml-ff6YFa new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-iFhZBa b/lost+found/._cut.xml-iFhZBa new file mode 100644 index 00000000..c319629a Binary files /dev/null and b/lost+found/._cut.xml-iFhZBa differ diff --git a/lost+found/._cut.xml-iGpZ8N b/lost+found/._cut.xml-iGpZ8N new file mode 100644 index 00000000..8f1cf3e8 Binary files /dev/null and b/lost+found/._cut.xml-iGpZ8N differ diff --git a/lost+found/._cut.xml-imkyy4 b/lost+found/._cut.xml-imkyy4 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-jArsht b/lost+found/._cut.xml-jArsht new file mode 100644 index 00000000..84fe1817 Binary files /dev/null and b/lost+found/._cut.xml-jArsht differ diff --git a/lost+found/._cut.xml-kTYX4t b/lost+found/._cut.xml-kTYX4t new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-mKenM7 b/lost+found/._cut.xml-mKenM7 new file mode 100644 index 00000000..edc7d851 Binary files /dev/null and b/lost+found/._cut.xml-mKenM7 differ diff --git a/lost+found/._cut.xml-nNhNZl b/lost+found/._cut.xml-nNhNZl new file mode 100644 index 00000000..da23bd43 Binary files /dev/null and b/lost+found/._cut.xml-nNhNZl differ diff --git a/lost+found/._cut.xml-nRKyJR b/lost+found/._cut.xml-nRKyJR new file mode 100644 index 00000000..2c6f9b35 Binary files /dev/null and b/lost+found/._cut.xml-nRKyJR differ diff --git a/lost+found/._cut.xml-nVtsz0 b/lost+found/._cut.xml-nVtsz0 new file mode 100644 index 00000000..b243ea01 Binary files /dev/null and b/lost+found/._cut.xml-nVtsz0 differ diff --git a/lost+found/._cut.xml-o9vZd3 b/lost+found/._cut.xml-o9vZd3 new file mode 100644 index 00000000..7723b139 Binary files /dev/null and b/lost+found/._cut.xml-o9vZd3 differ diff --git a/lost+found/._cut.xml-oek1LE b/lost+found/._cut.xml-oek1LE new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-qLBdmk b/lost+found/._cut.xml-qLBdmk new file mode 100644 index 00000000..9a9c7260 Binary files /dev/null and b/lost+found/._cut.xml-qLBdmk differ diff --git a/lost+found/._cut.xml-qRz7hD b/lost+found/._cut.xml-qRz7hD new file mode 100644 index 00000000..d9fe9c2c Binary files /dev/null and b/lost+found/._cut.xml-qRz7hD differ diff --git a/lost+found/._cut.xml-rPfOs1 b/lost+found/._cut.xml-rPfOs1 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._cut.xml-s8RiGk b/lost+found/._cut.xml-s8RiGk new file mode 100644 index 00000000..b3c6ecc3 Binary files /dev/null and b/lost+found/._cut.xml-s8RiGk differ diff --git a/lost+found/._cut.xml-sS3yR6 b/lost+found/._cut.xml-sS3yR6 new file mode 100644 index 00000000..3d8c6051 Binary files /dev/null and b/lost+found/._cut.xml-sS3yR6 differ diff --git a/lost+found/._cut.xml-tuZnu3 b/lost+found/._cut.xml-tuZnu3 new file mode 100644 index 00000000..47e2d887 Binary files /dev/null and b/lost+found/._cut.xml-tuZnu3 differ diff --git a/lost+found/._cut.xml-vIjik8 b/lost+found/._cut.xml-vIjik8 new file mode 100644 index 00000000..6f44c096 Binary files /dev/null and b/lost+found/._cut.xml-vIjik8 differ diff --git a/lost+found/._cut.xml-vt8J2c b/lost+found/._cut.xml-vt8J2c new file mode 100644 index 00000000..66826fb1 Binary files /dev/null and b/lost+found/._cut.xml-vt8J2c differ diff --git a/lost+found/._cut.xml-xr1UUz b/lost+found/._cut.xml-xr1UUz new file mode 100644 index 00000000..c3524125 Binary files /dev/null and b/lost+found/._cut.xml-xr1UUz differ diff --git a/lost+found/._cut.xml-z8F3oe b/lost+found/._cut.xml-z8F3oe new file mode 100644 index 00000000..2b63cad6 Binary files /dev/null and b/lost+found/._cut.xml-z8F3oe differ diff --git a/lost+found/._daemonize.py-p0M0lS b/lost+found/._daemonize.py-p0M0lS new file mode 100644 index 00000000..8e8f28a0 Binary files /dev/null and b/lost+found/._daemonize.py-p0M0lS differ diff --git a/lost+found/._devices-NcCBVG b/lost+found/._devices-NcCBVG new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._dir-1vcm79 b/lost+found/._dir-1vcm79 new file mode 100644 index 00000000..757aff16 Binary files /dev/null and b/lost+found/._dir-1vcm79 differ diff --git a/lost+found/._elring_32_AbilN_40_Pappeart_41_-mwTOeT b/lost+found/._elring_32_AbilN_40_Pappeart_41_-mwTOeT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._elring_32_AbilN_40_Pappeart_41_.xml-mAVWn8 b/lost+found/._elring_32_AbilN_40_Pappeart_41_.xml-mAVWn8 new file mode 100644 index 00000000..938aad52 Binary files /dev/null and b/lost+found/._elring_32_AbilN_40_Pappeart_41_.xml-mAVWn8 differ diff --git a/lost+found/._engrave.xml-0LSPFn b/lost+found/._engrave.xml-0LSPFn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-0VHfFv b/lost+found/._engrave.xml-0VHfFv new file mode 100644 index 00000000..fbfc73dd Binary files /dev/null and b/lost+found/._engrave.xml-0VHfFv differ diff --git a/lost+found/._engrave.xml-1N5d1H b/lost+found/._engrave.xml-1N5d1H new file mode 100644 index 00000000..55f4c3f6 Binary files /dev/null and b/lost+found/._engrave.xml-1N5d1H differ diff --git a/lost+found/._engrave.xml-1VLuAO b/lost+found/._engrave.xml-1VLuAO new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-3dSGst b/lost+found/._engrave.xml-3dSGst new file mode 100644 index 00000000..8a05caca Binary files /dev/null and b/lost+found/._engrave.xml-3dSGst differ diff --git a/lost+found/._engrave.xml-5nrkPN b/lost+found/._engrave.xml-5nrkPN new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-5o6JoB b/lost+found/._engrave.xml-5o6JoB new file mode 100644 index 00000000..700e75d3 Binary files /dev/null and b/lost+found/._engrave.xml-5o6JoB differ diff --git a/lost+found/._engrave.xml-6aOs77 b/lost+found/._engrave.xml-6aOs77 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-6z1iXy b/lost+found/._engrave.xml-6z1iXy new file mode 100644 index 00000000..dd8605de Binary files /dev/null and b/lost+found/._engrave.xml-6z1iXy differ diff --git a/lost+found/._engrave.xml-7H3Q4V b/lost+found/._engrave.xml-7H3Q4V new file mode 100644 index 00000000..803bef4c Binary files /dev/null and b/lost+found/._engrave.xml-7H3Q4V differ diff --git a/lost+found/._engrave.xml-8uClVF b/lost+found/._engrave.xml-8uClVF new file mode 100644 index 00000000..d25b2d3d Binary files /dev/null and b/lost+found/._engrave.xml-8uClVF differ diff --git a/lost+found/._engrave.xml-9Cu6eZ b/lost+found/._engrave.xml-9Cu6eZ new file mode 100644 index 00000000..89911c85 Binary files /dev/null and b/lost+found/._engrave.xml-9Cu6eZ differ diff --git a/lost+found/._engrave.xml-B172MZ b/lost+found/._engrave.xml-B172MZ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-CUbHQO b/lost+found/._engrave.xml-CUbHQO new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-D4a4bR b/lost+found/._engrave.xml-D4a4bR new file mode 100644 index 00000000..80e26cf9 Binary files /dev/null and b/lost+found/._engrave.xml-D4a4bR differ diff --git a/lost+found/._engrave.xml-EMPrTj b/lost+found/._engrave.xml-EMPrTj new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-EWtJO6 b/lost+found/._engrave.xml-EWtJO6 new file mode 100644 index 00000000..566adf77 Binary files /dev/null and b/lost+found/._engrave.xml-EWtJO6 differ diff --git a/lost+found/._engrave.xml-EpgyWo b/lost+found/._engrave.xml-EpgyWo new file mode 100644 index 00000000..2affe583 Binary files /dev/null and b/lost+found/._engrave.xml-EpgyWo differ diff --git a/lost+found/._engrave.xml-GDrwVI b/lost+found/._engrave.xml-GDrwVI new file mode 100644 index 00000000..ba42c274 Binary files /dev/null and b/lost+found/._engrave.xml-GDrwVI differ diff --git a/lost+found/._engrave.xml-Gv1ibU b/lost+found/._engrave.xml-Gv1ibU new file mode 100644 index 00000000..130181a9 Binary files /dev/null and b/lost+found/._engrave.xml-Gv1ibU differ diff --git a/lost+found/._engrave.xml-HpQI8L b/lost+found/._engrave.xml-HpQI8L new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-HyMPQj b/lost+found/._engrave.xml-HyMPQj new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-I44Hff b/lost+found/._engrave.xml-I44Hff new file mode 100644 index 00000000..fcd9e313 Binary files /dev/null and b/lost+found/._engrave.xml-I44Hff differ diff --git a/lost+found/._engrave.xml-K7F3sF b/lost+found/._engrave.xml-K7F3sF new file mode 100644 index 00000000..546fb6d1 Binary files /dev/null and b/lost+found/._engrave.xml-K7F3sF differ diff --git a/lost+found/._engrave.xml-MbK3hi b/lost+found/._engrave.xml-MbK3hi new file mode 100644 index 00000000..c8b59206 Binary files /dev/null and b/lost+found/._engrave.xml-MbK3hi differ diff --git a/lost+found/._engrave.xml-N4N64W b/lost+found/._engrave.xml-N4N64W new file mode 100644 index 00000000..c1ceaba6 Binary files /dev/null and b/lost+found/._engrave.xml-N4N64W differ diff --git a/lost+found/._engrave.xml-NG0GoL b/lost+found/._engrave.xml-NG0GoL new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-Poqvrr b/lost+found/._engrave.xml-Poqvrr new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-Puflxi b/lost+found/._engrave.xml-Puflxi new file mode 100644 index 00000000..498f72e9 Binary files /dev/null and b/lost+found/._engrave.xml-Puflxi differ diff --git a/lost+found/._engrave.xml-QGXRxH b/lost+found/._engrave.xml-QGXRxH new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-QWsiHy b/lost+found/._engrave.xml-QWsiHy new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-QfRFsa b/lost+found/._engrave.xml-QfRFsa new file mode 100644 index 00000000..6d95fd6b Binary files /dev/null and b/lost+found/._engrave.xml-QfRFsa differ diff --git a/lost+found/._engrave.xml-UCvpb6 b/lost+found/._engrave.xml-UCvpb6 new file mode 100644 index 00000000..d9a99304 Binary files /dev/null and b/lost+found/._engrave.xml-UCvpb6 differ diff --git a/lost+found/._engrave.xml-UZvKLY b/lost+found/._engrave.xml-UZvKLY new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-V9vILF b/lost+found/._engrave.xml-V9vILF new file mode 100644 index 00000000..47105944 Binary files /dev/null and b/lost+found/._engrave.xml-V9vILF differ diff --git a/lost+found/._engrave.xml-W6Xnb3 b/lost+found/._engrave.xml-W6Xnb3 new file mode 100644 index 00000000..427c8206 Binary files /dev/null and b/lost+found/._engrave.xml-W6Xnb3 differ diff --git a/lost+found/._engrave.xml-YJPnhZ b/lost+found/._engrave.xml-YJPnhZ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-YdIbg8 b/lost+found/._engrave.xml-YdIbg8 new file mode 100644 index 00000000..4f5fd11b Binary files /dev/null and b/lost+found/._engrave.xml-YdIbg8 differ diff --git a/lost+found/._engrave.xml-b4Mspr b/lost+found/._engrave.xml-b4Mspr new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-bV4S60 b/lost+found/._engrave.xml-bV4S60 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-cAgN6O b/lost+found/._engrave.xml-cAgN6O new file mode 100644 index 00000000..e22167f5 Binary files /dev/null and b/lost+found/._engrave.xml-cAgN6O differ diff --git a/lost+found/._engrave.xml-f8mWkL b/lost+found/._engrave.xml-f8mWkL new file mode 100644 index 00000000..faf898f3 Binary files /dev/null and b/lost+found/._engrave.xml-f8mWkL differ diff --git a/lost+found/._engrave.xml-fghV0C b/lost+found/._engrave.xml-fghV0C new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-jhz4eW b/lost+found/._engrave.xml-jhz4eW new file mode 100644 index 00000000..1ab96e2f Binary files /dev/null and b/lost+found/._engrave.xml-jhz4eW differ diff --git a/lost+found/._engrave.xml-jpYfRo b/lost+found/._engrave.xml-jpYfRo new file mode 100644 index 00000000..d8160012 Binary files /dev/null and b/lost+found/._engrave.xml-jpYfRo differ diff --git a/lost+found/._engrave.xml-kgnM7o b/lost+found/._engrave.xml-kgnM7o new file mode 100644 index 00000000..35eac31c Binary files /dev/null and b/lost+found/._engrave.xml-kgnM7o differ diff --git a/lost+found/._engrave.xml-llzXYv b/lost+found/._engrave.xml-llzXYv new file mode 100644 index 00000000..12dc8414 Binary files /dev/null and b/lost+found/._engrave.xml-llzXYv differ diff --git a/lost+found/._engrave.xml-mkh3Le b/lost+found/._engrave.xml-mkh3Le new file mode 100644 index 00000000..4c4e25e7 Binary files /dev/null and b/lost+found/._engrave.xml-mkh3Le differ diff --git a/lost+found/._engrave.xml-n1ZQC5 b/lost+found/._engrave.xml-n1ZQC5 new file mode 100644 index 00000000..55f3485d Binary files /dev/null and b/lost+found/._engrave.xml-n1ZQC5 differ diff --git a/lost+found/._engrave.xml-or5hYi b/lost+found/._engrave.xml-or5hYi new file mode 100644 index 00000000..e11269b0 Binary files /dev/null and b/lost+found/._engrave.xml-or5hYi differ diff --git a/lost+found/._engrave.xml-pFQOPO b/lost+found/._engrave.xml-pFQOPO new file mode 100644 index 00000000..564f070b Binary files /dev/null and b/lost+found/._engrave.xml-pFQOPO differ diff --git a/lost+found/._engrave.xml-qOJJT3 b/lost+found/._engrave.xml-qOJJT3 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-rDSXLw b/lost+found/._engrave.xml-rDSXLw new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-rF4aRN b/lost+found/._engrave.xml-rF4aRN new file mode 100644 index 00000000..eb8b401f Binary files /dev/null and b/lost+found/._engrave.xml-rF4aRN differ diff --git a/lost+found/._engrave.xml-rP1q1i b/lost+found/._engrave.xml-rP1q1i new file mode 100644 index 00000000..14b9c0b4 Binary files /dev/null and b/lost+found/._engrave.xml-rP1q1i differ diff --git a/lost+found/._engrave.xml-tiznVz b/lost+found/._engrave.xml-tiznVz new file mode 100644 index 00000000..b62cf1d7 Binary files /dev/null and b/lost+found/._engrave.xml-tiznVz differ diff --git a/lost+found/._engrave.xml-u259km b/lost+found/._engrave.xml-u259km new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-uCxNEu b/lost+found/._engrave.xml-uCxNEu new file mode 100644 index 00000000..c3e4a9bf Binary files /dev/null and b/lost+found/._engrave.xml-uCxNEu differ diff --git a/lost+found/._engrave.xml-uEQYYc b/lost+found/._engrave.xml-uEQYYc new file mode 100644 index 00000000..4a7817c9 Binary files /dev/null and b/lost+found/._engrave.xml-uEQYYc differ diff --git a/lost+found/._engrave.xml-vgKG2s b/lost+found/._engrave.xml-vgKG2s new file mode 100644 index 00000000..fd2e1ab7 Binary files /dev/null and b/lost+found/._engrave.xml-vgKG2s differ diff --git a/lost+found/._engrave.xml-w2GV8V b/lost+found/._engrave.xml-w2GV8V new file mode 100644 index 00000000..ac9c3cbe Binary files /dev/null and b/lost+found/._engrave.xml-w2GV8V differ diff --git a/lost+found/._engrave.xml-wDUpca b/lost+found/._engrave.xml-wDUpca new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-x3qiNx b/lost+found/._engrave.xml-x3qiNx new file mode 100644 index 00000000..8e1cf61e Binary files /dev/null and b/lost+found/._engrave.xml-x3qiNx differ diff --git a/lost+found/._engrave.xml-y03Ulo b/lost+found/._engrave.xml-y03Ulo new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._engrave.xml-yhd4js b/lost+found/._engrave.xml-yhd4js new file mode 100644 index 00000000..d0292439 Binary files /dev/null and b/lost+found/._engrave.xml-yhd4js differ diff --git a/lost+found/._engrave.xml-zMHXoe b/lost+found/._engrave.xml-zMHXoe new file mode 100644 index 00000000..da532442 Binary files /dev/null and b/lost+found/._engrave.xml-zMHXoe differ diff --git a/lost+found/._engrave.xml-zNEqtL b/lost+found/._engrave.xml-zNEqtL new file mode 100644 index 00000000..441a8b45 Binary files /dev/null and b/lost+found/._engrave.xml-zNEqtL differ diff --git a/lost+found/._engrave.xml-zlO2Lh b/lost+found/._engrave.xml-zlO2Lh new file mode 100644 index 00000000..d6e45d5b Binary files /dev/null and b/lost+found/._engrave.xml-zlO2Lh differ diff --git a/lost+found/._engrave_32_3d.xml-7VRee3 b/lost+found/._engrave_32_3d.xml-7VRee3 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._epilog-zing.png-mLZsoX b/lost+found/._epilog-zing.png-mLZsoX new file mode 100644 index 00000000..a49f5b74 Binary files /dev/null and b/lost+found/._epilog-zing.png-mLZsoX differ diff --git a/lost+found/._examples-LJSRz8 b/lost+found/._examples-LJSRz8 new file mode 100644 index 00000000..ee7d2233 Binary files /dev/null and b/lost+found/._examples-LJSRz8 differ diff --git a/lost+found/._fablab-schluesselanhaenger.plf-ZAzsJc b/lost+found/._fablab-schluesselanhaenger.plf-ZAzsJc new file mode 100644 index 00000000..6041591d Binary files /dev/null and b/lost+found/._fablab-schluesselanhaenger.plf-ZAzsJc differ diff --git a/lost+found/._foo.java-ex10mo b/lost+found/._foo.java-ex10mo new file mode 100644 index 00000000..9784aee3 Binary files /dev/null and b/lost+found/._foo.java-ex10mo differ diff --git a/lost+found/._freehep-psviewer-2.0-standalone.jar-cBrizV b/lost+found/._freehep-psviewer-2.0-standalone.jar-cBrizV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._gtkjfilechooser.jar-GgAqCF b/lost+found/._gtkjfilechooser.jar-GgAqCF new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._hamcrest-core-1.3 2.jar-xXAvhN b/lost+found/._hamcrest-core-1.3 2.jar-xXAvhN new file mode 100644 index 00000000..e36c5a06 Binary files /dev/null and b/lost+found/._hamcrest-core-1.3 2.jar-xXAvhN differ diff --git a/lost+found/._hamcrest-core-1.3.jar-Pgbq16 b/lost+found/._hamcrest-core-1.3.jar-Pgbq16 new file mode 100644 index 00000000..f8955351 Binary files /dev/null and b/lost+found/._hamcrest-core-1.3.jar-Pgbq16 differ diff --git a/lost+found/._httpclient-4.3.6.jar-ESsO8A b/lost+found/._httpclient-4.3.6.jar-ESsO8A new file mode 100644 index 00000000..4e69dcd6 Binary files /dev/null and b/lost+found/._httpclient-4.3.6.jar-ESsO8A differ diff --git a/lost+found/._httpcore-4.3.3.jar-1MJSGp b/lost+found/._httpcore-4.3.3.jar-1MJSGp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._httpmime-4.3.6.jar-0gPLP8 b/lost+found/._httpmime-4.3.6.jar-0gPLP8 new file mode 100644 index 00000000..71983ef8 Binary files /dev/null and b/lost+found/._httpmime-4.3.6.jar-0gPLP8 differ diff --git a/lost+found/._javase-3.2.1-20150223.162559-2.jar-AoLFM9 b/lost+found/._javase-3.2.1-20150223.162559-2.jar-AoLFM9 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._javassist-3.16.1-GA.jar-hlWiVT b/lost+found/._javassist-3.16.1-GA.jar-hlWiVT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._jna-4.0.0.jar-I5Pu5D b/lost+found/._jna-4.0.0.jar-I5Pu5D new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._json-simple-1.1.1.jar-jUXhho b/lost+found/._json-simple-1.1.1.jar-jUXhho new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._junit-4.12.jar-h3Mjsr b/lost+found/._junit-4.12.jar-h3Mjsr new file mode 100644 index 00000000..4c3cdaf6 Binary files /dev/null and b/lost+found/._junit-4.12.jar-h3Mjsr differ diff --git a/lost+found/._kabeja-0.4.jar-maOdkV b/lost+found/._kabeja-0.4.jar-maOdkV new file mode 100644 index 00000000..f7d999fb Binary files /dev/null and b/lost+found/._kabeja-0.4.jar-maOdkV differ diff --git a/lost+found/._kabeja-xslt.jar-tO1KRR b/lost+found/._kabeja-xslt.jar-tO1KRR new file mode 100644 index 00000000..81c6bb25 Binary files /dev/null and b/lost+found/._kabeja-xslt.jar-tO1KRR differ diff --git a/lost+found/._laserprofiles-XMPct8 b/lost+found/._laserprofiles-XMPct8 new file mode 100644 index 00000000..539a4b3b Binary files /dev/null and b/lost+found/._laserprofiles-XMPct8 differ diff --git a/lost+found/._lib-f9dSx7 b/lost+found/._lib-f9dSx7 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._libs-qNNCOF b/lost+found/._libs-qNNCOF new file mode 100644 index 00000000..1c3fb689 Binary files /dev/null and b/lost+found/._libs-qNNCOF differ diff --git a/lost+found/._ls-mime.xml-1Tuhjr b/lost+found/._ls-mime.xml-1Tuhjr new file mode 100644 index 00000000..c50f8b96 Binary files /dev/null and b/lost+found/._ls-mime.xml-1Tuhjr differ diff --git a/lost+found/._mark.xml-0nV6JB b/lost+found/._mark.xml-0nV6JB new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-2Dyre5 b/lost+found/._mark.xml-2Dyre5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-2IkxH1 b/lost+found/._mark.xml-2IkxH1 new file mode 100644 index 00000000..486d8dd6 Binary files /dev/null and b/lost+found/._mark.xml-2IkxH1 differ diff --git a/lost+found/._mark.xml-2ahpHQ b/lost+found/._mark.xml-2ahpHQ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-35zKxM b/lost+found/._mark.xml-35zKxM new file mode 100644 index 00000000..0fff6f68 Binary files /dev/null and b/lost+found/._mark.xml-35zKxM differ diff --git a/lost+found/._mark.xml-3Ihbqu b/lost+found/._mark.xml-3Ihbqu new file mode 100644 index 00000000..a4fccab5 Binary files /dev/null and b/lost+found/._mark.xml-3Ihbqu differ diff --git a/lost+found/._mark.xml-3zvfkn b/lost+found/._mark.xml-3zvfkn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-5uAE1O b/lost+found/._mark.xml-5uAE1O new file mode 100644 index 00000000..183af37b Binary files /dev/null and b/lost+found/._mark.xml-5uAE1O differ diff --git a/lost+found/._mark.xml-8JD7Ly b/lost+found/._mark.xml-8JD7Ly new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-8KUiAJ b/lost+found/._mark.xml-8KUiAJ new file mode 100644 index 00000000..9739ea39 Binary files /dev/null and b/lost+found/._mark.xml-8KUiAJ differ diff --git a/lost+found/._mark.xml-8WOBTi b/lost+found/._mark.xml-8WOBTi new file mode 100644 index 00000000..87ce86f7 Binary files /dev/null and b/lost+found/._mark.xml-8WOBTi differ diff --git a/lost+found/._mark.xml-9bmZ0x b/lost+found/._mark.xml-9bmZ0x new file mode 100644 index 00000000..0b0accc1 Binary files /dev/null and b/lost+found/._mark.xml-9bmZ0x differ diff --git a/lost+found/._mark.xml-9vbLFY b/lost+found/._mark.xml-9vbLFY new file mode 100644 index 00000000..1c89bcb9 Binary files /dev/null and b/lost+found/._mark.xml-9vbLFY differ diff --git a/lost+found/._mark.xml-BNYuaK b/lost+found/._mark.xml-BNYuaK new file mode 100644 index 00000000..c551caf7 Binary files /dev/null and b/lost+found/._mark.xml-BNYuaK differ diff --git a/lost+found/._mark.xml-BZ4t4i b/lost+found/._mark.xml-BZ4t4i new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-BZH5N5 b/lost+found/._mark.xml-BZH5N5 new file mode 100644 index 00000000..ff7a0f39 Binary files /dev/null and b/lost+found/._mark.xml-BZH5N5 differ diff --git a/lost+found/._mark.xml-BfCel2 b/lost+found/._mark.xml-BfCel2 new file mode 100644 index 00000000..8864eb96 Binary files /dev/null and b/lost+found/._mark.xml-BfCel2 differ diff --git a/lost+found/._mark.xml-DJYUOQ b/lost+found/._mark.xml-DJYUOQ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-Fyb1hK b/lost+found/._mark.xml-Fyb1hK new file mode 100644 index 00000000..6a9c03e5 Binary files /dev/null and b/lost+found/._mark.xml-Fyb1hK differ diff --git a/lost+found/._mark.xml-FziIi5 b/lost+found/._mark.xml-FziIi5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-H3v35v b/lost+found/._mark.xml-H3v35v new file mode 100644 index 00000000..cdd32bdd Binary files /dev/null and b/lost+found/._mark.xml-H3v35v differ diff --git a/lost+found/._mark.xml-HLkiHW b/lost+found/._mark.xml-HLkiHW new file mode 100644 index 00000000..d032c072 Binary files /dev/null and b/lost+found/._mark.xml-HLkiHW differ diff --git a/lost+found/._mark.xml-HoEp7Q b/lost+found/._mark.xml-HoEp7Q new file mode 100644 index 00000000..71e9fddb Binary files /dev/null and b/lost+found/._mark.xml-HoEp7Q differ diff --git a/lost+found/._mark.xml-IpjHCY b/lost+found/._mark.xml-IpjHCY new file mode 100644 index 00000000..9c350c1e Binary files /dev/null and b/lost+found/._mark.xml-IpjHCY differ diff --git a/lost+found/._mark.xml-Jetvjs b/lost+found/._mark.xml-Jetvjs new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-JmhEZU b/lost+found/._mark.xml-JmhEZU new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-K3N7ef b/lost+found/._mark.xml-K3N7ef new file mode 100644 index 00000000..7ee402c2 Binary files /dev/null and b/lost+found/._mark.xml-K3N7ef differ diff --git a/lost+found/._mark.xml-NsjquM b/lost+found/._mark.xml-NsjquM new file mode 100644 index 00000000..f4be2b98 Binary files /dev/null and b/lost+found/._mark.xml-NsjquM differ diff --git a/lost+found/._mark.xml-PUtHpc b/lost+found/._mark.xml-PUtHpc new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-Pgo6RZ b/lost+found/._mark.xml-Pgo6RZ new file mode 100644 index 00000000..eba4e630 Binary files /dev/null and b/lost+found/._mark.xml-Pgo6RZ differ diff --git a/lost+found/._mark.xml-Pp43AQ b/lost+found/._mark.xml-Pp43AQ new file mode 100644 index 00000000..69955121 Binary files /dev/null and b/lost+found/._mark.xml-Pp43AQ differ diff --git a/lost+found/._mark.xml-QT4ubG b/lost+found/._mark.xml-QT4ubG new file mode 100644 index 00000000..fe664603 Binary files /dev/null and b/lost+found/._mark.xml-QT4ubG differ diff --git a/lost+found/._mark.xml-RDfWVb b/lost+found/._mark.xml-RDfWVb new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-RgsFS4 b/lost+found/._mark.xml-RgsFS4 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-T1tYSf b/lost+found/._mark.xml-T1tYSf new file mode 100644 index 00000000..1d5e57e8 Binary files /dev/null and b/lost+found/._mark.xml-T1tYSf differ diff --git a/lost+found/._mark.xml-T4abKY b/lost+found/._mark.xml-T4abKY new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-UAvRSa b/lost+found/._mark.xml-UAvRSa new file mode 100644 index 00000000..5d12143e Binary files /dev/null and b/lost+found/._mark.xml-UAvRSa differ diff --git a/lost+found/._mark.xml-WZq6hL b/lost+found/._mark.xml-WZq6hL new file mode 100644 index 00000000..875d31d4 Binary files /dev/null and b/lost+found/._mark.xml-WZq6hL differ diff --git a/lost+found/._mark.xml-X60GsG b/lost+found/._mark.xml-X60GsG new file mode 100644 index 00000000..3e1a1134 Binary files /dev/null and b/lost+found/._mark.xml-X60GsG differ diff --git a/lost+found/._mark.xml-XE8VqG b/lost+found/._mark.xml-XE8VqG new file mode 100644 index 00000000..2871fc10 Binary files /dev/null and b/lost+found/._mark.xml-XE8VqG differ diff --git a/lost+found/._mark.xml-Y4kUoR b/lost+found/._mark.xml-Y4kUoR new file mode 100644 index 00000000..8ee4e005 Binary files /dev/null and b/lost+found/._mark.xml-Y4kUoR differ diff --git a/lost+found/._mark.xml-Zl0ROh b/lost+found/._mark.xml-Zl0ROh new file mode 100644 index 00000000..2d3650e1 Binary files /dev/null and b/lost+found/._mark.xml-Zl0ROh differ diff --git a/lost+found/._mark.xml-aMqeti b/lost+found/._mark.xml-aMqeti new file mode 100644 index 00000000..5fa38f27 Binary files /dev/null and b/lost+found/._mark.xml-aMqeti differ diff --git a/lost+found/._mark.xml-aU6Gv0 b/lost+found/._mark.xml-aU6Gv0 new file mode 100644 index 00000000..5a3e358f Binary files /dev/null and b/lost+found/._mark.xml-aU6Gv0 differ diff --git a/lost+found/._mark.xml-dfMdxm b/lost+found/._mark.xml-dfMdxm new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-eREzBW b/lost+found/._mark.xml-eREzBW new file mode 100644 index 00000000..320dfa0a Binary files /dev/null and b/lost+found/._mark.xml-eREzBW differ diff --git a/lost+found/._mark.xml-iVD9WS b/lost+found/._mark.xml-iVD9WS new file mode 100644 index 00000000..513b8550 Binary files /dev/null and b/lost+found/._mark.xml-iVD9WS differ diff --git a/lost+found/._mark.xml-jFtpJ4 b/lost+found/._mark.xml-jFtpJ4 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-kMMLcN b/lost+found/._mark.xml-kMMLcN new file mode 100644 index 00000000..7f7254c2 Binary files /dev/null and b/lost+found/._mark.xml-kMMLcN differ diff --git a/lost+found/._mark.xml-kZtbL2 b/lost+found/._mark.xml-kZtbL2 new file mode 100644 index 00000000..3f81b1fa Binary files /dev/null and b/lost+found/._mark.xml-kZtbL2 differ diff --git a/lost+found/._mark.xml-lmj3jl b/lost+found/._mark.xml-lmj3jl new file mode 100644 index 00000000..41f47939 Binary files /dev/null and b/lost+found/._mark.xml-lmj3jl differ diff --git a/lost+found/._mark.xml-lpfXvx b/lost+found/._mark.xml-lpfXvx new file mode 100644 index 00000000..58a638e6 Binary files /dev/null and b/lost+found/._mark.xml-lpfXvx differ diff --git a/lost+found/._mark.xml-lqbYZh b/lost+found/._mark.xml-lqbYZh new file mode 100644 index 00000000..223fa2b2 Binary files /dev/null and b/lost+found/._mark.xml-lqbYZh differ diff --git a/lost+found/._mark.xml-psNAGu b/lost+found/._mark.xml-psNAGu new file mode 100644 index 00000000..ffa9f8e9 Binary files /dev/null and b/lost+found/._mark.xml-psNAGu differ diff --git a/lost+found/._mark.xml-qy2zDB b/lost+found/._mark.xml-qy2zDB new file mode 100644 index 00000000..bcee8c2c Binary files /dev/null and b/lost+found/._mark.xml-qy2zDB differ diff --git a/lost+found/._mark.xml-r3zV8Y b/lost+found/._mark.xml-r3zV8Y new file mode 100644 index 00000000..b135e568 Binary files /dev/null and b/lost+found/._mark.xml-r3zV8Y differ diff --git a/lost+found/._mark.xml-tDqJuZ b/lost+found/._mark.xml-tDqJuZ new file mode 100644 index 00000000..6ef9d540 Binary files /dev/null and b/lost+found/._mark.xml-tDqJuZ differ diff --git a/lost+found/._mark.xml-uGEmfn b/lost+found/._mark.xml-uGEmfn new file mode 100644 index 00000000..f89b13ed Binary files /dev/null and b/lost+found/._mark.xml-uGEmfn differ diff --git a/lost+found/._mark.xml-ulxGUk b/lost+found/._mark.xml-ulxGUk new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-uqheiI b/lost+found/._mark.xml-uqheiI new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-uqpLjm b/lost+found/._mark.xml-uqpLjm new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-voRUWr b/lost+found/._mark.xml-voRUWr new file mode 100644 index 00000000..b77ccdbc Binary files /dev/null and b/lost+found/._mark.xml-voRUWr differ diff --git a/lost+found/._mark.xml-w2JIub b/lost+found/._mark.xml-w2JIub new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-wI2Ua1 b/lost+found/._mark.xml-wI2Ua1 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-ycS1gG b/lost+found/._mark.xml-ycS1gG new file mode 100644 index 00000000..57cf8b28 Binary files /dev/null and b/lost+found/._mark.xml-ycS1gG differ diff --git a/lost+found/._mark.xml-yuGU7R b/lost+found/._mark.xml-yuGU7R new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._mark.xml-zZvnO3 b/lost+found/._mark.xml-zZvnO3 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._materials-XxYhwf b/lost+found/._materials-XxYhwf new file mode 100644 index 00000000..99ea77b6 Binary files /dev/null and b/lost+found/._materials-XxYhwf differ diff --git a/lost+found/._miethxml-toolkit.jar-k93iEa b/lost+found/._miethxml-toolkit.jar-k93iEa new file mode 100644 index 00000000..de60788f Binary files /dev/null and b/lost+found/._miethxml-toolkit.jar-k93iEa differ diff --git a/lost+found/._miethxml-ui.jar-jM95o8 b/lost+found/._miethxml-ui.jar-jM95o8 new file mode 100644 index 00000000..8de0cd8c Binary files /dev/null and b/lost+found/._miethxml-ui.jar-jM95o8 differ diff --git a/lost+found/._ognl-3.0.5.jar-XpZ7U6 b/lost+found/._ognl-3.0.5.jar-XpZ7U6 new file mode 100644 index 00000000..d249a33e Binary files /dev/null and b/lost+found/._ognl-3.0.5.jar-XpZ7U6 differ diff --git a/lost+found/._pdf-transcoder.jar-Nmg0d6 b/lost+found/._pdf-transcoder.jar-Nmg0d6 new file mode 100644 index 00000000..4d9023d2 Binary files /dev/null and b/lost+found/._pdf-transcoder.jar-Nmg0d6 differ diff --git a/lost+found/._plf-mime.xml-Okw1K4 b/lost+found/._plf-mime.xml-Okw1K4 new file mode 100644 index 00000000..2e42a250 Binary files /dev/null and b/lost+found/._plf-mime.xml-Okw1K4 differ diff --git a/lost+found/._profiles-fDbEgy b/lost+found/._profiles-fDbEgy new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._project.zip-ldA76u b/lost+found/._project.zip-ldA76u new file mode 100644 index 00000000..e10d9f95 Binary files /dev/null and b/lost+found/._project.zip-ldA76u differ diff --git a/lost+found/._public-HK2mGT b/lost+found/._public-HK2mGT new file mode 100644 index 00000000..1730ccfe Binary files /dev/null and b/lost+found/._public-HK2mGT differ diff --git a/lost+found/._purejavacomm-0.0.22.jar-6d2VA8 b/lost+found/._purejavacomm-0.0.22.jar-6d2VA8 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._rectangle-20mm-green.svg-tzb10X b/lost+found/._rectangle-20mm-green.svg-tzb10X new file mode 100644 index 00000000..5689b766 Binary files /dev/null and b/lost+found/._rectangle-20mm-green.svg-tzb10X differ diff --git a/lost+found/._run-O27hh8 b/lost+found/._run-O27hh8 new file mode 100644 index 00000000..6697211c Binary files /dev/null and b/lost+found/._run-O27hh8 differ diff --git a/lost+found/._run-Z1zkqb b/lost+found/._run-Z1zkqb new file mode 100644 index 00000000..36c7285c Binary files /dev/null and b/lost+found/._run-Z1zkqb differ diff --git a/lost+found/._scribe-1.3.7_useragent_mod.jar-DPFYxr b/lost+found/._scribe-1.3.7_useragent_mod.jar-DPFYxr new file mode 100644 index 00000000..e6e91c2c Binary files /dev/null and b/lost+found/._scribe-1.3.7_useragent_mod.jar-DPFYxr differ diff --git a/lost+found/._settings-99rE0Y b/lost+found/._settings-99rE0Y new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._slf4j-api-1.7.2.jar-gKOEZM b/lost+found/._slf4j-api-1.7.2.jar-gKOEZM new file mode 100644 index 00000000..f7dccb90 Binary files /dev/null and b/lost+found/._slf4j-api-1.7.2.jar-gKOEZM differ diff --git a/lost+found/._slf4j-api-1.7.5.jar-DyDVWS b/lost+found/._slf4j-api-1.7.5.jar-DyDVWS new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._slf4j-nop-1.7.5.jar-Oa8zkD b/lost+found/._slf4j-nop-1.7.5.jar-Oa8zkD new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._student-83XhDn b/lost+found/._student-83XhDn new file mode 100644 index 00000000..f4f5a410 Binary files /dev/null and b/lost+found/._student-83XhDn differ diff --git a/lost+found/._svg-salamander-core.jar-nyWnKa b/lost+found/._svg-salamander-core.jar-nyWnKa new file mode 100644 index 00000000..82b3dbe8 Binary files /dev/null and b/lost+found/._svg-salamander-core.jar-nyWnKa differ diff --git a/lost+found/._swing-worker-1.1.jar-8H6aMn b/lost+found/._swing-worker-1.1.jar-8H6aMn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._task.yaml-4hHdID b/lost+found/._task.yaml-4hHdID new file mode 100644 index 00000000..0772ed10 Binary files /dev/null and b/lost+found/._task.yaml-4hHdID differ diff --git a/lost+found/._tests-JlJbyU b/lost+found/._tests-JlJbyU new file mode 100644 index 00000000..7e62cd0f Binary files /dev/null and b/lost+found/._tests-JlJbyU differ diff --git a/lost+found/._text.svg-0IKkuN b/lost+found/._text.svg-0IKkuN new file mode 100644 index 00000000..d5554421 Binary files /dev/null and b/lost+found/._text.svg-0IKkuN differ diff --git a/lost+found/._thymeleaf-2.0.17-SNAPSHOT.jar-Jpjxf8 b/lost+found/._thymeleaf-2.0.17-SNAPSHOT.jar-Jpjxf8 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._visicut-icon.png-KNbXhE b/lost+found/._visicut-icon.png-KNbXhE new file mode 100644 index 00000000..0435fde6 Binary files /dev/null and b/lost+found/._visicut-icon.png-KNbXhE differ diff --git a/lost+found/._visicut_export.inx-0K2d9T b/lost+found/._visicut_export.inx-0K2d9T new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._visicut_export.py-fzXsdF b/lost+found/._visicut_export.py-fzXsdF new file mode 100644 index 00000000..ce7e416a Binary files /dev/null and b/lost+found/._visicut_export.py-fzXsdF differ diff --git a/lost+found/._visicut_export_replace.inx-yHl7Fb b/lost+found/._visicut_export_replace.inx-yHl7Fb new file mode 100644 index 00000000..d694a15b Binary files /dev/null and b/lost+found/._visicut_export_replace.inx-yHl7Fb differ diff --git a/lost+found/._webcam-capture-0.3.11-20141227.105512-4.jar-0sljng b/lost+found/._webcam-capture-0.3.11-20141227.105512-4.jar-0sljng new file mode 100644 index 00000000..39c0b5ae Binary files /dev/null and b/lost+found/._webcam-capture-0.3.11-20141227.105512-4.jar-0sljng differ diff --git a/lost+found/._xml-apis-ext.jar-NoD4nD b/lost+found/._xml-apis-ext.jar-NoD4nD new file mode 100644 index 00000000..c240a356 Binary files /dev/null and b/lost+found/._xml-apis-ext.jar-NoD4nD differ diff --git a/lost+found/._xml-apis.jar-hVHRxH b/lost+found/._xml-apis.jar-hVHRxH new file mode 100644 index 00000000..fede2005 Binary files /dev/null and b/lost+found/._xml-apis.jar-hVHRxH differ diff --git a/lost+found/._xpp3-1.1.4c.jar-6psDNS b/lost+found/._xpp3-1.1.4c.jar-6psDNS new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/._xstream-1.4.3.jar-BlDQpS b/lost+found/._xstream-1.4.3.jar-BlDQpS new file mode 100644 index 00000000..6b5c058b Binary files /dev/null and b/lost+found/._xstream-1.4.3.jar-BlDQpS differ diff --git a/lost+found/.gitignore-mGcxDV b/lost+found/.gitignore-mGcxDV new file mode 100644 index 00000000..62c89355 --- /dev/null +++ b/lost+found/.gitignore-mGcxDV @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/lost+found/0060c3d74359e94a1651a77ddadab86d20442c-AvG4Xf b/lost+found/0060c3d74359e94a1651a77ddadab86d20442c-AvG4Xf new file mode 100644 index 00000000..d1351ecc Binary files /dev/null and b/lost+found/0060c3d74359e94a1651a77ddadab86d20442c-AvG4Xf differ diff --git a/lost+found/00f867eb3dca6ef3df2dae0ccb537d00bf61c9-RYrJmG b/lost+found/00f867eb3dca6ef3df2dae0ccb537d00bf61c9-RYrJmG new file mode 100644 index 00000000..762b2226 Binary files /dev/null and b/lost+found/00f867eb3dca6ef3df2dae0ccb537d00bf61c9-RYrJmG differ diff --git a/lost+found/016678ff59dd992525752e34bfcbebbed6265c-MYWL1r b/lost+found/016678ff59dd992525752e34bfcbebbed6265c-MYWL1r new file mode 100644 index 00000000..2f1ced78 Binary files /dev/null and b/lost+found/016678ff59dd992525752e34bfcbebbed6265c-MYWL1r differ diff --git a/lost+found/02274eab14b30bc29e7373cdc38f36cf7fad54-RdcXK6 b/lost+found/02274eab14b30bc29e7373cdc38f36cf7fad54-RdcXK6 new file mode 100644 index 00000000..15949db3 Binary files /dev/null and b/lost+found/02274eab14b30bc29e7373cdc38f36cf7fad54-RdcXK6 differ diff --git a/lost+found/02e5b74e5929e9e6880ea1ada33287e3bcc63e-UlXW3F b/lost+found/02e5b74e5929e9e6880ea1ada33287e3bcc63e-UlXW3F new file mode 100644 index 00000000..24540790 Binary files /dev/null and b/lost+found/02e5b74e5929e9e6880ea1ada33287e3bcc63e-UlXW3F differ diff --git a/lost+found/036d85a04f05139e5b36fa37848c05f75ea498-lI1scy b/lost+found/036d85a04f05139e5b36fa37848c05f75ea498-lI1scy new file mode 100644 index 00000000..bc437431 Binary files /dev/null and b/lost+found/036d85a04f05139e5b36fa37848c05f75ea498-lI1scy differ diff --git a/lost+found/04260a070b12091478db86c9e8146a290103a8-zOqFUM b/lost+found/04260a070b12091478db86c9e8146a290103a8-zOqFUM new file mode 100644 index 00000000..dceed0c5 Binary files /dev/null and b/lost+found/04260a070b12091478db86c9e8146a290103a8-zOqFUM differ diff --git a/lost+found/04831920c804c34bd296d0a1797bf9d047c5a6-eNhxVl b/lost+found/04831920c804c34bd296d0a1797bf9d047c5a6-eNhxVl new file mode 100644 index 00000000..0237985d Binary files /dev/null and b/lost+found/04831920c804c34bd296d0a1797bf9d047c5a6-eNhxVl differ diff --git a/lost+found/053b400591f21b361aa110396b141c18ad3d72-xk4bVP b/lost+found/053b400591f21b361aa110396b141c18ad3d72-xk4bVP new file mode 100644 index 00000000..0819cf4f Binary files /dev/null and b/lost+found/053b400591f21b361aa110396b141c18ad3d72-xk4bVP differ diff --git a/lost+found/054ac865b8f6c62212db8662fee91091d8f240-Q5Fc0v b/lost+found/054ac865b8f6c62212db8662fee91091d8f240-Q5Fc0v new file mode 100644 index 00000000..906612cb Binary files /dev/null and b/lost+found/054ac865b8f6c62212db8662fee91091d8f240-Q5Fc0v differ diff --git a/lost+found/05a0b767dc372e6337c16f2234eb84028a1815-3jew95 b/lost+found/05a0b767dc372e6337c16f2234eb84028a1815-3jew95 new file mode 100644 index 00000000..bdada617 Binary files /dev/null and b/lost+found/05a0b767dc372e6337c16f2234eb84028a1815-3jew95 differ diff --git a/lost+found/0652f3a948465e8b38b62d659f78ecf62c1ec4-loyf1h b/lost+found/0652f3a948465e8b38b62d659f78ecf62c1ec4-loyf1h new file mode 100644 index 00000000..763f2db8 --- /dev/null +++ b/lost+found/0652f3a948465e8b38b62d659f78ecf62c1ec4-loyf1h @@ -0,0 +1,2 @@ +xA +0E]d&IDyIfj%[?^qݦUP95(wEd[&+}Vػ}482Y>>Zųm$ڄ0ZC(ʻOSisԢg&GHMZk"ϳD!c/BOm \ No newline at end of file diff --git a/lost+found/07328692b631ec6931e610be7c60a37c91331c-6NdhT1 b/lost+found/07328692b631ec6931e610be7c60a37c91331c-6NdhT1 new file mode 100644 index 00000000..47b01781 Binary files /dev/null and b/lost+found/07328692b631ec6931e610be7c60a37c91331c-6NdhT1 differ diff --git a/lost+found/07f49953d3b4045a68cb19359b20fc1f2b6199-KPkqZp b/lost+found/07f49953d3b4045a68cb19359b20fc1f2b6199-KPkqZp new file mode 100644 index 00000000..0deac98f Binary files /dev/null and b/lost+found/07f49953d3b4045a68cb19359b20fc1f2b6199-KPkqZp differ diff --git a/lost+found/087e87f43e8aae178f014ae56cea0fb95bbc0f-MzNhur b/lost+found/087e87f43e8aae178f014ae56cea0fb95bbc0f-MzNhur new file mode 100644 index 00000000..83d75f0a Binary files /dev/null and b/lost+found/087e87f43e8aae178f014ae56cea0fb95bbc0f-MzNhur differ diff --git a/lost+found/08ddfcf53c02e82d7eee2e57c38e5672ef89f6-nl0mvk b/lost+found/08ddfcf53c02e82d7eee2e57c38e5672ef89f6-nl0mvk new file mode 100644 index 00000000..b00df031 Binary files /dev/null and b/lost+found/08ddfcf53c02e82d7eee2e57c38e5672ef89f6-nl0mvk differ diff --git a/lost+found/08eaad3ecf244bf9e1ea326346b2a3b589231d-xovygX b/lost+found/08eaad3ecf244bf9e1ea326346b2a3b589231d-xovygX new file mode 100644 index 00000000..e059d0a7 Binary files /dev/null and b/lost+found/08eaad3ecf244bf9e1ea326346b2a3b589231d-xovygX differ diff --git a/lost+found/09d34239654c5a6087c69b0fdcee81af8ce8c1-yFys2I b/lost+found/09d34239654c5a6087c69b0fdcee81af8ce8c1-yFys2I new file mode 100644 index 00000000..7ee7c38a Binary files /dev/null and b/lost+found/09d34239654c5a6087c69b0fdcee81af8ce8c1-yFys2I differ diff --git a/lost+found/0b4b2ff13bd640416ff2a63a098082d96702cc-DCyxFZ b/lost+found/0b4b2ff13bd640416ff2a63a098082d96702cc-DCyxFZ new file mode 100644 index 00000000..5674283f Binary files /dev/null and b/lost+found/0b4b2ff13bd640416ff2a63a098082d96702cc-DCyxFZ differ diff --git a/lost+found/0b568adb99a47a4e126d6e447bb62113323434-qfJRNZ b/lost+found/0b568adb99a47a4e126d6e447bb62113323434-qfJRNZ new file mode 100644 index 00000000..56578f5a Binary files /dev/null and b/lost+found/0b568adb99a47a4e126d6e447bb62113323434-qfJRNZ differ diff --git a/lost+found/0b7d5ca87e1427eded236e582caa7219b0d936-7Ko5l5 b/lost+found/0b7d5ca87e1427eded236e582caa7219b0d936-7Ko5l5 new file mode 100644 index 00000000..afb5a2f2 Binary files /dev/null and b/lost+found/0b7d5ca87e1427eded236e582caa7219b0d936-7Ko5l5 differ diff --git a/lost+found/0b81a6f2cc132143f60dbb2712ae6242f00772-001hx2 b/lost+found/0b81a6f2cc132143f60dbb2712ae6242f00772-001hx2 new file mode 100644 index 00000000..acfd6f3d Binary files /dev/null and b/lost+found/0b81a6f2cc132143f60dbb2712ae6242f00772-001hx2 differ diff --git a/lost+found/0be554fa3628d1092aa6b62f5fbd0ce964b3c8-26h601 b/lost+found/0be554fa3628d1092aa6b62f5fbd0ce964b3c8-26h601 new file mode 100644 index 00000000..1a232653 Binary files /dev/null and b/lost+found/0be554fa3628d1092aa6b62f5fbd0ce964b3c8-26h601 differ diff --git a/lost+found/0be8caf31676638b9ce722871be29a0fa896c0-h27HKU b/lost+found/0be8caf31676638b9ce722871be29a0fa896c0-h27HKU new file mode 100644 index 00000000..802d14b0 Binary files /dev/null and b/lost+found/0be8caf31676638b9ce722871be29a0fa896c0-h27HKU differ diff --git a/lost+found/0bef251a0625933733b167a38d21082326528a-TidWD3 b/lost+found/0bef251a0625933733b167a38d21082326528a-TidWD3 new file mode 100644 index 00000000..66ad506b Binary files /dev/null and b/lost+found/0bef251a0625933733b167a38d21082326528a-TidWD3 differ diff --git a/lost+found/0c3a1f6f3791dbbc6059ce0f1817533785e3d1-BAD47o b/lost+found/0c3a1f6f3791dbbc6059ce0f1817533785e3d1-BAD47o new file mode 100644 index 00000000..0675548d Binary files /dev/null and b/lost+found/0c3a1f6f3791dbbc6059ce0f1817533785e3d1-BAD47o differ diff --git a/lost+found/0cd8a12c89ab7ce60c58743649734c9a411c41-xXUUBy b/lost+found/0cd8a12c89ab7ce60c58743649734c9a411c41-xXUUBy new file mode 100644 index 00000000..1f9562ef --- /dev/null +++ b/lost+found/0cd8a12c89ab7ce60c58743649734c9a411c41-xXUUBy @@ -0,0 +1 @@ +x;n0S(_ p;eD4Uا&H97Z:LFDEP@%F-:(.!4[eШv)}Mʸtsk),np9_j_?ݮce߆R3^CoxvrR"q:ҸBnu|j[z \ No newline at end of file diff --git a/lost+found/0d788acc805c990a409d898b095500e73ccb98-na1Mxn b/lost+found/0d788acc805c990a409d898b095500e73ccb98-na1Mxn new file mode 100644 index 00000000..43d4e00c Binary files /dev/null and b/lost+found/0d788acc805c990a409d898b095500e73ccb98-na1Mxn differ diff --git a/lost+found/0fb18e1259d82354dccfaf3d204cd23d76c668-vE1KuU b/lost+found/0fb18e1259d82354dccfaf3d204cd23d76c668-vE1KuU new file mode 100644 index 00000000..fb02e3d5 Binary files /dev/null and b/lost+found/0fb18e1259d82354dccfaf3d204cd23d76c668-vE1KuU differ diff --git a/lost+found/108984c6c8518c887a846f564fdbe9e7ba320d-ixidcM b/lost+found/108984c6c8518c887a846f564fdbe9e7ba320d-ixidcM new file mode 100644 index 00000000..aa375e89 Binary files /dev/null and b/lost+found/108984c6c8518c887a846f564fdbe9e7ba320d-ixidcM differ diff --git a/lost+found/1326ddf4e3e3b05c68513391102cbd4643e0c6-jGskj0 b/lost+found/1326ddf4e3e3b05c68513391102cbd4643e0c6-jGskj0 new file mode 100644 index 00000000..5219e994 Binary files /dev/null and b/lost+found/1326ddf4e3e3b05c68513391102cbd4643e0c6-jGskj0 differ diff --git a/lost+found/133d29161137fba0451a4422a80b3d7fb72385-sUpqGk b/lost+found/133d29161137fba0451a4422a80b3d7fb72385-sUpqGk new file mode 100644 index 00000000..982893b7 --- /dev/null +++ b/lost+found/133d29161137fba0451a4422a80b3d7fb72385-sUpqGk @@ -0,0 +1,5 @@ +xmUMo6YbnލIQ Q&"0 J%9?VY?~m !97HGw9nnomPkĚkR)N[C[qéE[k[~>8@V#:I"T8@QHٰeWARfdI;?0rbٜRsڍ=3nxa7rȀG׆wHgANI$"E˙,tP6[GP)yit +_xN}?aƣ2z8gh~aEvvajp!#08^b' +8s.lMhSfQpvAㄓfWW8 \ No newline at end of file diff --git a/lost+found/1348c48fc9208eff294ac5add20221949b7771-cq4fkR b/lost+found/1348c48fc9208eff294ac5add20221949b7771-cq4fkR new file mode 100644 index 00000000..aeaed269 Binary files /dev/null and b/lost+found/1348c48fc9208eff294ac5add20221949b7771-cq4fkR differ diff --git a/lost+found/1432c8855b631bf18c25927871ca540698a3c2-jWZV1O b/lost+found/1432c8855b631bf18c25927871ca540698a3c2-jWZV1O new file mode 100644 index 00000000..018df075 Binary files /dev/null and b/lost+found/1432c8855b631bf18c25927871ca540698a3c2-jWZV1O differ diff --git a/lost+found/14760b175275f1d5afdc3b1afdb14d78e9c052-UcRmhZ b/lost+found/14760b175275f1d5afdc3b1afdb14d78e9c052-UcRmhZ new file mode 100644 index 00000000..2a912776 --- /dev/null +++ b/lost+found/14760b175275f1d5afdc3b1afdb14d78e9c052-UcRmhZ @@ -0,0 +1 @@ +x=j1FSӇ,c!AbW2pNM=u@]6!-0dIH΋ 1A6;dDJd;*n>O ^}ǷVe$ym5y=@7ά3 |!'#獢)ꊝf XX6 1c=o!;"8pgx:[?|t^ߵg7VdZ2!Mu&`wcQ#YpTҷ{sV6K>Y\W \ No newline at end of file diff --git a/lost+found/14fec4305797eaf8f99e84ec825c5d52240e29-s6tT1T b/lost+found/14fec4305797eaf8f99e84ec825c5d52240e29-s6tT1T new file mode 100644 index 00000000..93a74a04 Binary files /dev/null and b/lost+found/14fec4305797eaf8f99e84ec825c5d52240e29-s6tT1T differ diff --git a/lost+found/15f261b2abe39fd4979a4c810baa2b6c3cb2f7-e99mra b/lost+found/15f261b2abe39fd4979a4c810baa2b6c3cb2f7-e99mra new file mode 100644 index 00000000..eb765f7e Binary files /dev/null and b/lost+found/15f261b2abe39fd4979a4c810baa2b6c3cb2f7-e99mra differ diff --git a/lost+found/19fa4fe25abdf2c59407c8aa865b9b281b93e2-cZU2ba b/lost+found/19fa4fe25abdf2c59407c8aa865b9b281b93e2-cZU2ba new file mode 100644 index 00000000..d6a4f7fc Binary files /dev/null and b/lost+found/19fa4fe25abdf2c59407c8aa865b9b281b93e2-cZU2ba differ diff --git a/lost+found/1a277f814a79243fc45f8027ac1568a49549af-UTZbU3 b/lost+found/1a277f814a79243fc45f8027ac1568a49549af-UTZbU3 new file mode 100644 index 00000000..fcf7c2dd --- /dev/null +++ b/lost+found/1a277f814a79243fc45f8027ac1568a49549af-UTZbU3 @@ -0,0 +1 @@ +x1j1ESӇ,ZY@Ie(x5F齸RǺ,CzMl!&`$JGٛkjR;XP8Ggt8@768ZtgՏ&܆R+_I`,Qt;x] 2?k%pW>7oZ!7]^ [ \ No newline at end of file diff --git a/lost+found/1a3890c125c1ad1e52852db698ee11a71a2afb-WnZgs3 b/lost+found/1a3890c125c1ad1e52852db698ee11a71a2afb-WnZgs3 new file mode 100644 index 00000000..174726db Binary files /dev/null and b/lost+found/1a3890c125c1ad1e52852db698ee11a71a2afb-WnZgs3 differ diff --git a/lost+found/1af8bbf2d1dac0dd68cbba96877045f317ae89-ruhVgW b/lost+found/1af8bbf2d1dac0dd68cbba96877045f317ae89-ruhVgW new file mode 100644 index 00000000..c41b8237 Binary files /dev/null and b/lost+found/1af8bbf2d1dac0dd68cbba96877045f317ae89-ruhVgW differ diff --git a/lost+found/1b18945c2f002a0096271cfedb174b4eb35278-5836Zs b/lost+found/1b18945c2f002a0096271cfedb174b4eb35278-5836Zs new file mode 100644 index 00000000..a61f902d Binary files /dev/null and b/lost+found/1b18945c2f002a0096271cfedb174b4eb35278-5836Zs differ diff --git a/lost+found/1b27963bf9769370909ba12f941a7317444167-K9lu35 b/lost+found/1b27963bf9769370909ba12f941a7317444167-K9lu35 new file mode 100644 index 00000000..8e06e390 Binary files /dev/null and b/lost+found/1b27963bf9769370909ba12f941a7317444167-K9lu35 differ diff --git a/lost+found/1bb503cc5f97868fa228b51bc8199275f816e4-O0mHzA b/lost+found/1bb503cc5f97868fa228b51bc8199275f816e4-O0mHzA new file mode 100644 index 00000000..d7ef17c1 --- /dev/null +++ b/lost+found/1bb503cc5f97868fa228b51bc8199275f816e4-O0mHzA @@ -0,0 +1,2 @@ +xTn1 _C\ +n-0&@]:VT=E$%?6-{C䌆C.[Z8rWݣz@)hr2уw!oUg9isvlC/T^>w=b0‰Ѝ@|G[;茊.tQZGuL߈s$@#%7z|[`o=|KX,s&H5828jJKf+`|Ldpz QҦC' ]Kg\J#Xɮ6v4},sg#[M@.9[1YAeAS²'0[z5Iĭcyf?G+eT>Y0ƫj$JH*B[{@'c1Ƕ6M 7ͱ;܈ew:ǎ8Qm)QG]N|ۈ,d:h>;JwaAٞN86dᓊDu' y$)wE%zpHYrehRRy凍ICdVWBa_SSLoKQ-U5V|^h@:Q<]jVY6ǚޭY5J_];{ \ No newline at end of file diff --git a/lost+found/1bc4e13397731f1148aa6efc32bc3bb03e3321-9UCj1h b/lost+found/1bc4e13397731f1148aa6efc32bc3bb03e3321-9UCj1h new file mode 100644 index 00000000..fbe71593 Binary files /dev/null and b/lost+found/1bc4e13397731f1148aa6efc32bc3bb03e3321-9UCj1h differ diff --git a/lost+found/1bea2c84baf7dc021360e2b37b3fb73c0af811-kTBtrS b/lost+found/1bea2c84baf7dc021360e2b37b3fb73c0af811-kTBtrS new file mode 100644 index 00000000..5e61a04a --- /dev/null +++ b/lost+found/1bea2c84baf7dc021360e2b37b3fb73c0af811-kTBtrS @@ -0,0 +1,2 @@ +x=j1FSӇ,ȫ!a4ddm>M}>mǧ9JN*kb ^{&98R&(mB.HIPd,Ap> +r9kmMy!^Rym1:4֊H}o4+4z?w dS#\ diff --git a/lost+found/1c6c9e926ea9682c71216376869313b988a223-JeYlSm b/lost+found/1c6c9e926ea9682c71216376869313b988a223-JeYlSm new file mode 100644 index 00000000..140e121b Binary files /dev/null and b/lost+found/1c6c9e926ea9682c71216376869313b988a223-JeYlSm differ diff --git a/lost+found/1c77a408a522239d9577ef7d79898a40086da8-FPf8Dr b/lost+found/1c77a408a522239d9577ef7d79898a40086da8-FPf8Dr new file mode 100644 index 00000000..a1f28e58 --- /dev/null +++ b/lost+found/1c77a408a522239d9577ef7d79898a40086da8-FPf8Dr @@ -0,0 +1,4 @@ +x1n1ES#Vc{m) +p0,62ނD(ߗף,eh:&!o)8fy.عx6w19/`[\ +g8ݾ^WmΗԿܦRM+')6?(z~H-8 +ҩZتޖW#\# \ No newline at end of file diff --git a/lost+found/1cb9440d8a96c85938ecae9d7f497030150582-o63vUF b/lost+found/1cb9440d8a96c85938ecae9d7f497030150582-o63vUF new file mode 100644 index 00000000..7530201c Binary files /dev/null and b/lost+found/1cb9440d8a96c85938ecae9d7f497030150582-o63vUF differ diff --git a/lost+found/1d1d81e9f74a891b388a4e2c7655528d0897bb-6MjR5Z b/lost+found/1d1d81e9f74a891b388a4e2c7655528d0897bb-6MjR5Z new file mode 100644 index 00000000..092a34e4 Binary files /dev/null and b/lost+found/1d1d81e9f74a891b388a4e2c7655528d0897bb-6MjR5Z differ diff --git a/lost+found/1d64fd4f14da2edc1c7a58845d497f15f67dfe-vmZ9D9 b/lost+found/1d64fd4f14da2edc1c7a58845d497f15f67dfe-vmZ9D9 new file mode 100644 index 00000000..901bddf5 --- /dev/null +++ b/lost+found/1d64fd4f14da2edc1c7a58845d497f15f67dfe-vmZ9D9 @@ -0,0 +1 @@ +x1n Ԝb(Fa"cm#ٶ:4:3,R6G˔PL|l<E]S6&!~f\gcꋝ֨>yjU6y|kmȴeJ4!l8D1xFkE}ȖF%sTiPlN 81\K \ No newline at end of file diff --git a/lost+found/1d8b537660df9fcab253db0cd8027a65669049-WYZrOt b/lost+found/1d8b537660df9fcab253db0cd8027a65669049-WYZrOt new file mode 100644 index 00000000..2b69afc7 Binary files /dev/null and b/lost+found/1d8b537660df9fcab253db0cd8027a65669049-WYZrOt differ diff --git a/lost+found/1ece4ffa82ccb9522c26ddae851d0837142188-AzySpi b/lost+found/1ece4ffa82ccb9522c26ddae851d0837142188-AzySpi new file mode 100644 index 00000000..316b1405 --- /dev/null +++ b/lost+found/1ece4ffa82ccb9522c26ddae851d0837142188-AzySpi @@ -0,0 +1,2 @@ +x1n1>{kw( +Lx 8=&H飺kޘ53pgeq`<#O-CE]q隝>E/ RJ6Q͓ HQsms<\*rmEe@"k3`7auŞIέxZ9B\ \ No newline at end of file diff --git a/lost+found/205901562c96c7ca565344b7ccd36fb48ebd1e-DVFYVC b/lost+found/205901562c96c7ca565344b7ccd36fb48ebd1e-DVFYVC new file mode 100644 index 00000000..032134b9 Binary files /dev/null and b/lost+found/205901562c96c7ca565344b7ccd36fb48ebd1e-DVFYVC differ diff --git a/lost+found/21f3d95e92683f56b6d8838d8444052766703c-1Rat2V b/lost+found/21f3d95e92683f56b6d8838d8444052766703c-1Rat2V new file mode 100644 index 00000000..2c21fdcf Binary files /dev/null and b/lost+found/21f3d95e92683f56b6d8838d8444052766703c-1Rat2V differ diff --git a/lost+found/2217d1e13433df45dd40158a65c3e39f55b96a-p0uWT9 b/lost+found/2217d1e13433df45dd40158a65c3e39f55b96a-p0uWT9 new file mode 100644 index 00000000..1097feea Binary files /dev/null and b/lost+found/2217d1e13433df45dd40158a65c3e39f55b96a-p0uWT9 differ diff --git a/lost+found/22608a4e02c23927fe3ede2ecf03ab9b99a63d-AiXuLS b/lost+found/22608a4e02c23927fe3ede2ecf03ab9b99a63d-AiXuLS new file mode 100644 index 00000000..fd44de3f Binary files /dev/null and b/lost+found/22608a4e02c23927fe3ede2ecf03ab9b99a63d-AiXuLS differ diff --git a/lost+found/22bf9e73b293c40762a9a37e022d73e0b435c9-i9XYYq b/lost+found/22bf9e73b293c40762a9a37e022d73e0b435c9-i9XYYq new file mode 100644 index 00000000..bc96d569 Binary files /dev/null and b/lost+found/22bf9e73b293c40762a9a37e022d73e0b435c9-i9XYYq differ diff --git a/lost+found/23bd16b233c5c4211d385c8260cb423ed15f6c-Od41pj b/lost+found/23bd16b233c5c4211d385c8260cb423ed15f6c-Od41pj new file mode 100644 index 00000000..d91fdae9 --- /dev/null +++ b/lost+found/23bd16b233c5c4211d385c8260cb423ed15f6c-Od41pj @@ -0,0 +1,2 @@ +x10 @Q;r$N%ظ8PQ( +) 8_jUZO䋷}D,8'ʩ7ss[Sb2=`PLd$kq%v+9j8M\3l_ޜ~_d'MC5N|Y. wxP \ No newline at end of file diff --git a/lost+found/23bd4f0d787b59d018ef143c1ccc3bbef109f1-XV7Z3J b/lost+found/23bd4f0d787b59d018ef143c1ccc3bbef109f1-XV7Z3J new file mode 100644 index 00000000..ea387f14 Binary files /dev/null and b/lost+found/23bd4f0d787b59d018ef143c1ccc3bbef109f1-XV7Z3J differ diff --git a/lost+found/23e8f3cfeef53edf85d50d4443d7b9d3ca6585-aPfcEK b/lost+found/23e8f3cfeef53edf85d50d4443d7b9d3ca6585-aPfcEK new file mode 100644 index 00000000..c7a4c610 Binary files /dev/null and b/lost+found/23e8f3cfeef53edf85d50d4443d7b9d3ca6585-aPfcEK differ diff --git a/lost+found/255d17946e92ff75779379c191c492d54c8265-2uvSUC b/lost+found/255d17946e92ff75779379c191c492d54c8265-2uvSUC new file mode 100644 index 00000000..4cc42a72 Binary files /dev/null and b/lost+found/255d17946e92ff75779379c191c492d54c8265-2uvSUC differ diff --git a/lost+found/25666474663da05951d7406e9d7a94a449193f-AYa8Xy b/lost+found/25666474663da05951d7406e9d7a94a449193f-AYa8Xy new file mode 100644 index 00000000..945253a1 --- /dev/null +++ b/lost+found/25666474663da05951d7406e9d7a94a449193f-AYa8Xy @@ -0,0 +1 @@ +x;n0DS$IeY,ASsz n|30x׵PֿNNe684S,ΓWd#i["SHQ,uac.>(IEƙ;OcG]o}vSm-]H_ g.IxG(Swп6x &[:wnoܠt^_jZ[m \ No newline at end of file diff --git a/lost+found/2601c29ed27beb5c2b051d3e582680c62581f9-EUru38 b/lost+found/2601c29ed27beb5c2b051d3e582680c62581f9-EUru38 new file mode 100644 index 00000000..93574502 Binary files /dev/null and b/lost+found/2601c29ed27beb5c2b051d3e582680c62581f9-EUru38 differ diff --git a/lost+found/2662ec5f9b1b00c1c64635805752aa268464cf-MwIhhY b/lost+found/2662ec5f9b1b00c1c64635805752aa268464cf-MwIhhY new file mode 100644 index 00000000..5029388e Binary files /dev/null and b/lost+found/2662ec5f9b1b00c1c64635805752aa268464cf-MwIhhY differ diff --git a/lost+found/26faf64800ab35c8ec2ab515f0bf6196e5da70-nBnsSH b/lost+found/26faf64800ab35c8ec2ab515f0bf6196e5da70-nBnsSH new file mode 100644 index 00000000..270dc52d Binary files /dev/null and b/lost+found/26faf64800ab35c8ec2ab515f0bf6196e5da70-nBnsSH differ diff --git a/lost+found/271c53253c6cba97db729490ee5169fd17eaab-BpOM1G b/lost+found/271c53253c6cba97db729490ee5169fd17eaab-BpOM1G new file mode 100644 index 00000000..03cec4b6 Binary files /dev/null and b/lost+found/271c53253c6cba97db729490ee5169fd17eaab-BpOM1G differ diff --git a/lost+found/276c5d60490bbd5a462d996c6f32488f2e2bd6-5bcPPn b/lost+found/276c5d60490bbd5a462d996c6f32488f2e2bd6-5bcPPn new file mode 100644 index 00000000..d7a468b8 Binary files /dev/null and b/lost+found/276c5d60490bbd5a462d996c6f32488f2e2bd6-5bcPPn differ diff --git a/lost+found/299953758426779c51d87ca324439e4b9b2fbc-Ya6oI2 b/lost+found/299953758426779c51d87ca324439e4b9b2fbc-Ya6oI2 new file mode 100644 index 00000000..a3a12e03 Binary files /dev/null and b/lost+found/299953758426779c51d87ca324439e4b9b2fbc-Ya6oI2 differ diff --git a/lost+found/2a85fdd308bc1e8ed95dc6664deeccc0cb03a9-dheOMh b/lost+found/2a85fdd308bc1e8ed95dc6664deeccc0cb03a9-dheOMh new file mode 100644 index 00000000..6c25e41d Binary files /dev/null and b/lost+found/2a85fdd308bc1e8ed95dc6664deeccc0cb03a9-dheOMh differ diff --git a/lost+found/2a88f9109a845a6af26b6c027909aceb624a5f-vhzBp6 b/lost+found/2a88f9109a845a6af26b6c027909aceb624a5f-vhzBp6 new file mode 100644 index 00000000..15710d53 Binary files /dev/null and b/lost+found/2a88f9109a845a6af26b6c027909aceb624a5f-vhzBp6 differ diff --git a/lost+found/2aac9d91cd93c17a2fdd3d4fbad3aa755a3967-VTFC68 b/lost+found/2aac9d91cd93c17a2fdd3d4fbad3aa755a3967-VTFC68 new file mode 100644 index 00000000..25e470f5 Binary files /dev/null and b/lost+found/2aac9d91cd93c17a2fdd3d4fbad3aa755a3967-VTFC68 differ diff --git a/lost+found/2adcfee5e8077246c9243776861ba83dece527-W1ktuN b/lost+found/2adcfee5e8077246c9243776861ba83dece527-W1ktuN new file mode 100644 index 00000000..33e8b095 Binary files /dev/null and b/lost+found/2adcfee5e8077246c9243776861ba83dece527-W1ktuN differ diff --git a/lost+found/2b303b8acfaf42e988caebe6dd53c58146f3c8-3ryKPE b/lost+found/2b303b8acfaf42e988caebe6dd53c58146f3c8-3ryKPE new file mode 100644 index 00000000..2116d404 --- /dev/null +++ b/lost+found/2b303b8acfaf42e988caebe6dd53c58146f3c8-3ryKPE @@ -0,0 +1 @@ +xKn1)Giς+=ڲ!3K6Ĭ,DFiC | [\TsR8x"|d,2EZǥuy9ki]~ֶ|>JmZ:%>X6rR^u%Bt魖m*sox%Z \ No newline at end of file diff --git a/lost+found/2b81e60e4356a8a537b525aa090ca8242a1efe-dfQSMu b/lost+found/2b81e60e4356a8a537b525aa090ca8242a1efe-dfQSMu new file mode 100644 index 00000000..b94c66b8 Binary files /dev/null and b/lost+found/2b81e60e4356a8a537b525aa090ca8242a1efe-dfQSMu differ diff --git a/lost+found/2beb47b494f2ba44eda8309a8fc7e9c9a50e25-WKdFlr b/lost+found/2beb47b494f2ba44eda8309a8fc7e9c9a50e25-WKdFlr new file mode 100644 index 00000000..6eacffc6 Binary files /dev/null and b/lost+found/2beb47b494f2ba44eda8309a8fc7e9c9a50e25-WKdFlr differ diff --git a/lost+found/2dfb385224a9c28e9017cdeac07979a859815c-bDregw b/lost+found/2dfb385224a9c28e9017cdeac07979a859815c-bDregw new file mode 100644 index 00000000..6257b355 Binary files /dev/null and b/lost+found/2dfb385224a9c28e9017cdeac07979a859815c-bDregw differ diff --git a/lost+found/2e179c3e35aaf26210096f8d45886ffa758dae-M3sWFR b/lost+found/2e179c3e35aaf26210096f8d45886ffa758dae-M3sWFR new file mode 100644 index 00000000..9541759b Binary files /dev/null and b/lost+found/2e179c3e35aaf26210096f8d45886ffa758dae-M3sWFR differ diff --git a/lost+found/2eb9dff6460162e1a7f2b0c9e780d68dc552d1-V8ioJX b/lost+found/2eb9dff6460162e1a7f2b0c9e780d68dc552d1-V8ioJX new file mode 100644 index 00000000..2f185c16 --- /dev/null +++ b/lost+found/2eb9dff6460162e1a7f2b0c9e780d68dc552d1-V8ioJX @@ -0,0 +1 @@ +x=n1FS#V]{(J*D` @'}zֵ i|N$Ϡz*pZ8Z@Ȏ ԩe"gGYmfFG Ri?ҶmrWT*ipZ[j >-?QJ3wGwmM*zJm}u;[ \ No newline at end of file diff --git a/lost+found/2f755b4c20dfdc0006cb99ba20ebb78cef02a5-G59PLW b/lost+found/2f755b4c20dfdc0006cb99ba20ebb78cef02a5-G59PLW new file mode 100644 index 00000000..26589af0 Binary files /dev/null and b/lost+found/2f755b4c20dfdc0006cb99ba20ebb78cef02a5-G59PLW differ diff --git a/lost+found/2ff2503b3efbc39df5a244871f86901b8db2d5-DyP9SG b/lost+found/2ff2503b3efbc39df5a244871f86901b8db2d5-DyP9SG new file mode 100644 index 00000000..bf3f036a Binary files /dev/null and b/lost+found/2ff2503b3efbc39df5a244871f86901b8db2d5-DyP9SG differ diff --git a/lost+found/300f4f51dbd43e069aa4beb5d8093fc5e39979-FEf2kU b/lost+found/300f4f51dbd43e069aa4beb5d8093fc5e39979-FEf2kU new file mode 100644 index 00000000..8ed182a1 Binary files /dev/null and b/lost+found/300f4f51dbd43e069aa4beb5d8093fc5e39979-FEf2kU differ diff --git a/lost+found/30171ecdd319da081663afd118418bbf2596a9-jMyXgN b/lost+found/30171ecdd319da081663afd118418bbf2596a9-jMyXgN new file mode 100644 index 00000000..2275554e Binary files /dev/null and b/lost+found/30171ecdd319da081663afd118418bbf2596a9-jMyXgN differ diff --git a/lost+found/3052259a416588897d00d468f9a520c2181918-veNfXs b/lost+found/3052259a416588897d00d468f9a520c2181918-veNfXs new file mode 100644 index 00000000..704d3904 Binary files /dev/null and b/lost+found/3052259a416588897d00d468f9a520c2181918-veNfXs differ diff --git a/lost+found/306d032676a68fa846f8c1cac18ad9cf3c7b7b-f6F6YA b/lost+found/306d032676a68fa846f8c1cac18ad9cf3c7b7b-f6F6YA new file mode 100644 index 00000000..4ce4efa5 Binary files /dev/null and b/lost+found/306d032676a68fa846f8c1cac18ad9cf3c7b7b-f6F6YA differ diff --git a/lost+found/30c20e9c29abefbf492a37b87242f38d670507-BNO8Rz b/lost+found/30c20e9c29abefbf492a37b87242f38d670507-BNO8Rz new file mode 100644 index 00000000..d582442a Binary files /dev/null and b/lost+found/30c20e9c29abefbf492a37b87242f38d670507-BNO8Rz differ diff --git a/lost+found/31c7e540eb4e80fdd44c8f0099be7a12258fce-dXATOl b/lost+found/31c7e540eb4e80fdd44c8f0099be7a12258fce-dXATOl new file mode 100644 index 00000000..0d0db03c Binary files /dev/null and b/lost+found/31c7e540eb4e80fdd44c8f0099be7a12258fce-dXATOl differ diff --git a/lost+found/31ecf5455a87dc447f44afb7fb6ab59a370cbf-SmfjRy b/lost+found/31ecf5455a87dc447f44afb7fb6ab59a370cbf-SmfjRy new file mode 100644 index 00000000..cc3553ae --- /dev/null +++ b/lost+found/31ecf5455a87dc447f44afb7fb6ab59a370cbf-SmfjRy @@ -0,0 +1 @@ +x;N@D}6@XݞBdD===Ac3Z Tz*ٖe:XpTULtZ5^KDrɱȠ|qY`]6 )Y81_ON<䌥蜷 @B^|;'&>3 /wݟUzi퓾9'4H ?N*r{c`+Ok֤gi5< Ol \ No newline at end of file diff --git a/lost+found/329f16a471d237df1b23e3c15aef0c9fafd4c2-FEr5Id b/lost+found/329f16a471d237df1b23e3c15aef0c9fafd4c2-FEr5Id new file mode 100644 index 00000000..2d3692c7 Binary files /dev/null and b/lost+found/329f16a471d237df1b23e3c15aef0c9fafd4c2-FEr5Id differ diff --git a/lost+found/335fbe7c327f4af2eaeec3eaaed302b4ce9647-iWCtsa b/lost+found/335fbe7c327f4af2eaeec3eaaed302b4ce9647-iWCtsa new file mode 100644 index 00000000..a262627d Binary files /dev/null and b/lost+found/335fbe7c327f4af2eaeec3eaaed302b4ce9647-iWCtsa differ diff --git a/lost+found/33af5206c66ae0179b39e2a1f45fcb2cedc45b-IBkyMq b/lost+found/33af5206c66ae0179b39e2a1f45fcb2cedc45b-IBkyMq new file mode 100644 index 00000000..c377f9d9 Binary files /dev/null and b/lost+found/33af5206c66ae0179b39e2a1f45fcb2cedc45b-IBkyMq differ diff --git a/lost+found/33fb8b79b2596c7d263e8b29cabac9f97c2474-7DQBUa b/lost+found/33fb8b79b2596c7d263e8b29cabac9f97c2474-7DQBUa new file mode 100644 index 00000000..5e86ded3 Binary files /dev/null and b/lost+found/33fb8b79b2596c7d263e8b29cabac9f97c2474-7DQBUa differ diff --git a/lost+found/347421f2e3673ac6f8019a13f57c0fb83221c0-sbaz3I b/lost+found/347421f2e3673ac6f8019a13f57c0fb83221c0-sbaz3I new file mode 100644 index 00000000..d2332ad6 Binary files /dev/null and b/lost+found/347421f2e3673ac6f8019a13f57c0fb83221c0-sbaz3I differ diff --git a/lost+found/348879e817384699f502cc9cfaba58727afabe-S19R7E b/lost+found/348879e817384699f502cc9cfaba58727afabe-S19R7E new file mode 100644 index 00000000..0a05c1c9 Binary files /dev/null and b/lost+found/348879e817384699f502cc9cfaba58727afabe-S19R7E differ diff --git a/lost+found/3512f903721fd3a8de8542525c73965e46ad0e-GPqAYN b/lost+found/3512f903721fd3a8de8542525c73965e46ad0e-GPqAYN new file mode 100644 index 00000000..c76c5095 Binary files /dev/null and b/lost+found/3512f903721fd3a8de8542525c73965e46ad0e-GPqAYN differ diff --git a/lost+found/3608c15db67162b8b7653457eca62414581893-2pHTif b/lost+found/3608c15db67162b8b7653457eca62414581893-2pHTif new file mode 100644 index 00000000..16a4e8cc --- /dev/null +++ b/lost+found/3608c15db67162b8b7653457eca62414581893-2pHTif @@ -0,0 +1,2 @@ +x=j1FS/-T gcWcdm>M}>ɺ&o3C ,g%8K)21jc5wn +r9ZLJs>'KІFǺxqUno|?kmmi˔i*hК g6dͣ]Z}4XNZ \ No newline at end of file diff --git a/lost+found/36532f7291dbb5450f2a7aa6ad070d8042ce4d-iUOtKQ b/lost+found/36532f7291dbb5450f2a7aa6ad070d8042ce4d-iUOtKQ new file mode 100644 index 00000000..71415f6e Binary files /dev/null and b/lost+found/36532f7291dbb5450f2a7aa6ad070d8042ce4d-iUOtKQ differ diff --git a/lost+found/373acc441af9ffd55c27ce9a31eccaf1cae151-TTErXZ b/lost+found/373acc441af9ffd55c27ce9a31eccaf1cae151-TTErXZ new file mode 100644 index 00000000..4147959e --- /dev/null +++ b/lost+found/373acc441af9ffd55c27ce9a31eccaf1cae151-TTErXZ @@ -0,0 +1,2 @@ +xjC!E+ܗ>tB)ɪdq4"l]{rk||Y[L!{<@q\2XW4M͘IbA; +"ޕYmǟc}?_η}m-I_6:/_:Mߍ5F+wa}MFo޴u\ \ No newline at end of file diff --git a/lost+found/38212def74c78119fbbca1021eef400d9e8dee-cuQNJ4 b/lost+found/38212def74c78119fbbca1021eef400d9e8dee-cuQNJ4 new file mode 100644 index 00000000..3362c0c3 Binary files /dev/null and b/lost+found/38212def74c78119fbbca1021eef400d9e8dee-cuQNJ4 differ diff --git a/lost+found/3bce98800d944552c7259c545bd7ecc6e1d9be-QTGneF b/lost+found/3bce98800d944552c7259c545bd7ecc6e1d9be-QTGneF new file mode 100644 index 00000000..dc522782 Binary files /dev/null and b/lost+found/3bce98800d944552c7259c545bd7ecc6e1d9be-QTGneF differ diff --git a/lost+found/3c2c070085a4f1c2359d62d1f436dcf6620ebf-A6oqPp b/lost+found/3c2c070085a4f1c2359d62d1f436dcf6620ebf-A6oqPp new file mode 100644 index 00000000..48320812 Binary files /dev/null and b/lost+found/3c2c070085a4f1c2359d62d1f436dcf6620ebf-A6oqPp differ diff --git a/lost+found/3d71cac4a324380282c961f37955d361c5173f-sbZGFh b/lost+found/3d71cac4a324380282c961f37955d361c5173f-sbZGFh new file mode 100644 index 00000000..e8835b02 Binary files /dev/null and b/lost+found/3d71cac4a324380282c961f37955d361c5173f-sbZGFh differ diff --git a/lost+found/3ded8057ae95ce71209f6e184f99d390454635-YcwIKl b/lost+found/3ded8057ae95ce71209f6e184f99d390454635-YcwIKl new file mode 100644 index 00000000..2398fa79 Binary files /dev/null and b/lost+found/3ded8057ae95ce71209f6e184f99d390454635-YcwIKl differ diff --git a/lost+found/3e378fc6b9f2beb870fa0998e728ed994d44dd-KEtNue b/lost+found/3e378fc6b9f2beb870fa0998e728ed994d44dd-KEtNue new file mode 100644 index 00000000..c9be39f6 Binary files /dev/null and b/lost+found/3e378fc6b9f2beb870fa0998e728ed994d44dd-KEtNue differ diff --git a/lost+found/3e88c656bb065b87aa250dbc444278da88c00a-xx224g b/lost+found/3e88c656bb065b87aa250dbc444278da88c00a-xx224g new file mode 100644 index 00000000..3c6ba028 Binary files /dev/null and b/lost+found/3e88c656bb065b87aa250dbc444278da88c00a-xx224g differ diff --git a/lost+found/3fb799473dc40b97159f2a07c864b242e9e755-HvS59o b/lost+found/3fb799473dc40b97159f2a07c864b242e9e755-HvS59o new file mode 100644 index 00000000..7f17b1f0 Binary files /dev/null and b/lost+found/3fb799473dc40b97159f2a07c864b242e9e755-HvS59o differ diff --git a/lost+found/3fee433b7a1980e589d14312634fee18e8a9ad-eq3JiR b/lost+found/3fee433b7a1980e589d14312634fee18e8a9ad-eq3JiR new file mode 100644 index 00000000..f08db8fa Binary files /dev/null and b/lost+found/3fee433b7a1980e589d14312634fee18e8a9ad-eq3JiR differ diff --git a/lost+found/3ffa96e3fe1adfb367cc2aabaf23bba96ec456-ZklPtr b/lost+found/3ffa96e3fe1adfb367cc2aabaf23bba96ec456-ZklPtr new file mode 100644 index 00000000..b1151672 Binary files /dev/null and b/lost+found/3ffa96e3fe1adfb367cc2aabaf23bba96ec456-ZklPtr differ diff --git a/lost+found/40152606185b7faae4067779e556596e42c515-qHgzOT b/lost+found/40152606185b7faae4067779e556596e42c515-qHgzOT new file mode 100644 index 00000000..4a76191b Binary files /dev/null and b/lost+found/40152606185b7faae4067779e556596e42c515-qHgzOT differ diff --git a/lost+found/4033c61c0a773a05f3d4a2ca5eec71a870969a-b2tZAk b/lost+found/4033c61c0a773a05f3d4a2ca5eec71a870969a-b2tZAk new file mode 100644 index 00000000..c70edb02 Binary files /dev/null and b/lost+found/4033c61c0a773a05f3d4a2ca5eec71a870969a-b2tZAk differ diff --git a/lost+found/4076fad4ff5bfe7ed43c22f6223fe52454a4e2-h56zzn b/lost+found/4076fad4ff5bfe7ed43c22f6223fe52454a4e2-h56zzn new file mode 100644 index 00000000..d3e5c9a8 Binary files /dev/null and b/lost+found/4076fad4ff5bfe7ed43c22f6223fe52454a4e2-h56zzn differ diff --git a/lost+found/407fa11b708e6d5a1c6f2fab850f43007a5c5b-EjrJa6 b/lost+found/407fa11b708e6d5a1c6f2fab850f43007a5c5b-EjrJa6 new file mode 100644 index 00000000..3bb9a90a Binary files /dev/null and b/lost+found/407fa11b708e6d5a1c6f2fab850f43007a5c5b-EjrJa6 differ diff --git a/lost+found/40e1597d0fad1366efbb1b8c424cf6b990dde6-s060vI b/lost+found/40e1597d0fad1366efbb1b8c424cf6b990dde6-s060vI new file mode 100644 index 00000000..6595beb1 Binary files /dev/null and b/lost+found/40e1597d0fad1366efbb1b8c424cf6b990dde6-s060vI differ diff --git a/lost+found/412cc165380eaa935f0130ce2fcb73972acdb4-PVz9HU b/lost+found/412cc165380eaa935f0130ce2fcb73972acdb4-PVz9HU new file mode 100644 index 00000000..1fc33d7c Binary files /dev/null and b/lost+found/412cc165380eaa935f0130ce2fcb73972acdb4-PVz9HU differ diff --git a/lost+found/42484306afa5cd6b6c8fb531a083f88178ad85-TwfsQV b/lost+found/42484306afa5cd6b6c8fb531a083f88178ad85-TwfsQV new file mode 100644 index 00000000..eb8edad4 --- /dev/null +++ b/lost+found/42484306afa5cd6b6c8fb531a083f88178ad85-TwfsQV @@ -0,0 +1,2 @@ +x1n ESs#aH(]̐E&a!kk۶2@;2:38f&eIr&i5"1%p;t`i{Z)-}O!cD:|G\|6oHzk<:RI)q +ƍ[/C=76ȥCӈW \ No newline at end of file diff --git a/lost+found/425ed8598c8c15e362290f909d7d609aeddcd5-qDxFpy b/lost+found/425ed8598c8c15e362290f909d7d609aeddcd5-qDxFpy new file mode 100644 index 00000000..4aea5085 Binary files /dev/null and b/lost+found/425ed8598c8c15e362290f909d7d609aeddcd5-qDxFpy differ diff --git a/lost+found/432405a70e8e7c353dedcc9021f7b73aa910a6-NANg8t b/lost+found/432405a70e8e7c353dedcc9021f7b73aa910a6-NANg8t new file mode 100644 index 00000000..baf21d34 Binary files /dev/null and b/lost+found/432405a70e8e7c353dedcc9021f7b73aa910a6-NANg8t differ diff --git a/lost+found/466932bc3c7e80e8fea362676dac593105e4c7-bkey1c b/lost+found/466932bc3c7e80e8fea362676dac593105e4c7-bkey1c new file mode 100644 index 00000000..d595ace9 Binary files /dev/null and b/lost+found/466932bc3c7e80e8fea362676dac593105e4c7-bkey1c differ diff --git a/lost+found/46faf23803c8866ba60ee1c186e67878542cd9-nbWWdq b/lost+found/46faf23803c8866ba60ee1c186e67878542cd9-nbWWdq new file mode 100644 index 00000000..d08bef5e Binary files /dev/null and b/lost+found/46faf23803c8866ba60ee1c186e67878542cd9-nbWWdq differ diff --git a/lost+found/47aaa1797e6183705b4ed5f065ac89ac5cd6b1-AgXYn8 b/lost+found/47aaa1797e6183705b4ed5f065ac89ac5cd6b1-AgXYn8 new file mode 100644 index 00000000..c8bdafff Binary files /dev/null and b/lost+found/47aaa1797e6183705b4ed5f065ac89ac5cd6b1-AgXYn8 differ diff --git a/lost+found/47ba0ed36a4b5763e7b8047f843568fb1b98fe-1nsSan b/lost+found/47ba0ed36a4b5763e7b8047f843568fb1b98fe-1nsSan new file mode 100644 index 00000000..ea23b108 Binary files /dev/null and b/lost+found/47ba0ed36a4b5763e7b8047f843568fb1b98fe-1nsSan differ diff --git a/lost+found/482009bcbfbb89ab7ff677fe49b46882e4e2ae-fXGkCO b/lost+found/482009bcbfbb89ab7ff677fe49b46882e4e2ae-fXGkCO new file mode 100644 index 00000000..597807ef Binary files /dev/null and b/lost+found/482009bcbfbb89ab7ff677fe49b46882e4e2ae-fXGkCO differ diff --git a/lost+found/489241127abf8e86e85371e632b2d401a84b46-I3gzS6 b/lost+found/489241127abf8e86e85371e632b2d401a84b46-I3gzS6 new file mode 100644 index 00000000..fa1f0b4c --- /dev/null +++ b/lost+found/489241127abf8e86e85371e632b2d401a84b46-I3gzS6 @@ -0,0 +1,3 @@ +x=0} +񿥧' wX;kD80݌fF_y.K6!r]C (x@ +.+cwhXסPk!O荖FTI _xkx=^'J4,6@"(BB;,f%dzkZ^sޠZp \ No newline at end of file diff --git a/lost+found/48a003f1e503f2465a88c43e4d1f628ad2a7da-UC8MfV b/lost+found/48a003f1e503f2465a88c43e4d1f628ad2a7da-UC8MfV new file mode 100644 index 00000000..ffc0f055 Binary files /dev/null and b/lost+found/48a003f1e503f2465a88c43e4d1f628ad2a7da-UC8MfV differ diff --git a/lost+found/48d746a5b9e830216df4be1dd89829ca1d411a-qak2g4 b/lost+found/48d746a5b9e830216df4be1dd89829ca1d411a-qak2g4 new file mode 100644 index 00000000..abb467f1 Binary files /dev/null and b/lost+found/48d746a5b9e830216df4be1dd89829ca1d411a-qak2g4 differ diff --git a/lost+found/4bbfd2d64b230e6aed6f237fe71903f32baa0a-AjZyyt b/lost+found/4bbfd2d64b230e6aed6f237fe71903f32baa0a-AjZyyt new file mode 100644 index 00000000..b502ec17 Binary files /dev/null and b/lost+found/4bbfd2d64b230e6aed6f237fe71903f32baa0a-AjZyyt differ diff --git a/lost+found/4bdc812a3326ced2936bdb5c75e7175531b3a2-Tt95rX b/lost+found/4bdc812a3326ced2936bdb5c75e7175531b3a2-Tt95rX new file mode 100644 index 00000000..bf259d9b Binary files /dev/null and b/lost+found/4bdc812a3326ced2936bdb5c75e7175531b3a2-Tt95rX differ diff --git a/lost+found/4bf9557af48d79713349bf157c55c671924d28-ZTbmSh b/lost+found/4bf9557af48d79713349bf157c55c671924d28-ZTbmSh new file mode 100644 index 00000000..697a4b3a Binary files /dev/null and b/lost+found/4bf9557af48d79713349bf157c55c671924d28-ZTbmSh differ diff --git a/lost+found/4c66c42d2b5457f370a3638869a5e420db8e98-gGSQUf b/lost+found/4c66c42d2b5457f370a3638869a5e420db8e98-gGSQUf new file mode 100644 index 00000000..5e922002 Binary files /dev/null and b/lost+found/4c66c42d2b5457f370a3638869a5e420db8e98-gGSQUf differ diff --git a/lost+found/4c881c6a4da37ad336aba05e0dbb64b950c076-tussJm b/lost+found/4c881c6a4da37ad336aba05e0dbb64b950c076-tussJm new file mode 100644 index 00000000..0c8ee60a --- /dev/null +++ b/lost+found/4c881c6a4da37ad336aba05e0dbb64b950c076-tussJm @@ -0,0 +1,2 @@ +x;n0SV@$&wH*&`q *pW̛$Vh/m`F\e&v6YG%:uLbXgX +cgkg]$qñUٯ䭗YO}nSmL{:O1MKdzC03JQ-R_-zkԥJש1`X \ No newline at end of file diff --git a/lost+found/4dbb7c5de61d8c0909216fa1db58c171ddefe3-VRYHsk b/lost+found/4dbb7c5de61d8c0909216fa1db58c171ddefe3-VRYHsk new file mode 100644 index 00000000..34df1bb0 Binary files /dev/null and b/lost+found/4dbb7c5de61d8c0909216fa1db58c171ddefe3-VRYHsk differ diff --git a/lost+found/4dc0fac9bda5ff3b4f0e846d7a51aea1174cd5-Ou8DgW b/lost+found/4dc0fac9bda5ff3b4f0e846d7a51aea1174cd5-Ou8DgW new file mode 100644 index 00000000..7d156d59 Binary files /dev/null and b/lost+found/4dc0fac9bda5ff3b4f0e846d7a51aea1174cd5-Ou8DgW differ diff --git a/lost+found/4dc8a206a682e777e59448d645d1d3f1b11069-YfuhjI b/lost+found/4dc8a206a682e777e59448d645d1d3f1b11069-YfuhjI new file mode 100644 index 00000000..9f5e92f2 Binary files /dev/null and b/lost+found/4dc8a206a682e777e59448d645d1d3f1b11069-YfuhjI differ diff --git a/lost+found/4dcdd2ff5f31263ffc0cb3f104eacf9c3a67b1-AXSIvV b/lost+found/4dcdd2ff5f31263ffc0cb3f104eacf9c3a67b1-AXSIvV new file mode 100644 index 00000000..d2d4f33a Binary files /dev/null and b/lost+found/4dcdd2ff5f31263ffc0cb3f104eacf9c3a67b1-AXSIvV differ diff --git a/lost+found/4e0dd8eb3a670a0e17e6f1425f33a2a2f6b119-xjaibd b/lost+found/4e0dd8eb3a670a0e17e6f1425f33a2a2f6b119-xjaibd new file mode 100644 index 00000000..241c1d90 Binary files /dev/null and b/lost+found/4e0dd8eb3a670a0e17e6f1425f33a2a2f6b119-xjaibd differ diff --git a/lost+found/4e0e5aebb133bdb0ef646e69b5d48762028791-o6g9Fu b/lost+found/4e0e5aebb133bdb0ef646e69b5d48762028791-o6g9Fu new file mode 100644 index 00000000..2506d6be Binary files /dev/null and b/lost+found/4e0e5aebb133bdb0ef646e69b5d48762028791-o6g9Fu differ diff --git a/lost+found/50d14d25154cbc8d79da8966f266beecf99198-CKG7R3 b/lost+found/50d14d25154cbc8d79da8966f266beecf99198-CKG7R3 new file mode 100644 index 00000000..0c08725c Binary files /dev/null and b/lost+found/50d14d25154cbc8d79da8966f266beecf99198-CKG7R3 differ diff --git a/lost+found/50fbfe58f179c40cc8a9dd5164c4f85b357948-YWoTVW b/lost+found/50fbfe58f179c40cc8a9dd5164c4f85b357948-YWoTVW new file mode 100644 index 00000000..4048ced2 Binary files /dev/null and b/lost+found/50fbfe58f179c40cc8a9dd5164c4f85b357948-YWoTVW differ diff --git a/lost+found/5134bac33b52aab5eb700b0ce96fae6770b9b5-IIvpVS b/lost+found/5134bac33b52aab5eb700b0ce96fae6770b9b5-IIvpVS new file mode 100644 index 00000000..1312f78e Binary files /dev/null and b/lost+found/5134bac33b52aab5eb700b0ce96fae6770b9b5-IIvpVS differ diff --git a/lost+found/522a5f12a2f54c78ba421983c26719063fbd20-VEt4xU b/lost+found/522a5f12a2f54c78ba421983c26719063fbd20-VEt4xU new file mode 100644 index 00000000..41c663ad Binary files /dev/null and b/lost+found/522a5f12a2f54c78ba421983c26719063fbd20-VEt4xU differ diff --git a/lost+found/52a52ada7686ec9f6cf4cdeca91df932799fc4-vEliKt b/lost+found/52a52ada7686ec9f6cf4cdeca91df932799fc4-vEliKt new file mode 100644 index 00000000..ae93beca Binary files /dev/null and b/lost+found/52a52ada7686ec9f6cf4cdeca91df932799fc4-vEliKt differ diff --git a/lost+found/53046aa43d4b7e3f917b5c8d616b676d6b08a3-eS0Kke b/lost+found/53046aa43d4b7e3f917b5c8d616b676d6b08a3-eS0Kke new file mode 100644 index 00000000..efadee99 Binary files /dev/null and b/lost+found/53046aa43d4b7e3f917b5c8d616b676d6b08a3-eS0Kke differ diff --git a/lost+found/53101bb4498bb95560d8e142b243fa22f2541b-87Bnl4 b/lost+found/53101bb4498bb95560d8e142b243fa22f2541b-87Bnl4 new file mode 100644 index 00000000..c8581aaf --- /dev/null +++ b/lost+found/53101bb4498bb95560d8e142b243fa22f2541b-87Bnl4 @@ -0,0 +1,4 @@ +xmPn055"JS [V줢^cEbev;(`~yCdV ~=7*H{og/1jRU[\YR{8Ct +K1E , +MlΚ7f1u֟eO~5sFX1M`:Mt^f{eE{Ső +{CN?Ȁ?h:=ז(b6Ubu9ŬB\ \ No newline at end of file diff --git a/lost+found/536f0efbf0112142768705a25d5fdd372d27bd-ZXyT62 b/lost+found/536f0efbf0112142768705a25d5fdd372d27bd-ZXyT62 new file mode 100644 index 00000000..15bada8d Binary files /dev/null and b/lost+found/536f0efbf0112142768705a25d5fdd372d27bd-ZXyT62 differ diff --git a/lost+found/5475fde20a4515b848c12395a5406185edb5cb-0F0UhE b/lost+found/5475fde20a4515b848c12395a5406185edb5cb-0F0UhE new file mode 100644 index 00000000..d20ca3b5 --- /dev/null +++ b/lost+found/5475fde20a4515b848c12395a5406185edb5cb-0F0UhE @@ -0,0 +1 @@ +x;n0DSNek2&`q *[pcYat᣷DK>$=e֔ 44nSԆYyFF-hL~ٳfb8vEEkHTwov}J-n(5˰u b]Yv8"*~6H}]|iRBn{'^z[L \ No newline at end of file diff --git a/lost+found/550a9808c08733e8b066bd5177b70e652bc77f-1iehCG b/lost+found/550a9808c08733e8b066bd5177b70e652bc77f-1iehCG new file mode 100644 index 00000000..4379507d Binary files /dev/null and b/lost+found/550a9808c08733e8b066bd5177b70e652bc77f-1iehCG differ diff --git a/lost+found/555db5f9acdd2b7d7ea14f2c3fa486faadbc60-Ruc0k2 b/lost+found/555db5f9acdd2b7d7ea14f2c3fa486faadbc60-Ruc0k2 new file mode 100644 index 00000000..2749966a Binary files /dev/null and b/lost+found/555db5f9acdd2b7d7ea14f2c3fa486faadbc60-Ruc0k2 differ diff --git a/lost+found/557b73461766f643e7d7c44d33533b634f9d97-w1Nfid b/lost+found/557b73461766f643e7d7c44d33533b634f9d97-w1Nfid new file mode 100644 index 00000000..33346fe4 --- /dev/null +++ b/lost+found/557b73461766f643e7d7c44d33533b634f9d97-w1Nfid @@ -0,0 +1,4 @@ +xuTn0 9_SA@w +v(zl:Q $;ɆHY  I(zڒiZW.y2!-JU*|c,( +|~c1%SK&e]Ш)MkikJQE^?pSςOk8sb<@ g&lNpgs}ܣ0,*)u-gXJ\c켃V\UQKxy}y vkLLk 3Z9Bs or' {f.#Eʨ O0AZU3U +㷺,:+۱b&-XL4=J)w,WWI9=TB*)Yi <3Lyz޵%/y ?Ҟ6ďہL˟@\h􂖼0TM F,Glg4$Vh4ag6cё[1 _HFD5ߞYpR ]Aq>u15FH;G]Vk \ No newline at end of file diff --git a/lost+found/55dfbfb9a28e246819ac83d7995e76e981edbf-1aTzAp b/lost+found/55dfbfb9a28e246819ac83d7995e76e981edbf-1aTzAp new file mode 100644 index 00000000..928cbff4 Binary files /dev/null and b/lost+found/55dfbfb9a28e246819ac83d7995e76e981edbf-1aTzAp differ diff --git a/lost+found/5607c6ff162a8ff195bbe6079a2604e35275e0-Czelfi b/lost+found/5607c6ff162a8ff195bbe6079a2604e35275e0-Czelfi new file mode 100644 index 00000000..7a4b9a23 Binary files /dev/null and b/lost+found/5607c6ff162a8ff195bbe6079a2604e35275e0-Czelfi differ diff --git a/lost+found/574fa9d92094f33cc14c643fc9be09c09238e9-ruG2uU b/lost+found/574fa9d92094f33cc14c643fc9be09c09238e9-ruG2uU new file mode 100644 index 00000000..b98b5f75 Binary files /dev/null and b/lost+found/574fa9d92094f33cc14c643fc9be09c09238e9-ruG2uU differ diff --git a/lost+found/584555a384c45aaaf352620cac17835e66e72e-sn9MBu b/lost+found/584555a384c45aaaf352620cac17835e66e72e-sn9MBu new file mode 100644 index 00000000..59cf2706 Binary files /dev/null and b/lost+found/584555a384c45aaaf352620cac17835e66e72e-sn9MBu differ diff --git a/lost+found/588536268e5dcfea40e693e8c45fee0ed38bfb-Jhl70j b/lost+found/588536268e5dcfea40e693e8c45fee0ed38bfb-Jhl70j new file mode 100644 index 00000000..0d6acf4a --- /dev/null +++ b/lost+found/588536268e5dcfea40e693e8c45fee0ed38bfb-Jhl70j @@ -0,0 +1,3 @@ +x1n!ESs +(+f(,70H^0[8&Hm+Ca}Y;Yܺ$#@&]k6-pP\e2^a2G+ǩu}>kiUr}STi4%.c=sH}m8 +ҩZ~ت޶Nug[ \ No newline at end of file diff --git a/lost+found/58a18d18e9e0f113e0475b264f3f3bb9ce347f-3GvkWa b/lost+found/58a18d18e9e0f113e0475b264f3f3bb9ce347f-3GvkWa new file mode 100644 index 00000000..dec16af8 Binary files /dev/null and b/lost+found/58a18d18e9e0f113e0475b264f3f3bb9ce347f-3GvkWa differ diff --git a/lost+found/58e4f4f9972cf8893d1025f5849636eaa9bb30-Lgbhjb b/lost+found/58e4f4f9972cf8893d1025f5849636eaa9bb30-Lgbhjb new file mode 100644 index 00000000..c20741ad Binary files /dev/null and b/lost+found/58e4f4f9972cf8893d1025f5849636eaa9bb30-Lgbhjb differ diff --git a/lost+found/5a30221ced184469c8e92fe966d5cac10187c5-shaTZE b/lost+found/5a30221ced184469c8e92fe966d5cac10187c5-shaTZE new file mode 100644 index 00000000..721fa168 Binary files /dev/null and b/lost+found/5a30221ced184469c8e92fe966d5cac10187c5-shaTZE differ diff --git a/lost+found/5ae249c2c903da34b392808b0613a218f89f6e-UUvIM0 b/lost+found/5ae249c2c903da34b392808b0613a218f89f6e-UUvIM0 new file mode 100644 index 00000000..1cd29380 Binary files /dev/null and b/lost+found/5ae249c2c903da34b392808b0613a218f89f6e-UUvIM0 differ diff --git a/lost+found/5b60b246b8e2670b7219c4894a403ca0accd69-gdlzZG b/lost+found/5b60b246b8e2670b7219c4894a403ca0accd69-gdlzZG new file mode 100644 index 00000000..dad31716 Binary files /dev/null and b/lost+found/5b60b246b8e2670b7219c4894a403ca0accd69-gdlzZG differ diff --git a/lost+found/5bc1ce1f4c0b4b1a541f0e6037d3bae3c63847-P52kjR b/lost+found/5bc1ce1f4c0b4b1a541f0e6037d3bae3c63847-P52kjR new file mode 100644 index 00000000..6a6ccbca Binary files /dev/null and b/lost+found/5bc1ce1f4c0b4b1a541f0e6037d3bae3c63847-P52kjR differ diff --git a/lost+found/5d4c8954f1ec0f8083290193653a70b201d36e-37OMXJ b/lost+found/5d4c8954f1ec0f8083290193653a70b201d36e-37OMXJ new file mode 100644 index 00000000..4997f097 Binary files /dev/null and b/lost+found/5d4c8954f1ec0f8083290193653a70b201d36e-37OMXJ differ diff --git a/lost+found/5e9121277fd70d11b3ad1be529ab59ca84ebcc-LKgd3Z b/lost+found/5e9121277fd70d11b3ad1be529ab59ca84ebcc-LKgd3Z new file mode 100644 index 00000000..445a0e4b Binary files /dev/null and b/lost+found/5e9121277fd70d11b3ad1be529ab59ca84ebcc-LKgd3Z differ diff --git a/lost+found/5ea58f6bb6d66fa8fb920d18bcf32c6abfefb0-84LiKe b/lost+found/5ea58f6bb6d66fa8fb920d18bcf32c6abfefb0-84LiKe new file mode 100644 index 00000000..e4b1cf1e --- /dev/null +++ b/lost+found/5ea58f6bb6d66fa8fb920d18bcf32c6abfefb0-84LiKe @@ -0,0 +1 @@ +xϽ 0ajOq=?8Bt@{R r+1aot5b(&v]AޛYOA<vNo$],[$[ѡu#\ 'z$pLH9i~PmރJvaTWemIf6VU \ No newline at end of file diff --git a/lost+found/5ed34c587398fd6761f1e7f08170cda8f72a5a-l0y6h1 b/lost+found/5ed34c587398fd6761f1e7f08170cda8f72a5a-l0y6h1 new file mode 100644 index 00000000..17dee4bb Binary files /dev/null and b/lost+found/5ed34c587398fd6761f1e7f08170cda8f72a5a-l0y6h1 differ diff --git a/lost+found/5f0738ea49dcf7c5a75a3d2b2e10049ac7e55a-yPerkA b/lost+found/5f0738ea49dcf7c5a75a3d2b2e10049ac7e55a-yPerkA new file mode 100644 index 00000000..856953e0 Binary files /dev/null and b/lost+found/5f0738ea49dcf7c5a75a3d2b2e10049ac7e55a-yPerkA differ diff --git a/lost+found/6045a156f873ea4d26887ddec19ddf8ac4895f-YN7vZT b/lost+found/6045a156f873ea4d26887ddec19ddf8ac4895f-YN7vZT new file mode 100644 index 00000000..9608df88 Binary files /dev/null and b/lost+found/6045a156f873ea4d26887ddec19ddf8ac4895f-YN7vZT differ diff --git a/lost+found/608bba74fbe48b714912985e58aab920a2e6ca-nHlwIz b/lost+found/608bba74fbe48b714912985e58aab920a2e6ca-nHlwIz new file mode 100644 index 00000000..63a2b15d Binary files /dev/null and b/lost+found/608bba74fbe48b714912985e58aab920a2e6ca-nHlwIz differ diff --git a/lost+found/60b702053b7699d1f461fc9be1b257fe4043b0-HYIbpF b/lost+found/60b702053b7699d1f461fc9be1b257fe4043b0-HYIbpF new file mode 100644 index 00000000..5f4b7050 Binary files /dev/null and b/lost+found/60b702053b7699d1f461fc9be1b257fe4043b0-HYIbpF differ diff --git a/lost+found/611b95a3ec3d49eb5787d87280fd8e74dc8c56-eAoMbL b/lost+found/611b95a3ec3d49eb5787d87280fd8e74dc8c56-eAoMbL new file mode 100644 index 00000000..0c4cfb32 Binary files /dev/null and b/lost+found/611b95a3ec3d49eb5787d87280fd8e74dc8c56-eAoMbL differ diff --git a/lost+found/62150acf05142069932cf5680e5d1045de4b20-v0izMx b/lost+found/62150acf05142069932cf5680e5d1045de4b20-v0izMx new file mode 100644 index 00000000..36c63b63 Binary files /dev/null and b/lost+found/62150acf05142069932cf5680e5d1045de4b20-v0izMx differ diff --git a/lost+found/624b77cfbc6694709bed4a5594feba4a100749-SCt1NU b/lost+found/624b77cfbc6694709bed4a5594feba4a100749-SCt1NU new file mode 100644 index 00000000..da662ec6 Binary files /dev/null and b/lost+found/624b77cfbc6694709bed4a5594feba4a100749-SCt1NU differ diff --git a/lost+found/63f4a97f5407bc2854b89a1788898522519819-utmHtf b/lost+found/63f4a97f5407bc2854b89a1788898522519819-utmHtf new file mode 100644 index 00000000..fee41536 Binary files /dev/null and b/lost+found/63f4a97f5407bc2854b89a1788898522519819-utmHtf differ diff --git a/lost+found/64f2daf34fc4020c3e1926d529ffce0d59a78e-R49cCI b/lost+found/64f2daf34fc4020c3e1926d529ffce0d59a78e-R49cCI new file mode 100644 index 00000000..1bae9acd --- /dev/null +++ b/lost+found/64f2daf34fc4020c3e1926d529ffce0d59a78e-R49cCI @@ -0,0 +1,2 @@ +x1N1E}#V0RHpXڑ-4'}=mZ4zΠSԤRzALȳd +(ٳ5WEę|@%1siN!Y!'aox~m78r+<ԥM^&I+X1z{ ;F#VEvzlֿN 5[ \ No newline at end of file diff --git a/lost+found/6508f130e0435484ab3597d53537d7d97426a4-h6TwsT b/lost+found/6508f130e0435484ab3597d53537d7d97426a4-h6TwsT new file mode 100644 index 00000000..09c3e677 --- /dev/null +++ b/lost+found/6508f130e0435484ab3597d53537d7d97426a4-h6TwsT @@ -0,0 +1,2 @@ +x;n0Sw H*MȘ5hpNoMr^1ol[^F'g E`VʼnKd+RӅ{n +gvA&G>Hk4J<+p}plU+7yr}S\[yO,vAMW<^3w}ƣ&Z:uiҠt:;Z \ No newline at end of file diff --git a/lost+found/651a560c5a5e2eb0f769e32e8a411693942bfb-4h4t3p b/lost+found/651a560c5a5e2eb0f769e32e8a411693942bfb-4h4t3p new file mode 100644 index 00000000..7738539a Binary files /dev/null and b/lost+found/651a560c5a5e2eb0f769e32e8a411693942bfb-4h4t3p differ diff --git a/lost+found/654e13319d2f14edc0226233a1510ebc6c29de-5qbyKt b/lost+found/654e13319d2f14edc0226233a1510ebc6c29de-5qbyKt new file mode 100644 index 00000000..01627787 Binary files /dev/null and b/lost+found/654e13319d2f14edc0226233a1510ebc6c29de-5qbyKt differ diff --git a/lost+found/662b5a598b9733dab74445d8eb9c25c13149fe-rMtjIO b/lost+found/662b5a598b9733dab74445d8eb9c25c13149fe-rMtjIO new file mode 100644 index 00000000..180e94bd Binary files /dev/null and b/lost+found/662b5a598b9733dab74445d8eb9c25c13149fe-rMtjIO differ diff --git a/lost+found/664b7a0e53ac0d627f59db2a4b39c753e9f365-0WCadk b/lost+found/664b7a0e53ac0d627f59db2a4b39c753e9f365-0WCadk new file mode 100644 index 00000000..0ea63724 Binary files /dev/null and b/lost+found/664b7a0e53ac0d627f59db2a4b39c753e9f365-0WCadk differ diff --git a/lost+found/677806592fcb189cb5683c7d143fc969d86e48-ei0fqC b/lost+found/677806592fcb189cb5683c7d143fc969d86e48-ei0fqC new file mode 100644 index 00000000..2a539664 Binary files /dev/null and b/lost+found/677806592fcb189cb5683c7d143fc969d86e48-ei0fqC differ diff --git a/lost+found/678248ebeb85580882695503ffcee6936a61e4-7YYRJ5 b/lost+found/678248ebeb85580882695503ffcee6936a61e4-7YYRJ5 new file mode 100644 index 00000000..96588b8a Binary files /dev/null and b/lost+found/678248ebeb85580882695503ffcee6936a61e4-7YYRJ5 differ diff --git a/lost+found/67a66944c56f140bd623ecb148262527577908-VXleca b/lost+found/67a66944c56f140bd623ecb148262527577908-VXleca new file mode 100644 index 00000000..343feaeb Binary files /dev/null and b/lost+found/67a66944c56f140bd623ecb148262527577908-VXleca differ diff --git a/lost+found/683c2dffce2079689a3a4414d1b8feb414aaa8-TRb4Cu b/lost+found/683c2dffce2079689a3a4414d1b8feb414aaa8-TRb4Cu new file mode 100644 index 00000000..ad5b985d --- /dev/null +++ b/lost+found/683c2dffce2079689a3a4414d1b8feb414aaa8-TRb4Cu @@ -0,0 +1,3 @@ +x=n1F} +ޱ(J&w,d9}M@^uCw3kyA632ВRmv5tnCJ +g,39(. ,&2XGq?Ve&S}"Ӗ.SHS: J/mFMvoܥǔKS`[M \ No newline at end of file diff --git a/lost+found/68feba6a2aa8278e6c5a10f43226d8f3fc9029-agfP4F b/lost+found/68feba6a2aa8278e6c5a10f43226d8f3fc9029-agfP4F new file mode 100644 index 00000000..f0a9c52a Binary files /dev/null and b/lost+found/68feba6a2aa8278e6c5a10f43226d8f3fc9029-agfP4F differ diff --git a/lost+found/690c79c33e228eb3ae1f8e7c8cba5c88ac08a7-kIiAzL b/lost+found/690c79c33e228eb3ae1f8e7c8cba5c88ac08a7-kIiAzL new file mode 100644 index 00000000..17e6d661 Binary files /dev/null and b/lost+found/690c79c33e228eb3ae1f8e7c8cba5c88ac08a7-kIiAzL differ diff --git a/lost+found/69a27c53c0f013890e25a224a369964211d065-YAL5E8 b/lost+found/69a27c53c0f013890e25a224a369964211d065-YAL5E8 new file mode 100644 index 00000000..691814b5 Binary files /dev/null and b/lost+found/69a27c53c0f013890e25a224a369964211d065-YAL5E8 differ diff --git a/lost+found/69b932edb20430b03d9fc18a9d46835e968ffd-VlTc68 b/lost+found/69b932edb20430b03d9fc18a9d46835e968ffd-VlTc68 new file mode 100644 index 00000000..5dce424b --- /dev/null +++ b/lost+found/69b932edb20430b03d9fc18a9d46835e968ffd-VlTc68 @@ -0,0 +1,2 @@ +x=n1FSQVZ"M0%F[A49@ӣeهљ5[r-E6zhc11+vC +^>!$T 81'cmpnܺ<O&j|6۴eB"K^{SR޹}$h+Bvt [S<X[x \ No newline at end of file diff --git a/lost+found/6a2dc67a31825ae52412ec52aaed056ec0dee0-t4Ux5U b/lost+found/6a2dc67a31825ae52412ec52aaed056ec0dee0-t4Ux5U new file mode 100644 index 00000000..b0c5f398 Binary files /dev/null and b/lost+found/6a2dc67a31825ae52412ec52aaed056ec0dee0-t4Ux5U differ diff --git a/lost+found/6a7703dc27d4babdedccce26a63e617595c57f-Z3PXno b/lost+found/6a7703dc27d4babdedccce26a63e617595c57f-Z3PXno new file mode 100644 index 00000000..4c54b262 Binary files /dev/null and b/lost+found/6a7703dc27d4babdedccce26a63e617595c57f-Z3PXno differ diff --git a/lost+found/6b0324d2246a75d2f3feddae999a09df45b556-VDwjoh b/lost+found/6b0324d2246a75d2f3feddae999a09df45b556-VDwjoh new file mode 100644 index 00000000..f065c33a Binary files /dev/null and b/lost+found/6b0324d2246a75d2f3feddae999a09df45b556-VDwjoh differ diff --git a/lost+found/6b0b0d2a949041e8f10bc242efd74c30a67cfe-HHyPB7 b/lost+found/6b0b0d2a949041e8f10bc242efd74c30a67cfe-HHyPB7 new file mode 100644 index 00000000..75a85b5f --- /dev/null +++ b/lost+found/6b0b0d2a949041e8f10bc242efd74c30a67cfe-HHyPB7 @@ -0,0 +1,2 @@ +x;0}h?@k#нif^Ւ3D6afvdTkPV'$ ڭ3+M%,&9 Y[|D.$ +ir[T?7OBp>]-P"? { K \ No newline at end of file diff --git a/lost+found/6b5c604b5341b7d95564ba30121c10e6c6fc09-fCB4mQ b/lost+found/6b5c604b5341b7d95564ba30121c10e6c6fc09-fCB4mQ new file mode 100644 index 00000000..32c89feb --- /dev/null +++ b/lost+found/6b5c604b5341b7d95564ba30121c10e6c6fc09-fCB4mQ @@ -0,0 +1,2 @@ +xj0ES+mhF +! [$0v ~,]cҤM{9Εe8OO[U5]1a{/B =d̢=hmn\u ;9R2`'فpa_w)X!&EMt!CPRv[|}\aW:/}ck,.c&}3@6`#y`m#{[|jIg!=U?/z 5?{mW \ No newline at end of file diff --git a/lost+found/6bfb91a08e41197559a9143e22accc8ab2e2cd-7uTo2Y b/lost+found/6bfb91a08e41197559a9143e22accc8ab2e2cd-7uTo2Y new file mode 100644 index 00000000..999e1453 Binary files /dev/null and b/lost+found/6bfb91a08e41197559a9143e22accc8ab2e2cd-7uTo2Y differ diff --git a/lost+found/6c5ccaa916bed7af4c4d6817f3d382f7d68995-XYOsJN b/lost+found/6c5ccaa916bed7af4c4d6817f3d382f7d68995-XYOsJN new file mode 100644 index 00000000..88ccf949 Binary files /dev/null and b/lost+found/6c5ccaa916bed7af4c4d6817f3d382f7d68995-XYOsJN differ diff --git a/lost+found/6cea2e6fc0182bd192b09b03a34f02e51667bf-WuGGFT b/lost+found/6cea2e6fc0182bd192b09b03a34f02e51667bf-WuGGFT new file mode 100644 index 00000000..38bbdb3a Binary files /dev/null and b/lost+found/6cea2e6fc0182bd192b09b03a34f02e51667bf-WuGGFT differ diff --git a/lost+found/6db9b29b51fa446a3f73856e663d6c7c189c92-7nhVXi b/lost+found/6db9b29b51fa446a3f73856e663d6c7c189c92-7nhVXi new file mode 100644 index 00000000..4cd7149c Binary files /dev/null and b/lost+found/6db9b29b51fa446a3f73856e663d6c7c189c92-7nhVXi differ diff --git a/lost+found/6e18827d1c5b0642d9ba2e2bfaa7c07d504c5e-dMGf29 b/lost+found/6e18827d1c5b0642d9ba2e2bfaa7c07d504c5e-dMGf29 new file mode 100644 index 00000000..0fc798ba --- /dev/null +++ b/lost+found/6e18827d1c5b0642d9ba2e2bfaa7c07d504c5e-dMGf29 @@ -0,0 +1 @@ +x+)JMU05d040031Qp*MOH,M,0J,Kdi,c=+~f\, Yz70|U]W#E1Dح׽;:Nk ,M 7p=7KyH*jkCd%;KqgU Dݏ[6&4e&'os8.UƦPu@+I-JKLN(ޥi*sY#"V'&@Z[Z0Cx]ǜ-Ie^}Z4&5$5$6ŽW:YS4tˠf$&&Ban:k-[d+,pT-uRu4O,[ \ No newline at end of file diff --git a/lost+found/70446955578e2c75c736cee5747a2bca96c502-PrM1nD b/lost+found/70446955578e2c75c736cee5747a2bca96c502-PrM1nD new file mode 100644 index 00000000..8591bd3d Binary files /dev/null and b/lost+found/70446955578e2c75c736cee5747a2bca96c502-PrM1nD differ diff --git a/lost+found/71df6aab8c28af9225c27fbdba05d4668907b2-AovIms b/lost+found/71df6aab8c28af9225c27fbdba05d4668907b2-AovIms new file mode 100644 index 00000000..84111efd Binary files /dev/null and b/lost+found/71df6aab8c28af9225c27fbdba05d4668907b2-AovIms differ diff --git a/lost+found/7256861ea3fbe3390173d52309e7e7095f365d-6Y13vG b/lost+found/7256861ea3fbe3390173d52309e7e7095f365d-6Y13vG new file mode 100644 index 00000000..a2af67fb Binary files /dev/null and b/lost+found/7256861ea3fbe3390173d52309e7e7095f365d-6Y13vG differ diff --git a/lost+found/725c0ff9a96f3701b35939c6d35471e6849fed-NETpoB b/lost+found/725c0ff9a96f3701b35939c6d35471e6849fed-NETpoB new file mode 100644 index 00000000..cdea0845 --- /dev/null +++ b/lost+found/725c0ff9a96f3701b35939c6d35471e6849fed-NETpoB @@ -0,0 +1,4 @@ +x=n!FSs +(+~(J*M0 #y sz[nrާGmmJ5cN1XsΆH& 9V +#]#qQV +Aô +*kN p'}8Uw~r}Ӟze󂴤!ƃV`J z#Op6[~]_[ \ No newline at end of file diff --git a/lost+found/72958ef78baa7e890860365c48e66bb1af2541-pdrvvL b/lost+found/72958ef78baa7e890860365c48e66bb1af2541-pdrvvL new file mode 100644 index 00000000..687181f5 Binary files /dev/null and b/lost+found/72958ef78baa7e890860365c48e66bb1af2541-pdrvvL differ diff --git a/lost+found/72c9d071f30c6b4f8eb501b2638226eadd115e-odZ8Tv b/lost+found/72c9d071f30c6b4f8eb501b2638226eadd115e-odZ8Tv new file mode 100644 index 00000000..c3ca1280 Binary files /dev/null and b/lost+found/72c9d071f30c6b4f8eb501b2638226eadd115e-odZ8Tv differ diff --git a/lost+found/74bff113ed96e5f03c2b7a0418eeedc1887fbc-fSDuGv b/lost+found/74bff113ed96e5f03c2b7a0418eeedc1887fbc-fSDuGv new file mode 100644 index 00000000..3d0212ef Binary files /dev/null and b/lost+found/74bff113ed96e5f03c2b7a0418eeedc1887fbc-fSDuGv differ diff --git a/lost+found/7520c1835a6309c819ca4464cae893ca5ade03-Yjf9eA b/lost+found/7520c1835a6309c819ca4464cae893ca5ade03-Yjf9eA new file mode 100644 index 00000000..55dfd34f Binary files /dev/null and b/lost+found/7520c1835a6309c819ca4464cae893ca5ade03-Yjf9eA differ diff --git a/lost+found/75f9b21b6fb31509510720188db074bca4c3e3-6QDZ0j b/lost+found/75f9b21b6fb31509510720188db074bca4c3e3-6QDZ0j new file mode 100644 index 00000000..2f82698d Binary files /dev/null and b/lost+found/75f9b21b6fb31509510720188db074bca4c3e3-6QDZ0j differ diff --git a/lost+found/7612587655475950afd36589765bd5eb855522-zEr2jj b/lost+found/7612587655475950afd36589765bd5eb855522-zEr2jj new file mode 100644 index 00000000..3212049c Binary files /dev/null and b/lost+found/7612587655475950afd36589765bd5eb855522-zEr2jj differ diff --git a/lost+found/7791154424dd9f666238efbb5a913a58fa0ea6-f4c6t0 b/lost+found/7791154424dd9f666238efbb5a913a58fa0ea6-f4c6t0 new file mode 100644 index 00000000..c9573e16 Binary files /dev/null and b/lost+found/7791154424dd9f666238efbb5a913a58fa0ea6-f4c6t0 differ diff --git a/lost+found/77d53dab6cdffc9fee83ad3c1c8bb4ba8292be-C1PwNz b/lost+found/77d53dab6cdffc9fee83ad3c1c8bb4ba8292be-C1PwNz new file mode 100644 index 00000000..7e86d8f7 Binary files /dev/null and b/lost+found/77d53dab6cdffc9fee83ad3c1c8bb4ba8292be-C1PwNz differ diff --git a/lost+found/786ffc0063109a31c5be402ccbb04f5ffdf51a-Qi2Ydc b/lost+found/786ffc0063109a31c5be402ccbb04f5ffdf51a-Qi2Ydc new file mode 100644 index 00000000..f032f31c Binary files /dev/null and b/lost+found/786ffc0063109a31c5be402ccbb04f5ffdf51a-Qi2Ydc differ diff --git a/lost+found/78fd246e4518585d75554f7e721244b42e7752-xZhfrq b/lost+found/78fd246e4518585d75554f7e721244b42e7752-xZhfrq new file mode 100644 index 00000000..c78bcda7 Binary files /dev/null and b/lost+found/78fd246e4518585d75554f7e721244b42e7752-xZhfrq differ diff --git a/lost+found/791a83ac90a4d8eb8ca0b9e7d49f9cb5369a2e-nUnUbG b/lost+found/791a83ac90a4d8eb8ca0b9e7d49f9cb5369a2e-nUnUbG new file mode 100644 index 00000000..7d18e3e9 Binary files /dev/null and b/lost+found/791a83ac90a4d8eb8ca0b9e7d49f9cb5369a2e-nUnUbG differ diff --git a/lost+found/79cec1291d1f71bdb3db24c01439a6afe3ba56-gKxdgV b/lost+found/79cec1291d1f71bdb3db24c01439a6afe3ba56-gKxdgV new file mode 100644 index 00000000..e2c4fb66 Binary files /dev/null and b/lost+found/79cec1291d1f71bdb3db24c01439a6afe3ba56-gKxdgV differ diff --git a/lost+found/7a8c04afc68ce840ac935327d8fb5818b420b3-TakOtU b/lost+found/7a8c04afc68ce840ac935327d8fb5818b420b3-TakOtU new file mode 100644 index 00000000..8c148e55 --- /dev/null +++ b/lost+found/7a8c04afc68ce840ac935327d8fb5818b420b3-TakOtU @@ -0,0 +1 @@ +x=j1FSӇ,LH&w̎bW2pN&H> 69D@)dQ;J %tBC1eO%{rp>$%d`ZVSp8+Zr9jmeB|+c4 gmVȝ#ϾѬ [ܱ7(oZ \ No newline at end of file diff --git a/lost+found/7a9a20bccdc1e381c798af5c2af958917d048f-WZLXR4 b/lost+found/7a9a20bccdc1e381c798af5c2af958917d048f-WZLXR4 new file mode 100644 index 00000000..8ecc35d7 Binary files /dev/null and b/lost+found/7a9a20bccdc1e381c798af5c2af958917d048f-WZLXR4 differ diff --git a/lost+found/7ab625c31f4a412bdf28e4b71a7198ca037a77-03RkrQ b/lost+found/7ab625c31f4a412bdf28e4b71a7198ca037a77-03RkrQ new file mode 100644 index 00000000..264fa7eb Binary files /dev/null and b/lost+found/7ab625c31f4a412bdf28e4b71a7198ca037a77-03RkrQ differ diff --git a/lost+found/7ba71370ee176d4910c18a2bcdef4f700a0c66-GYFgJ2 b/lost+found/7ba71370ee176d4910c18a2bcdef4f700a0c66-GYFgJ2 new file mode 100644 index 00000000..ae0815b6 --- /dev/null +++ b/lost+found/7ba71370ee176d4910c18a2bcdef4f700a0c66-GYFgJ2 @@ -0,0 +1,2 @@ +x;0} +HzZB+ڛ DLq|p)hO-"3sk 蹎 b@0ج^ȸ d39CLY:o&KSШ̏[Z;)}*>}v?,O˚rA@^;o<پ? &;O \ No newline at end of file diff --git a/lost+found/7bcee446ab17b7742fa796b351928718d3a624-uUlU12 b/lost+found/7bcee446ab17b7742fa796b351928718d3a624-uUlU12 new file mode 100644 index 00000000..7eb8c956 Binary files /dev/null and b/lost+found/7bcee446ab17b7742fa796b351928718d3a624-uUlU12 differ diff --git a/lost+found/7cf0a86f7c31379f22bfeaae127784968652c8-X2LClV b/lost+found/7cf0a86f7c31379f22bfeaae127784968652c8-X2LClV new file mode 100644 index 00000000..5c451be3 Binary files /dev/null and b/lost+found/7cf0a86f7c31379f22bfeaae127784968652c8-X2LClV differ diff --git a/lost+found/7de258d32ea0a6e32af46a0de384a74d8ec70e-RRwLme b/lost+found/7de258d32ea0a6e32af46a0de384a74d8ec70e-RRwLme new file mode 100644 index 00000000..c4f2d2b8 Binary files /dev/null and b/lost+found/7de258d32ea0a6e32af46a0de384a74d8ec70e-RRwLme differ diff --git a/lost+found/7f8f2dacd9c140858eebd0a91ff7c96240e9c8-Pl3SQ6 b/lost+found/7f8f2dacd9c140858eebd0a91ff7c96240e9c8-Pl3SQ6 new file mode 100644 index 00000000..b1e927dc --- /dev/null +++ b/lost+found/7f8f2dacd9c140858eebd0a91ff7c96240e9c8-Pl3SQ6 @@ -0,0 +1,5 @@ +xUMo0 ٿBGg TCCڢE u +0 lƑ\J)/ު-|$)}|(EK`"Y +\deAGK#r+=aYG${08N'ˆ yrPȯ\!̭TkorzARο91A~\ʌe_Z G]4UƃZxVk'Q҂\;Jov(bJ#az`Yӣ!62߳TSyD|C6Yl4ӄ +•!0${5 ߝóOI2_Tbpp6K&xRJlo5o^Jj qU*dg-1ԽaGI% z |}D3N \ No newline at end of file diff --git a/lost+found/805afc784fe984edc4f926c43f166af20fe2e0-IUjrF1 b/lost+found/805afc784fe984edc4f926c43f166af20fe2e0-IUjrF1 new file mode 100644 index 00000000..2585e31d Binary files /dev/null and b/lost+found/805afc784fe984edc4f926c43f166af20fe2e0-IUjrF1 differ diff --git a/lost+found/80ce024003fa1fcbbd9d62dd38ce1344a987f9-z0Fvof b/lost+found/80ce024003fa1fcbbd9d62dd38ce1344a987f9-z0Fvof new file mode 100644 index 00000000..5f4231d6 Binary files /dev/null and b/lost+found/80ce024003fa1fcbbd9d62dd38ce1344a987f9-z0Fvof differ diff --git a/lost+found/80fc397cd2054d18d7831cce9276f94798eef1-gdiXDv b/lost+found/80fc397cd2054d18d7831cce9276f94798eef1-gdiXDv new file mode 100644 index 00000000..127c6ff6 Binary files /dev/null and b/lost+found/80fc397cd2054d18d7831cce9276f94798eef1-gdiXDv differ diff --git a/lost+found/81ba92ce3710f28f9f4c254d800006349d948b-CvZPG5 b/lost+found/81ba92ce3710f28f9f4c254d800006349d948b-CvZPG5 new file mode 100644 index 00000000..77d0c105 Binary files /dev/null and b/lost+found/81ba92ce3710f28f9f4c254d800006349d948b-CvZPG5 differ diff --git a/lost+found/84acd6c8455f44638a32f70a9cf7b14419a4bd-ItAGVy b/lost+found/84acd6c8455f44638a32f70a9cf7b14419a4bd-ItAGVy new file mode 100644 index 00000000..5445455c Binary files /dev/null and b/lost+found/84acd6c8455f44638a32f70a9cf7b14419a4bd-ItAGVy differ diff --git a/lost+found/84c80d83a3f7287e05823ee48dcc263b49b8e0-SIwUNr b/lost+found/84c80d83a3f7287e05823ee48dcc263b49b8e0-SIwUNr new file mode 100644 index 00000000..dfc52671 Binary files /dev/null and b/lost+found/84c80d83a3f7287e05823ee48dcc263b49b8e0-SIwUNr differ diff --git a/lost+found/85138a7a8080942e35a8b1ab0419b41acf6c68-HeCKwg b/lost+found/85138a7a8080942e35a8b1ab0419b41acf6c68-HeCKwg new file mode 100644 index 00000000..461d95d4 Binary files /dev/null and b/lost+found/85138a7a8080942e35a8b1ab0419b41acf6c68-HeCKwg differ diff --git a/lost+found/85686086aec9e0d8c56c4461cad14a0ddf50e7-knvJ83 b/lost+found/85686086aec9e0d8c56c4461cad14a0ddf50e7-knvJ83 new file mode 100644 index 00000000..ef50a26f Binary files /dev/null and b/lost+found/85686086aec9e0d8c56c4461cad14a0ddf50e7-knvJ83 differ diff --git a/lost+found/856e23e8cebfcf0bab3b9f091fb75dd40559de-KaHTz9 b/lost+found/856e23e8cebfcf0bab3b9f091fb75dd40559de-KaHTz9 new file mode 100644 index 00000000..575fc848 Binary files /dev/null and b/lost+found/856e23e8cebfcf0bab3b9f091fb75dd40559de-KaHTz9 differ diff --git a/lost+found/857f68acc1a26abb85a02d6ac3c672869b7a07-4so3A6 b/lost+found/857f68acc1a26abb85a02d6ac3c672869b7a07-4so3A6 new file mode 100644 index 00000000..f11da24b Binary files /dev/null and b/lost+found/857f68acc1a26abb85a02d6ac3c672869b7a07-4so3A6 differ diff --git a/lost+found/85a5cf9efbc3bedd71a39ce41b765b8ea291e7-ExBr7J b/lost+found/85a5cf9efbc3bedd71a39ce41b765b8ea291e7-ExBr7J new file mode 100644 index 00000000..861b5d3f Binary files /dev/null and b/lost+found/85a5cf9efbc3bedd71a39ce41b765b8ea291e7-ExBr7J differ diff --git a/lost+found/85c657623e7c4a2bf93f1e552b14636229e081-1uEhKt b/lost+found/85c657623e7c4a2bf93f1e552b14636229e081-1uEhKt new file mode 100644 index 00000000..e7de40ea Binary files /dev/null and b/lost+found/85c657623e7c4a2bf93f1e552b14636229e081-1uEhKt differ diff --git a/lost+found/86137501ba1930fdc411a5c7e58e7ae3796e98-Pv3WSI b/lost+found/86137501ba1930fdc411a5c7e58e7ae3796e98-Pv3WSI new file mode 100644 index 00000000..37d7af87 Binary files /dev/null and b/lost+found/86137501ba1930fdc411a5c7e58e7ae3796e98-Pv3WSI differ diff --git a/lost+found/871a5f443592d7e756bc9fab77f6919be5c7e4-rUSOuG b/lost+found/871a5f443592d7e756bc9fab77f6919be5c7e4-rUSOuG new file mode 100644 index 00000000..6a84d5a5 --- /dev/null +++ b/lost+found/871a5f443592d7e756bc9fab77f6919be5c7e4-rUSOuG @@ -0,0 +1 @@ +x=j1FSM~TM09} {#ٶ6Mef JLJq%cP11dx0zꊃs1XؗSnVtW<Ч7ow{*Ni)!q$`E>R g#}w:1:dT'*[ \ No newline at end of file diff --git a/lost+found/87cb0d2860b88da83c1147944d858938f5b37a-WBiNDP b/lost+found/87cb0d2860b88da83c1147944d858938f5b37a-WBiNDP new file mode 100644 index 00000000..3a86be91 Binary files /dev/null and b/lost+found/87cb0d2860b88da83c1147944d858938f5b37a-WBiNDP differ diff --git a/lost+found/8803b07bb9611a81c928bb109b584f4d912dae-XMY27e b/lost+found/8803b07bb9611a81c928bb109b584f4d912dae-XMY27e new file mode 100644 index 00000000..6476ac86 Binary files /dev/null and b/lost+found/8803b07bb9611a81c928bb109b584f4d912dae-XMY27e differ diff --git a/lost+found/88a91cb50feef2e63d5bdc82ee2350d5d89e58-fS6yMl b/lost+found/88a91cb50feef2e63d5bdc82ee2350d5d89e58-fS6yMl new file mode 100644 index 00000000..e3101a6c Binary files /dev/null and b/lost+found/88a91cb50feef2e63d5bdc82ee2350d5d89e58-fS6yMl differ diff --git a/lost+found/89e86d46500b830926416387e7e78c29a1c770-EYaZ4n b/lost+found/89e86d46500b830926416387e7e78c29a1c770-EYaZ4n new file mode 100644 index 00000000..af98d2b0 Binary files /dev/null and b/lost+found/89e86d46500b830926416387e7e78c29a1c770-EYaZ4n differ diff --git a/lost+found/8a0c65d27b99b613cd9283eaa767bbcb3ed8e1-Q12Z0w b/lost+found/8a0c65d27b99b613cd9283eaa767bbcb3ed8e1-Q12Z0w new file mode 100644 index 00000000..6e643470 --- /dev/null +++ b/lost+found/8a0c65d27b99b613cd9283eaa767bbcb3ed8e1-Q12Z0w @@ -0,0 +1,3 @@ +x=j1FS/Y +n|i,9}}U4[\ bDXDMZ4;qD/Qv'u;3uRKn-<^O`$R;W3C3o&'dSCd%+jKsXb~ݐWDf1[,:%r8wJ#iT][0ی Ip +(>uHx=͕}&, C,"IMgE/YLrY70߂J4z *M.z \ No newline at end of file diff --git a/lost+found/9de3d97fa3e2a1f5b09ca4fb03fb76d8a7a6c4-oniMOu b/lost+found/9de3d97fa3e2a1f5b09ca4fb03fb76d8a7a6c4-oniMOu new file mode 100644 index 00000000..3589adad Binary files /dev/null and b/lost+found/9de3d97fa3e2a1f5b09ca4fb03fb76d8a7a6c4-oniMOu differ diff --git a/lost+found/9e69fc4f24df55086cbe8281214d018e586266-gjjOUn b/lost+found/9e69fc4f24df55086cbe8281214d018e586266-gjjOUn new file mode 100644 index 00000000..332085ed Binary files /dev/null and b/lost+found/9e69fc4f24df55086cbe8281214d018e586266-gjjOUn differ diff --git a/lost+found/9fd1329a04fa3b0430c29ce86eae9fc324900f-adWKoO b/lost+found/9fd1329a04fa3b0430c29ce86eae9fc324900f-adWKoO new file mode 100644 index 00000000..3811831d Binary files /dev/null and b/lost+found/9fd1329a04fa3b0430c29ce86eae9fc324900f-adWKoO differ diff --git a/lost+found/AbsoluteLayout.jar-TuCPmD b/lost+found/AbsoluteLayout.jar-TuCPmD new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml-1e4nje b/lost+found/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml-1e4nje new file mode 100644 index 00000000..fad05cac --- /dev/null +++ b/lost+found/Acrylic-Plastik_32__40_Corona_32_Kopfhoerer_44_Plastik_95_Huelle_41_.xml-1e4nje @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Acrylic-Plastik (Corona Kopfhoerer,Plastik_Huelle) + + 0.0 + + \ No newline at end of file diff --git a/lost+found/Acrylic.png-odg6An b/lost+found/Acrylic.png-odg6An new file mode 100644 index 00000000..2bad202e Binary files /dev/null and b/lost+found/Acrylic.png-odg6An differ diff --git a/lost+found/Acrylic.xml-9Sf4PK b/lost+found/Acrylic.xml-9Sf4PK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Alu_32_Profil_32__40_eloxiert_41_.xml-f8WJ0B b/lost+found/Alu_32_Profil_32__40_eloxiert_41_.xml-f8WJ0B new file mode 100644 index 00000000..3f5b470b --- /dev/null +++ b/lost+found/Alu_32_Profil_32__40_eloxiert_41_.xml-f8WJ0B @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Alu Profil (eloxiert) + + 0.0 + + \ No newline at end of file diff --git a/lost+found/AppleJavaExtensions.jar-TPECYY b/lost+found/AppleJavaExtensions.jar-TPECYY new file mode 100644 index 00000000..6659a81c Binary files /dev/null and b/lost+found/AppleJavaExtensions.jar-TPECYY differ diff --git a/lost+found/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_.xml-8bxE8w b/lost+found/Auge_32__40_bis_32_-1.5_32_Dioptrin_41_.xml-8bxE8w new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/BST.java-2cjkm5 b/lost+found/BST.java-2cjkm5 new file mode 100644 index 00000000..1a8d3d66 --- /dev/null +++ b/lost+found/BST.java-2cjkm5 @@ -0,0 +1,109 @@ +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Stack; + +public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + // TODO STUDENT: Implement the get method + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + // TODO STUDENT: Implement the put method + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + // TODO STUDDENT: Implement the BSTIterator + // an iterator, doesn't implement remove() since it's optional + private class BSTIterator implements Iterator { + @@bstiterator@@ + } + +} diff --git a/lost+found/BST.java-Adc6xw b/lost+found/BST.java-Adc6xw new file mode 100644 index 00000000..4dc19fe7 --- /dev/null +++ b/lost+found/BST.java-Adc6xw @@ -0,0 +1,111 @@ +package templates; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Stack; + +public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + // TODO STUDENT: Implement the get method + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + // TODO STUDENT: Implement the put method + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + // TODO STUDDENT: Implement the BSTIterator + // an iterator, doesn't implement remove() since it's optional + private class BSTIterator implements Iterator { + @@bstiterator@@ + } + +} diff --git a/lost+found/BSTSolution.java-EmjLgj b/lost+found/BSTSolution.java-EmjLgj new file mode 100644 index 00000000..55e563d5 --- /dev/null +++ b/lost+found/BSTSolution.java-EmjLgj @@ -0,0 +1,229 @@ +/* +* @author johnaoga +*/ +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Stack; + +public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + public void inOrder(){ + inOrder(root); + } + private void inOrder(Node x) { + if (x == null) return; + + inOrder(x.left); + System.out.println(x.key+"=>"+x.val); + inOrder(x.right); + } + + + // TODO STUDENT: Implement the get method + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + // TODO STUDENT: Implement the put method + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + // TODO STUDDENT: Implement the BSTIterator + + // an iterator, doesn't implement remove() since it's optional + /*CORRECT*/ + private class BSTIterator implements Iterator { + + private int size; + private Node current; + + Stack stack; + + public BSTIterator() { + stack = new Stack<>(); + current = root; + while (current != null) { + stack.push(current); + current = current.left; + } + if (root != null) size = root.getSize(); + } + + public boolean hasNext() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + + return (current != null || !stack.isEmpty()); + } + + public Key next() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + if (!hasNext()) throw new NoSuchElementException(); + Node node = stack.pop(); + Key key = node.key; + if (node.right != null) { + node = node.right; + while (node != null) { + stack.push(node); + node = node.left; + } + } + return key; + } + + }/**/ + + /* Wrong Complexity + private class BSTIterator implements Iterator { + private int size; + Stack stack; + + + private void populateStack(Stack st, Node x) { + if(x==null) return; + populateStack(st,x.right); + st.push(x); + populateStack(st,x.left); + } + + private BSTIterator(){ + stack =new Stack<>(); + populateStack(stack,root); + if (root != null) size = root.getSize(); + } + @Override + public boolean hasNext() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + + return !stack.isEmpty(); + } + + @Override + public Key next() { + if (root!=null && this.size != root.getSize()) throw new ConcurrentModificationException(); + if (!hasNext()) throw new NoSuchElementException(); + return stack.pop().key; + } + + @Override + public void remove() {} + }*/ + + + /** + * Unit tests the {@code BST} data type. + */ + public static void main(String[] args) { + char tiny[] = new char[] {'S', 'E', 'A', 'R', 'C', 'H', 'E', 'X', 'A', 'M', 'P', 'L', 'E'}; + BST st = new BST(); + + for (int i = 0; i < tiny.length; i++) { + String key = ""+tiny[i]; + st.put(key, i); + } + + System.out.println(st.size()); + + st.inOrder(); + + Iterator it = st.iterator(); + while (it.hasNext()){ + String key = it.next(); + System.out.println(key); + } + + + /*BST student = new BST<>(); + student.put("A",1); + + Iterator iter = student.iterator(); + student.put("B",2); + iter.next();*/ + } +} \ No newline at end of file diff --git a/lost+found/BSTTestComplexity.java-UdAppf b/lost+found/BSTTestComplexity.java-UdAppf new file mode 100644 index 00000000..bec23920 --- /dev/null +++ b/lost+found/BSTTestComplexity.java-UdAppf @@ -0,0 +1,64 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import templates.*; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestComplexity { + + private BST student; + + public BSTTestComplexity(BST student) { + this.student = student; + } + + @Test(timeout=600) + @Grade(value=8) //8*5 = 40 + public void runAsExpected() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + while (aIter.hasNext()) { + aIter.next(); + } + assertFalse(aIter.hasNext()); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=50) + @Grade(value=2) //2*5 = 10 + public void runAsExpectedBis() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(12345L); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + BST a = new BST<>(); + for (int k = 0; k < 1000000; k++) { + int val = r.nextInt(); + String key = ""+val; + a.put(key,val); + } + + tests.add(a); + } + return tests; + } +} diff --git a/lost+found/BSTTestComplexity.java-srxnMF b/lost+found/BSTTestComplexity.java-srxnMF new file mode 100644 index 00000000..524d1093 --- /dev/null +++ b/lost+found/BSTTestComplexity.java-srxnMF @@ -0,0 +1,60 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestComplexity { + + private BST student; + + public BSTTestComplexity(BST student) { + this.student = student; + } + + @Test(timeout=600) + @Grade(value=8) //8*5 = 40 + public void runAsExpected() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + while (aIter.hasNext()) { + aIter.next(); + } + assertFalse(aIter.hasNext()); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=50) + @Grade(value=2) //2*5 = 10 + public void runAsExpectedBis() { + long t0 = System.currentTimeMillis(); + Iterator aIter = student.iterator(); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(12345L); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + BST a = new BST<>(); + for (int k = 0; k < 1000000; k++) { + int val = r.nextInt(); + String key = ""+val; + a.put(key,val); + } + + tests.add(a); + } + return tests; + } +} diff --git a/lost+found/BSTTestExtreme.java-DXFQvK b/lost+found/BSTTestExtreme.java-DXFQvK new file mode 100644 index 00000000..be786d49 --- /dev/null +++ b/lost+found/BSTTestExtreme.java-DXFQvK @@ -0,0 +1,68 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.*; + + +public class BSTTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + char db[] = new char[] {'S', 'E', 'A', 'R', 'C', 'H', 'E', 'X', 'A', 'M', 'P', 'L', 'E'}; + BST student = new BST(); + + Iterator iterator = student.iterator(); + //assertFalse(iterator.hasNext()); + + Set correct = new TreeSet<>(); + for (int i = 0; i < db.length; i++) { + String key = ""+db[i]; + student.put(key, i); + if (i==6) { + assertEquals(i,student.size()); + } + assertEquals(student.get(key).intValue(),i); + correct.add(key); + } + + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + + } + + @Test(expected = NoSuchElementException.class) + @Grade(value=10) + public void testNoSuchElementException() { + BST student = new BST<>(); + student.iterator().next(); + + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=10) + public void testConcurrentModificationNext() { + BST student = new BST<>(); + student.put("A",1); + + Iterator iter = student.iterator(); + student.put("B",2); + iter.next(); + } + + + + + +} diff --git a/lost+found/BSTTestExtreme.java-d6YRug b/lost+found/BSTTestExtreme.java-d6YRug new file mode 100644 index 00000000..1467e288 --- /dev/null +++ b/lost+found/BSTTestExtreme.java-d6YRug @@ -0,0 +1,72 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import templates.*; + +import java.util.*; + +import static org.junit.Assert.*; + + +public class BSTTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + char db[] = new char[] {'S', 'E', 'A', 'R', 'C', 'H', 'E', 'X', 'A', 'M', 'P', 'L', 'E'}; + BST student = new BST(); + + Iterator iterator = student.iterator(); + //assertFalse(iterator.hasNext()); + + Set correct = new TreeSet<>(); + for (int i = 0; i < db.length; i++) { + String key = ""+db[i]; + student.put(key, i); + if (i==6) { + assertEquals(i,student.size()); + } + assertEquals(student.get(key).intValue(),i); + correct.add(key); + } + + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + + } + + @Test(expected = NoSuchElementException.class) + @Grade(value=10) + public void testNoSuchElementException() { + BST student = new BST<>(); + student.iterator().next(); + + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=10) + public void testConcurrentModificationNext() { + BST student = new BST<>(); + student.put("A",1); + + Iterator iter = student.iterator(); + student.put("B",2); + iter.next(); + } + + + + + +} diff --git a/lost+found/BSTTestRandom.java-WkJKhP b/lost+found/BSTTestRandom.java-WkJKhP new file mode 100644 index 00000000..b3ef76b8 --- /dev/null +++ b/lost+found/BSTTestRandom.java-WkJKhP @@ -0,0 +1,60 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestRandom { + private BST student; + private Set correct; + + + public BSTTestRandom(BST student, Set correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.3) //0.3*50=15 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + int min=1, max=26; + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + BST a = new BST<>(); + Set b = new TreeSet<>(); + for (int k = 0; k < 15; k++) { + int v = r.nextInt((max - min) + 1) + min; + a.put(getCharForNumber(v),v); + b.add(getCharForNumber(v)); + } + + tests.add(new Object[]{a,b}); + } + return tests; + } + public static String getCharForNumber(int i) { + return i > 0 && i < 27 ? String.valueOf((char)(i + 64)) : null; + } +} diff --git a/lost+found/BSTTestRandom.java-Yuh0qN b/lost+found/BSTTestRandom.java-Yuh0qN new file mode 100644 index 00000000..ec372c73 --- /dev/null +++ b/lost+found/BSTTestRandom.java-Yuh0qN @@ -0,0 +1,63 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import templates.*; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class BSTTestRandom { + private BST student; + private Set correct; + + + public BSTTestRandom(BST student, Set correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.3) //0.3*50=15 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + int min=1, max=26; + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + BST a = new BST<>(); + Set b = new TreeSet<>(); + for (int k = 0; k < 15; k++) { + int v = r.nextInt((max - min) + 1) + min; + a.put(getCharForNumber(v),v); + b.add(getCharForNumber(v)); + } + + tests.add(new Object[]{a,b}); + } + return tests; + } + public static String getCharForNumber(int i) { + return i > 0 && i < 27 ? String.valueOf((char)(i + 64)) : null; + } +} diff --git a/lost+found/BSTTests.java-3HWfJ2 b/lost+found/BSTTests.java-3HWfJ2 new file mode 100644 index 00000000..eab26eed --- /dev/null +++ b/lost+found/BSTTests.java-3HWfJ2 @@ -0,0 +1,194 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; + + +public class BSTTests { + + ///////// Base + @Test + @Grade(value=20) + public void testCeilOk() { + java.util.TreeSet correct = new java.util.TreeSet<>(); + int values[] = new int[]{12,8,18,3,11,14,20,9,15}; + int in[] = new int[]{11,14,9,4,16,10,19,21,30,40}; + + Node root = new Node(values[0]); + for (int i = 1; i < values.length; i++) { + root.add(values[i]); + correct.add(values[i]); + } + + for (int i : in ) { + assertEquals(Ceil.ceil(root,i), correct.ceiling(i)); + } + } + + /////////// Extreme + /** + * Generates a random array of Integers, of size n + */ + public static Integer[] randomArray(int n) { + java.util.Random rand = new java.util.Random(); + Integer [] array = new Integer[n]; + Arrays.setAll(array, i -> rand.nextInt(1000000)); + return array; + } + + /** + * Verifies that values.ceil(where) == ceilFound + * @param values + * @param ceilFound + * @param where + */ + public static boolean verify(Integer[] values, Integer ceilFound, int where) { + // Let a real balanced tree for the Java STD lib do the work for us: + TreeSet set = new TreeSet(); + Collections.addAll(set, values); + Integer ceil2 = set.ceiling(where); + + if(ceilFound != null && ceil2 != null) + return ceilFound.equals(ceil2); + else + return ceilFound == ceil2; + } + + @Test + @Grade(value=30) + public void testExtreme() { + for (int i = 100; i < 1000; i += 100) { + Integer[] v = randomArray(i+1); + Node root = new Node(v[0]); + for(int j = 1; j < v.length; j++) + root.add(v[j]); + for(int j = -200; j < 1000001; j += 1000) { + Integer ceil = Ceil.ceil(root, j); + assertTrue("correct ceiling value computed",verify(v,ceil,j)); + } + } + } + + ////////// complexity + static private class InstanceConfig { + int toRetrieve = 0; + boolean wrongDirection = false; + HashSet wrongTurnsCalled = new HashSet<>(); + + public void reset(int toRetrieve) { + this.toRetrieve = toRetrieve; + wrongDirection = false; + wrongTurnsCalled = new HashSet<>(); + } + } + + static private class BaseNode extends Node { + private int value; + private InstanceConfig info; + private BaseNode left; + private BaseNode right; + + BaseNode(int v, InstanceConfig tor) { + value = v; + left = null; + right = null; + info = tor; + } + + @Override + public int getValue() { + if(info.wrongTurnsCalled.contains(this)) + info.wrongDirection = true; + return value; + } + + @Override + public Node getLeft() { + if(value <= info.toRetrieve) + info.wrongTurnsCalled.add(left); + return left; + } + + @Override + public Node getRight() { + if(value >= info.toRetrieve) + info.wrongTurnsCalled.add(right); + return right; + } + + public void add(int v) { + if(v < value && left == null) left = new BaseNode(v, info); + else if(v < value) left.add(v); + else if(v > value && right == null) right = new BaseNode(v, info); + else if(v > value) right.add(v); + } + } + + @Test + @Grade(value=50) + public void testComplexity() { + int[][] tests = new int[][]{ + new int[] {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}, + new int[] {1000, 900, 800, 700, 600, 500, 400, 300, 200, 100}, + new int[] {500, 300, 800, 100, 400, 600, 900, 200, 700}, + new int[] {231,635,69,644,422,855,161,275,10,685,544,34,379,575,858,740,832,842,838,624,118,55,977,163,484,59,737,299,343,161,647,674,249,758,248,19,612,336,419,255,416,460,286,35,678,352,796,195,308,918,778,118,202,879,378,548,214,688,908,668,759,293,875,279,324,472,117,167,637,32,934,34,854,673,113,110,27,585,266,450,769,4,264,206,586,704,304,612,639,948,718,952,534,444,470,302,182,30,165,984}, + new int[] {636,403,939,800,651,781,855,72,835,858,820,463,473,665,524,759,454,454,920,674,496,571,481,255,384,933,7,116,579,895,562,381,151,454,907,146,410,566,332,364,814,193,50,462,922,510,831,766,42,69,917,254,287,65,182,35,50,64,760,822,556,203,381,34,744,360,234,965,932,406,264,581,601,792,160,531,562,997,433,987,204,383,629,132,118,716,216,621,25,11,42,854,759,435,312,741,482,722,546,490}, + new int[] {164,898,443,782,245,1,164,767,788,590,910,745,803,688,801,322,118,70,121,829,130,153,443,718,794,871,935,845,233,187,48,93,235,35,603,481,317,348,674,673,278,809,651,468,858,696,902,905,303,108,952,435,766,922,13,492,29,797,988,120,371,24,115,425,970,898,65,735,938,647,691,886,563,930,958,393,94,218,23,258,825,232,697,673,863,607,356,17,13,340,981,288,9,316,345,155,489,224,449,491}, + new int[] {4,471,616,61,568,47,232,7,921,169,153,583,849,230,996,532,864,343,435,452,391,389,903,390,356,292,769,504,509,354,980,798,825,287,136,115,128,600,31,555,450,625,515,78,940,351,22,801,16,825,338,491,891,994,10,970,381,902,387,173,765,567,81,380,695,995,337,685,631,160,728,804,906,920,905,12,103,226,288,984,15,183,488,245,223,732,8,870,806,641,663,752,468,269,275,651,378,471,259,219}, + new int[] {483,76,190,396,531,330,847,356,79,392,14,322,24,995,193,532,185,885,888,637,950,895,216,860,345,690,29,250,926,586,913,263,855,343,403,416,433,529,492,52,709,676,836,503,767,775,208,75,861,204,525,43,929,122,966,582,451,115,46,793,462,493,886,801,819,181,574,30,912,14,946,908,15,693,140,94,212,970,62,374,306,10,717,708,220,544,742,716,413,555,969,895,92,711,506,989,469,354,819,510}, + }; + boolean wrongDirection = false; + boolean ok = true; + try { + for (int testNb = 0; testNb < tests.length; testNb++) { + // Get the test + int[] test = tests[testNb]; + int[] testSorted = new int[test.length]; + System.arraycopy(test, 0, testSorted, 0, test.length); + Arrays.sort(testSorted); + + // Generate the tree + InstanceConfig info = new InstanceConfig(); + Node root = new BaseNode(test[0], info); + for (int i = 1; i < test.length; i++) + root.add(test[i]); + + // Test all the possibilities + int posInSorted = 0; + for (int i = 0; i <= 1000; i++) { + info.reset(i); + while (posInSorted != testSorted.length && testSorted[posInSorted] < i) + posInSorted++; + Integer expected = null; + if (posInSorted != testSorted.length) + expected = testSorted[posInSorted]; + Integer returned = Ceil.ceil(root, i); + wrongDirection |= info.wrongDirection; + if(returned == null && expected != null) + ok = false; + if(expected == null && returned != null) + ok = false; + if(returned != null && expected != null && !returned.equals(expected)) + ok = false; + } + } + if(ok && !wrongDirection){} + else if(ok && wrongDirection) { + System.out.println("wrong Direction : Bad Complexity!!"); + assertTrue(false); + } + else { assertTrue(false);} + + } + catch (Exception e) { + System.out.println("exception"); + } + } +} diff --git a/lost+found/BadInterpreter.java-S8YgvJ b/lost+found/BadInterpreter.java-S8YgvJ new file mode 100644 index 00000000..4f9e0e9b --- /dev/null +++ b/lost+found/BadInterpreter.java-S8YgvJ @@ -0,0 +1,19 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + +/** + * This implementation passes no tests + * @author Frederic KACZYNSKI + */ +public class Interpreter implements InterpreterInterface { + + public Interpreter() { + } + + public String interpret(String instruction) { + return "#chance"; + } +} \ No newline at end of file diff --git a/lost+found/Birkensperrholz_40_Multiplex_41_.xml-HsF42S b/lost+found/Birkensperrholz_40_Multiplex_41_.xml-HsF42S new file mode 100644 index 00000000..568abd3b --- /dev/null +++ b/lost+found/Birkensperrholz_40_Multiplex_41_.xml-HsF42S @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Birkensperrholz(Multiplex) + + 4.0 + + \ No newline at end of file diff --git a/lost+found/Bleistift.xml-FG2uw4 b/lost+found/Bleistift.xml-FG2uw4 new file mode 100644 index 00000000..eb1a154c --- /dev/null +++ b/lost+found/Bleistift.xml-FG2uw4 @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Bleistift + + 0.0 + + \ No newline at end of file diff --git a/lost+found/Braunpappe.xml-dR3ASc b/lost+found/Braunpappe.xml-dR3ASc new file mode 100644 index 00000000..24d58a0e --- /dev/null +++ b/lost+found/Braunpappe.xml-dR3ASc @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Braunpappe + + 1.0 + + \ No newline at end of file diff --git a/lost+found/BreadthFirstShortestPaths.java-E9CNXt b/lost+found/BreadthFirstShortestPaths.java-E9CNXt new file mode 100644 index 00000000..1ef4142f --- /dev/null +++ b/lost+found/BreadthFirstShortestPaths.java-E9CNXt @@ -0,0 +1,49 @@ +package templates; + +///import tests.Graph; +@@import@@ + +public class BreadthFirstShortestPaths { + public static final int INFINITY = Integer.MAX_VALUE; + private boolean[] marked; // marked[v] = is there an s-v path + private int[] distTo; // distTo[v] = number of edges shortest s-v path + + /** + * Computes the shortest path between any + * one of the sources and very other vertex + * @param G the graph + * @param sources the source vertices + */ + public BreadthFirstShortestPaths(Graph G, Iterable sources) { + marked = new boolean[G.V()]; + distTo = new int[G.V()]; + for (int v = 0;v < G.V();v++) { + distTo[v] = INFINITY; + } + bfs(G, sources); + } + + // Breadth-first search from multiple sources + private void bfs(Graph G, Iterable sources) { + @@question1@@ + } + + /** + * Is there a path between (at least one of) the sources and vertex v? + * @param v the vertex + * @return true if there is a path, and false otherwise + */ + public boolean hasPathTo(int v) { + @@question2@@ + } + + /** + * Returns the number of edges in a shortest path + * between one of the sources and vertex v? + * @param v the vertex + * @return the number of edges in a shortest path + */ + public int distTo(int v) { + @@question3@@ + } +} diff --git a/lost+found/BreadthFirstShortestPaths.java-nFOq7b b/lost+found/BreadthFirstShortestPaths.java-nFOq7b new file mode 100644 index 00000000..b2c06c59 --- /dev/null +++ b/lost+found/BreadthFirstShortestPaths.java-nFOq7b @@ -0,0 +1,46 @@ +//TODO + +public class BreadthFirstShortestPaths { + public static final int INFINITY = Integer.MAX_VALUE; + private boolean[] marked; // marked[v] = is there an s-v path + private int[] distTo; // distTo[v] = number of edges shortest s-v path + + /** + * Computes the shortest path between any + * one of the sources and very other vertex + * @param G the graph + * @param sources the source vertices + */ + public BreadthFirstShortestPaths(Graph G, Iterable sources) { + marked = new boolean[G.V()]; + distTo = new int[G.V()]; + for (int v = 0;v < G.V();v++) { + distTo[v] = INFINITY; + } + bfs(G, sources); + } + + // Breadth-first search from multiple sources + private void bfs(Graph G, Iterable sources) { + //TODO + } + + /** + * Is there a path between (at least one of) the sources and vertex v? + * @param v the vertex + * @return true if there is a path, and false otherwise + */ + public boolean hasPathTo(int v) { + //TODO + } + + /** + * Returns the number of edges in a shortest path + * between one of the sources and vertex v? + * @param v the vertex + * @return the number of edges in a shortest path + */ + public int distTo(int v) { + //TODO + } +} diff --git a/lost+found/Bristolkarton.xml-GCAdiz b/lost+found/Bristolkarton.xml-GCAdiz new file mode 100644 index 00000000..17850867 --- /dev/null +++ b/lost+found/Bristolkarton.xml-GCAdiz @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Bristolkarton + + 0.6 + + \ No newline at end of file diff --git a/lost+found/BrowserLoginDialog.jar-37leXn b/lost+found/BrowserLoginDialog.jar-37leXn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Buche.xml-UyRUZN b/lost+found/Buche.xml-UyRUZN new file mode 100644 index 00000000..61cbf467 --- /dev/null +++ b/lost+found/Buche.xml-UyRUZN @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Buche + + 0.8 + + \ No newline at end of file diff --git a/lost+found/BucketSort.java-KXdu7d b/lost+found/BucketSort.java-KXdu7d new file mode 100644 index 00000000..1f65e44a --- /dev/null +++ b/lost+found/BucketSort.java-KXdu7d @@ -0,0 +1,49 @@ +import java.util.ArrayList; + +/* Solution of Simon Hardy for the first task of the mission 6 */ +public class BucketSort { + + /* Main method, only used in a debug purpose */ + public static void main(String[] args) { + int[] tab = {20, 13, 12, 10}; + int[] result = sort(tab, 0); + for (int i = 0 ; i < 4 ; i++) + System.out.println(result[i]); + } + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post 'tab' is not modified + * @returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) + */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BucketSortProps.scala-GxiBTn b/lost+found/BucketSortProps.scala-GxiBTn new file mode 100644 index 00000000..afe87d7a --- /dev/null +++ b/lost+found/BucketSortProps.scala-GxiBTn @@ -0,0 +1,134 @@ +import org.scalacheck.Properties +import org.scalacheck.Prop +import org.scalacheck.Gen.{listOf, alphaStr, numChar, oneOf, choose} +import org.scalacheck.Gen +import math.{min, max} + +object BucketSortProps extends Properties("BucketSort") { + + property("trivial") = { + try { + val array: Array[Int] = Array(1, 2, 3) + val result = BucketSort.sort(array, 0) + result.deep == array.deep + + } catch { + case e: Exception => false + } + } + + property("empty_tab") = { + try { + val array: Array[Int] = Array() + val result = BucketSort.sort(array, 0) + result.deep == array.deep + + } catch { + case e: Exception => false + } + } + + property("one_element_tab") = Prop.forAll { (w: Int) => + try { + val x = if (w == Int.MinValue) Int.MaxValue else if (w >= 0) w else -w + val array: Array[Int] = Array(x) + val result = BucketSort.sort(array, 0) + result.deep == array.deep + + } catch { + case e: Exception => false + } + } + + val posNum = Gen.posNum[Int] + val posNum2 = Gen.posNum[Int] + property("digit_larger_than_number") = Prop.forAll(posNum, posNum2) { (x, y) => + try { + val array: Array[Int] = Array(x%100, y%100) + val result = BucketSort.sort(array, 9) + result.deep == array.deep + + } catch { + case e: Exception => false + } + } + + val genIntArray = Gen.containerOf[Array, Int](Gen.posNum[Int]) + property("random_arrays") = Prop.forAll(genIntArray) { array => + try { + val digit = 0 + val result = BucketSort.sort(array, digit) + result.deep == array.sortWith(getDigit(_, digit) < getDigit(_, digit)).deep + + } catch { + case e: Exception => false + } + } + + val genDigit = Gen.choose(0, 9) + property("random_digit") = Prop.forAll(genDigit) { digit => + try { + val array = Array(125456, 49625, 485, 0, 3, 5198, 56982136, 489456325, 1235) + val result = BucketSort.sort(array, digit) + result.deep == array.sortWith(getDigit(_, digit) < getDigit(_, digit)).deep + + } catch { + case e: Exception => false + } + } + + property("random_arrays_and_digits") = Prop.forAll(genIntArray, genDigit) { (array, digit) => + try { + val result = BucketSort.sort(array, digit) + result.deep == array.sortWith(getDigit(_, digit) < getDigit(_, digit)).deep + + } catch { + case e: Exception => false + } + } + + // Must be compiled with -J-Xmx2g -J-Xms2g + val largeArray = Gen.containerOfN[Array, Int](10000000, Gen.posNum[Int]) + property("linear_complexity") = { + try { + var large = Array(5) + largeArray.sample match { + case Some(a) => large = a + case None => println("BUG") + } + val t1 = System.nanoTime() + val myResult = MyBucketSort.sort(large, 0) + val t2 = System.nanoTime() + val result = BucketSort.sort(large, 0) + val t3 = System.nanoTime() + //println((t2-t1)/1000 + " " + (t3-t2)/1000) + max(t2-t1, t3-t2) <= 10*min(t2-t1, t3-t2) + } catch { + case e: Exception => false + } + } + + property("tab_not_modified") = Prop.forAll(genIntArray) { array => + try { + val digit = 1 + val oldArray = Array.ofDim[Int](array.length) + Array.copy(array, 0, oldArray, 0, array.length) + val result = BucketSort.sort(array, digit) + array.deep == oldArray.deep + + } catch { + case e: Exception => false + } + } + + /* Get digit at position 'pos' out of 'number' */ + def getDigit(number: Int, pos: Int): Int = { + var i = pos + var n = number + while (i > 0) { + n = n/10 + i-=1 + } + n % 10; + } +} diff --git a/lost+found/BuggyBucketSort1.java-HY92sO b/lost+found/BuggyBucketSort1.java-HY92sO new file mode 100644 index 00000000..a1971dd0 --- /dev/null +++ b/lost+found/BuggyBucketSort1.java-HY92sO @@ -0,0 +1,25 @@ +import java.util.ArrayList; +import java.util.Arrays; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + Arrays.sort(tab); + return tab; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort2.java-A6RrQo b/lost+found/BuggyBucketSort2.java-A6RrQo new file mode 100644 index 00000000..7f155c73 --- /dev/null +++ b/lost+found/BuggyBucketSort2.java-A6RrQo @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + pos++; + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort3.java-SqjKfZ b/lost+found/BuggyBucketSort3.java-SqjKfZ new file mode 100644 index 00000000..bc6781ff --- /dev/null +++ b/lost+found/BuggyBucketSort3.java-SqjKfZ @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + pos--; + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort4.java-hPExGz b/lost+found/BuggyBucketSort4.java-hPExGz new file mode 100644 index 00000000..8dd3ee16 --- /dev/null +++ b/lost+found/BuggyBucketSort4.java-hPExGz @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + if (pos > 5) pos = 0; + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort5.java-UfLW89 b/lost+found/BuggyBucketSort5.java-UfLW89 new file mode 100644 index 00000000..1b90a24a --- /dev/null +++ b/lost+found/BuggyBucketSort5.java-UfLW89 @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 9 ; i >= 0 ; i--) { // BUG : decreasing order + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort6.java-VaCiDK b/lost+found/BuggyBucketSort6.java-VaCiDK new file mode 100644 index 00000000..ea2550c5 --- /dev/null +++ b/lost+found/BuggyBucketSort6.java-VaCiDK @@ -0,0 +1,46 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + int k = 0; + for (int el : B.get(i)) { + if (k == 1) { // BUG : loses stability + result[j] = result[j-1]; + result[j-1] = el; + } else { + result[j] = el; + } + k++; + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort7.java-Sjna9k b/lost+found/BuggyBucketSort7.java-Sjna9k new file mode 100644 index 00000000..6d2c4729 --- /dev/null +++ b/lost+found/BuggyBucketSort7.java-Sjna9k @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + result[result.length-1] = Integer.MAX_VALUE; + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort8.java-JTGwGV b/lost+found/BuggyBucketSort8.java-JTGwGV new file mode 100644 index 00000000..6356c276 --- /dev/null +++ b/lost+found/BuggyBucketSort8.java-JTGwGV @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + tab[j] = el; // BUG : 'tab' is modified. + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyBucketSort9.java-kvTyfw b/lost+found/BuggyBucketSort9.java-kvTyfw new file mode 100644 index 00000000..b875bf6f --- /dev/null +++ b/lost+found/BuggyBucketSort9.java-kvTyfw @@ -0,0 +1,40 @@ +import java.util.ArrayList; + +/* Buggy version of the first task of the mission 6 */ +public class BucketSort { + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + if (tab.length >= 10) return tab; // BUG here + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/BuggyCompress1.java-vFid4E b/lost+found/BuggyCompress1.java-vFid4E new file mode 100644 index 00000000..80a9e3c3 --- /dev/null +++ b/lost+found/BuggyCompress1.java-vFid4E @@ -0,0 +1,545 @@ +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.LinkedHashMap; +import java.io.*; +import java.util.Stack; +import java.lang.Comparable; + +/* Buggy version of the solution of Simon Hardy for the compression (mission 5) */ + +public class Compress { + + public static final boolean BIT_1 = true; + public static final boolean BIT_0 = false; + private static int treeLength; // taille de l'arbre en nombre de chars (16 bits par char) + private static int textLength = 0; // taille totale du texte à compresser (nécessaire pour virer les 0 à la fin) + + /** + * MAIN + */ + public static void main(String [] args) { + compress(args[0], args[1]); + } + + /* + * FUNCTIONS + */ + + /** + * Compresse un fichier compressé + * @param inputFilePath Fichier d'entrée, ce fichier sera compressé après l'opération + * @param outputFilePath Fichier de sortie, ce fichier correspond au fichier compressé + */ + public static void compress(String inputFilePath, String outputFilePath) { + Chrono.start(); + + ParsedFile file = new ParsedFile(inputFilePath); + + LinkedHashMap freqMap = computeFrequency(file); + + BinaryTree freqTree = computeTree(freqMap); + + String compressedFile = do_compression(freqTree, file); + String outputFile = catTree(freqTree, compressedFile); + writeFile(outputFilePath, outputFile); // Écrit la taille de l'arbre en binaire sur 32 bits, l'arbre en binaire (char par char) puis les bits issus de la compression du fichier d'entr�e. + + Chrono.stop(); + + // Calcul du taux de compression + long file1 = ParsedFile.sizeFile(inputFilePath); + long file2 = ParsedFile.sizeFile(outputFilePath); + //System.out.println(""); + //System.out.println("Size fichier entrée: " + file1); + //System.out.println("Size fichier compressé: " + file2); + //System.out.println("Taux de compression: " + ((double)file1 / (double)file2)); + + } + + /** + * Calcul la fréquence de chaque caractère + * @param file Fichier d'entrée, le fichier à traiter + * @return HashMap contenant la fréquence de chaque caractère de la chaîne de caractère d'entrée (fichier) + */ + public static LinkedHashMap computeFrequency(ParsedFile file) { + LinkedHashMap map = new LinkedHashMap(); + // Table utilis�e pour r�cupere les fr�quences. + ArrayList content = file.getContent(); + textLength=0; // WITHOUT THIS, IT WOULD FAIL WITH THE SECOND COMPRESSION... + for(String s : content) { + textLength++; // pour compter les passages � la ligne + for(int i = 0; i < s.length() ;i++) { + textLength++; // pour compter le nombre de caract�res sur une m�me ligne + char c = s.charAt(i); + + if(map.get(c) != null) + map.put(c, map.remove(c)+1); + else + map.put(c,1); + } + + if(map.get('\n') != null) + map.put('\n', map.remove('\n')+1); + else + map.put('\n',1); + } + + return map; + } + + /** + * Création de l'arbre nécessaire pour la compression (Arbre de Huffman) + * @param map Table de fréquence des caractères + * @return Arbre de Huffman + */ + public static BinaryTree computeTree(LinkedHashMap map) { + // File de priorit� utilis�e dans la cr�ation de l'arbre pour la compression de Huffman + PriorityQueue> queue = new PriorityQueue>(); + Iterator it = map.keySet().iterator(); + + while (it.hasNext()) { + // Parcours de chaque �l�ment de la table de fr�quence (en cours de construction, donc de la map) + char c = it.next(); + int key = map.get(c); + + SimpleEntry e = new SimpleEntry(map.get(c),new BinaryTree(key,c)); + // Ajout dans la file de priorit� la feuille contenant le caract�re avec sa fr�quence comme cl� + queue.add(e); + + it.remove(); + } + + while(queue.size() > 1) { + // On vas vider la file de priorit� pour cr�er l'arbre de codage de la compression de Huffman + SimpleEntry e1 = queue.poll(); + SimpleEntry e2 = queue.poll(); + SimpleEntry eOut = + new SimpleEntry + (e1.getKey() + e2.getKey(), + new BinaryTree( + e1.getKey()+e2.getKey(), + e2.getValue(), + e1.getValue())); + queue.add(eOut); + } + if (queue.isEmpty()) return new BinaryTree(0, '0'); + return queue.remove().getValue(); + } + + /** + * Effectue la compression du fichier + * @param bt Arbre de Huffman + * @param file Fichier d'entrée, le fichier à compresser + * @return Résultat de la compression + */ + public static String do_compression(BinaryTree bt, ParsedFile file) { + String result = ""; + ArrayList content = file.getContent(); + + for(String line:content) { + for (int i = 0; i < line.length(); i++) + result += getCode(bt,line.charAt(i)); + + result += getCode(bt,'\n'); + } + + return result; + } + + /** + * Permet de récupérer le code de Huffman (cf. p576 du livre de référence Data Structure & Algorithms in Java) + * @param bt Abre + * @param c Caractère dont nous cherchons le code + * @return retourne le code recherché + */ + public static String getCode(BinaryTree bt, Character c) { + String result = ""; + + if(bt.isExternal()) + return ""; + else if (bt.getLeft().getValue() == c) + return "0"; + else if (bt.getRight().getValue() == c) + return "1"; + else { + String leftCode ; + String rightCode ; + + if(!(leftCode=getCode(bt.getLeft(),c)).equals("")) + return "0" + leftCode; + else if(!(rightCode=getCode(bt.getRight(),c)).equals("")) + return "1" + rightCode; + } + + return result; + } + + /** + * Affiche le contenu de l'arbre binaire + * @param freqTree Arbre + * @param s Chaîne de caractère supplémentaire + * @return Contenu de l'arbre binaire + */ + public static String catTree(BinaryTree freqTree, String s) { + String result = freqTree.toString(); + treeLength = result.length(); + + return result + s; + } + + /** + * Écrit le fichier de sortie (plus spécifique que la fonction de ParsedFile) + * @param outputFilePath Chemin relatif/absolu du fichier + * @param toOutput Contenu du fichier + */ + public static void writeFile(String outputFilePath, String toOutput) { + try { + // Ouverture du flux de sortie + OutputBitStream out = new OutputBitStream(outputFilePath); + out.write(textLength); // 1er �l�ment du fichier compress� : la taille du texte (sur les 32 premiers bits) + out.write(treeLength); // 2�me �l�ment du fichier compress� : la taille de l'arbre (sur les 32 bits suivants) + for (int i = 0 ; i < toOutput.length() ; i++) { + if (i < treeLength) + out.write(toOutput.charAt(i)); // on �crit l'arbre en binaire + else if (toOutput.charAt(i) == '1') + out.write(BIT_1); + else if (toOutput.charAt(i) == '0') + out.write(BIT_1); // BUG HERE, ALWAYS 1 + } + + // Fermeture du flux de sortie + out.close(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Exception, arrêt du programme. "); + } + } +} + +class BinaryTree +{ + + private BinaryTree left; + private BinaryTree right; + private int key; + private char value; + + /** + * CONSTRUCTEURS + */ + + /* CONSTRUCTEUR + * Construit un arbre élémentaire correspondant à l'expression vide "" + */ + public BinaryTree(int k, char o) { + key = k; + value = o; + } + + public BinaryTree(int k, BinaryTree l, BinaryTree r) { + key = k; + left = l; + right = r; + } + public BinaryTree(String s) { + Stack stack = new Stack(); + int i = 0; + while(i < s.length()) { + + if (s.charAt(i) == '[' || s.charAt(i) == '"' || s.charAt(i) == '>' || s.charAt(i) == ',' || s.charAt(i) == '|') + i++; // on skip le caractere en question + + else if (s.charAt(i) == '<') { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + i++; // on skip le < + while (s.charAt(i) != ',') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + i+=2; // on skippe la , et le " ouvrant + BinaryTree T = new BinaryTree(Integer.parseInt(temp), s.charAt(i)); + i+=3; // on skippe la lettre, le " fermant et le > + stack.push(T); + } + else if (isNumerical(s.charAt(i))) { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + while (s.charAt(i) != '|') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + BinaryTree T = new BinaryTree(Integer.parseInt(temp), '?'); // ? signifie que c'est un noeud interne + stack.push(T); + i++; // on skip le '|' + } + else if (s.charAt(i) == ']') { + BinaryTree T2 = stack.pop(); + BinaryTree T = stack.pop(); + int val = T.getKey(); + BinaryTree T1 = stack.pop(); + stack.push(new BinaryTree(val, T1, T2)); + i++; + } + else + i++; // caractere indefini, on skip simplement (exemple : le null au debut) + } + BinaryTree T = stack.pop(); + left = T.getLeft(); + right = T.getRight(); + key = T.getKey(); + value = T.getValue(); + } + + public boolean isExternal() { + return !hasLeft() && !hasRight(); + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getLeft() { + return left; + } + + public void setLeft(BinaryTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getRight() { + return right; + } + + public void setRight(BinaryTree right) { + this.right = right; + } + + public char getValue() { + return value; + } + + public void setValue(char value) { + this.value = value; + } + + public int getKey() { + return key; + } + + public void setKey(int key) { + this.key = key; + } + + public String toString() { + if(!isExternal()) + return "["+left.toString()+"|"+key+"|"+right.toString()+"]"; + else + return "<"+key+","+"\""+value+"\""+">"; + } + + public boolean isNumerical(char c) // deja implemente par Java ?? + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } +} + +class SimpleEntry extends + AbstractMap.SimpleEntry implements Comparable{ + + public SimpleEntry(K arg0, V arg1) { + super(arg0, arg1); + } + + public int compareTo(SimpleEntry e) + { + return this.getKey().toString().compareTo(e.getKey().toString()); + } + + @Override + @SuppressWarnings("unchecked") + public int compareTo(Object o) { + if(o instanceof SimpleEntry) + { + SimpleEntry e = (SimpleEntry) o; + return this.getKey().toString().compareTo(e.getKey().toString()); + } + else return 0; + } + + public String toString() + { + return "<"+this.getKey().toString()+","+this.getValue().toString()+">"; + } +} + +/** + * Classe permettant de lire n'importe quel fichier ASCII, quelque soit son format + * @author Lionel Lebon + */ +class ParsedFile { + + private ArrayList content; + + /* + * CONSTRUCTEUR + */ + public ParsedFile(String path) { + content = readFile(path); + } + + /* + * FUNCTIONS + */ + public ArrayList getContent() { return this.content; } + + /** + * Lecture du fichier + * @param path Chemin absolu/relatif du fichier à parser + * @return ArrayList + */ + private ArrayList readFile(String path) { + BufferedReader input = null; + String line = null; + + // Tableau de String (on veut traiter indépendamment chaque commande) + ArrayList content = new ArrayList(); + + try{ + input = new BufferedReader(new FileReader(path)); + String s = input.readLine(); + + while(s != null) { + content.add(s); + s = input.readLine(); + } + } catch(FileNotFoundException e) { + e.printStackTrace(); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(input != null) + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return content; + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1) { + writeFile(path, content1, false); + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param append si true, alors on écrit à la fin du fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1, boolean append) { + PrintWriter output = null; + + try { + output = new PrintWriter(new FileWriter(path, append)); + output.print(content1); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(output != null) { + try { + output.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + } + + /** + * Supprime un fichier + * @param path Chemin absolu/relatif du fichier à supprimer + */ + public static void deleteFile(String path) { + try { + File file = new File(path); + file.delete(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * Taille d'un fichier + * @param path Chemin absolu/relatif du fichier + */ + public static long sizeFile(String path) { + File file = new File(path); + return file.length(); + } +} + + +/** + * Classe permettant de chronométrer le temps d'exécution d'un code. + * @author Lionel Lebon + */ +class Chrono { + static long m_start; + static long m_stop; + + /** + * Lance le chronomètre + */ + public static void start() { + m_start = System.currentTimeMillis(); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console (fait appel à stop("")) + */ + public static void stop() { + stop(""); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console + * @param content String permettant de différencier ce temps d'exécution par rapport à d'autres + */ + public static void stop(String content) { + m_stop = System.currentTimeMillis(); + //System.out.println("Temps d'exécution " + content + ": " + (m_stop - m_start) + " ms"); + } +} diff --git a/lost+found/BuggyCompress2.java-J568O6 b/lost+found/BuggyCompress2.java-J568O6 new file mode 100644 index 00000000..e837dc8e --- /dev/null +++ b/lost+found/BuggyCompress2.java-J568O6 @@ -0,0 +1,547 @@ +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.LinkedHashMap; +import java.io.*; +import java.util.Stack; +import java.lang.Comparable; + +/* Buggy version of the solution of Simon Hardy for the compression (mission 5) */ + +public class Compress { + + public static final boolean BIT_1 = true; + public static final boolean BIT_0 = false; + private static int treeLength; // taille de l'arbre en nombre de chars (16 bits par char) + private static int textLength = 0; // taille totale du texte à compresser (nécessaire pour virer les 0 à la fin) + + /** + * MAIN + */ + public static void main(String [] args) { + compress(args[0], args[1]); + } + + /* + * FUNCTIONS + */ + + /** + * Compresse un fichier compressé + * @param inputFilePath Fichier d'entrée, ce fichier sera compressé après l'opération + * @param outputFilePath Fichier de sortie, ce fichier correspond au fichier compressé + */ + public static void compress(String inputFilePath, String outputFilePath) { + Chrono.start(); + + ParsedFile file = new ParsedFile(inputFilePath); + + LinkedHashMap freqMap = computeFrequency(file); + + BinaryTree freqTree = computeTree(freqMap); + + String compressedFile = do_compression(freqTree, file); + String outputFile = catTree(freqTree, compressedFile); + writeFile(outputFilePath, outputFile); // Écrit la taille de l'arbre en binaire sur 32 bits, l'arbre en binaire (char par char) puis les bits issus de la compression du fichier d'entr�e. + + Chrono.stop(); + + // Calcul du taux de compression + long file1 = ParsedFile.sizeFile(inputFilePath); + long file2 = ParsedFile.sizeFile(outputFilePath); + //System.out.println(""); + //System.out.println("Size fichier entrée: " + file1); + //System.out.println("Size fichier compressé: " + file2); + //System.out.println("Taux de compression: " + ((double)file1 / (double)file2)); + + } + + /** + * Calcul la fréquence de chaque caractère + * @param file Fichier d'entrée, le fichier à traiter + * @return HashMap contenant la fréquence de chaque caractère de la chaîne de caractère d'entrée (fichier) + */ + public static LinkedHashMap computeFrequency(ParsedFile file) { + LinkedHashMap map = new LinkedHashMap(); + // Table utilis�e pour r�cupere les fr�quences. + ArrayList content = file.getContent(); + textLength=0; // WITHOUT THIS, IT WOULD FAIL WITH THE SECOND COMPRESSION... + for(String s : content) { + textLength++; // pour compter les passages � la ligne + for(int i = 0; i < s.length() ;i++) { + textLength++; // pour compter le nombre de caract�res sur une m�me ligne + char c = s.charAt(i); + + if(map.get(c) != null) + map.put(c, map.remove(c)+1); + else + map.put(c,1); + } + + if(map.get('\n') != null) + map.put('\n', map.remove('\n')+1); + else + map.put('\n',1); + } + + return map; + } + + /** + * Création de l'arbre nécessaire pour la compression (Arbre de Huffman) + * @param map Table de fréquence des caractères + * @return Arbre de Huffman + */ + public static BinaryTree computeTree(LinkedHashMap map) { + // File de priorit� utilis�e dans la cr�ation de l'arbre pour la compression de Huffman + PriorityQueue> queue = new PriorityQueue>(); + Iterator it = map.keySet().iterator(); + + while (it.hasNext()) { + // Parcours de chaque �l�ment de la table de fr�quence (en cours de construction, donc de la map) + char c = it.next(); + int key = map.get(c); + + SimpleEntry e = new SimpleEntry(map.get(c),new BinaryTree(key,c)); + // Ajout dans la file de priorit� la feuille contenant le caract�re avec sa fr�quence comme cl� + queue.add(e); + + it.remove(); + } + + while(queue.size() > 1) { + // On vas vider la file de priorit� pour cr�er l'arbre de codage de la compression de Huffman + SimpleEntry e1 = queue.poll(); + SimpleEntry e2 = queue.poll(); + SimpleEntry eOut = + new SimpleEntry + (e1.getKey() + e2.getKey(), + new BinaryTree( + e1.getKey()+e2.getKey(), + e2.getValue(), + e1.getValue())); + queue.add(eOut); + } + if (queue.isEmpty()) return new BinaryTree(0, '0'); + return queue.remove().getValue(); + } + + /** + * Effectue la compression du fichier + * @param bt Arbre de Huffman + * @param file Fichier d'entrée, le fichier à compresser + * @return Résultat de la compression + */ + public static String do_compression(BinaryTree bt, ParsedFile file) { + String result = ""; + ArrayList content = file.getContent(); + int j = 0; + for(String line:content) { + for (int i = 0; i < line.length(); i++) { + if (j != 0) result += getCode(bt,line.charAt(i)); // BUG HERE : FORGETS THE FIRST CHARACTER + j++; + } + + result += getCode(bt,'\n'); + } + + return result; + } + + /** + * Permet de récupérer le code de Huffman (cf. p576 du livre de référence Data Structure & Algorithms in Java) + * @param bt Abre + * @param c Caractère dont nous cherchons le code + * @return retourne le code recherché + */ + public static String getCode(BinaryTree bt, Character c) { + String result = ""; + + if(bt.isExternal()) + return ""; + else if (bt.getLeft().getValue() == c) + return "0"; + else if (bt.getRight().getValue() == c) + return "1"; + else { + String leftCode ; + String rightCode ; + + if(!(leftCode=getCode(bt.getLeft(),c)).equals("")) + return "0" + leftCode; + else if(!(rightCode=getCode(bt.getRight(),c)).equals("")) + return "1" + rightCode; + } + + return result; + } + + /** + * Affiche le contenu de l'arbre binaire + * @param freqTree Arbre + * @param s Chaîne de caractère supplémentaire + * @return Contenu de l'arbre binaire + */ + public static String catTree(BinaryTree freqTree, String s) { + String result = freqTree.toString(); + treeLength = result.length(); + + return result + s; + } + + /** + * Écrit le fichier de sortie (plus spécifique que la fonction de ParsedFile) + * @param outputFilePath Chemin relatif/absolu du fichier + * @param toOutput Contenu du fichier + */ + public static void writeFile(String outputFilePath, String toOutput) { + try { + // Ouverture du flux de sortie + OutputBitStream out = new OutputBitStream(outputFilePath); + out.write(textLength); // 1er �l�ment du fichier compress� : la taille du texte (sur les 32 premiers bits) + out.write(treeLength); // 2�me �l�ment du fichier compress� : la taille de l'arbre (sur les 32 bits suivants) + for (int i = 0 ; i < toOutput.length() ; i++) { + if (i < treeLength) + out.write(toOutput.charAt(i)); // on �crit l'arbre en binaire + else if (toOutput.charAt(i) == '1') + out.write(BIT_1); + else if (toOutput.charAt(i) == '0') + out.write(BIT_0); + } + + // Fermeture du flux de sortie + out.close(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Exception, arrêt du programme. "); + } + } +} + +class BinaryTree +{ + + private BinaryTree left; + private BinaryTree right; + private int key; + private char value; + + /** + * CONSTRUCTEURS + */ + + /* CONSTRUCTEUR + * Construit un arbre élémentaire correspondant à l'expression vide "" + */ + public BinaryTree(int k, char o) { + key = k; + value = o; + } + + public BinaryTree(int k, BinaryTree l, BinaryTree r) { + key = k; + left = l; + right = r; + } + public BinaryTree(String s) { + Stack stack = new Stack(); + int i = 0; + while(i < s.length()) { + + if (s.charAt(i) == '[' || s.charAt(i) == '"' || s.charAt(i) == '>' || s.charAt(i) == ',' || s.charAt(i) == '|') + i++; // on skip le caractere en question + + else if (s.charAt(i) == '<') { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + i++; // on skip le < + while (s.charAt(i) != ',') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + i+=2; // on skippe la , et le " ouvrant + BinaryTree T = new BinaryTree(Integer.parseInt(temp), s.charAt(i)); + i+=3; // on skippe la lettre, le " fermant et le > + stack.push(T); + } + else if (isNumerical(s.charAt(i))) { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + while (s.charAt(i) != '|') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + BinaryTree T = new BinaryTree(Integer.parseInt(temp), '?'); // ? signifie que c'est un noeud interne + stack.push(T); + i++; // on skip le '|' + } + else if (s.charAt(i) == ']') { + BinaryTree T2 = stack.pop(); + BinaryTree T = stack.pop(); + int val = T.getKey(); + BinaryTree T1 = stack.pop(); + stack.push(new BinaryTree(val, T1, T2)); + i++; + } + else + i++; // caractere indefini, on skip simplement (exemple : le null au debut) + } + BinaryTree T = stack.pop(); + left = T.getLeft(); + right = T.getRight(); + key = T.getKey(); + value = T.getValue(); + } + + public boolean isExternal() { + return !hasLeft() && !hasRight(); + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getLeft() { + return left; + } + + public void setLeft(BinaryTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getRight() { + return right; + } + + public void setRight(BinaryTree right) { + this.right = right; + } + + public char getValue() { + return value; + } + + public void setValue(char value) { + this.value = value; + } + + public int getKey() { + return key; + } + + public void setKey(int key) { + this.key = key; + } + + public String toString() { + if(!isExternal()) + return "["+left.toString()+"|"+key+"|"+right.toString()+"]"; + else + return "<"+key+","+"\""+value+"\""+">"; + } + + public boolean isNumerical(char c) // deja implemente par Java ?? + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } +} + +class SimpleEntry extends + AbstractMap.SimpleEntry implements Comparable{ + + public SimpleEntry(K arg0, V arg1) { + super(arg0, arg1); + } + + public int compareTo(SimpleEntry e) + { + return this.getKey().toString().compareTo(e.getKey().toString()); + } + + @Override + @SuppressWarnings("unchecked") + public int compareTo(Object o) { + if(o instanceof SimpleEntry) + { + SimpleEntry e = (SimpleEntry) o; + return this.getKey().toString().compareTo(e.getKey().toString()); + } + else return 0; + } + + public String toString() + { + return "<"+this.getKey().toString()+","+this.getValue().toString()+">"; + } +} + +/** + * Classe permettant de lire n'importe quel fichier ASCII, quelque soit son format + * @author Lionel Lebon + */ +class ParsedFile { + + private ArrayList content; + + /* + * CONSTRUCTEUR + */ + public ParsedFile(String path) { + content = readFile(path); + } + + /* + * FUNCTIONS + */ + public ArrayList getContent() { return this.content; } + + /** + * Lecture du fichier + * @param path Chemin absolu/relatif du fichier à parser + * @return ArrayList + */ + private ArrayList readFile(String path) { + BufferedReader input = null; + String line = null; + + // Tableau de String (on veut traiter indépendamment chaque commande) + ArrayList content = new ArrayList(); + + try{ + input = new BufferedReader(new FileReader(path)); + String s = input.readLine(); + + while(s != null) { + content.add(s); + s = input.readLine(); + } + } catch(FileNotFoundException e) { + e.printStackTrace(); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(input != null) + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return content; + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1) { + writeFile(path, content1, false); + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param append si true, alors on écrit à la fin du fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1, boolean append) { + PrintWriter output = null; + + try { + output = new PrintWriter(new FileWriter(path, append)); + output.print(content1); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(output != null) { + try { + output.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + } + + /** + * Supprime un fichier + * @param path Chemin absolu/relatif du fichier à supprimer + */ + public static void deleteFile(String path) { + try { + File file = new File(path); + file.delete(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * Taille d'un fichier + * @param path Chemin absolu/relatif du fichier + */ + public static long sizeFile(String path) { + File file = new File(path); + return file.length(); + } +} + + +/** + * Classe permettant de chronométrer le temps d'exécution d'un code. + * @author Lionel Lebon + */ +class Chrono { + static long m_start; + static long m_stop; + + /** + * Lance le chronomètre + */ + public static void start() { + m_start = System.currentTimeMillis(); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console (fait appel à stop("")) + */ + public static void stop() { + stop(""); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console + * @param content String permettant de différencier ce temps d'exécution par rapport à d'autres + */ + public static void stop(String content) { + m_stop = System.currentTimeMillis(); + //System.out.println("Temps d'exécution " + content + ": " + (m_stop - m_start) + " ms"); + } +} diff --git a/lost+found/BuggyCompress3.java-ArgdDy b/lost+found/BuggyCompress3.java-ArgdDy new file mode 100644 index 00000000..1c686dd7 --- /dev/null +++ b/lost+found/BuggyCompress3.java-ArgdDy @@ -0,0 +1,547 @@ +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.LinkedHashMap; +import java.io.*; +import java.util.Stack; +import java.lang.Comparable; + +/* Buggy version of the solution of Simon Hardy for the compression (mission 5) */ + +public class Compress { + + public static final boolean BIT_1 = true; + public static final boolean BIT_0 = false; + private static int treeLength; // taille de l'arbre en nombre de chars (16 bits par char) + private static int textLength = 0; // taille totale du texte à compresser (nécessaire pour virer les 0 à la fin) + + /** + * MAIN + */ + public static void main(String [] args) { + compress(args[0], args[1]); + } + + /* + * FUNCTIONS + */ + + /** + * Compresse un fichier compressé + * @param inputFilePath Fichier d'entrée, ce fichier sera compressé après l'opération + * @param outputFilePath Fichier de sortie, ce fichier correspond au fichier compressé + */ + public static void compress(String inputFilePath, String outputFilePath) { + Chrono.start(); + + ParsedFile file = new ParsedFile(inputFilePath); + + LinkedHashMap freqMap = computeFrequency(file); + + BinaryTree freqTree = computeTree(freqMap); + + String compressedFile = do_compression(freqTree, file); + String outputFile = catTree(freqTree, compressedFile); + writeFile(outputFilePath, outputFile); // Écrit la taille de l'arbre en binaire sur 32 bits, l'arbre en binaire (char par char) puis les bits issus de la compression du fichier d'entr�e. + + Chrono.stop(); + + // Calcul du taux de compression + long file1 = ParsedFile.sizeFile(inputFilePath); + long file2 = ParsedFile.sizeFile(outputFilePath); + //System.out.println(""); + //System.out.println("Size fichier entrée: " + file1); + //System.out.println("Size fichier compressé: " + file2); + //System.out.println("Taux de compression: " + ((double)file1 / (double)file2)); + + } + + /** + * Calcul la fréquence de chaque caractère + * @param file Fichier d'entrée, le fichier à traiter + * @return HashMap contenant la fréquence de chaque caractère de la chaîne de caractère d'entrée (fichier) + */ + public static LinkedHashMap computeFrequency(ParsedFile file) { + LinkedHashMap map = new LinkedHashMap(); + // Table utilis�e pour r�cupere les fr�quences. + ArrayList content = file.getContent(); + textLength=0; // WITHOUT THIS, IT WOULD FAIL WITH THE SECOND COMPRESSION... + for(String s : content) { + textLength++; // pour compter les passages � la ligne + for(int i = 0; i < s.length() ;i++) { + textLength++; // pour compter le nombre de caract�res sur une m�me ligne + char c = s.charAt(i); + + if(map.get(c) != null) + map.put(c, map.remove(c)+1); + else + map.put(c,1); + } + + if(map.get('\n') != null) + map.put('\n', map.remove('\n')+1); + else + map.put('\n',1); + } + + return map; + } + + /** + * Création de l'arbre nécessaire pour la compression (Arbre de Huffman) + * @param map Table de fréquence des caractères + * @return Arbre de Huffman + */ + public static BinaryTree computeTree(LinkedHashMap map) { + // File de priorit� utilis�e dans la cr�ation de l'arbre pour la compression de Huffman + PriorityQueue> queue = new PriorityQueue>(); + Iterator it = map.keySet().iterator(); + + while (it.hasNext()) { + // Parcours de chaque �l�ment de la table de fr�quence (en cours de construction, donc de la map) + char c = it.next(); + int key = map.get(c); + + SimpleEntry e = new SimpleEntry(map.get(c),new BinaryTree(key,c)); + // Ajout dans la file de priorit� la feuille contenant le caract�re avec sa fr�quence comme cl� + queue.add(e); + + it.remove(); + } + + while(queue.size() > 1) { + // On vas vider la file de priorit� pour cr�er l'arbre de codage de la compression de Huffman + SimpleEntry e1 = queue.poll(); + SimpleEntry e2 = queue.poll(); + SimpleEntry eOut = + new SimpleEntry + (e1.getKey() + e2.getKey(), + new BinaryTree( + e1.getKey()+e2.getKey(), + e2.getValue(), + e1.getValue())); + queue.add(eOut); + } + if (queue.isEmpty()) return new BinaryTree(0, '0'); + return queue.remove().getValue(); + } + + /** + * Effectue la compression du fichier + * @param bt Arbre de Huffman + * @param file Fichier d'entrée, le fichier à compresser + * @return Résultat de la compression + */ + public static String do_compression(BinaryTree bt, ParsedFile file) { + String result = ""; + ArrayList content = file.getContent(); + int j = 0; + for(String line:content) { + for (int i = 0; i < line.length(); i++) { + if (j < 100) result += getCode(bt,line.charAt(i)); // BUG HERE : stops writing output after 100 characters + j++; + } + + result += getCode(bt,'\n'); + } + + return result; + } + + /** + * Permet de récupérer le code de Huffman (cf. p576 du livre de référence Data Structure & Algorithms in Java) + * @param bt Abre + * @param c Caractère dont nous cherchons le code + * @return retourne le code recherché + */ + public static String getCode(BinaryTree bt, Character c) { + String result = ""; + + if(bt.isExternal()) + return ""; + else if (bt.getLeft().getValue() == c) + return "0"; + else if (bt.getRight().getValue() == c) + return "1"; + else { + String leftCode ; + String rightCode ; + + if(!(leftCode=getCode(bt.getLeft(),c)).equals("")) + return "0" + leftCode; + else if(!(rightCode=getCode(bt.getRight(),c)).equals("")) + return "1" + rightCode; + } + + return result; + } + + /** + * Affiche le contenu de l'arbre binaire + * @param freqTree Arbre + * @param s Chaîne de caractère supplémentaire + * @return Contenu de l'arbre binaire + */ + public static String catTree(BinaryTree freqTree, String s) { + String result = freqTree.toString(); + treeLength = result.length(); + + return result + s; + } + + /** + * Écrit le fichier de sortie (plus spécifique que la fonction de ParsedFile) + * @param outputFilePath Chemin relatif/absolu du fichier + * @param toOutput Contenu du fichier + */ + public static void writeFile(String outputFilePath, String toOutput) { + try { + // Ouverture du flux de sortie + OutputBitStream out = new OutputBitStream(outputFilePath); + out.write(textLength); // 1er �l�ment du fichier compress� : la taille du texte (sur les 32 premiers bits) + out.write(treeLength); // 2�me �l�ment du fichier compress� : la taille de l'arbre (sur les 32 bits suivants) + for (int i = 0 ; i < toOutput.length() ; i++) { + if (i < treeLength) + out.write(toOutput.charAt(i)); // on �crit l'arbre en binaire + else if (toOutput.charAt(i) == '1') + out.write(BIT_1); + else if (toOutput.charAt(i) == '0') + out.write(BIT_0); + } + + // Fermeture du flux de sortie + out.close(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Exception, arrêt du programme. "); + } + } +} + +class BinaryTree +{ + + private BinaryTree left; + private BinaryTree right; + private int key; + private char value; + + /** + * CONSTRUCTEURS + */ + + /* CONSTRUCTEUR + * Construit un arbre élémentaire correspondant à l'expression vide "" + */ + public BinaryTree(int k, char o) { + key = k; + value = o; + } + + public BinaryTree(int k, BinaryTree l, BinaryTree r) { + key = k; + left = l; + right = r; + } + public BinaryTree(String s) { + Stack stack = new Stack(); + int i = 0; + while(i < s.length()) { + + if (s.charAt(i) == '[' || s.charAt(i) == '"' || s.charAt(i) == '>' || s.charAt(i) == ',' || s.charAt(i) == '|') + i++; // on skip le caractere en question + + else if (s.charAt(i) == '<') { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + i++; // on skip le < + while (s.charAt(i) != ',') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + i+=2; // on skippe la , et le " ouvrant + BinaryTree T = new BinaryTree(Integer.parseInt(temp), s.charAt(i)); + i+=3; // on skippe la lettre, le " fermant et le > + stack.push(T); + } + else if (isNumerical(s.charAt(i))) { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + while (s.charAt(i) != '|') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + BinaryTree T = new BinaryTree(Integer.parseInt(temp), '?'); // ? signifie que c'est un noeud interne + stack.push(T); + i++; // on skip le '|' + } + else if (s.charAt(i) == ']') { + BinaryTree T2 = stack.pop(); + BinaryTree T = stack.pop(); + int val = T.getKey(); + BinaryTree T1 = stack.pop(); + stack.push(new BinaryTree(val, T1, T2)); + i++; + } + else + i++; // caractere indefini, on skip simplement (exemple : le null au debut) + } + BinaryTree T = stack.pop(); + left = T.getLeft(); + right = T.getRight(); + key = T.getKey(); + value = T.getValue(); + } + + public boolean isExternal() { + return !hasLeft() && !hasRight(); + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getLeft() { + return left; + } + + public void setLeft(BinaryTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getRight() { + return right; + } + + public void setRight(BinaryTree right) { + this.right = right; + } + + public char getValue() { + return value; + } + + public void setValue(char value) { + this.value = value; + } + + public int getKey() { + return key; + } + + public void setKey(int key) { + this.key = key; + } + + public String toString() { + if(!isExternal()) + return "["+left.toString()+"|"+key+"|"+right.toString()+"]"; + else + return "<"+key+","+"\""+value+"\""+">"; + } + + public boolean isNumerical(char c) // deja implemente par Java ?? + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } +} + +class SimpleEntry extends + AbstractMap.SimpleEntry implements Comparable{ + + public SimpleEntry(K arg0, V arg1) { + super(arg0, arg1); + } + + public int compareTo(SimpleEntry e) + { + return this.getKey().toString().compareTo(e.getKey().toString()); + } + + @Override + @SuppressWarnings("unchecked") + public int compareTo(Object o) { + if(o instanceof SimpleEntry) + { + SimpleEntry e = (SimpleEntry) o; + return this.getKey().toString().compareTo(e.getKey().toString()); + } + else return 0; + } + + public String toString() + { + return "<"+this.getKey().toString()+","+this.getValue().toString()+">"; + } +} + +/** + * Classe permettant de lire n'importe quel fichier ASCII, quelque soit son format + * @author Lionel Lebon + */ +class ParsedFile { + + private ArrayList content; + + /* + * CONSTRUCTEUR + */ + public ParsedFile(String path) { + content = readFile(path); + } + + /* + * FUNCTIONS + */ + public ArrayList getContent() { return this.content; } + + /** + * Lecture du fichier + * @param path Chemin absolu/relatif du fichier à parser + * @return ArrayList + */ + private ArrayList readFile(String path) { + BufferedReader input = null; + String line = null; + + // Tableau de String (on veut traiter indépendamment chaque commande) + ArrayList content = new ArrayList(); + + try{ + input = new BufferedReader(new FileReader(path)); + String s = input.readLine(); + + while(s != null) { + content.add(s); + s = input.readLine(); + } + } catch(FileNotFoundException e) { + e.printStackTrace(); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(input != null) + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return content; + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1) { + writeFile(path, content1, false); + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param append si true, alors on écrit à la fin du fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1, boolean append) { + PrintWriter output = null; + + try { + output = new PrintWriter(new FileWriter(path, append)); + output.print(content1); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(output != null) { + try { + output.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + } + + /** + * Supprime un fichier + * @param path Chemin absolu/relatif du fichier à supprimer + */ + public static void deleteFile(String path) { + try { + File file = new File(path); + file.delete(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * Taille d'un fichier + * @param path Chemin absolu/relatif du fichier + */ + public static long sizeFile(String path) { + File file = new File(path); + return file.length(); + } +} + + +/** + * Classe permettant de chronométrer le temps d'exécution d'un code. + * @author Lionel Lebon + */ +class Chrono { + static long m_start; + static long m_stop; + + /** + * Lance le chronomètre + */ + public static void start() { + m_start = System.currentTimeMillis(); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console (fait appel à stop("")) + */ + public static void stop() { + stop(""); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console + * @param content String permettant de différencier ce temps d'exécution par rapport à d'autres + */ + public static void stop(String content) { + m_stop = System.currentTimeMillis(); + //System.out.println("Temps d'exécution " + content + ": " + (m_stop - m_start) + " ms"); + } +} diff --git a/lost+found/BuggyCompress4.java-EPTKC0 b/lost+found/BuggyCompress4.java-EPTKC0 new file mode 100644 index 00000000..e8c7a07f --- /dev/null +++ b/lost+found/BuggyCompress4.java-EPTKC0 @@ -0,0 +1,549 @@ +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.LinkedHashMap; +import java.io.*; +import java.util.Stack; +import java.lang.Comparable; + +/* Buggy version of the solution of Simon Hardy for the compression (mission 5) + * This one is harder : the bug that the compressed file is larger than the input file */ + +public class Compress { + + public static final boolean BIT_1 = true; + public static final boolean BIT_0 = false; + private static int treeLength; // taille de l'arbre en nombre de chars (16 bits par char) + private static int textLength = 0; // taille totale du texte à compresser (nécessaire pour virer les 0 à la fin) + + /** + * MAIN + */ + public static void main(String [] args) { + compress(args[0], args[1]); + } + + /* + * FUNCTIONS + */ + + /** + * Compresse un fichier compressé + * @param inputFilePath Fichier d'entrée, ce fichier sera compressé après l'opération + * @param outputFilePath Fichier de sortie, ce fichier correspond au fichier compressé + */ + public static void compress(String inputFilePath, String outputFilePath) { + Chrono.start(); + + ParsedFile file = new ParsedFile(inputFilePath); + + LinkedHashMap freqMap = computeFrequency(file); + + BinaryTree freqTree = computeTree(freqMap); + + String compressedFile = do_compression(freqTree, file); + String outputFile = catTree(freqTree, compressedFile); + writeFile(outputFilePath, outputFile); // Écrit la taille de l'arbre en binaire sur 32 bits, l'arbre en binaire (char par char) puis les bits issus de la compression du fichier d'entr�e. + + Chrono.stop(); + + // Calcul du taux de compression + long file1 = ParsedFile.sizeFile(inputFilePath); + long file2 = ParsedFile.sizeFile(outputFilePath); + //System.out.println(""); + //System.out.println("Size fichier entrée: " + file1); + //System.out.println("Size fichier compressé: " + file2); + //System.out.println("Taux de compression: " + ((double)file1 / (double)file2)); + + } + + /** + * Calcul la fréquence de chaque caractère + * @param file Fichier d'entrée, le fichier à traiter + * @return HashMap contenant la fréquence de chaque caractère de la chaîne de caractère d'entrée (fichier) + */ + public static LinkedHashMap computeFrequency(ParsedFile file) { + LinkedHashMap map = new LinkedHashMap(); + // Table utilis�e pour r�cupere les fr�quences. + ArrayList content = file.getContent(); + textLength=0; // WITHOUT THIS, IT WOULD FAIL WITH THE SECOND COMPRESSION... + for(String s : content) { + textLength++; // pour compter les passages � la ligne + for(int i = 0; i < s.length() ;i++) { + textLength++; // pour compter le nombre de caract�res sur une m�me ligne + char c = s.charAt(i); + + if(map.get(c) != null) + map.put(c, map.remove(c)+1); + else + map.put(c,1); + } + + if(map.get('\n') != null) + map.put('\n', map.remove('\n')+1); + else + map.put('\n',1); + } + + return map; + } + + /** + * Création de l'arbre nécessaire pour la compression (Arbre de Huffman) + * @param map Table de fréquence des caractères + * @return Arbre de Huffman + */ + public static BinaryTree computeTree(LinkedHashMap map) { + // File de priorit� utilis�e dans la cr�ation de l'arbre pour la compression de Huffman + PriorityQueue> queue = new PriorityQueue>(); + Iterator it = map.keySet().iterator(); + + while (it.hasNext()) { + // Parcours de chaque �l�ment de la table de fr�quence (en cours de construction, donc de la map) + char c = it.next(); + int key = map.get(c); + + SimpleEntry e = new SimpleEntry(map.get(c),new BinaryTree(key,c)); + // Ajout dans la file de priorit� la feuille contenant le caract�re avec sa fr�quence comme cl� + queue.add(e); + + it.remove(); + } + + while(queue.size() > 1) { + // On vas vider la file de priorit� pour cr�er l'arbre de codage de la compression de Huffman + SimpleEntry e1 = queue.poll(); + SimpleEntry e2 = queue.poll(); + SimpleEntry eOut = + new SimpleEntry + (e1.getKey() + e2.getKey(), + new BinaryTree( + e1.getKey()+e2.getKey(), + e2.getValue(), + e1.getValue())); + queue.add(eOut); + } + if (queue.isEmpty()) return new BinaryTree(0, '0'); + return queue.remove().getValue(); + } + + /** + * Effectue la compression du fichier + * @param bt Arbre de Huffman + * @param file Fichier d'entrée, le fichier à compresser + * @return Résultat de la compression + */ + public static String do_compression(BinaryTree bt, ParsedFile file) { + String result = ""; + ArrayList content = file.getContent(); + + for(String line:content) { + for (int i = 0; i < line.length(); i++) + result += getCode(bt,line.charAt(i)); + + result += getCode(bt,'\n'); + } + + return result; + } + + /** + * Permet de récupérer le code de Huffman (cf. p576 du livre de référence Data Structure & Algorithms in Java) + * @param bt Abre + * @param c Caractère dont nous cherchons le code + * @return retourne le code recherché + */ + public static String getCode(BinaryTree bt, Character c) { + String result = ""; + + if(bt.isExternal()) + return ""; + else if (bt.getLeft().getValue() == c) + return "0"; + else if (bt.getRight().getValue() == c) + return "1"; + else { + String leftCode ; + String rightCode ; + + if(!(leftCode=getCode(bt.getLeft(),c)).equals("")) + return "0" + leftCode; + else if(!(rightCode=getCode(bt.getRight(),c)).equals("")) + return "1" + rightCode; + } + + return result; + } + + /** + * Affiche le contenu de l'arbre binaire + * @param freqTree Arbre + * @param s Chaîne de caractère supplémentaire + * @return Contenu de l'arbre binaire + */ + public static String catTree(BinaryTree freqTree, String s) { + String result = freqTree.toString(); + treeLength = result.length(); + + return result + s; + } + + /** + * Écrit le fichier de sortie (plus spécifique que la fonction de ParsedFile) + * @param outputFilePath Chemin relatif/absolu du fichier + * @param toOutput Contenu du fichier + */ + public static void writeFile(String outputFilePath, String toOutput) { + try { + // Ouverture du flux de sortie + OutputBitStream out = new OutputBitStream(outputFilePath); + out.write(textLength); // 1er �l�ment du fichier compress� : la taille du texte (sur les 32 premiers bits) + out.write(treeLength); // 2�me �l�ment du fichier compress� : la taille de l'arbre (sur les 32 bits suivants) + for (int i = 0 ; i < toOutput.length() ; i++) { + if (i < treeLength) + out.write(toOutput.charAt(i)); // on �crit l'arbre en binaire + else if (toOutput.charAt(i) == '1') + out.write(BIT_1); + else if (toOutput.charAt(i) == '0') + out.write(BIT_0); + } + // BUG HERE : add useless bits at the end of the compressed file + for (int i = 0 ; i < textLength ; i++) + out.write('A'); + + // Fermeture du flux de sortie + out.close(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Exception, arrêt du programme. "); + } + } +} + +class BinaryTree +{ + + private BinaryTree left; + private BinaryTree right; + private int key; + private char value; + + /** + * CONSTRUCTEURS + */ + + /* CONSTRUCTEUR + * Construit un arbre élémentaire correspondant à l'expression vide "" + */ + public BinaryTree(int k, char o) { + key = k; + value = o; + } + + public BinaryTree(int k, BinaryTree l, BinaryTree r) { + key = k; + left = l; + right = r; + } + public BinaryTree(String s) { + Stack stack = new Stack(); + int i = 0; + while(i < s.length()) { + + if (s.charAt(i) == '[' || s.charAt(i) == '"' || s.charAt(i) == '>' || s.charAt(i) == ',' || s.charAt(i) == '|') + i++; // on skip le caractere en question + + else if (s.charAt(i) == '<') { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + i++; // on skip le < + while (s.charAt(i) != ',') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + i+=2; // on skippe la , et le " ouvrant + BinaryTree T = new BinaryTree(Integer.parseInt(temp), s.charAt(i)); + i+=3; // on skippe la lettre, le " fermant et le > + stack.push(T); + } + else if (isNumerical(s.charAt(i))) { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + while (s.charAt(i) != '|') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + BinaryTree T = new BinaryTree(Integer.parseInt(temp), '?'); // ? signifie que c'est un noeud interne + stack.push(T); + i++; // on skip le '|' + } + else if (s.charAt(i) == ']') { + BinaryTree T2 = stack.pop(); + BinaryTree T = stack.pop(); + int val = T.getKey(); + BinaryTree T1 = stack.pop(); + stack.push(new BinaryTree(val, T1, T2)); + i++; + } + else + i++; // caractere indefini, on skip simplement (exemple : le null au debut) + } + BinaryTree T = stack.pop(); + left = T.getLeft(); + right = T.getRight(); + key = T.getKey(); + value = T.getValue(); + } + + public boolean isExternal() { + return !hasLeft() && !hasRight(); + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getLeft() { + return left; + } + + public void setLeft(BinaryTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getRight() { + return right; + } + + public void setRight(BinaryTree right) { + this.right = right; + } + + public char getValue() { + return value; + } + + public void setValue(char value) { + this.value = value; + } + + public int getKey() { + return key; + } + + public void setKey(int key) { + this.key = key; + } + + public String toString() { + if(!isExternal()) + return "["+left.toString()+"|"+key+"|"+right.toString()+"]"; + else + return "<"+key+","+"\""+value+"\""+">"; + } + + public boolean isNumerical(char c) // deja implemente par Java ?? + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } +} + +class SimpleEntry extends + AbstractMap.SimpleEntry implements Comparable{ + + public SimpleEntry(K arg0, V arg1) { + super(arg0, arg1); + } + + public int compareTo(SimpleEntry e) + { + return this.getKey().toString().compareTo(e.getKey().toString()); + } + + @Override + @SuppressWarnings("unchecked") + public int compareTo(Object o) { + if(o instanceof SimpleEntry) + { + SimpleEntry e = (SimpleEntry) o; + return this.getKey().toString().compareTo(e.getKey().toString()); + } + else return 0; + } + + public String toString() + { + return "<"+this.getKey().toString()+","+this.getValue().toString()+">"; + } +} + +/** + * Classe permettant de lire n'importe quel fichier ASCII, quelque soit son format + * @author Lionel Lebon + */ +class ParsedFile { + + private ArrayList content; + + /* + * CONSTRUCTEUR + */ + public ParsedFile(String path) { + content = readFile(path); + } + + /* + * FUNCTIONS + */ + public ArrayList getContent() { return this.content; } + + /** + * Lecture du fichier + * @param path Chemin absolu/relatif du fichier à parser + * @return ArrayList + */ + private ArrayList readFile(String path) { + BufferedReader input = null; + String line = null; + + // Tableau de String (on veut traiter indépendamment chaque commande) + ArrayList content = new ArrayList(); + + try{ + input = new BufferedReader(new FileReader(path)); + String s = input.readLine(); + + while(s != null) { + content.add(s); + s = input.readLine(); + } + } catch(FileNotFoundException e) { + e.printStackTrace(); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(input != null) + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return content; + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1) { + writeFile(path, content1, false); + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param append si true, alors on écrit à la fin du fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1, boolean append) { + PrintWriter output = null; + + try { + output = new PrintWriter(new FileWriter(path, append)); + output.print(content1); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(output != null) { + try { + output.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + } + + /** + * Supprime un fichier + * @param path Chemin absolu/relatif du fichier à supprimer + */ + public static void deleteFile(String path) { + try { + File file = new File(path); + file.delete(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * Taille d'un fichier + * @param path Chemin absolu/relatif du fichier + */ + public static long sizeFile(String path) { + File file = new File(path); + return file.length(); + } +} + + +/** + * Classe permettant de chronométrer le temps d'exécution d'un code. + * @author Lionel Lebon + */ +class Chrono { + static long m_start; + static long m_stop; + + /** + * Lance le chronomètre + */ + public static void start() { + m_start = System.currentTimeMillis(); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console (fait appel à stop("")) + */ + public static void stop() { + stop(""); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console + * @param content String permettant de différencier ce temps d'exécution par rapport à d'autres + */ + public static void stop(String content) { + m_stop = System.currentTimeMillis(); + //System.out.println("Temps d'exécution " + content + ": " + (m_stop - m_start) + " ms"); + } +} diff --git a/lost+found/BuggyExpressionTree1.java-6N21Vd b/lost+found/BuggyExpressionTree1.java-6N21Vd new file mode 100644 index 00000000..fb9b1582 --- /dev/null +++ b/lost+found/BuggyExpressionTree1.java-6N21Vd @@ -0,0 +1,739 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); // BUG HERE + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyExpressionTree2.java-Opvo9r b/lost+found/BuggyExpressionTree2.java-Opvo9r new file mode 100644 index 00000000..d75a6d3b --- /dev/null +++ b/lost+found/BuggyExpressionTree2.java-Opvo9r @@ -0,0 +1,739 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)) + 42; + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyExpressionTree3.java-h45yxG b/lost+found/BuggyExpressionTree3.java-h45yxG new file mode 100644 index 00000000..d2e348ec --- /dev/null +++ b/lost+found/BuggyExpressionTree3.java-h45yxG @@ -0,0 +1,744 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + // BUG HERE + if (c == '^') + e.setExpression("*"); + else + e.setExpression("" + c); + + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyExpressionTree4.java-kpqiZU b/lost+found/BuggyExpressionTree4.java-kpqiZU new file mode 100644 index 00000000..83ad1412 --- /dev/null +++ b/lost+found/BuggyExpressionTree4.java-kpqiZU @@ -0,0 +1,739 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 1; // BUG HERE + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyExpressionTree5.java-W5Oou9 b/lost+found/BuggyExpressionTree5.java-W5Oou9 new file mode 100644 index 00000000..ac47a9a4 --- /dev/null +++ b/lost+found/BuggyExpressionTree5.java-W5Oou9 @@ -0,0 +1,743 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + // BUG HERE + if (c == '/') + e.setExpression("^"); + else + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyExpressionTree6.java-xpn23n b/lost+found/BuggyExpressionTree6.java-xpn23n new file mode 100644 index 00000000..b96e806e --- /dev/null +++ b/lost+found/BuggyExpressionTree6.java-xpn23n @@ -0,0 +1,740 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + throw new ParseException("sin/cos not expected"); // BUG HERE + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyExpressionTree7.java-HIyvGC b/lost+found/BuggyExpressionTree7.java-HIyvGC new file mode 100644 index 00000000..58b53626 --- /dev/null +++ b/lost+found/BuggyExpressionTree7.java-HIyvGC @@ -0,0 +1,742 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else { + throw new ParseException("sin/cos not expected"); + } + } + else if (stack.empty() || !stack.pop().equals("op")) { + throw new ParseException("operator not expected"); + } + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else { + throw new ParseException("token not recognized"); + } + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + //checkParsing(expression); // BUG HERE + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyExpressionTree8.java-GwoHlR b/lost+found/BuggyExpressionTree8.java-GwoHlR new file mode 100644 index 00000000..b8b266b9 --- /dev/null +++ b/lost+found/BuggyExpressionTree8.java-GwoHlR @@ -0,0 +1,739 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Buggy version of the solution of Simon Hardy for the mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return Character.isLetter(c) && !isOperator(c); // BUG HERE + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/BuggyHashMap1.java-hEwdj4 b/lost+found/BuggyHashMap1.java-hEwdj4 new file mode 100644 index 00000000..5c813fbf --- /dev/null +++ b/lost+found/BuggyHashMap1.java-hEwdj4 @@ -0,0 +1,108 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +class HashMap implements MapInterface { + + private int capacity = 2000; + private int n = 0; + private List>[] table; + + @SuppressWarnings("unchecked") + public HashMap() { + table = (LinkedList>[]) new LinkedList[capacity]; + } + + public V get(String key) { + return get(key, hashCode(key)); + } + + public V get(String key, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] != null) { + List> list = table[hash]; + for (Entry el : list) + if (el.getKey().equals(key)) + return el.getValue(); + hash = (hash + 1) % capacity; + } + return null; + } + + public void put(String key, V value) { + //put(key, value, hashCode(key)); // BUG HERE + } + /*public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] == null) + table[hash] = new LinkedList>(); + table[hash].add(new SimpleEntry(key, value)); + n++; + if (n >= capacity/2) + rehash(); + }*/ + public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + Entry entry = new SimpleEntry(key, value); + if (table[hash] == null) { + table[hash] = new LinkedList>(); + table[hash].add(entry); + n++; + } + else { + boolean found = false; + for (int i = 0 ; !found && i < table[hash].size() ; i++) { + if (table[hash].get(i).getKey().equals(key)) { + table[hash].set(i, entry); + found = true; + // don't increment n + } + } + if (!found) { + table[hash].add(entry); + n++; + } + } + if (n >= capacity/2) + rehash(); + } + + public int size() { + return n; + } + + @SuppressWarnings("unchecked") + private void rehash() { + capacity *= 2; + List>[] old = table; + table = (LinkedList>[]) new LinkedList[capacity]; + for (int i = 0 ; i < old.length ; i++) { + List> entryList = old[i]; + if (entryList != null) + for (Entry entry : entryList) + put(entry.getKey(), entry.getValue(), hashCode(entry.getKey())); + } + } + + public int hashCode(String key) { + int hash = 0; + for (int i = 0 ; i < key.length(); i++) { + int c = (int) key.charAt(i); + hash += c * pow(256, key.length() - i - 1); + } + return hash; + } + + public int incrementalHashCode(String key, int lastHash, int lastChar) { + //return hashCode(key); // this times-out + return 256*(lastHash - pow(256, key.length()-1) * lastChar) + (int) key.charAt(key.length()-1); + } + + private static int pow(int a, int b) { + int result = 1; + for (int i = 0 ; i < b ; i++) + result *= a; + return result; + } +} diff --git a/lost+found/BuggyHashMap2.java-0Hl8op b/lost+found/BuggyHashMap2.java-0Hl8op new file mode 100644 index 00000000..8a5ec6de --- /dev/null +++ b/lost+found/BuggyHashMap2.java-0Hl8op @@ -0,0 +1,108 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +class HashMap implements MapInterface { + + private int capacity = 2000; + private int n = 0; + private List>[] table; + + @SuppressWarnings("unchecked") + public HashMap() { + table = (LinkedList>[]) new LinkedList[capacity]; + } + + public V get(String key) { + return get(key, hashCode(key)); + } + + public V get(String key, int hashCode) { // BUG HERE : actually does the same as simple 'get' + int hash = Math.abs(hashCode(key)) % capacity; + if (table[hash] != null) { + List> list = table[hash]; + for (Entry el : list) + if (el.getKey().equals(key)) + return el.getValue(); + hash = (hash + 1) % capacity; + } + return null; + } + + public void put(String key, V value) { + put(key, value, hashCode(key)); + } + /*public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] == null) + table[hash] = new LinkedList>(); + table[hash].add(new SimpleEntry(key, value)); + n++; + if (n >= capacity/2) + rehash(); + }*/ + public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + Entry entry = new SimpleEntry(key, value); + if (table[hash] == null) { + table[hash] = new LinkedList>(); + table[hash].add(entry); + n++; + } + else { + boolean found = false; + for (int i = 0 ; !found && i < table[hash].size() ; i++) { + if (table[hash].get(i).getKey().equals(key)) { + table[hash].set(i, entry); + found = true; + // don't increment n + } + } + if (!found) { + table[hash].add(entry); + n++; + } + } + if (n >= capacity/2) + rehash(); + } + + public int size() { + return n; + } + + @SuppressWarnings("unchecked") + private void rehash() { + capacity *= 2; + List>[] old = table; + table = (LinkedList>[]) new LinkedList[capacity]; + for (int i = 0 ; i < old.length ; i++) { + List> entryList = old[i]; + if (entryList != null) + for (Entry entry : entryList) + put(entry.getKey(), entry.getValue(), hashCode(entry.getKey())); + } + } + + public int hashCode(String key) { + int hash = 0; + for (int i = 0 ; i < key.length(); i++) { + int c = (int) key.charAt(i); + hash += c * pow(256, key.length() - i - 1); + } + return hash; + } + + public int incrementalHashCode(String key, int lastHash, int lastChar) { + //return hashCode(key); // this times-out + return 256*(lastHash - pow(256, key.length()-1) * lastChar) + (int) key.charAt(key.length()-1); + } + + private static int pow(int a, int b) { + int result = 1; + for (int i = 0 ; i < b ; i++) + result *= a; + return result; + } +} diff --git a/lost+found/BuggyHashMap3.java-xsOYwK b/lost+found/BuggyHashMap3.java-xsOYwK new file mode 100644 index 00000000..3bd05db5 --- /dev/null +++ b/lost+found/BuggyHashMap3.java-xsOYwK @@ -0,0 +1,108 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +class HashMap implements MapInterface { + + private int capacity = 2000; + private int n = 0; + private List>[] table; + + @SuppressWarnings("unchecked") + public HashMap() { + table = (LinkedList>[]) new LinkedList[capacity]; + } + + public V get(String key) { + return get(key, hashCode(key)); + } + + public V get(String key, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] != null) { + List> list = table[hash]; + for (Entry el : list) + if (el.getKey().equals(key)) + return el.getValue(); + hash = (hash + 1) % capacity; + } + return null; + } + + public void put(String key, V value) { + put(key, value, hashCode(key)); + } + /*public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] == null) + table[hash] = new LinkedList>(); + table[hash].add(new SimpleEntry(key, value)); + n++; + if (n >= capacity/2) + rehash(); + }*/ + public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + Entry entry = new SimpleEntry(key, value); + if (table[hash] == null) { + table[hash] = new LinkedList>(); + table[hash].add(entry); + n++; + } + else { + boolean found = false; + for (int i = 0 ; !found && i < table[hash].size() ; i++) { + if (table[hash].get(i).getKey().equals(key)) { + table[hash].set(i, entry); + found = true; + // don't increment n + } + } + if (!found) { + table[hash].add(entry); + n++; + } + } + if (n >= capacity/2) + rehash(); + } + + public int size() { + return 0; // BUG HERE + } + + @SuppressWarnings("unchecked") + private void rehash() { + capacity *= 2; + List>[] old = table; + table = (LinkedList>[]) new LinkedList[capacity]; + for (int i = 0 ; i < old.length ; i++) { + List> entryList = old[i]; + if (entryList != null) + for (Entry entry : entryList) + put(entry.getKey(), entry.getValue(), hashCode(entry.getKey())); + } + } + + public int hashCode(String key) { + int hash = 0; + for (int i = 0 ; i < key.length(); i++) { + int c = (int) key.charAt(i); + hash += c * pow(256, key.length() - i - 1); + } + return hash; + } + + public int incrementalHashCode(String key, int lastHash, int lastChar) { + //return hashCode(key); // this times-out + return 256*(lastHash - pow(256, key.length()-1) * lastChar) + (int) key.charAt(key.length()-1); + } + + private static int pow(int a, int b) { + int result = 1; + for (int i = 0 ; i < b ; i++) + result *= a; + return result; + } +} diff --git a/lost+found/BuggyHashMap4.java-gKNIG5 b/lost+found/BuggyHashMap4.java-gKNIG5 new file mode 100644 index 00000000..71b17408 --- /dev/null +++ b/lost+found/BuggyHashMap4.java-gKNIG5 @@ -0,0 +1,108 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +class HashMap implements MapInterface { + + private int capacity = 2000; + private int n = 0; + private List>[] table; + + @SuppressWarnings("unchecked") + public HashMap() { + table = (LinkedList>[]) new LinkedList[capacity]; + } + + public V get(String key) { + return get(key, hashCode(key)); + } + + public V get(String key, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] != null) { + List> list = table[hash]; + for (Entry el : list) + if (el.getKey().equals(key)) + return el.getValue(); + hash = (hash + 1) % capacity; + } + return null; + } + + public void put(String key, V value) { + put(key, value, hashCode(key)); + } + /*public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] == null) + table[hash] = new LinkedList>(); + table[hash].add(new SimpleEntry(key, value)); + n++; + if (n >= capacity/2) + rehash(); + }*/ + public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + Entry entry = new SimpleEntry(key, value); + if (table[hash] == null) { + table[hash] = new LinkedList>(); + table[hash].add(entry); + n++; + } + else { + boolean found = false; + for (int i = 0 ; !found && i < table[hash].size() ; i++) { + if (table[hash].get(i).getKey().equals(key)) { + table[hash].set(i, entry); + found = true; + // don't increment n + } + } + if (!found) { + table[hash].add(entry); + n++; + } + } + if (n >= capacity/2) + rehash(); + } + + public int size() { + return n; + } + + @SuppressWarnings("unchecked") + private void rehash() { + capacity *= 2; + List>[] old = table; + table = (LinkedList>[]) new LinkedList[capacity]; + for (int i = 0 ; i < old.length ; i++) { + List> entryList = old[i]; + if (entryList != null) + for (Entry entry : entryList) + put(entry.getKey(), entry.getValue(), hashCode(entry.getKey())); + } + } + + public int hashCode(String key) { + int hash = 0; + for (int i = 0 ; i < key.length(); i++) { + int c = (int) key.charAt(i); + hash += c * pow(256, key.length() - i - 1); + } + return hash; + } + + public int incrementalHashCode(String key, int lastHash, int lastChar) { + //return hashCode(key); // this times-out + return 256*(lastHash - pow(256, key.length()-1) * lastChar) + (int) key.charAt(key.length()-1)+1; // BUG HERE + } + + private static int pow(int a, int b) { + int result = 1; + for (int i = 0 ; i < b ; i++) + result *= a; + return result; + } +} diff --git a/lost+found/BuggyHashMap5.java-Z9BvSq b/lost+found/BuggyHashMap5.java-Z9BvSq new file mode 100644 index 00000000..3a5aab45 --- /dev/null +++ b/lost+found/BuggyHashMap5.java-Z9BvSq @@ -0,0 +1,112 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +class HashMap implements MapInterface { + + private int capacity = 2000; + private int n = 0; + private List>[] table; + private int i = 0; + private V anElement; + + @SuppressWarnings("unchecked") + public HashMap() { + table = (LinkedList>[]) new LinkedList[capacity]; + } + + public V get(String key) { // BUG HERE + if (i == 0) anElement = get(key, hashCode(key)); + i++; + return anElement; + } + + public V get(String key, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] != null) { + List> list = table[hash]; + for (Entry el : list) + if (el.getKey().equals(key)) + return el.getValue(); + hash = (hash + 1) % capacity; + } + return null; + } + + public void put(String key, V value) { + put(key, value, hashCode(key)); + } + /*public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] == null) + table[hash] = new LinkedList>(); + table[hash].add(new SimpleEntry(key, value)); + n++; + if (n >= capacity/2) + rehash(); + }*/ + public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + Entry entry = new SimpleEntry(key, value); + if (table[hash] == null) { + table[hash] = new LinkedList>(); + table[hash].add(entry); + n++; + } + else { + boolean found = false; + for (int i = 0 ; !found && i < table[hash].size() ; i++) { + if (table[hash].get(i).getKey().equals(key)) { + table[hash].set(i, entry); + found = true; + // don't increment n + } + } + if (!found) { + table[hash].add(entry); + n++; + } + } + if (n >= capacity/2) + rehash(); + } + + public int size() { + return n; + } + + @SuppressWarnings("unchecked") + private void rehash() { + capacity *= 2; + List>[] old = table; + table = (LinkedList>[]) new LinkedList[capacity]; + for (int i = 0 ; i < old.length ; i++) { + List> entryList = old[i]; + if (entryList != null) + for (Entry entry : entryList) + put(entry.getKey(), entry.getValue(), hashCode(entry.getKey())); + } + } + + public int hashCode(String key) { + int hash = 0; + for (int i = 0 ; i < key.length(); i++) { + int c = (int) key.charAt(i); + hash += c * pow(256, key.length() - i - 1); + } + return hash; + } + + public int incrementalHashCode(String key, int lastHash, int lastChar) { + //return hashCode(key); // this times-out + return 256*(lastHash - pow(256, key.length()-1) * lastChar) + (int) key.charAt(key.length()-1); + } + + private static int pow(int a, int b) { + int result = 1; + for (int i = 0 ; i < b ; i++) + result *= a; + return result; + } +} diff --git a/lost+found/BuggyInterpreter1.java-KlmIlh b/lost+found/BuggyInterpreter1.java-KlmIlh new file mode 100644 index 00000000..3c38f6ce --- /dev/null +++ b/lost+found/BuggyInterpreter1.java-KlmIlh @@ -0,0 +1,530 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * Buggy version of the solution of Simon Hardy for the PostScript Interpreter (mission 1, test of interpreter tests). + */ +public class Interpreter implements InterpreterInterface { + public Hashtable variables; + private MyStack stack; + + /* Main method, useless for the grading */ + public static void main(String[] args) { + /*Interpreter interpreter = new Interpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack")); */ + } + + public Interpreter() { + stack = new MyStack(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + Element e = new Element(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof Element) + stack.push((Element)o); + else if(o instanceof Integer) + stack.push(new Element(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new Element(""+(Double)o)); + else if(o instanceof String) + stack.push(new Element(""+o)); + else if (o instanceof Boolean) + stack.push(new Element(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + public static void pstack(MyStack stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + /* BUGGY METHOD ADD */ + public static void add(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2 + new Integer(1); + System.out.println(add); + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2 + new Integer(1); + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2 + new Double(1.0); + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2 + new Double(1.0); + stack.push(new Element(""+add)); + } + } + } + + public static void sub(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + } + } + + public static void mul(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void div(MyStack stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new ArithmeticException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new Element(""+div)); + } + + } + + public static void dup(MyStack stack, Hashtable variables) { + Element e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + } + + public static void exch(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new Element(""+o1)); + return; + } + Element e1 = new Element(""+o1); + Element e2 = new Element(""+o2); + stack.push(e1); + stack.push(e2); + } + + public static void eq(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+false)); + } + } + + public static void ne(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void def(MyStack stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + o2 = (o2.substring(1)); + variables.put(o2, new Element(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void pop(MyStack stack, Hashtable variables) throws EmptyStackException { + stack.pop(); + } + +} + +class MyStack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class Element { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public Element(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + Element e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} diff --git a/lost+found/BuggyInterpreter2.java-iYUNvo b/lost+found/BuggyInterpreter2.java-iYUNvo new file mode 100644 index 00000000..8bd29d55 --- /dev/null +++ b/lost+found/BuggyInterpreter2.java-iYUNvo @@ -0,0 +1,530 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * Buggy version of the solution of Simon Hardy for the PostScript Interpreter (mission 1, test of interpreter tests). + */ +public class Interpreter implements InterpreterInterface { + public Hashtable variables; + private MyStack stack; + + /* Main method, useless for the grading */ + public static void main(String[] args) { + /*Interpreter interpreter = new Interpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack")); */ + } + + public Interpreter() { + stack = new MyStack(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + Element e = new Element(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof Element) + stack.push((Element)o); + else if(o instanceof Integer) + stack.push(new Element(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new Element(""+(Double)o)); + else if(o instanceof String) + stack.push(new Element(""+o)); + else if (o instanceof Boolean) + stack.push(new Element(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + public static void pstack(MyStack stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + public static void add(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void sub(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + } + } + + public static void mul(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void div(MyStack stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new ArithmeticException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new Element(""+div)); + } + + } + + /* BUGGY METHOD DUP */ + public static void dup(MyStack stack, Hashtable variables) { + Element e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + stack.push(e); + } + + public static void exch(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new Element(""+o1)); + return; + } + Element e1 = new Element(""+o1); + Element e2 = new Element(""+o2); + stack.push(e1); + stack.push(e2); + } + + public static void eq(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+false)); + } + } + + public static void ne(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void def(MyStack stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + o2 = (o2.substring(1)); + variables.put(o2, new Element(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void pop(MyStack stack, Hashtable variables) throws EmptyStackException { + stack.pop(); + } + +} + +class MyStack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class Element { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public Element(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + Element e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} diff --git a/lost+found/BuggyInterpreter3.java-XR2p8r b/lost+found/BuggyInterpreter3.java-XR2p8r new file mode 100644 index 00000000..f9e7cad1 --- /dev/null +++ b/lost+found/BuggyInterpreter3.java-XR2p8r @@ -0,0 +1,529 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * Buggy version of the solution of Simon Hardy for the PostScript Interpreter (mission 1, test of interpreter tests). + */ +public class Interpreter implements InterpreterInterface { + public Hashtable variables; + private MyStack stack; + + /* Main method, useless for the grading */ + public static void main(String[] args) { + /*Interpreter interpreter = new Interpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack")); */ + } + + public Interpreter() { + stack = new MyStack(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + Element e = new Element(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof Element) + stack.push((Element)o); + else if(o instanceof Integer) + stack.push(new Element(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new Element(""+(Double)o)); + else if(o instanceof String) + stack.push(new Element(""+o)); + else if (o instanceof Boolean) + stack.push(new Element(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + /* BUGGY METHOD PSTACK BECAUSE OF BUGGY TOSTRING ("-" instead of whitespaces " " */ + public static void pstack(MyStack stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + public static void add(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void sub(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + } + } + + public static void mul(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void div(MyStack stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new ArithmeticException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new Element(""+div)); + } + + } + + public static void dup(MyStack stack, Hashtable variables) { + Element e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + } + + public static void exch(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new Element(""+o1)); + return; + } + Element e1 = new Element(""+o1); + Element e2 = new Element(""+o2); + stack.push(e1); + stack.push(e2); + } + + public static void eq(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+false)); + } + } + + public static void ne(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void def(MyStack stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + o2 = (o2.substring(1)); + variables.put(o2, new Element(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void pop(MyStack stack, Hashtable variables) throws EmptyStackException { + stack.pop(); + } + +} + +class MyStack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += "-"; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class Element { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public Element(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + Element e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} diff --git a/lost+found/BuggyInterpreter4.java-ItnkNv b/lost+found/BuggyInterpreter4.java-ItnkNv new file mode 100644 index 00000000..83cd857b --- /dev/null +++ b/lost+found/BuggyInterpreter4.java-ItnkNv @@ -0,0 +1,529 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * Buggy version of the solution of Simon Hardy for the PostScript Interpreter (mission 1, test of interpreter tests). + */ +public class Interpreter implements InterpreterInterface { + public Hashtable variables; + private MyStack stack; + + /* Main method, useless for the grading */ + public static void main(String[] args) { + /*Interpreter interpreter = new Interpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack")); */ + } + + public Interpreter() { + stack = new MyStack(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + Element e = new Element(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof Element) + stack.push((Element)o); + else if(o instanceof Integer) + stack.push(new Element(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new Element(""+(Double)o)); + else if(o instanceof String) + stack.push(new Element(""+o)); + else if (o instanceof Boolean) + stack.push(new Element(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + public static void pstack(MyStack stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + public static void add(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void sub(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + } + } + + public static void mul(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + /* BUGGY METHOD DIV : doesn't throw the correct exception */ + public static void div(MyStack stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new EmptyStackException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new Element(""+div)); + } + + } + + public static void dup(MyStack stack, Hashtable variables) { + Element e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + } + + public static void exch(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new Element(""+o1)); + return; + } + Element e1 = new Element(""+o1); + Element e2 = new Element(""+o2); + stack.push(e1); + stack.push(e2); + } + + public static void eq(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+false)); + } + } + + public static void ne(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void def(MyStack stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + o2 = (o2.substring(1)); + variables.put(o2, new Element(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void pop(MyStack stack, Hashtable variables) throws EmptyStackException { + stack.pop(); + } + +} + +class MyStack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class Element { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public Element(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + Element e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} diff --git a/lost+found/BuggyInterpreter5.java-EzrRuz b/lost+found/BuggyInterpreter5.java-EzrRuz new file mode 100644 index 00000000..df66fb37 --- /dev/null +++ b/lost+found/BuggyInterpreter5.java-EzrRuz @@ -0,0 +1,529 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * Buggy version of the solution of Simon Hardy for the PostScript Interpreter (mission 1, test of interpreter tests). + */ +public class Interpreter implements InterpreterInterface { + public Hashtable variables; + private MyStack stack; + + /* Main method, useless for the grading */ + public static void main(String[] args) { + /*Interpreter interpreter = new Interpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack")); */ + } + + public Interpreter() { + stack = new MyStack(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + Element e = new Element(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof Element) + stack.push((Element)o); + else if(o instanceof Integer) + stack.push(new Element(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new Element(""+(Double)o)); + else if(o instanceof String) + stack.push(new Element(""+o)); + else if (o instanceof Boolean) + stack.push(new Element(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + public static void pstack(MyStack stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + public static void add(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void sub(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + } + } + + public static void mul(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void div(MyStack stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new ArithmeticException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new Element(""+div)); + } + + } + + public static void dup(MyStack stack, Hashtable variables) { + Element e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + } + + /* BUGGY METHOD EXCH */ + public static void exch(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new Element(""+o1)); + return; + } + Element e1 = new Element(""+o1); + Element e2 = new Element(""+o2); + stack.push(e1); + stack.push(e1); // bug here, e2 instead of e1 + } + + public static void eq(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+false)); + } + } + + public static void ne(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void def(MyStack stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + o2 = (o2.substring(1)); + variables.put(o2, new Element(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void pop(MyStack stack, Hashtable variables) throws EmptyStackException { + stack.pop(); + } + +} + +class MyStack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class Element { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public Element(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + Element e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} diff --git a/lost+found/BuggyInterpreter6.java-WGqIeD b/lost+found/BuggyInterpreter6.java-WGqIeD new file mode 100644 index 00000000..4095eb17 --- /dev/null +++ b/lost+found/BuggyInterpreter6.java-WGqIeD @@ -0,0 +1,530 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * Buggy version of the solution of Simon Hardy for the PostScript Interpreter (mission 1, test of interpreter tests). + */ +public class Interpreter implements InterpreterInterface { + public Hashtable variables; + private MyStack stack; + + /* Main method, useless for the grading */ + public static void main(String[] args) { + /*Interpreter interpreter = new Interpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack")); */ + } + + public Interpreter() { + stack = new MyStack(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + Element e = new Element(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof Element) + stack.push((Element)o); + else if(o instanceof Integer) + stack.push(new Element(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new Element(""+(Double)o)); + else if(o instanceof String) + stack.push(new Element(""+o)); + else if (o instanceof Boolean) + stack.push(new Element(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + public static void pstack(MyStack stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + public static void add(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void sub(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + } + } + + public static void mul(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void div(MyStack stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new ArithmeticException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new Element(""+div)); + } + + } + + public static void dup(MyStack stack, Hashtable variables) { + Element e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + } + + public static void exch(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new Element(""+o1)); + return; + } + Element e1 = new Element(""+o1); + Element e2 = new Element(""+o2); + stack.push(e1); + stack.push(e2); + } + + public static void eq(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+false)); + } + } + + public static void ne(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void def(MyStack stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + o2 = (o2.substring(1)); + variables.put(o2, new Element(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + /* BUGGY METHOD POP */ + public static void pop(MyStack stack, Hashtable variables) throws EmptyStackException { + if (stack.size() < 3) + stack.pop(); + } + +} + +class MyStack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class Element { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public Element(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + Element e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} diff --git a/lost+found/BuggyInterpreter7.java-WEsb1G b/lost+found/BuggyInterpreter7.java-WEsb1G new file mode 100644 index 00000000..d4f5133a --- /dev/null +++ b/lost+found/BuggyInterpreter7.java-WEsb1G @@ -0,0 +1,529 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * Buggy version of the solution of Simon Hardy for the PostScript Interpreter (mission 1, test of interpreter tests). + */ +public class Interpreter implements InterpreterInterface { + public Hashtable variables; + private MyStack stack; + + /* Main method, useless for the grading */ + public static void main(String[] args) { + /*Interpreter interpreter = new Interpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack")); */ + } + + public Interpreter() { + stack = new MyStack(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + Element e = new Element(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof Element) + stack.push((Element)o); + else if(o instanceof Integer) + stack.push(new Element(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new Element(""+(Double)o)); + else if(o instanceof String) + stack.push(new Element(""+o)); + else if (o instanceof Boolean) + stack.push(new Element(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + public static void pstack(MyStack stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + public static void add(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void sub(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new Element(""+add)); + } + } + } + + public static void mul(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new Element(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new Element(""+add)); + } + } + } + + public static void div(MyStack stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new ArithmeticException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new Element(""+div)); + } + + } + + public static void dup(MyStack stack, Hashtable variables) { + Element e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + } + + public static void exch(MyStack stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new Element(""+o1)); + return; + } + Element e1 = new Element(""+o1); + Element e2 = new Element(""+o2); + stack.push(e1); + stack.push(e2); + } + + public static void eq(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+false)); + } + } + + public static void ne(MyStack stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new Element(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + /* BUGGY METHOD DEF */ + public static void def(MyStack stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + //o2 = (o2.substring(1)); // bug here + variables.put(o2, new Element(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new Element(""+true)); + } + } + + public static void pop(MyStack stack, Hashtable variables) throws EmptyStackException { + stack.pop(); + } + +} + +class MyStack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class Element { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public Element(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + Element e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} diff --git a/lost+found/BuggyKruskal1.java-1CRZhV b/lost+found/BuggyKruskal1.java-1CRZhV new file mode 100644 index 00000000..dea8a8a4 --- /dev/null +++ b/lost+found/BuggyKruskal1.java-1CRZhV @@ -0,0 +1,460 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; +import java.io.*; + +/** + * Buggy version of Kruskal + */ +public class Kruskal { + + public static AdjacencyList applyKruskal(AdjacencyList graphe) { + LinkedList v = graphe.vertices(); + int n = v.size(); + LinkedList> clusters = new LinkedList>(); + Edge e; + Vertex v1; + Vertex v2; + int a = 0, b = 0; + for (int i = 0 ; i < n; i++) { + clusters.add(new LinkedList()); + clusters.get(i).add(v.get(i)); + } + PriorityQueue Q = new PriorityQueue(graphe.edges()); + AdjacencyList T = new AdjacencyList(); // minimum spanning tree + while (T.edges().size() < n-1) { // doit avoir n-1 aretes + e = Q.remove(); // retire le minimum + v1 = e.getSrc(); + v2 = e.getDst(); + for (int i = 0 ; i < clusters.size(); i++) { + if (clusters.get(i).contains(v1)) + a = i; + if (clusters.get(i).contains(v2)) + b = i; + } + if (a != b) { + + Vertex one, two; + Vertex temp; + Edge edge; + if ((temp = T.contains(v1.getCity())) == null) { + one = T.insertVertex(v1.getCity()); + } + else { + one = temp; + } + if ((temp = T.contains(v2.getCity())) == null) { + two = T.insertVertex(v2.getCity()); + } + else + two = temp; + // Condition pour interdire deux fois la meme arete ? + edge = T.insertEdge(one, two, e.getWeight()); + one.addToI(edge); + e.setSrcEdges(one.getI()); + two.addToI(edge); + e.setDstEdges(two.getI()); + + clusters.get(a).addAll(clusters.get(b)); + clusters.remove(b); + } + } + return T; + } + + public static void main(String[] args) { + AdjacencyList list = new AdjacencyList(args[0]);//("src/data/cities.txt"); + AdjacencyList result = applyKruskal(list); + + try { + PrintWriter pw = new PrintWriter(new FileWriter(args[1]));//("src/data/cities_sol.txt")); + for (int i = 0 ; i < result.edges().size(); i++) { + // BUG HERE, all edge weights + 1 + pw.println(result.edges().get(i).getSrc().getCity() + "\t" + result.edges().get(i).getDst().getCity() + "\t" + result.edges().get(i).getWeight()+1); + } + pw.close(); + } catch (IOException e) { + System.out.println("IOException occured while writing result : " + e); + } + //System.out.println(result.cost()); + } + +} + +/** + * Classe implementant l'ADT "Graphe" par une structure de type "liste d'adjacence" + * Contient egalement un constructeur permettant de creer une + * liste d'adjacence sur base d'un String. + * + * @author Simon Hardy + */ +class AdjacencyList { + + private LinkedList V; + private LinkedList E; + + public AdjacencyList() { + V = new LinkedList(); + E = new LinkedList(); + } + + /* Construction sur base du du fichier dont le chemin est passe en argument + * NB : on considere ici que deux numeros differents correspondent + * a deux aeroports differents (et donc deux noeuds differents) */ + public AdjacencyList(String s) { + V = new LinkedList(); + E = new LinkedList(); + try + { + File f = new File (s); + FileReader fr = new FileReader (f); + BufferedReader br = new BufferedReader(fr); + + try { + String line = br.readLine(); + + while (line != null) + { + Vertex one, two; + Vertex v; + Edge e; + if ((v = this.contains(firstNode(line))) == null) { + one = insertVertex(firstNode(line)); + } + else { + one = v; + } + if ((v = this.contains(secondNode(line))) == null) { + two = insertVertex(secondNode(line)); + } + else + two = v; + // NB : on autorise 2 aretes avec les memes noeuds + e = insertEdge(one, two, firstEdge(line)); + one.addToI(e); + e.setSrcEdges(one.getI()); + two.addToI(e); + e.setDstEdges(two.getI()); + line = br.readLine(); + } + + br.close(); + fr.close(); + } + catch (IOException exception) + { + System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); + } + } + catch (FileNotFoundException exception) + { + System.out.println ("Le fichier n'a pas ete trouve"); + } + } + + /* Methodes de l'ADT */ + public LinkedList vertices() { + return V; + } + + public LinkedList edges() { + return E; + } + + public LinkedList incidentEdges(Vertex v) { + return v.getI(); + } + + public Vertex opposite(Vertex v, Edge e) { + if (e.getSrc().getCity() == v.getCity()) return e.getDst(); + else if (e.getDst().getCity() == v.getCity()) return e.getSrc(); + else { + System.out.println("Error in 'opposite'"); + return null; + } + } + + public ArrayList endVertices(Edge e) { + ArrayList array = new ArrayList(); + array.add(e.getSrc()); + array.add(e.getDst()); + return array; + } + + public boolean AreAdjacent(Vertex v, Vertex w) { + LinkedList edges = v.getI(); + for (int i = 0 ; !edges.isEmpty() ; i++) { + if (edges.get(i).getSrc().getCity() == v.getCity() || edges.get(i).getDst().getCity() == v.getCity()) + return true; + } + return false; + } + + public void replace(Vertex v, int x) { + v.setCity(x); + } + + public void replace(Edge e, int x) { + e.setWeight(x); + } + + public Vertex insertVertex(int x) { + Vertex c = new Vertex(x, V.size()); + V.add(c); // a ameliorer + return c; + } + + public Edge insertEdge(Vertex v, Vertex w, int x) { + Edge c = new Edge(v, w, x, E.size()); + E.add(c); // a ameliorer + return c; + } + + public void removeVertex(Vertex v) { + LinkedList i = v.getI(); + while (!i.isEmpty()) + E.remove(i.getFirst()); // on supprime toutes les arretes incidentes a ce noeud + V.remove(v.getPosition()); // a ameliorer + } + + public void removeEdge(Edge e) { + E.remove(e.getPosition()); // a ameliorer + // Enlever les references des I vers E ? + } + + /* Autres methodes interessantes : */ + + /* Si V contient un element dont la valeur est X, on le retourne. + Sinon, on retourne null. */ + public Vertex contains(int x) { + if (V.isEmpty()) + return null; + int i = 0; + int size = V.size(); + Vertex c = null; + while (i < size) { + c = V.get(i); + if (c.getCity() == x) + return c; + i++; + } + return null; + } + + /* Renvoie le premier noeud de la ligne */ + public int firstNode(String line) { + String number = ""; + int i = 0; + char c = line.charAt(i); + while (c != '\t') { + number += c; + i++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + + /* Renvoie le second noeud de la ligne */ + + public int secondNode(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la premiere tabulation + char c = line.charAt(i); + while (c != '\t' || count == 0) { + if (count == 1) number += c; + i++; + if (c == '\t') count++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + /* Renvoie l'arete de la ligne */ + public int firstEdge(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la 2eme tabulation + char c = line.charAt(i); + while (i < line.length()) { + if (count == 2) number += c; + i++; + if (c == '\t') count++; + if (i < line.length()) c = line.charAt(i); + } + return Integer.parseInt(number); + } + + public boolean isConnected() { + DFS(vertices().getFirst()); + boolean result = true; + for (Vertex v : vertices()) { + if (v.visited) + v.visited = false; + else + result = false; + } + return result; + } + + public void DFS(Vertex v) { + v.visited = true; + for (Edge e : v.getI()) { + Vertex opposite = opposite(v, e); + if (!opposite.visited) + DFS(opposite); + // else there is a cycle + } + } + + public int numberOfNodes() { + return vertices().size(); + } + + public int numberOfEdges() { + return edges().size(); + } + + public int cost() { + int sum = 0; + for (Edge e : edges()) + sum += e.getWeight(); + return sum; + } +} + +/** + * Classe representant un noeud du graphe + * + * @author Simon Hardy + */ +class Vertex { + + private int city; + private LinkedList I; + private int position; // position dans V (devrait etre une reference !) + public boolean visited; // for DFS + + public Vertex(int x) { + city = x; + I = new LinkedList(); + position = 0; + visited = false; + } + + public Vertex(int x, int pos) { + city = x; + I = new LinkedList(); + position = pos; + } + public int getCity() { + return city; + } + public void setCity(int city) { + this.city = city; + } + public LinkedList getI() { + return I; + } + public void setI(LinkedList i) { + I = i; + } + public void addToI(Edge e) { + I.add(e); + } + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } +} + +/** + * Classe representant une arete du graphe + * @author Simon Hardy + **/ +class Edge implements Comparable { + + private int weight; + private Vertex src; + private Vertex dst; + private LinkedList srcEdges; // reference ! (redondant ?) + private LinkedList dstEdges; // reference ! (redondant ?) + private int position; // position dans V (devrait etre une reference !) + + public Edge(Vertex src, Vertex dst, int x) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = 0; + } + + public Edge(Vertex src, Vertex dst, int x, int pos) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = pos; + } + + public int compareTo(Edge e) + { + return this.getWeight() - e.getWeight(); + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public Vertex getSrc() { + return src; + } + + public void setSrc(Vertex src) { + this.src = src; + } + + public Vertex getDst() { + return dst; + } + + public void setDst(Vertex dst) { + this.dst = dst; + } + + public LinkedList getSrcEdges() { + return srcEdges; + } + + public void setSrcEdges(LinkedList srcEdges) { + this.srcEdges = srcEdges; + } + + public LinkedList getDstEdges() { + return dstEdges; + } + + public void setDstEdges(LinkedList dstEdges) { + this.dstEdges = dstEdges; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + +} diff --git a/lost+found/BuggyKruskal2.java-BEiKfr b/lost+found/BuggyKruskal2.java-BEiKfr new file mode 100644 index 00000000..878ce253 --- /dev/null +++ b/lost+found/BuggyKruskal2.java-BEiKfr @@ -0,0 +1,459 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; +import java.io.*; + +/** + * Buggy version of Kruskal + */ +public class Kruskal { + + public static AdjacencyList applyKruskal(AdjacencyList graphe) { + LinkedList v = graphe.vertices(); + int n = v.size(); + LinkedList> clusters = new LinkedList>(); + Edge e; + Vertex v1; + Vertex v2; + int a = 0, b = 0; + for (int i = 0 ; i < n; i++) { + clusters.add(new LinkedList()); + clusters.get(i).add(v.get(i)); + } + LinkedList Q = new LinkedList(graphe.edges()); // BUT HERE : not a PriorityQueue ==> not optimal + AdjacencyList T = new AdjacencyList(); // minimum spanning tree + while (T.edges().size() < n-1) { + e = Q.remove(); + v1 = e.getSrc(); + v2 = e.getDst(); + for (int i = 0 ; i < clusters.size(); i++) { + if (clusters.get(i).contains(v1)) + a = i; + if (clusters.get(i).contains(v2)) + b = i; + } + if (a != b) { + + Vertex one, two; + Vertex temp; + Edge edge; + if ((temp = T.contains(v1.getCity())) == null) { + one = T.insertVertex(v1.getCity()); + } + else { + one = temp; + } + if ((temp = T.contains(v2.getCity())) == null) { + two = T.insertVertex(v2.getCity()); + } + else + two = temp; + // Condition pour interdire deux fois la meme arete ? + edge = T.insertEdge(one, two, e.getWeight()); + one.addToI(edge); + e.setSrcEdges(one.getI()); + two.addToI(edge); + e.setDstEdges(two.getI()); + + clusters.get(a).addAll(clusters.get(b)); + clusters.remove(b); + } + } + return T; + } + + public static void main(String[] args) { + AdjacencyList list = new AdjacencyList(args[0]);//("src/data/cities.txt"); + AdjacencyList result = applyKruskal(list); + + try { + PrintWriter pw = new PrintWriter(new FileWriter(args[1]));//("src/data/cities_sol.txt")); + for (int i = 0 ; i < result.edges().size(); i++) { + pw.println(result.edges().get(i).getSrc().getCity() + "\t" + result.edges().get(i).getDst().getCity() + "\t" + result.edges().get(i).getWeight()); + } + pw.close(); + } catch (IOException e) { + System.out.println("IOException occured while writing result : " + e); + } + //System.out.println(result.cost()); + } + +} + +/** + * Classe implementant l'ADT "Graphe" par une structure de type "liste d'adjacence" + * Contient egalement un constructeur permettant de creer une + * liste d'adjacence sur base d'un String. + * + * @author Simon Hardy + */ +class AdjacencyList { + + private LinkedList V; + private LinkedList E; + + public AdjacencyList() { + V = new LinkedList(); + E = new LinkedList(); + } + + /* Construction sur base du du fichier dont le chemin est passe en argument + * NB : on considere ici que deux numeros differents correspondent + * a deux aeroports differents (et donc deux noeuds differents) */ + public AdjacencyList(String s) { + V = new LinkedList(); + E = new LinkedList(); + try + { + File f = new File (s); + FileReader fr = new FileReader (f); + BufferedReader br = new BufferedReader(fr); + + try { + String line = br.readLine(); + + while (line != null) + { + Vertex one, two; + Vertex v; + Edge e; + if ((v = this.contains(firstNode(line))) == null) { + one = insertVertex(firstNode(line)); + } + else { + one = v; + } + if ((v = this.contains(secondNode(line))) == null) { + two = insertVertex(secondNode(line)); + } + else + two = v; + // NB : on autorise 2 aretes avec les memes noeuds + e = insertEdge(one, two, firstEdge(line)); + one.addToI(e); + e.setSrcEdges(one.getI()); + two.addToI(e); + e.setDstEdges(two.getI()); + line = br.readLine(); + } + + br.close(); + fr.close(); + } + catch (IOException exception) + { + System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); + } + } + catch (FileNotFoundException exception) + { + System.out.println ("Le fichier n'a pas ete trouve"); + } + } + + /* Methodes de l'ADT */ + public LinkedList vertices() { + return V; + } + + public LinkedList edges() { + return E; + } + + public LinkedList incidentEdges(Vertex v) { + return v.getI(); + } + + public Vertex opposite(Vertex v, Edge e) { + if (e.getSrc().getCity() == v.getCity()) return e.getDst(); + else if (e.getDst().getCity() == v.getCity()) return e.getSrc(); + else { + System.out.println("Error in 'opposite'"); + return null; + } + } + + public ArrayList endVertices(Edge e) { + ArrayList array = new ArrayList(); + array.add(e.getSrc()); + array.add(e.getDst()); + return array; + } + + public boolean AreAdjacent(Vertex v, Vertex w) { + LinkedList edges = v.getI(); + for (int i = 0 ; !edges.isEmpty() ; i++) { + if (edges.get(i).getSrc().getCity() == v.getCity() || edges.get(i).getDst().getCity() == v.getCity()) + return true; + } + return false; + } + + public void replace(Vertex v, int x) { + v.setCity(x); + } + + public void replace(Edge e, int x) { + e.setWeight(x); + } + + public Vertex insertVertex(int x) { + Vertex c = new Vertex(x, V.size()); + V.add(c); // a ameliorer + return c; + } + + public Edge insertEdge(Vertex v, Vertex w, int x) { + Edge c = new Edge(v, w, x, E.size()); + E.add(c); // a ameliorer + return c; + } + + public void removeVertex(Vertex v) { + LinkedList i = v.getI(); + while (!i.isEmpty()) + E.remove(i.getFirst()); // on supprime toutes les arretes incidentes a ce noeud + V.remove(v.getPosition()); // a ameliorer + } + + public void removeEdge(Edge e) { + E.remove(e.getPosition()); // a ameliorer + // Enlever les references des I vers E ? + } + + /* Autres methodes interessantes : */ + + /* Si V contient un element dont la valeur est X, on le retourne. + Sinon, on retourne null. */ + public Vertex contains(int x) { + if (V.isEmpty()) + return null; + int i = 0; + int size = V.size(); + Vertex c = null; + while (i < size) { + c = V.get(i); + if (c.getCity() == x) + return c; + i++; + } + return null; + } + + /* Renvoie le premier noeud de la ligne */ + public int firstNode(String line) { + String number = ""; + int i = 0; + char c = line.charAt(i); + while (c != '\t') { + number += c; + i++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + + /* Renvoie le second noeud de la ligne */ + + public int secondNode(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la premiere tabulation + char c = line.charAt(i); + while (c != '\t' || count == 0) { + if (count == 1) number += c; + i++; + if (c == '\t') count++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + /* Renvoie l'arete de la ligne */ + public int firstEdge(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la 2eme tabulation + char c = line.charAt(i); + while (i < line.length()) { + if (count == 2) number += c; + i++; + if (c == '\t') count++; + if (i < line.length()) c = line.charAt(i); + } + return Integer.parseInt(number); + } + + public boolean isConnected() { + DFS(vertices().getFirst()); + boolean result = true; + for (Vertex v : vertices()) { + if (v.visited) + v.visited = false; + else + result = false; + } + return result; + } + + public void DFS(Vertex v) { + v.visited = true; + for (Edge e : v.getI()) { + Vertex opposite = opposite(v, e); + if (!opposite.visited) + DFS(opposite); + // else there is a cycle + } + } + + public int numberOfNodes() { + return vertices().size(); + } + + public int numberOfEdges() { + return edges().size(); + } + + public int cost() { + int sum = 0; + for (Edge e : edges()) + sum += e.getWeight(); + return sum; + } +} + +/** + * Classe representant un noeud du graphe + * + * @author Simon Hardy + */ +class Vertex { + + private int city; + private LinkedList I; + private int position; // position dans V (devrait etre une reference !) + public boolean visited; // for DFS + + public Vertex(int x) { + city = x; + I = new LinkedList(); + position = 0; + visited = false; + } + + public Vertex(int x, int pos) { + city = x; + I = new LinkedList(); + position = pos; + } + public int getCity() { + return city; + } + public void setCity(int city) { + this.city = city; + } + public LinkedList getI() { + return I; + } + public void setI(LinkedList i) { + I = i; + } + public void addToI(Edge e) { + I.add(e); + } + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } +} + +/** + * Classe representant une arete du graphe + * @author Simon Hardy + **/ +class Edge implements Comparable { + + private int weight; + private Vertex src; + private Vertex dst; + private LinkedList srcEdges; // reference ! (redondant ?) + private LinkedList dstEdges; // reference ! (redondant ?) + private int position; // position dans V (devrait etre une reference !) + + public Edge(Vertex src, Vertex dst, int x) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = 0; + } + + public Edge(Vertex src, Vertex dst, int x, int pos) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = pos; + } + + public int compareTo(Edge e) + { + return this.getWeight() - e.getWeight(); + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public Vertex getSrc() { + return src; + } + + public void setSrc(Vertex src) { + this.src = src; + } + + public Vertex getDst() { + return dst; + } + + public void setDst(Vertex dst) { + this.dst = dst; + } + + public LinkedList getSrcEdges() { + return srcEdges; + } + + public void setSrcEdges(LinkedList srcEdges) { + this.srcEdges = srcEdges; + } + + public LinkedList getDstEdges() { + return dstEdges; + } + + public void setDstEdges(LinkedList dstEdges) { + this.dstEdges = dstEdges; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + +} diff --git a/lost+found/BuggyKruskal3.java-Z5sJiX b/lost+found/BuggyKruskal3.java-Z5sJiX new file mode 100644 index 00000000..c7cb4ffe --- /dev/null +++ b/lost+found/BuggyKruskal3.java-Z5sJiX @@ -0,0 +1,459 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; +import java.io.*; + +/** + * Buggy version of Kruskal + */ +public class Kruskal { + + public static AdjacencyList applyKruskal(AdjacencyList graphe) { + LinkedList v = graphe.vertices(); + int n = v.size(); + LinkedList> clusters = new LinkedList>(); + Edge e; + Vertex v1; + Vertex v2; + int a = 0, b = 0; + for (int i = 0 ; i < n; i++) { + clusters.add(new LinkedList()); + clusters.get(i).add(v.get(i)); + } + PriorityQueue Q = new PriorityQueue(graphe.edges()); + AdjacencyList T = new AdjacencyList(); // minimum spanning tree + while (T.edges().size() < n-2) { // BUG HERE : too few edges ==> not connected OR not enough nodes + e = Q.remove(); // retire le minimum + v1 = e.getSrc(); + v2 = e.getDst(); + for (int i = 0 ; i < clusters.size(); i++) { + if (clusters.get(i).contains(v1)) + a = i; + if (clusters.get(i).contains(v2)) + b = i; + } + if (a != b) { + + Vertex one, two; + Vertex temp; + Edge edge; + if ((temp = T.contains(v1.getCity())) == null) { + one = T.insertVertex(v1.getCity()); + } + else { + one = temp; + } + if ((temp = T.contains(v2.getCity())) == null) { + two = T.insertVertex(v2.getCity()); + } + else + two = temp; + // Condition pour interdire deux fois la meme arete ? + edge = T.insertEdge(one, two, e.getWeight()); + one.addToI(edge); + e.setSrcEdges(one.getI()); + two.addToI(edge); + e.setDstEdges(two.getI()); + + clusters.get(a).addAll(clusters.get(b)); + clusters.remove(b); + } + } + return T; + } + + public static void main(String[] args) { + AdjacencyList list = new AdjacencyList(args[0]);//("src/data/cities.txt"); + AdjacencyList result = applyKruskal(list); + + try { + PrintWriter pw = new PrintWriter(new FileWriter(args[1]));//("src/data/cities_sol.txt")); + for (int i = 0 ; i < result.edges().size(); i++) { + pw.println(result.edges().get(i).getSrc().getCity() + "\t" + result.edges().get(i).getDst().getCity() + "\t" + result.edges().get(i).getWeight()); + } + pw.close(); + } catch (IOException e) { + System.out.println("IOException occured while writing result : " + e); + } + //System.out.println(result.cost()); + } + +} + +/** + * Classe implementant l'ADT "Graphe" par une structure de type "liste d'adjacence" + * Contient egalement un constructeur permettant de creer une + * liste d'adjacence sur base d'un String. + * + * @author Simon Hardy + */ +class AdjacencyList { + + private LinkedList V; + private LinkedList E; + + public AdjacencyList() { + V = new LinkedList(); + E = new LinkedList(); + } + + /* Construction sur base du du fichier dont le chemin est passe en argument + * NB : on considere ici que deux numeros differents correspondent + * a deux aeroports differents (et donc deux noeuds differents) */ + public AdjacencyList(String s) { + V = new LinkedList(); + E = new LinkedList(); + try + { + File f = new File (s); + FileReader fr = new FileReader (f); + BufferedReader br = new BufferedReader(fr); + + try { + String line = br.readLine(); + + while (line != null) + { + Vertex one, two; + Vertex v; + Edge e; + if ((v = this.contains(firstNode(line))) == null) { + one = insertVertex(firstNode(line)); + } + else { + one = v; + } + if ((v = this.contains(secondNode(line))) == null) { + two = insertVertex(secondNode(line)); + } + else + two = v; + // NB : on autorise 2 aretes avec les memes noeuds + e = insertEdge(one, two, firstEdge(line)); + one.addToI(e); + e.setSrcEdges(one.getI()); + two.addToI(e); + e.setDstEdges(two.getI()); + line = br.readLine(); + } + + br.close(); + fr.close(); + } + catch (IOException exception) + { + System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); + } + } + catch (FileNotFoundException exception) + { + System.out.println ("Le fichier n'a pas ete trouve"); + } + } + + /* Methodes de l'ADT */ + public LinkedList vertices() { + return V; + } + + public LinkedList edges() { + return E; + } + + public LinkedList incidentEdges(Vertex v) { + return v.getI(); + } + + public Vertex opposite(Vertex v, Edge e) { + if (e.getSrc().getCity() == v.getCity()) return e.getDst(); + else if (e.getDst().getCity() == v.getCity()) return e.getSrc(); + else { + System.out.println("Error in 'opposite'"); + return null; + } + } + + public ArrayList endVertices(Edge e) { + ArrayList array = new ArrayList(); + array.add(e.getSrc()); + array.add(e.getDst()); + return array; + } + + public boolean AreAdjacent(Vertex v, Vertex w) { + LinkedList edges = v.getI(); + for (int i = 0 ; !edges.isEmpty() ; i++) { + if (edges.get(i).getSrc().getCity() == v.getCity() || edges.get(i).getDst().getCity() == v.getCity()) + return true; + } + return false; + } + + public void replace(Vertex v, int x) { + v.setCity(x); + } + + public void replace(Edge e, int x) { + e.setWeight(x); + } + + public Vertex insertVertex(int x) { + Vertex c = new Vertex(x, V.size()); + V.add(c); // a ameliorer + return c; + } + + public Edge insertEdge(Vertex v, Vertex w, int x) { + Edge c = new Edge(v, w, x, E.size()); + E.add(c); // a ameliorer + return c; + } + + public void removeVertex(Vertex v) { + LinkedList i = v.getI(); + while (!i.isEmpty()) + E.remove(i.getFirst()); // on supprime toutes les arretes incidentes a ce noeud + V.remove(v.getPosition()); // a ameliorer + } + + public void removeEdge(Edge e) { + E.remove(e.getPosition()); // a ameliorer + // Enlever les references des I vers E ? + } + + /* Autres methodes interessantes : */ + + /* Si V contient un element dont la valeur est X, on le retourne. + Sinon, on retourne null. */ + public Vertex contains(int x) { + if (V.isEmpty()) + return null; + int i = 0; + int size = V.size(); + Vertex c = null; + while (i < size) { + c = V.get(i); + if (c.getCity() == x) + return c; + i++; + } + return null; + } + + /* Renvoie le premier noeud de la ligne */ + public int firstNode(String line) { + String number = ""; + int i = 0; + char c = line.charAt(i); + while (c != '\t') { + number += c; + i++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + + /* Renvoie le second noeud de la ligne */ + + public int secondNode(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la premiere tabulation + char c = line.charAt(i); + while (c != '\t' || count == 0) { + if (count == 1) number += c; + i++; + if (c == '\t') count++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + /* Renvoie l'arete de la ligne */ + public int firstEdge(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la 2eme tabulation + char c = line.charAt(i); + while (i < line.length()) { + if (count == 2) number += c; + i++; + if (c == '\t') count++; + if (i < line.length()) c = line.charAt(i); + } + return Integer.parseInt(number); + } + + public boolean isConnected() { + DFS(vertices().getFirst()); + boolean result = true; + for (Vertex v : vertices()) { + if (v.visited) + v.visited = false; + else + result = false; + } + return result; + } + + public void DFS(Vertex v) { + v.visited = true; + for (Edge e : v.getI()) { + Vertex opposite = opposite(v, e); + if (!opposite.visited) + DFS(opposite); + // else there is a cycle + } + } + + public int numberOfNodes() { + return vertices().size(); + } + + public int numberOfEdges() { + return edges().size(); + } + + public int cost() { + int sum = 0; + for (Edge e : edges()) + sum += e.getWeight(); + return sum; + } +} + +/** + * Classe representant un noeud du graphe + * + * @author Simon Hardy + */ +class Vertex { + + private int city; + private LinkedList I; + private int position; // position dans V (devrait etre une reference !) + public boolean visited; // for DFS + + public Vertex(int x) { + city = x; + I = new LinkedList(); + position = 0; + visited = false; + } + + public Vertex(int x, int pos) { + city = x; + I = new LinkedList(); + position = pos; + } + public int getCity() { + return city; + } + public void setCity(int city) { + this.city = city; + } + public LinkedList getI() { + return I; + } + public void setI(LinkedList i) { + I = i; + } + public void addToI(Edge e) { + I.add(e); + } + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } +} + +/** + * Classe representant une arete du graphe + * @author Simon Hardy + **/ +class Edge implements Comparable { + + private int weight; + private Vertex src; + private Vertex dst; + private LinkedList srcEdges; // reference ! (redondant ?) + private LinkedList dstEdges; // reference ! (redondant ?) + private int position; // position dans V (devrait etre une reference !) + + public Edge(Vertex src, Vertex dst, int x) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = 0; + } + + public Edge(Vertex src, Vertex dst, int x, int pos) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = pos; + } + + public int compareTo(Edge e) + { + return this.getWeight() - e.getWeight(); + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public Vertex getSrc() { + return src; + } + + public void setSrc(Vertex src) { + this.src = src; + } + + public Vertex getDst() { + return dst; + } + + public void setDst(Vertex dst) { + this.dst = dst; + } + + public LinkedList getSrcEdges() { + return srcEdges; + } + + public void setSrcEdges(LinkedList srcEdges) { + this.srcEdges = srcEdges; + } + + public LinkedList getDstEdges() { + return dstEdges; + } + + public void setDstEdges(LinkedList dstEdges) { + this.dstEdges = dstEdges; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + +} diff --git a/lost+found/BuggyKruskal4.java-FUWjqt b/lost+found/BuggyKruskal4.java-FUWjqt new file mode 100644 index 00000000..0908945b --- /dev/null +++ b/lost+found/BuggyKruskal4.java-FUWjqt @@ -0,0 +1,462 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; +import java.io.*; + +/** + * Buggy version of Kruskal + */ +public class Kruskal { + + public static AdjacencyList applyKruskal(AdjacencyList graphe) { + LinkedList v = graphe.vertices(); + int n = v.size(); + LinkedList> clusters = new LinkedList>(); + Edge e; + Vertex v1; + Vertex v2; + int a = 0, b = 0; + for (int i = 0 ; i < n; i++) { + clusters.add(new LinkedList()); + clusters.get(i).add(v.get(i)); + } + PriorityQueue Q = new PriorityQueue(graphe.edges()); + AdjacencyList T = new AdjacencyList(); // minimum spanning tree + while (T.edges().size() < n-1) { // doit avoir n-1 aretes + e = Q.remove(); // retire le minimum + v1 = e.getSrc(); + v2 = e.getDst(); + for (int i = 0 ; i < clusters.size(); i++) { + if (clusters.get(i).contains(v1)) + a = i; + if (clusters.get(i).contains(v2)) + b = i; + } + if (a != b) { + + Vertex one, two; + Vertex temp; + Edge edge; + if ((temp = T.contains(v1.getCity())) == null) { + one = T.insertVertex(v1.getCity()); + } + else { + one = temp; + } + if ((temp = T.contains(v2.getCity())) == null) { + two = T.insertVertex(v2.getCity()); + } + else + two = temp; + // Condition pour interdire deux fois la meme arete ? + edge = T.insertEdge(one, two, e.getWeight()); + one.addToI(edge); + e.setSrcEdges(one.getI()); + two.addToI(edge); + e.setDstEdges(two.getI()); + + clusters.get(a).addAll(clusters.get(b)); + clusters.remove(b); + } + } + return T; + } + + public static void main(String[] args) { + AdjacencyList list = new AdjacencyList(args[0]);//("src/data/cities.txt"); + list.removeVertex(list.vertices().getFirst()); // BUG HERE : one node disappeared + AdjacencyList result = applyKruskal(list); + + try { + PrintWriter pw = new PrintWriter(new FileWriter(args[1]));//("src/data/cities_sol.txt")); + for (int i = 0 ; i < result.edges().size(); i++) { + pw.println(result.edges().get(i).getSrc().getCity() + "\t" + result.edges().get(i).getDst().getCity() + "\t" + result.edges().get(i).getWeight()); + } + pw.close(); + } catch (IOException e) { + System.out.println("IOException occured while writing result : " + e); + } + //System.out.println(result.cost()); + } + +} + +/** + * Classe implementant l'ADT "Graphe" par une structure de type "liste d'adjacence" + * Contient egalement un constructeur permettant de creer une + * liste d'adjacence sur base d'un String. + * + * @author Simon Hardy + */ +class AdjacencyList { + + private LinkedList V; + private LinkedList E; + + public AdjacencyList() { + V = new LinkedList(); + E = new LinkedList(); + } + + /* Construction sur base du du fichier dont le chemin est passe en argument + * NB : on considere ici que deux numeros differents correspondent + * a deux aeroports differents (et donc deux noeuds differents) */ + public AdjacencyList(String s) { + V = new LinkedList(); + E = new LinkedList(); + try + { + File f = new File (s); + FileReader fr = new FileReader (f); + BufferedReader br = new BufferedReader(fr); + + try { + String line = br.readLine(); + + while (line != null) + { + Vertex one, two; + Vertex v; + Edge e; + if ((v = this.contains(firstNode(line))) == null) { + one = insertVertex(firstNode(line)); + } + else { + one = v; + } + if ((v = this.contains(secondNode(line))) == null) { + two = insertVertex(secondNode(line)); + } + else + two = v; + // NB : on autorise 2 aretes avec les memes noeuds + e = insertEdge(one, two, firstEdge(line)); + one.addToI(e); + e.setSrcEdges(one.getI()); + two.addToI(e); + e.setDstEdges(two.getI()); + line = br.readLine(); + } + + br.close(); + fr.close(); + } + catch (IOException exception) + { + System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); + } + } + catch (FileNotFoundException exception) + { + System.out.println ("Le fichier n'a pas ete trouve"); + } + } + + /* Methodes de l'ADT */ + public LinkedList vertices() { + return V; + } + + public LinkedList edges() { + return E; + } + + public LinkedList incidentEdges(Vertex v) { + return v.getI(); + } + + public Vertex opposite(Vertex v, Edge e) { + if (e.getSrc().getCity() == v.getCity()) return e.getDst(); + else if (e.getDst().getCity() == v.getCity()) return e.getSrc(); + else { + System.out.println("Error in 'opposite'"); + return null; + } + } + + public ArrayList endVertices(Edge e) { + ArrayList array = new ArrayList(); + array.add(e.getSrc()); + array.add(e.getDst()); + return array; + } + + public boolean AreAdjacent(Vertex v, Vertex w) { + LinkedList edges = v.getI(); + for (int i = 0 ; !edges.isEmpty() ; i++) { + if (edges.get(i).getSrc().getCity() == v.getCity() || edges.get(i).getDst().getCity() == v.getCity()) + return true; + } + return false; + } + + public void replace(Vertex v, int x) { + v.setCity(x); + } + + public void replace(Edge e, int x) { + e.setWeight(x); + } + + public Vertex insertVertex(int x) { + Vertex c = new Vertex(x, V.size()); + V.add(c); // a ameliorer + return c; + } + + public Edge insertEdge(Vertex v, Vertex w, int x) { + Edge c = new Edge(v, w, x, E.size()); + E.add(c); // a ameliorer + return c; + } + + public void removeVertex(Vertex v) { + LinkedList i = v.getI(); + while (!i.isEmpty()) { + E.remove(i.getFirst()); // on supprime toutes les arretes incidentes a ce noeud + i.remove(i.getFirst()); + } + V.remove(v.getPosition()); // a ameliorer + } + + public void removeEdge(Edge e) { + E.remove(e.getPosition()); // a ameliorer + // Enlever les references des I vers E ? + } + + /* Autres methodes interessantes : */ + + /* Si V contient un element dont la valeur est X, on le retourne. + Sinon, on retourne null. */ + public Vertex contains(int x) { + if (V.isEmpty()) + return null; + int i = 0; + int size = V.size(); + Vertex c = null; + while (i < size) { + c = V.get(i); + if (c.getCity() == x) + return c; + i++; + } + return null; + } + + /* Renvoie le premier noeud de la ligne */ + public int firstNode(String line) { + String number = ""; + int i = 0; + char c = line.charAt(i); + while (c != '\t') { + number += c; + i++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + + /* Renvoie le second noeud de la ligne */ + + public int secondNode(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la premiere tabulation + char c = line.charAt(i); + while (c != '\t' || count == 0) { + if (count == 1) number += c; + i++; + if (c == '\t') count++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + /* Renvoie l'arete de la ligne */ + public int firstEdge(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la 2eme tabulation + char c = line.charAt(i); + while (i < line.length()) { + if (count == 2) number += c; + i++; + if (c == '\t') count++; + if (i < line.length()) c = line.charAt(i); + } + return Integer.parseInt(number); + } + + public boolean isConnected() { + DFS(vertices().getFirst()); + boolean result = true; + for (Vertex v : vertices()) { + if (v.visited) + v.visited = false; + else + result = false; + } + return result; + } + + public void DFS(Vertex v) { + v.visited = true; + for (Edge e : v.getI()) { + Vertex opposite = opposite(v, e); + if (!opposite.visited) + DFS(opposite); + // else there is a cycle + } + } + + public int numberOfNodes() { + return vertices().size(); + } + + public int numberOfEdges() { + return edges().size(); + } + + public int cost() { + int sum = 0; + for (Edge e : edges()) + sum += e.getWeight(); + return sum; + } +} + +/** + * Classe representant un noeud du graphe + * + * @author Simon Hardy + */ +class Vertex { + + private int city; + private LinkedList I; + private int position; // position dans V (devrait etre une reference !) + public boolean visited; // for DFS + + public Vertex(int x) { + city = x; + I = new LinkedList(); + position = 0; + visited = false; + } + + public Vertex(int x, int pos) { + city = x; + I = new LinkedList(); + position = pos; + } + public int getCity() { + return city; + } + public void setCity(int city) { + this.city = city; + } + public LinkedList getI() { + return I; + } + public void setI(LinkedList i) { + I = i; + } + public void addToI(Edge e) { + I.add(e); + } + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } +} + +/** + * Classe representant une arete du graphe + * @author Simon Hardy + **/ +class Edge implements Comparable { + + private int weight; + private Vertex src; + private Vertex dst; + private LinkedList srcEdges; // reference ! (redondant ?) + private LinkedList dstEdges; // reference ! (redondant ?) + private int position; // position dans V (devrait etre une reference !) + + public Edge(Vertex src, Vertex dst, int x) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = 0; + } + + public Edge(Vertex src, Vertex dst, int x, int pos) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = pos; + } + + public int compareTo(Edge e) + { + return this.getWeight() - e.getWeight(); + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public Vertex getSrc() { + return src; + } + + public void setSrc(Vertex src) { + this.src = src; + } + + public Vertex getDst() { + return dst; + } + + public void setDst(Vertex dst) { + this.dst = dst; + } + + public LinkedList getSrcEdges() { + return srcEdges; + } + + public void setSrcEdges(LinkedList srcEdges) { + this.srcEdges = srcEdges; + } + + public LinkedList getDstEdges() { + return dstEdges; + } + + public void setDstEdges(LinkedList dstEdges) { + this.dstEdges = dstEdges; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + +} diff --git a/lost+found/BuggyKruskal5.java-iYqUzZ b/lost+found/BuggyKruskal5.java-iYqUzZ new file mode 100644 index 00000000..31dfe4f6 --- /dev/null +++ b/lost+found/BuggyKruskal5.java-iYqUzZ @@ -0,0 +1,485 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; +import java.io.*; + +/** + * Buggy version of Kruskal + */ +public class Kruskal { + + public static AdjacencyList applyKruskal(AdjacencyList graphe) { + LinkedList v = graphe.vertices(); + int n = v.size(); + LinkedList> clusters = new LinkedList>(); + Edge e; + Vertex v1; + Vertex v2; + int a = 0, b = 0; + for (int i = 0 ; i < n; i++) { + clusters.add(new LinkedList()); + clusters.get(i).add(v.get(i)); + } + PriorityQueue Q = new PriorityQueue(graphe.edges()); + AdjacencyList T = new AdjacencyList(); // minimum spanning tree + while (T.edges().size() < n-1) { // doit avoir n-1 aretes + e = Q.remove(); // retire le minimum + v1 = e.getSrc(); + v2 = e.getDst(); + for (int i = 0 ; i < clusters.size(); i++) { + if (clusters.get(i).contains(v1)) + a = i; + if (clusters.get(i).contains(v2)) + b = i; + } + if (a != b) { + + Vertex one, two; + Vertex temp; + Edge edge; + if ((temp = T.contains(v1.getCity())) == null) { + one = T.insertVertex(v1.getCity()); + } + else { + one = temp; + } + if ((temp = T.contains(v2.getCity())) == null) { + two = T.insertVertex(v2.getCity()); + } + else + two = temp; + // Condition pour interdire deux fois la meme arete ? + edge = T.insertEdge(one, two, e.getWeight()); + one.addToI(edge); + e.setSrcEdges(one.getI()); + two.addToI(edge); + e.setDstEdges(two.getI()); + + clusters.get(a).addAll(clusters.get(b)); + clusters.remove(b); + } + } + return T; + } + + public static void main(String[] args) { + AdjacencyList list = new AdjacencyList(args[0]);//("src/data/cities.txt"); + AdjacencyList result = applyKruskal(list); + int src = 0; + int dst = 0; + int weight = 0; + boolean done = false; + Edge toRemove = null; + for (Edge e : result.edges()) if (!done) + if (e.getSrcEdges().size() >= 2 && e.getDstEdges().size() >= 2) { + src = e.getSrc().getCity(); + dst = e.getDst().getCity(); + weight = e.getWeight(); + toRemove = e; + done = true; + } + if (done) { + result.removeEdge(toRemove); + Vertex v1 = null; + Vertex v2 = null; + for (Vertex v : result.vertices()) if (v1 == null || v2 == null) + if (v.getCity() != src && v.getCity() != dst) + if (v1 == null) v1 = v; + else if (v2 == null) v2 = v; + if (v1 != null && v2 != null) + result.insertEdge(v1, v2, weight); + } + + try { + PrintWriter pw = new PrintWriter(new FileWriter(args[1]));//("src/data/cities_sol.txt")); + for (int i = 0 ; i < result.edges().size(); i++) { + pw.println(result.edges().get(i).getSrc().getCity() + "\t" + result.edges().get(i).getDst().getCity() + "\t" + result.edges().get(i).getWeight()); + } + pw.close(); + } catch (IOException e) { + System.out.println("IOException occured while writing result : " + e); + } + //System.out.println(result.cost()); + } + +} + +/** + * Classe implementant l'ADT "Graphe" par une structure de type "liste d'adjacence" + * Contient egalement un constructeur permettant de creer une + * liste d'adjacence sur base d'un String. + * + * @author Simon Hardy + */ +class AdjacencyList { + + private LinkedList V; + private LinkedList E; + + public AdjacencyList() { + V = new LinkedList(); + E = new LinkedList(); + } + + /* Construction sur base du du fichier dont le chemin est passe en argument + * NB : on considere ici que deux numeros differents correspondent + * a deux aeroports differents (et donc deux noeuds differents) */ + public AdjacencyList(String s) { + V = new LinkedList(); + E = new LinkedList(); + try + { + File f = new File (s); + FileReader fr = new FileReader (f); + BufferedReader br = new BufferedReader(fr); + + try { + String line = br.readLine(); + + while (line != null) + { + Vertex one, two; + Vertex v; + Edge e; + if ((v = this.contains(firstNode(line))) == null) { + one = insertVertex(firstNode(line)); + } + else { + one = v; + } + if ((v = this.contains(secondNode(line))) == null) { + two = insertVertex(secondNode(line)); + } + else + two = v; + // NB : on autorise 2 aretes avec les memes noeuds + e = insertEdge(one, two, firstEdge(line)); + one.addToI(e); + e.setSrcEdges(one.getI()); + two.addToI(e); + e.setDstEdges(two.getI()); + line = br.readLine(); + } + + br.close(); + fr.close(); + } + catch (IOException exception) + { + System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); + } + } + catch (FileNotFoundException exception) + { + System.out.println ("Le fichier n'a pas ete trouve"); + } + } + + /* Methodes de l'ADT */ + public LinkedList vertices() { + return V; + } + + public LinkedList edges() { + return E; + } + + public LinkedList incidentEdges(Vertex v) { + return v.getI(); + } + + public Vertex opposite(Vertex v, Edge e) { + if (e.getSrc().getCity() == v.getCity()) return e.getDst(); + else if (e.getDst().getCity() == v.getCity()) return e.getSrc(); + else { + System.out.println("Error in 'opposite'"); + return null; + } + } + + public ArrayList endVertices(Edge e) { + ArrayList array = new ArrayList(); + array.add(e.getSrc()); + array.add(e.getDst()); + return array; + } + + public boolean AreAdjacent(Vertex v, Vertex w) { + LinkedList edges = v.getI(); + for (int i = 0 ; !edges.isEmpty() ; i++) { + if (edges.get(i).getSrc().getCity() == v.getCity() || edges.get(i).getDst().getCity() == v.getCity()) + return true; + } + return false; + } + + public void replace(Vertex v, int x) { + v.setCity(x); + } + + public void replace(Edge e, int x) { + e.setWeight(x); + } + + public Vertex insertVertex(int x) { + Vertex c = new Vertex(x, V.size()); + V.add(c); // a ameliorer + return c; + } + + public Edge insertEdge(Vertex v, Vertex w, int x) { + Edge c = new Edge(v, w, x, E.size()); + E.add(c); // a ameliorer + return c; + } + + public void removeVertex(Vertex v) { + LinkedList i = v.getI(); + while (!i.isEmpty()) { + E.remove(i.getFirst()); // on supprime toutes les arretes incidentes a ce noeud + i.remove(i.getFirst()); + } + V.remove(v.getPosition()); // a ameliorer + } + + public void removeEdge(Edge e) { + E.remove(e.getPosition()); // a ameliorer + // Enlever les references des I vers E ? + } + + /* Autres methodes interessantes : */ + + /* Si V contient un element dont la valeur est X, on le retourne. + Sinon, on retourne null. */ + public Vertex contains(int x) { + if (V.isEmpty()) + return null; + int i = 0; + int size = V.size(); + Vertex c = null; + while (i < size) { + c = V.get(i); + if (c.getCity() == x) + return c; + i++; + } + return null; + } + + /* Renvoie le premier noeud de la ligne */ + public int firstNode(String line) { + String number = ""; + int i = 0; + char c = line.charAt(i); + while (c != '\t') { + number += c; + i++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + + /* Renvoie le second noeud de la ligne */ + + public int secondNode(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la premiere tabulation + char c = line.charAt(i); + while (c != '\t' || count == 0) { + if (count == 1) number += c; + i++; + if (c == '\t') count++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + /* Renvoie l'arete de la ligne */ + public int firstEdge(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la 2eme tabulation + char c = line.charAt(i); + while (i < line.length()) { + if (count == 2) number += c; + i++; + if (c == '\t') count++; + if (i < line.length()) c = line.charAt(i); + } + return Integer.parseInt(number); + } + + public boolean isConnected() { + DFS(vertices().getFirst()); + boolean result = true; + for (Vertex v : vertices()) { + if (v.visited) + v.visited = false; + else + result = false; + } + return result; + } + + public void DFS(Vertex v) { + v.visited = true; + for (Edge e : v.getI()) { + Vertex opposite = opposite(v, e); + if (!opposite.visited) + DFS(opposite); + // else there is a cycle + } + } + + public int numberOfNodes() { + return vertices().size(); + } + + public int numberOfEdges() { + return edges().size(); + } + + public int cost() { + int sum = 0; + for (Edge e : edges()) + sum += e.getWeight(); + return sum; + } +} + +/** + * Classe representant un noeud du graphe + * + * @author Simon Hardy + */ +class Vertex { + + private int city; + private LinkedList I; + private int position; // position dans V (devrait etre une reference !) + public boolean visited; // for DFS + + public Vertex(int x) { + city = x; + I = new LinkedList(); + position = 0; + visited = false; + } + + public Vertex(int x, int pos) { + city = x; + I = new LinkedList(); + position = pos; + } + public int getCity() { + return city; + } + public void setCity(int city) { + this.city = city; + } + public LinkedList getI() { + return I; + } + public void setI(LinkedList i) { + I = i; + } + public void addToI(Edge e) { + I.add(e); + } + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } +} + +/** + * Classe representant une arete du graphe + * @author Simon Hardy + **/ +class Edge implements Comparable { + + private int weight; + private Vertex src; + private Vertex dst; + private LinkedList srcEdges; // reference ! (redondant ?) + private LinkedList dstEdges; // reference ! (redondant ?) + private int position; // position dans V (devrait etre une reference !) + + public Edge(Vertex src, Vertex dst, int x) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = 0; + } + + public Edge(Vertex src, Vertex dst, int x, int pos) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = pos; + } + + public int compareTo(Edge e) + { + return this.getWeight() - e.getWeight(); + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public Vertex getSrc() { + return src; + } + + public void setSrc(Vertex src) { + this.src = src; + } + + public Vertex getDst() { + return dst; + } + + public void setDst(Vertex dst) { + this.dst = dst; + } + + public LinkedList getSrcEdges() { + return srcEdges; + } + + public void setSrcEdges(LinkedList srcEdges) { + this.srcEdges = srcEdges; + } + + public LinkedList getDstEdges() { + return dstEdges; + } + + public void setDstEdges(LinkedList dstEdges) { + this.dstEdges = dstEdges; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + +} diff --git a/lost+found/BuggyMyMap1.java-6z7QH5 b/lost+found/BuggyMyMap1.java-6z7QH5 new file mode 100644 index 00000000..993b3dcc --- /dev/null +++ b/lost+found/BuggyMyMap1.java-6z7QH5 @@ -0,0 +1,58 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return !map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap2.java-GjbYAw b/lost+found/BuggyMyMap2.java-GjbYAw new file mode 100644 index 00000000..dd375926 --- /dev/null +++ b/lost+found/BuggyMyMap2.java-GjbYAw @@ -0,0 +1,59 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + if (map.size() >= 5) return 5; // buggy size() + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap3.java-V7srwX b/lost+found/BuggyMyMap3.java-V7srwX new file mode 100644 index 00000000..dbbab8d9 --- /dev/null +++ b/lost+found/BuggyMyMap3.java-V7srwX @@ -0,0 +1,58 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.get(key); // doesn't remove it + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap4.java-F7Frto b/lost+found/BuggyMyMap4.java-F7Frto new file mode 100644 index 00000000..696ea9b9 --- /dev/null +++ b/lost+found/BuggyMyMap4.java-F7Frto @@ -0,0 +1,59 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + map.remove(key); + return null; // removes but returns null + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap5.java-RzvUrP b/lost+found/BuggyMyMap5.java-RzvUrP new file mode 100644 index 00000000..57f72dca --- /dev/null +++ b/lost+found/BuggyMyMap5.java-RzvUrP @@ -0,0 +1,58 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return true; // only returns true + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap6.java-NtKOrg b/lost+found/BuggyMyMap6.java-NtKOrg new file mode 100644 index 00000000..201cd1aa --- /dev/null +++ b/lost+found/BuggyMyMap6.java-NtKOrg @@ -0,0 +1,59 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + if (map.size() >= 3) return true; // bug here + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap7.java-DJmftH b/lost+found/BuggyMyMap7.java-DJmftH new file mode 100644 index 00000000..982a14eb --- /dev/null +++ b/lost+found/BuggyMyMap7.java-DJmftH @@ -0,0 +1,62 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + private V element; + + public MyMap() { + map = new HashMap(); + element = null; + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { // buggy : returns the good value the first time, and then returns it again and again. + if (element == null) + element = map.get(key); + return element; + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap8.java-mKNqw8 b/lost+found/BuggyMyMap8.java-mKNqw8 new file mode 100644 index 00000000..52009c9a --- /dev/null +++ b/lost+found/BuggyMyMap8.java-mKNqw8 @@ -0,0 +1,70 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + private V v1; + private V v2; + + public MyMap() { + map = new HashMap(); + v1 = null; + v2 = null; + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + if (v1 == null) { + v1 = value; + return map.put(key, v1); + } + else if (v2 == null) { + v2 = value; + return map.put(key, v2); + } + return map.put(key, v1); // after the 3rd push, pushes the 1st value again and again (but with the correct key) + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/BuggyMyMap9.java-NCS4Az b/lost+found/BuggyMyMap9.java-NCS4Az new file mode 100644 index 00000000..f752c977 --- /dev/null +++ b/lost+found/BuggyMyMap9.java-NCS4Az @@ -0,0 +1,70 @@ +import java.util.HashMap; +import java.util.Set; + +/* Buggy version of MyMap */ + +public class MyMap implements Map { + + private HashMap map; + private int nbrOp; + + public MyMap() { + map = new HashMap(); + nbrOp = 0; + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + nbrOp++; + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + nbrOp++; + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + nbrOp++; + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + nbrOp++; + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + nbrOp++; + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + nbrOp++; + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + nbrOp++; + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + nbrOp++; + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + nbrOp++; + if (nbrOp >= 50) return 42; + return map.size(); + } +} diff --git a/lost+found/BuggySearchTree1.java-1mDktO b/lost+found/BuggySearchTree1.java-1mDktO new file mode 100644 index 00000000..44483cfb --- /dev/null +++ b/lost+found/BuggySearchTree1.java-1mDktO @@ -0,0 +1,197 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return !tree.isEmpty(); // BUG HERE + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree10.java-7bcvs7 b/lost+found/BuggySearchTree10.java-7bcvs7 new file mode 100644 index 00000000..6bcef6e4 --- /dev/null +++ b/lost+found/BuggySearchTree10.java-7bcvs7 @@ -0,0 +1,197 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "(" + key + ") " + array[i] + "\n"; // BUG HERE + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree2.java-oMIQwq b/lost+found/BuggySearchTree2.java-oMIQwq new file mode 100644 index 00000000..2a1afc0a --- /dev/null +++ b/lost+found/BuggySearchTree2.java-oMIQwq @@ -0,0 +1,197 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.get(key); // BUG HERE + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree3.java-snfMFJ b/lost+found/BuggySearchTree3.java-snfMFJ new file mode 100644 index 00000000..0e0f211a --- /dev/null +++ b/lost+found/BuggySearchTree3.java-snfMFJ @@ -0,0 +1,187 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + tree = new TreeMap>(); // BUG HERE + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree4.java-oa5OR2 b/lost+found/BuggySearchTree4.java-oa5OR2 new file mode 100644 index 00000000..1fcde146 --- /dev/null +++ b/lost+found/BuggySearchTree4.java-oa5OR2 @@ -0,0 +1,201 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + int i = 0; + while(line != null) { + if (i <= 2) { + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + } + line = reader.readLine(); + i++; + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree5.java-pB3O5l b/lost+found/BuggySearchTree5.java-pB3O5l new file mode 100644 index 00000000..ffb4262f --- /dev/null +++ b/lost+found/BuggySearchTree5.java-pB3O5l @@ -0,0 +1,198 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + // BUGS HERE + public Map.Entry> ceilingEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree6.java-04iFlF b/lost+found/BuggySearchTree6.java-04iFlF new file mode 100644 index 00000000..302183f2 --- /dev/null +++ b/lost+found/BuggySearchTree6.java-04iFlF @@ -0,0 +1,197 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.higherEntry(tree.firstEntry().getKey()); // BUG HERE + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree7.java-6f0lEY b/lost+found/BuggySearchTree7.java-6f0lEY new file mode 100644 index 00000000..6788d127 --- /dev/null +++ b/lost+found/BuggySearchTree7.java-6f0lEY @@ -0,0 +1,197 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + //Arrays.sort(array); // BUG HERE + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree8.java-e0HfZh b/lost+found/BuggySearchTree8.java-e0HfZh new file mode 100644 index 00000000..446e6995 --- /dev/null +++ b/lost+found/BuggySearchTree8.java-e0HfZh @@ -0,0 +1,197 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.lowerEntry(lowest); // BUG HERE + while (entry != null && entry.getKey().compareTo(highest) < 0) { // AND HERE + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySearchTree9.java-2A90lB b/lost+found/BuggySearchTree9.java-2A90lB new file mode 100644 index 00000000..3ed73005 --- /dev/null +++ b/lost+found/BuggySearchTree9.java-2A90lB @@ -0,0 +1,197 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Buggy version of SearchTree + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null) { // BUG HERE + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/BuggySpamFilter1.java-bhfRwM b/lost+found/BuggySpamFilter1.java-bhfRwM new file mode 100644 index 00000000..fe50ba68 --- /dev/null +++ b/lost+found/BuggySpamFilter1.java-bhfRwM @@ -0,0 +1,127 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +public class SpamFilter implements SpamFiltering { + + private Map wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter(String filename) { + wordsMap = new MyMap(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput(filename); + } + + public Map getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + processMessage(split[0], split[1].split("\\W+")); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap current = new MyMap(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) {//if (!stopWords.contains(word)) { BUG HERE : DOESN'T USE THE STOP WORDS + Word w = current.get(word); + if (w == null) + w = new Word(word); + if (category.equals("ham")) { + w.incHamProba(1.0); + Word.totalNumberOfHams++; + } + else { + w.incSpamProba(1.0); + Word.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return (double) 1/(1+Math.exp(eta)); + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) > 0.5; + } +} diff --git a/lost+found/BuggySpamFilter2.java-ASUbH6 b/lost+found/BuggySpamFilter2.java-ASUbH6 new file mode 100644 index 00000000..cf27a185 --- /dev/null +++ b/lost+found/BuggySpamFilter2.java-ASUbH6 @@ -0,0 +1,129 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +/* Buggy version of SpamFilter */ + +public class SpamFilter implements SpamFiltering { + + private Map wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter(String filename) { + wordsMap = new MyMap(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput(filename); + } + + public Map getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + processMessage(split[0], split[1].split("\\W+")); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap current = new MyMap(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) if (!stopWords.contains(word)) { + Word w = current.get(word); + if (w == null) + w = new Word(word); + if (category.equals("ham")) { + w.incHamProba(1.0); + Word.totalNumberOfHams++; + } + else { + w.incSpamProba(1.0); + Word.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return (double) 1/(1+Math.exp(eta)); + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) <= 0.5; // BUG HERE + } +} diff --git a/lost+found/BuggySpamFilter3.java-xCiQUq b/lost+found/BuggySpamFilter3.java-xCiQUq new file mode 100644 index 00000000..2da8af42 --- /dev/null +++ b/lost+found/BuggySpamFilter3.java-xCiQUq @@ -0,0 +1,129 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +/* Buggy version of SpamFilter */ + +public class SpamFilter implements SpamFiltering { + + private Map wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter(String filename) { + wordsMap = new MyMap(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput(filename); + } + + public Map getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + processMessage(split[0], split[1].split("\\W+")); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap current = new MyMap(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) if (!stopWords.contains(word)) { + Word w = current.get(word); + if (w == null) + w = new Word(word); + if (category.equals("ham")) { + w.incHamProba(1.0); + Word.totalNumberOfHams++; + } + else { + w.incSpamProba(1.0); + Word.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return 1.0; //(double) 1/(1+Math.exp(eta)); BUG HERE : RETURNS ALWAYS A PROBA OF 100% + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) > 0.5; + } +} diff --git a/lost+found/BuggySpamFilter4.java-eeEraL b/lost+found/BuggySpamFilter4.java-eeEraL new file mode 100644 index 00000000..d0754d82 --- /dev/null +++ b/lost+found/BuggySpamFilter4.java-eeEraL @@ -0,0 +1,129 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +/* Buggy version of SpamFilter implements SpamFiltering */ + +public class SpamFilter { + + private Map wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter(String filename) { + wordsMap = new MyMap(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput("SMSSpamCollection"); // BUG HERE : ALWAYS READS THE SAME FILE INSTEAD OF THE USER INPUT + } + + public Map getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + processMessage(split[0], split[1].split("\\W+")); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap current = new MyMap(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) if (!stopWords.contains(word)) { + Word w = current.get(word); + if (w == null) + w = new Word(word); + if (category.equals("ham")) { + w.incHamProba(1.0); + Word.totalNumberOfHams++; + } + else { + w.incSpamProba(1.0); + Word.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return (double) 1/(1+Math.exp(eta)); + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) > 0.5; + } +} diff --git a/lost+found/BuggySpamFilter5.java-kF2os5 b/lost+found/BuggySpamFilter5.java-kF2os5 new file mode 100644 index 00000000..1455d76e --- /dev/null +++ b/lost+found/BuggySpamFilter5.java-kF2os5 @@ -0,0 +1,131 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +/* Buggy version of SpamFilter */ + +public class SpamFilter implements SpamFiltering { + + private Map wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter(String filename) { + wordsMap = new MyMap(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput(filename); + } + + public Map getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + int i = 0; + while(line != null) { + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + if (i%2 == 0) processMessage(split[0], split[1].split("\\W+")); // BUG HERE : only reads half of the lines + line = reader.readLine(); + i++; + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap current = new MyMap(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) if (!stopWords.contains(word)) { + Word w = current.get(word); + if (w == null) + w = new Word(word); + if (category.equals("ham")) { + w.incHamProba(1.0); + Word.totalNumberOfHams++; + } + else { + w.incSpamProba(1.0); + Word.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return (double) 1/(1+Math.exp(eta)); + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) > 0.5; + } +} diff --git a/lost+found/BuggySpamFilter6.java-hQphMp b/lost+found/BuggySpamFilter6.java-hQphMp new file mode 100644 index 00000000..34258cb4 --- /dev/null +++ b/lost+found/BuggySpamFilter6.java-hQphMp @@ -0,0 +1,129 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +/* Buggy version of SpamFilter */ + +public class SpamFilter implements SpamFiltering { + + private Map wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter(String filename) { + wordsMap = new MyMap(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput(filename); + } + + public Map getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + processMessage(split[0], split[1].split("\\W+")); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap current = new MyMap(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) if (!stopWords.contains(word)) { + Word w = current.get(word); + if (w == null) + w = new Word(word); + if (category.equals("ham")) { + w.incHamProba(0.5); // BUG HERE : doesn't increase hamProba correctly + Word.totalNumberOfHams++; + } + else { + w.incSpamProba(1.0); + Word.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return (double) 1/(1+Math.exp(eta)); + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) > 0.5; + } +} diff --git a/lost+found/COPYING.LESSER-YBUENN b/lost+found/COPYING.LESSER-YBUENN new file mode 100644 index 00000000..341c30bd --- /dev/null +++ b/lost+found/COPYING.LESSER-YBUENN @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + diff --git a/lost+found/CableHolder.parametric.svg-sGYzYz b/lost+found/CableHolder.parametric.svg-sGYzYz new file mode 100644 index 00000000..e689474c --- /dev/null +++ b/lost+found/CableHolder.parametric.svg-sGYzYz @@ -0,0 +1,93 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/lost+found/CandleHolder.parametric.svg-5tvN15 b/lost+found/CandleHolder.parametric.svg-5tvN15 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Card.parametric.svg-U1tQUx b/lost+found/Card.parametric.svg-U1tQUx new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Ceil.java-cQSxZX b/lost+found/Ceil.java-cQSxZX new file mode 100644 index 00000000..35d1d727 --- /dev/null +++ b/lost+found/Ceil.java-cQSxZX @@ -0,0 +1,19 @@ +package templates; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.Stack; + + +public class Ceil { + /** + * Trouve dans l'arbre le plus petit élément plus grand ou égal à value + * (donc soit l'élément lui-même soit l'élément situé directement après par ordre de grandeur). + * Si un tel élément n'existe pas, elle doit retourner null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + @@ceil@@ + } +} diff --git a/lost+found/Ceil.java-dYaxRF b/lost+found/Ceil.java-dYaxRF new file mode 100644 index 00000000..ca75bd12 --- /dev/null +++ b/lost+found/Ceil.java-dYaxRF @@ -0,0 +1,17 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.Stack; + + +public class Ceil { + /** + * Trouve dans l'arbre le plus petit élément plus grand ou égal à value + * (donc soit l'élément lui-même soit l'élément situé directement après par ordre de grandeur). + * Si un tel élément n'existe pas, elle doit retourner null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + //TODO + } +} diff --git a/lost+found/CeilBadComplexity.java-Yf3KEN b/lost+found/CeilBadComplexity.java-Yf3KEN new file mode 100644 index 00000000..930231ee --- /dev/null +++ b/lost+found/CeilBadComplexity.java-Yf3KEN @@ -0,0 +1,43 @@ + +public class Ceil { + /** + * Find in the tree the smallest element greater than or equal to value + * (so either the element itself or the element located directly after it + * in order of magnitude). If such an element does not exist, + * it must return null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + if (root == null) return null; + + java.util.List list = new java.util.ArrayList<>(); + java.util.Stack s = new java.util.Stack<>(); + Node curr = root; + + // traverse the tree + while (curr != null || s.size() > 0) + { + while (curr != null) + { + s.push(curr); + curr = curr.getLeft(); + } + + curr = s.pop(); + + list.add(curr.getValue()); + + curr = curr.getRight(); + } + + if (value > list.get(list.size()-1)) return null; + + for (Integer a: list) { + if (a == value) return value; + if (a > value) return a; + } + + return null; + } +} diff --git a/lost+found/CeilCorrect.java-SN0LvP b/lost+found/CeilCorrect.java-SN0LvP new file mode 100644 index 00000000..971e3978 --- /dev/null +++ b/lost+found/CeilCorrect.java-SN0LvP @@ -0,0 +1,25 @@ + +public class Ceil { + /** + * Find in the tree the smallest element greater than or equal to value + * (so either the element itself or the element located directly after it + * in order of magnitude). If such an element does not exist, + * it must return null. + * + * Inserez votre reponse ici + */ + public static Integer ceil(Node root, int value) { + if (root == null) return null; + if (value == root.getValue()) return value; + + //If root's value is greater than value, either left subtree or root has the ceil value + if (value < root.getValue()) { + Integer c = ceil(root.getLeft(), value); + if (c != null) return c; + else return root.getValue(); + } + + // If root's value is smaller, ceil must be in right subtree + return ceil(root.getRight(), value); + } +} diff --git a/lost+found/CircularLinkedList.java-6CUyqN b/lost+found/CircularLinkedList.java-6CUyqN new file mode 100644 index 00000000..7c1bb503 --- /dev/null +++ b/lost+found/CircularLinkedList.java-6CUyqN @@ -0,0 +1,71 @@ +package student; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class CircularLinkedList implements Iterable { + private long nOp = 0; // count the number of operations + private int n; // size of the stack + private Node last; // trailer of the list + + // helper linked list class + private class Node { + private Item item; + private Node next; + } + + public CircularLinkedList() { + last = null; + n = 0; + } + + public boolean isEmpty() { + return n == 0; + } + + public int size() { + return n; + } + + private long nOp() { + return nOp; + } + + + + /** + * Append an item at the end of the list + * @param item the item to append + */ + public void enqueue(Item item) { + @@enqueue@@ + } + + /** + * Removes the element at the specified position in this list. + * Shifts any subsequent elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + */ + public Item remove(int index) { + @@remove@@ + } + + + /** + * Returns an iterator that iterates through the items in FIFO order. + * @return an iterator that iterates through the items in FIFO order. + */ + public Iterator iterator() { + return new ListIterator(); + } + + /** + * Implementation of an iterator that iterates through the items in FIFO order. + * + */ + private class ListIterator implements Iterator { + @@listiterator@@ + } + +} \ No newline at end of file diff --git a/lost+found/CircularLinkedList.java-wAwKF8 b/lost+found/CircularLinkedList.java-wAwKF8 new file mode 100644 index 00000000..7c1bb503 --- /dev/null +++ b/lost+found/CircularLinkedList.java-wAwKF8 @@ -0,0 +1,71 @@ +package student; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class CircularLinkedList implements Iterable { + private long nOp = 0; // count the number of operations + private int n; // size of the stack + private Node last; // trailer of the list + + // helper linked list class + private class Node { + private Item item; + private Node next; + } + + public CircularLinkedList() { + last = null; + n = 0; + } + + public boolean isEmpty() { + return n == 0; + } + + public int size() { + return n; + } + + private long nOp() { + return nOp; + } + + + + /** + * Append an item at the end of the list + * @param item the item to append + */ + public void enqueue(Item item) { + @@enqueue@@ + } + + /** + * Removes the element at the specified position in this list. + * Shifts any subsequent elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + */ + public Item remove(int index) { + @@remove@@ + } + + + /** + * Returns an iterator that iterates through the items in FIFO order. + * @return an iterator that iterates through the items in FIFO order. + */ + public Iterator iterator() { + return new ListIterator(); + } + + /** + * Implementation of an iterator that iterates through the items in FIFO order. + * + */ + private class ListIterator implements Iterator { + @@listiterator@@ + } + +} \ No newline at end of file diff --git a/lost+found/CircularLinkedList.png-GBRUaN b/lost+found/CircularLinkedList.png-GBRUaN new file mode 100644 index 00000000..f098545a Binary files /dev/null and b/lost+found/CircularLinkedList.png-GBRUaN differ diff --git a/lost+found/CircularLinkedListTestComplexity.java-LvlTPg b/lost+found/CircularLinkedListTestComplexity.java-LvlTPg new file mode 100644 index 00000000..0c5a0830 --- /dev/null +++ b/lost+found/CircularLinkedListTestComplexity.java-LvlTPg @@ -0,0 +1,63 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import static org.junit.Assert.*; + +@RunWith(Parameterized.class) +public class CircularLinkedListTestComplexity { + + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestComplexity(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test(timeout=300) + @Grade(value=10) //10 par test x 5 = 50 + public void runAsExpected() { + int sz = correct.size(); + for (int i = 0; i < sz/2; i++) { + student.remove(0); + correct.remove(0); + } + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 1000000; k++) { + a.enqueue(k); + b.add(k); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/lost+found/CircularLinkedListTestComplexity.java-jrdYSc b/lost+found/CircularLinkedListTestComplexity.java-jrdYSc new file mode 100644 index 00000000..df5d3038 --- /dev/null +++ b/lost+found/CircularLinkedListTestComplexity.java-jrdYSc @@ -0,0 +1,63 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import static org.junit.Assert.*; + +@RunWith(Parameterized.class) +public class CircularLinkedListTestComplexity { + + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestComplexity(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test(timeout=300) + @Grade(value=10) //10 par test x 5 = 50 + public void runAsExpected() { + int sz = correct.size(); + for (int i = 0; i < sz/2; i++) { + student.remove(0); + correct.remove(0); + } + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 5; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 1000000; k++) { + a.enqueue(k); + b.add(k); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/lost+found/CircularLinkedListTestExtreme.java-WIMH2e b/lost+found/CircularLinkedListTestExtreme.java-WIMH2e new file mode 100644 index 00000000..ff260386 --- /dev/null +++ b/lost+found/CircularLinkedListTestExtreme.java-WIMH2e @@ -0,0 +1,63 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; + +import student.CircularLinkedList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + + +public class CircularLinkedListTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + for (int i = 0; i < 20; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + assertEquals(0,a.size()); + a.enqueue(i); + assertEquals(1,a.size()); + Iterator itera = a.iterator(); + assertTrue(itera.hasNext()); + assertEquals(i,itera.next()); + + CircularLinkedList b = new CircularLinkedList<>(); + b.enqueue(i); + b.remove(0); + Iterator iterb = b.iterator(); + assertFalse(iterb.hasNext()); + + } + } + + @Test(expected = IndexOutOfBoundsException.class) + @Grade(value=5) + public void testOutOfBound() { + CircularLinkedList a = new CircularLinkedList<>(); + a.enqueue(3); + a.remove(1); + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=5) + public void testConcurrentModificationNext() { + CircularLinkedList a = new CircularLinkedList<>(); + Iterator iter = a.iterator(); + a.enqueue(3); + iter.next(); + } + + + + + +} + diff --git a/lost+found/CircularLinkedListTestExtreme.java-qW2gSL b/lost+found/CircularLinkedListTestExtreme.java-qW2gSL new file mode 100644 index 00000000..72eb859c --- /dev/null +++ b/lost+found/CircularLinkedListTestExtreme.java-qW2gSL @@ -0,0 +1,64 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; + +import org.junit.Test; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; + +import student.CircularLinkedList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + + +public class CircularLinkedListTestExtreme { + + + @Test + @Grade(value=15) + public void testIteratorList() { + for (int i = 0; i < 20; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + assertEquals(0,a.size()); + a.enqueue(i); + assertEquals(1,a.size()); + Iterator itera = a.iterator(); + assertTrue(itera.hasNext()); + assertEquals(i,itera.next()); + + CircularLinkedList b = new CircularLinkedList<>(); + b.enqueue(i); + b.remove(0); + Iterator iterb = b.iterator(); + assertFalse(iterb.hasNext()); + + } + } + + @Test(expected = IndexOutOfBoundsException.class) + @Grade(value=5) + public void testOutOfBound() { + CircularLinkedList a = new CircularLinkedList<>(); + a.enqueue(3); + a.remove(1); + } + + + @Test(expected = ConcurrentModificationException.class) + @Grade(value=5) + public void testConcurrentModificationNext() { + CircularLinkedList a = new CircularLinkedList<>(); + Iterator iter = a.iterator(); + a.enqueue(3); + iter.next(); + } + + + + + +} + diff --git a/lost+found/CircularLinkedListTestRandom.java-egpgb7 b/lost+found/CircularLinkedListTestRandom.java-egpgb7 new file mode 100644 index 00000000..e93295ea --- /dev/null +++ b/lost+found/CircularLinkedListTestRandom.java-egpgb7 @@ -0,0 +1,68 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class CircularLinkedListTestRandom { + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestRandom(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.5) //0.5 par test x 50 = 25 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 100; k++) { + int v = r.nextInt(); + a.enqueue(v); + b.add(v); + } + if (i%2 == 0) { + a.remove(10); + b.remove(10); + a.remove(0); + b.remove(0); + a.remove(a.size()-1); + b.remove(b.size()-1); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/lost+found/CircularLinkedListTestRandom.java-uDdKeh b/lost+found/CircularLinkedListTestRandom.java-uDdKeh new file mode 100644 index 00000000..4786cc90 --- /dev/null +++ b/lost+found/CircularLinkedListTestRandom.java-uDdKeh @@ -0,0 +1,67 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.CircularLinkedList; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class CircularLinkedListTestRandom { + private CircularLinkedList student; + private List correct; + + + public CircularLinkedListTestRandom(CircularLinkedList student, List correct) { + this.student = student; + this.correct = correct; + } + + @Test + @Grade(value=0.5) //0.5 par test x 50 = 25 + public void runAsExpected() { + Iterator aIter = student.iterator(); + Iterator bIter = correct.iterator(); + assertEquals(correct.size(),student.size()); + while (bIter.hasNext()) { + assertTrue(aIter.hasNext()); + assertEquals(bIter.next(),aIter.next()); + } + assertFalse(bIter.hasNext()); + assertFalse(aIter.hasNext()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + Random r = new Random(); + LinkedList tests = new LinkedList<>(); + for (int i = 0; i < 50; i++) { + CircularLinkedList a = new CircularLinkedList<>(); + List b = new LinkedList<>(); + for (int k = 0; k < 100; k++) { + int v = r.nextInt(); + a.enqueue(v); + b.add(v); + } + if (i%2 == 0) { + a.remove(10); + b.remove(10); + a.remove(0); + b.remove(0); + a.remove(a.size()-1); + b.remove(b.size()-1); + } + tests.add(new Object[]{a,b}); + } + return tests; + } +} + diff --git a/lost+found/ClosestPair.java-5AJVJ8 b/lost+found/ClosestPair.java-5AJVJ8 new file mode 100644 index 00000000..0f875c5b --- /dev/null +++ b/lost+found/ClosestPair.java-5AJVJ8 @@ -0,0 +1,2 @@ +package student; +@@code1@@ \ No newline at end of file diff --git a/lost+found/ClosestPairTest.java-DVxIJn b/lost+found/ClosestPairTest.java-DVxIJn new file mode 100644 index 00000000..c9d55b6d --- /dev/null +++ b/lost+found/ClosestPairTest.java-DVxIJn @@ -0,0 +1,216 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import student.ClosestPair; +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +public class ClosestPairTest { + + public static int[] closestPairCorrect(int [] input, int x) { + Arrays.sort(input); + int best = 0; + int [] res = new int []{input[0],input[0]}; + int i = 0; + int j = input.length-1; + while (i < j) { + if (input[i]+input[j] > x) { + j--; + } + else if (input[i]+input[j] < x) { + i++; + } + else { + res[0] = input[i]; + res[1] = input[j]; + return res; + } + if (Math.abs(x-input[i]-input[j]) < Math.abs(x-res[0]-res[1])) { + res[0] = input[i]; + res[1] = input[j]; + } + } + return res; + } + + + /** + * + * @param input + * @param res + * @return true iff res[0] and res[1] are values from input + */ + public boolean inArray(int [] input, int [] res) { + boolean a = false; + boolean b = false; + for (int v : input) { + a |= (v == res[0]); + b |= (v == res[1]); + if (a && b) return true; + } + return false; + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair0() { + int [] input = new int [] {-5}; + + int x = 155; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(165,Math.abs(x-res[0]-res[1])); + } + + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair1() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 155; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(x,res[0]+res[1]); + } + + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair2() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 36; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(x,res[0]+res[1]); + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair3() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 13; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(2,Math.abs(x-res[0]-res[1])); + + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair4() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 170; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(1,Math.abs(x-res[0]-res[1])); + } + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair5() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = -1; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(3,Math.abs(x-res[0]-res[1])); + } + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair6() { + int [] input = new int [] {5,10,1,150,151,155,18,50,30}; + + int x = 1000; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(690,Math.abs(x-res[0]-res[1])); + } + + + @Test(timeout=300) + @Grade(value=1) + public void testClosestPair7() { + int [] input = new int [] {5,10,1,75,150,151,155,18,75,50,30}; + + int x = 140; + + int [] res = ClosestPair.closestPair(input.clone(),x); + assertTrue(inArray(input,res)); + assertEquals(2,res.length); + assertEquals(10,Math.abs(x-res[0]-res[1])); + } + + @Test(timeout=1000) + @Grade(value=92) + public void testClosestPairRandomWithTimeComplexity() { + Random r = new Random(); + + + for (int i = 0; i < 100; i++) { + + int n = 100; + int [] input = new int [n]; + for (int j = 0; j < n; j++) { + input[j] = r.nextInt(n*n); + } + + int x = n*n/2; + int [] resCorrect = closestPairCorrect(input.clone(),x); + int [] res = ClosestPair.closestPair(input.clone(),x); + + assertTrue(inArray(input,res)); + assertEquals(Math.abs(x-resCorrect[0]-resCorrect[1]),Math.abs(x-res[0]-res[1])); + } + + for (int i = 0; i < 5; i++) { + + int n = 100000; + int [] input = new int [n]; + for (int j = 0; j < n; j++) { + input[j] = r.nextInt(n*n); + } + + int x = n*n/2; + int [] resCorrect = closestPairCorrect(input.clone(),x); + int [] res = ClosestPair.closestPair(input.clone(),x); + + assertTrue(inArray(input,res)); + assertEquals(Math.abs(x-resCorrect[0]-resCorrect[1]),Math.abs(x-res[0]-res[1])); + } + + } + + +} + + diff --git a/lost+found/Compress.java-JmUSEs b/lost+found/Compress.java-JmUSEs new file mode 100644 index 00000000..5603f723 --- /dev/null +++ b/lost+found/Compress.java-JmUSEs @@ -0,0 +1,545 @@ +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.LinkedHashMap; +import java.io.*; +import java.util.Stack; +import java.lang.Comparable; + +/* Solution of Simon Hardy for the compression (mission 5) */ + +public class Compress { + + public static final boolean BIT_1 = true; + public static final boolean BIT_0 = false; + private static int treeLength; // taille de l'arbre en nombre de chars (16 bits par char) + private static int textLength = 0; // taille totale du texte à compresser (nécessaire pour virer les 0 à la fin) + + /** + * MAIN + */ + public static void main(String [] args) { + compress(args[0], args[1]); + } + + /* + * FUNCTIONS + */ + + /** + * Compresse un fichier compressé + * @param inputFilePath Fichier d'entrée, ce fichier sera compressé après l'opération + * @param outputFilePath Fichier de sortie, ce fichier correspond au fichier compressé + */ + public static void compress(String inputFilePath, String outputFilePath) { + Chrono.start(); + + ParsedFile file = new ParsedFile(inputFilePath); + + LinkedHashMap freqMap = computeFrequency(file); + + BinaryTree freqTree = computeTree(freqMap); + + String compressedFile = do_compression(freqTree, file); + String outputFile = catTree(freqTree, compressedFile); + writeFile(outputFilePath, outputFile); // Écrit la taille de l'arbre en binaire sur 32 bits, l'arbre en binaire (char par char) puis les bits issus de la compression du fichier d'entr�e. + + Chrono.stop(); + + // Calcul du taux de compression + long file1 = ParsedFile.sizeFile(inputFilePath); + long file2 = ParsedFile.sizeFile(outputFilePath); + //System.out.println(""); + //System.out.println("Size fichier entrée: " + file1); + //System.out.println("Size fichier compressé: " + file2); + //System.out.println("Taux de compression: " + ((double)file1 / (double)file2)); + + } + + /** + * Calcul la fréquence de chaque caractère + * @param file Fichier d'entrée, le fichier à traiter + * @return HashMap contenant la fréquence de chaque caractère de la chaîne de caractère d'entrée (fichier) + */ + public static LinkedHashMap computeFrequency(ParsedFile file) { + LinkedHashMap map = new LinkedHashMap(); + // Table utilis�e pour r�cupere les fr�quences. + ArrayList content = file.getContent(); + textLength=0; // WITHOUT THIS, IT WOULD FAIL WITH THE SECOND COMPRESSION... + for(String s : content) { + textLength++; // pour compter les passages � la ligne + for(int i = 0; i < s.length() ;i++) { + textLength++; // pour compter le nombre de caract�res sur une m�me ligne + char c = s.charAt(i); + + if(map.get(c) != null) + map.put(c, map.remove(c)+1); + else + map.put(c,1); + } + + if(map.get('\n') != null) + map.put('\n', map.remove('\n')+1); + else + map.put('\n',1); + } + + return map; + } + + /** + * Création de l'arbre nécessaire pour la compression (Arbre de Huffman) + * @param map Table de fréquence des caractères + * @return Arbre de Huffman + */ + public static BinaryTree computeTree(LinkedHashMap map) { + // File de priorit� utilis�e dans la cr�ation de l'arbre pour la compression de Huffman + PriorityQueue> queue = new PriorityQueue>(); + Iterator it = map.keySet().iterator(); + + while (it.hasNext()) { + // Parcours de chaque �l�ment de la table de fr�quence (en cours de construction, donc de la map) + char c = it.next(); + int key = map.get(c); + + SimpleEntry e = new SimpleEntry(map.get(c),new BinaryTree(key,c)); + // Ajout dans la file de priorit� la feuille contenant le caract�re avec sa fr�quence comme cl� + queue.add(e); + + it.remove(); + } + + while(queue.size() > 1) { + // On vas vider la file de priorit� pour cr�er l'arbre de codage de la compression de Huffman + SimpleEntry e1 = queue.poll(); + SimpleEntry e2 = queue.poll(); + SimpleEntry eOut = + new SimpleEntry + (e1.getKey() + e2.getKey(), + new BinaryTree( + e1.getKey()+e2.getKey(), + e2.getValue(), + e1.getValue())); + queue.add(eOut); + } + if (queue.isEmpty()) return new BinaryTree(0, '0'); + return queue.remove().getValue(); + } + + /** + * Effectue la compression du fichier + * @param bt Arbre de Huffman + * @param file Fichier d'entrée, le fichier à compresser + * @return Résultat de la compression + */ + public static String do_compression(BinaryTree bt, ParsedFile file) { + String result = ""; + ArrayList content = file.getContent(); + + for(String line:content) { + for (int i = 0; i < line.length(); i++) + result += getCode(bt,line.charAt(i)); + + result += getCode(bt,'\n'); + } + + return result; + } + + /** + * Permet de récupérer le code de Huffman (cf. p576 du livre de référence Data Structure & Algorithms in Java) + * @param bt Abre + * @param c Caractère dont nous cherchons le code + * @return retourne le code recherché + */ + public static String getCode(BinaryTree bt, Character c) { + String result = ""; + + if(bt.isExternal()) + return ""; + else if (bt.getLeft().getValue() == c) + return "0"; + else if (bt.getRight().getValue() == c) + return "1"; + else { + String leftCode ; + String rightCode ; + + if(!(leftCode=getCode(bt.getLeft(),c)).equals("")) + return "0" + leftCode; + else if(!(rightCode=getCode(bt.getRight(),c)).equals("")) + return "1" + rightCode; + } + + return result; + } + + /** + * Affiche le contenu de l'arbre binaire + * @param freqTree Arbre + * @param s Chaîne de caractère supplémentaire + * @return Contenu de l'arbre binaire + */ + public static String catTree(BinaryTree freqTree, String s) { + String result = freqTree.toString(); + treeLength = result.length(); + + return result + s; + } + + /** + * Écrit le fichier de sortie (plus spécifique que la fonction de ParsedFile) + * @param outputFilePath Chemin relatif/absolu du fichier + * @param toOutput Contenu du fichier + */ + public static void writeFile(String outputFilePath, String toOutput) { + try { + // Ouverture du flux de sortie + OutputBitStream out = new OutputBitStream(outputFilePath); + out.write(textLength); // 1er �l�ment du fichier compress� : la taille du texte (sur les 32 premiers bits) + out.write(treeLength); // 2�me �l�ment du fichier compress� : la taille de l'arbre (sur les 32 bits suivants) + for (int i = 0 ; i < toOutput.length() ; i++) { + if (i < treeLength) + out.write(toOutput.charAt(i)); // on �crit l'arbre en binaire + else if (toOutput.charAt(i) == '1') + out.write(BIT_1); + else if (toOutput.charAt(i) == '0') + out.write(BIT_0); + } + + // Fermeture du flux de sortie + out.close(); + } catch (Exception e) { + e.printStackTrace(); + System.out.println("Exception, arrêt du programme. "); + } + } +} + +class BinaryTree +{ + + private BinaryTree left; + private BinaryTree right; + private int key; + private char value; + + /** + * CONSTRUCTEURS + */ + + /* CONSTRUCTEUR + * Construit un arbre élémentaire correspondant à l'expression vide "" + */ + public BinaryTree(int k, char o) { + key = k; + value = o; + } + + public BinaryTree(int k, BinaryTree l, BinaryTree r) { + key = k; + left = l; + right = r; + } + public BinaryTree(String s) { + Stack stack = new Stack(); + int i = 0; + while(i < s.length()) { + + if (s.charAt(i) == '[' || s.charAt(i) == '"' || s.charAt(i) == '>' || s.charAt(i) == ',' || s.charAt(i) == '|') + i++; // on skip le caractere en question + + else if (s.charAt(i) == '<') { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + i++; // on skip le < + while (s.charAt(i) != ',') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + i+=2; // on skippe la , et le " ouvrant + BinaryTree T = new BinaryTree(Integer.parseInt(temp), s.charAt(i)); + i+=3; // on skippe la lettre, le " fermant et le > + stack.push(T); + } + else if (isNumerical(s.charAt(i))) { + String temp = ""; // contiendra le nombre representant la cle (necessaire car possibilite de plusieurs chiffres) + while (s.charAt(i) != '|') { + temp += s.charAt(i); + i++; // on skip le chiffre en question + } + BinaryTree T = new BinaryTree(Integer.parseInt(temp), '?'); // ? signifie que c'est un noeud interne + stack.push(T); + i++; // on skip le '|' + } + else if (s.charAt(i) == ']') { + BinaryTree T2 = stack.pop(); + BinaryTree T = stack.pop(); + int val = T.getKey(); + BinaryTree T1 = stack.pop(); + stack.push(new BinaryTree(val, T1, T2)); + i++; + } + else + i++; // caractere indefini, on skip simplement (exemple : le null au debut) + } + BinaryTree T = stack.pop(); + left = T.getLeft(); + right = T.getRight(); + key = T.getKey(); + value = T.getValue(); + } + + public boolean isExternal() { + return !hasLeft() && !hasRight(); + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getLeft() { + return left; + } + + public void setLeft(BinaryTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public BinaryTree getRight() { + return right; + } + + public void setRight(BinaryTree right) { + this.right = right; + } + + public char getValue() { + return value; + } + + public void setValue(char value) { + this.value = value; + } + + public int getKey() { + return key; + } + + public void setKey(int key) { + this.key = key; + } + + public String toString() { + if(!isExternal()) + return "["+left.toString()+"|"+key+"|"+right.toString()+"]"; + else + return "<"+key+","+"\""+value+"\""+">"; + } + + public boolean isNumerical(char c) // deja implemente par Java ?? + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } +} + +class SimpleEntry extends + AbstractMap.SimpleEntry implements Comparable{ + + public SimpleEntry(K arg0, V arg1) { + super(arg0, arg1); + } + + public int compareTo(SimpleEntry e) + { + return this.getKey().toString().compareTo(e.getKey().toString()); + } + + @Override + @SuppressWarnings("unchecked") + public int compareTo(Object o) { + if(o instanceof SimpleEntry) + { + SimpleEntry e = (SimpleEntry) o; + return this.getKey().toString().compareTo(e.getKey().toString()); + } + else return 0; + } + + public String toString() + { + return "<"+this.getKey().toString()+","+this.getValue().toString()+">"; + } +} + +/** + * Classe permettant de lire n'importe quel fichier ASCII, quelque soit son format + * @author Lionel Lebon + */ +class ParsedFile { + + private ArrayList content; + + /* + * CONSTRUCTEUR + */ + public ParsedFile(String path) { + content = readFile(path); + } + + /* + * FUNCTIONS + */ + public ArrayList getContent() { return this.content; } + + /** + * Lecture du fichier + * @param path Chemin absolu/relatif du fichier à parser + * @return ArrayList + */ + private ArrayList readFile(String path) { + BufferedReader input = null; + String line = null; + + // Tableau de String (on veut traiter indépendamment chaque commande) + ArrayList content = new ArrayList(); + + try{ + input = new BufferedReader(new FileReader(path)); + String s = input.readLine(); + + while(s != null) { + content.add(s); + s = input.readLine(); + } + } catch(FileNotFoundException e) { + e.printStackTrace(); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(input != null) + try { + input.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return content; + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1) { + writeFile(path, content1, false); + } + + /** + * Écrire un fichier ASCII + * @param path Chemin relatif/absolu du nouveau fichier + * @param append si true, alors on écrit à la fin du fichier + * @param content Contenu à écrire dans le fichier + */ + public static void writeFile(String path, String content1, boolean append) { + PrintWriter output = null; + + try { + output = new PrintWriter(new FileWriter(path, append)); + output.print(content1); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(output != null) { + try { + output.close(); + } catch(Exception e) { + e.printStackTrace(); + } + } + } + } + + /** + * Supprime un fichier + * @param path Chemin absolu/relatif du fichier à supprimer + */ + public static void deleteFile(String path) { + try { + File file = new File(path); + file.delete(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * Taille d'un fichier + * @param path Chemin absolu/relatif du fichier + */ + public static long sizeFile(String path) { + File file = new File(path); + return file.length(); + } +} + + +/** + * Classe permettant de chronométrer le temps d'exécution d'un code. + * @author Lionel Lebon + */ +class Chrono { + static long m_start; + static long m_stop; + + /** + * Lance le chronomètre + */ + public static void start() { + m_start = System.currentTimeMillis(); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console (fait appel à stop("")) + */ + public static void stop() { + stop(""); + } + + /** + * Calcul le temps d'exécution et l'affiche dans la console + * @param content String permettant de différencier ce temps d'exécution par rapport à d'autres + */ + public static void stop(String content) { + m_stop = System.currentTimeMillis(); + //System.out.println("Temps d'exécution " + content + ": " + (m_stop - m_start) + " ms"); + } +} diff --git a/lost+found/CompressProps.scala-orP282 b/lost+found/CompressProps.scala-orP282 new file mode 100644 index 00000000..86c03652 --- /dev/null +++ b/lost+found/CompressProps.scala-orP282 @@ -0,0 +1,93 @@ +import org.scalacheck.Properties +import org.scalacheck.Prop +import org.scalacheck.Gen.{listOf, alphaStr, numChar, oneOf, choose} +import java.util.HashMap +import org.scalacheck.Gen +import org.scalacheck.Arbitrary.arbitrary +import scala.tools.nsc.io.File +import scala.io.Source.fromFile + +object CompressProps extends Properties("Compress") { + + property("basic_file_equality") = { + try { + val s = compress_decompress("hello world") + s == "hello world\n" + + } catch { + case e: Exception => false + } + } + + /*property("random_files_equality") = Prop.forAll { (el: String) => + try { + var s = "" + if (el == "") s = compress_decompress("a") // to avoid bugs with empty files + else s = compress_decompress(el) + s == el + "\n" || s == "a\n" + + } catch { + case e: Exception => false + } + }*/ + + val strGen = Gen.listOfN(1000, Gen.alphaChar).map(_.mkString) + + property("long_files_equality") = Prop.forAll(strGen) { str => + try { + val s = compress_decompress(str) + s == str + "\n" + + } catch { + case e: Exception => false + } + } + + property("compression_length") = { + try { + var str = "" + for (i <- 1 to 10000) + str += "a" + val s = compress_decompress(str) + + val compressed = new java.io.File("./compressed.txt") + if (compressed.exists()) { + val fileSize = compressed.length + s == str + "\n" && fileSize < 1350 // length of my solution is 1313 + } else { + false + } + + } catch { + case e: Exception => false + } + } + + property("compression_length_2") = { + try { + var str = "" + for (i <- 1 to 10000) + str += "01" + val s = compress_decompress(str) + + val compressed = new java.io.File("./compressed.txt") + if (compressed.exists()) { + val fileSize = compressed.length + s == str + "\n" && fileSize < 3900 // length of my solution is 3853 + } else { + false + } + } catch { + case e: Exception => false + } + } + + @throws(classOf[Exception]) + def compress_decompress(content: String): String = { + File("./input.txt").writeAll(content + "\n") // to avoid bugs with no '\n' files + Compress.main(Array("./input.txt", "./compressed.txt")) + Decompress.main(Array("./compressed.txt", "./output.txt")) + val result = fromFile("./output.txt").mkString + result + } +} diff --git a/lost+found/ConnectedComponents.java-Rpkajp b/lost+found/ConnectedComponents.java-Rpkajp new file mode 100644 index 00000000..55f0a0f1 --- /dev/null +++ b/lost+found/ConnectedComponents.java-Rpkajp @@ -0,0 +1,3 @@ +package templates; + +@@TODO1@@ diff --git a/lost+found/ConnectedComponents.java-zFx8tu b/lost+found/ConnectedComponents.java-zFx8tu new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/ConnectedComponents.java-zFx8tu @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/ConnectedComponentsTest.java-EG4VQY b/lost+found/ConnectedComponentsTest.java-EG4VQY new file mode 100644 index 00000000..54cad037 --- /dev/null +++ b/lost+found/ConnectedComponentsTest.java-EG4VQY @@ -0,0 +1,127 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import java.util.Random; +import static org.junit.Assert.assertEquals; + +public class ConnectedComponentsTest { + + private static class WeightedQuickUnionUF { + private int[] parent; // parent[i] = parent of i + private int[] size; // size[i] = number of sites in subtree rooted at i + private int count; // number of components + + public WeightedQuickUnionUF(int n) { + count = n; + parent = new int[n]; + size = new int[n]; + for (int i = 0; i < n; i++) { + parent[i] = i; + size[i] = 1; + } + } + + + public int count() { + return count; + } + + public int find(int p) { + validate(p); + while (p != parent[p]) + p = parent[p]; + return p; + } + + // validate that p is a valid index + private void validate(int p) { + int n = parent.length; + if (p < 0 || p >= n) { + throw new IndexOutOfBoundsException("index " + p + " is not between 0 and " + (n - 1)); + } + } + + public boolean connected(int p, int q) { + return find(p) == find(q); + } + + public void union(int p, int q) { + int rootP = find(p); + int rootQ = find(q); + if (rootP == rootQ) return; + + // make smaller root point to larger one + if (size[rootP] < size[rootQ]) { + parent[rootP] = rootQ; + size[rootQ] += size[rootP]; + } else { + parent[rootQ] = rootP; + size[rootP] += size[rootQ]; + } + count--; + } + } + + public void testRandomGraphOk(int n, int e) { + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + Random r = new Random(6); + for (int i = 0; i < e; i++) { + int orig = r.nextInt(n); + int dest = r.nextInt(n); + g.addEdge(orig,dest); + uf.union(orig,dest); + } + int nbCC = ConnectedComponents.numberOfConnectedComponents(g); + assertEquals(uf.count(),nbCC); + } + + @Test + @Grade(value=25) + public void cycleGraphOk() { + int n = 1002; + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + g.addEdge(0,n-1); + uf.union(0,n-1); + + for (int i = 1; i < n; i++) { + g.addEdge(i,(i-1)%n); + uf.union(i,(i-1)%n); + } + + assertEquals(uf.count(), ConnectedComponents.numberOfConnectedComponents(g)); + } + + + @Test(timeout = 3000) + @Grade(value = 25) + public void complexityOk() { + //long t0 = System.currentTimeMillis(); + int n = 7002; + Graph g = new Graph(n); + for (int i = 0; i < n; i++) { + g.addEdge(i,(i+2)%n); + } + ConnectedComponents.numberOfConnectedComponents(g); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + + } + + @Test + @Grade(value = 50) + public void correctness(){ + testRandomGraphOk(600,120); + testRandomGraphOk(220,7); + testRandomGraphOk(105,3); + testRandomGraphOk(0,0); + testRandomGraphOk(10,2*10); + testRandomGraphOk(42,23); + testRandomGraphOk(420,123); + testRandomGraphOk(90,40); + } + +} diff --git a/lost+found/CorrectBFS.java-5ktjzv b/lost+found/CorrectBFS.java-5ktjzv new file mode 100644 index 00000000..2c54997b --- /dev/null +++ b/lost+found/CorrectBFS.java-5ktjzv @@ -0,0 +1,31 @@ +// 1) +import java.util.LinkedList; + +// 2) +for (int s : sources) { + for (int i = 0;i < marked.length;i++) { + marked[i] = false; + } + + distTo[s] = 0; + marked[s] = true; + LinkedList q = new LinkedList(); + q.add(s); + + while (!q.isEmpty()) { + int v = q.remove(); + for (int w : G.adj(v)) { + if (!marked[w] && distTo[v] + 1 < distTo[w]) { + marked[w] = true; + distTo[w] = distTo[v] + 1; + q.add(w); + } + } + } +} + +// 3) +return distTo[v] != INFINITY; + +// 4) +return distTo[v]; diff --git a/lost+found/CorrectCompressTests.java-FEByqh b/lost+found/CorrectCompressTests.java-FEByqh new file mode 100644 index 00000000..772ba3e8 --- /dev/null +++ b/lost+found/CorrectCompressTests.java-FEByqh @@ -0,0 +1,55 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.io.PrintWriter; +import java.util.Scanner; +import java.io.IOException; +import java.io.File; + +public class CompressTests { + + @Test + public void firstTest() { + try { + String str = "abcdefg"; + assertEquals(compressDecompress(str), str); + + StringBuilder builder = new StringBuilder(); + for (int i = 0;i < 100;i++) { + builder.append("abracadabra"); + } + str = builder.toString(); + System.out.println("lol"); + + assertTrue(this.getSizeCompressed(str) < str.length()); + assertEquals(this.compressDecompress(str), str); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + public long getSizeCompressed(String content) throws IOException { + + PrintWriter writer = new PrintWriter("./input.txt"); + writer.println(content); + writer.close(); + Compress.main(new String[]{"./input.txt", "./compressed.txt"}); + + File file = new File("./compressed.txt"); + return file.length(); + + } + + public String compressDecompress(String content) throws IOException { + PrintWriter writer = new PrintWriter("./input.txt"); + writer.println(content); + writer.close(); + Compress.main(new String[]{"./input.txt", "./compressed.txt"}); + Decompress.main(new String[]{"./compressed.txt", "./output.txt"}); + Scanner scanner = new Scanner(new File("./output.txt")); + String str = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return str; + } +} diff --git a/lost+found/CorrectDFS.java-rmC2pV b/lost+found/CorrectDFS.java-rmC2pV new file mode 100644 index 00000000..56addaf3 --- /dev/null +++ b/lost+found/CorrectDFS.java-rmC2pV @@ -0,0 +1,36 @@ +// 1) +import java.util.ArrayList; +import java.util.Stack; + +// 2) +for (int i = 0; i < marked.length;i++) { + marked[i] = false; + edgeTo[i] = -1; +} + +Stack stack = new Stack(); +stack.push(v); +while (!stack.empty()) { + int n = stack.pop(); + marked[n] = true; + + for (int adj : G.adj(n)) { + if (!marked[adj]) { + edgeTo[adj] = n; + stack.push(adj); + } + } +} + +// 3) +return marked[v]; + +// 4) +ArrayList list = new ArrayList<>(); +list.add(v); +while (v != s) { + v = edgeTo[v]; + list.add(v); +} + +return list; diff --git a/lost+found/CorrectHashMapTests.java-64NlKs b/lost+found/CorrectHashMapTests.java-64NlKs new file mode 100644 index 00000000..88a3805d --- /dev/null +++ b/lost+found/CorrectHashMapTests.java-64NlKs @@ -0,0 +1,120 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import java.util.Map.Entry; + +/** + * @author Quentin + */ + +public class HashMapTests { + + String testStrings[] = {"a", "beohe", "bobby", "a", "blip", "buldozer", "bloup", "zouplette", "azertyuiop", "poiuytreza"}; + String testStrings2[] = {"alors", "bdzhe", "bbluo", "alpa", "blnd", "ber", "blp", "zouplete", "azertyiop", "dpoiuytreza"}; + + @Test + public void getTest() { + MapInterface map = new HashMap(); + for (int i = 0; i < testStrings.length; i++) { + map.put(testStrings[i], i); + assertEquals(map.get(testStrings[i]), new Integer(i)); + } + for (int i = 4; i < testStrings.length; i++) { + assertEquals(map.get(testStrings[i]), new Integer(i)); + } + } + + @Test + public void getHashTest() { + MapInterface map = new HashMap(); + for (int i = 0; i < testStrings.length; i++) { + map.put(testStrings[i], i); + assertEquals(map.get(testStrings[i], map.hashCode(testStrings[i])), new Integer(i)); + } + assertEquals(map.get("bobby", map.hashCode("zouplette")), null); + } + + @Test + public void putHashTest() { + MapInterface map = new HashMap(); + for (int i = 0; i < testStrings.length; i++) { + map.put(testStrings[i], i, map.hashCode(testStrings2[i])); + assertEquals(map.get(testStrings[i], map.hashCode(testStrings2[i])), new Integer(i)); + } + map.put("bobby", 2, map.hashCode("zouplette")); + assertEquals(map.get("bobby", map.hashCode("zouplette")), new Integer(2)); + } + + @Test + public void sizeTest() { + MapInterface map = new HashMap(); + assertEquals(map.size(), 0); + int size; + for (int i = 0; i < testStrings.length; i++) { + size = map.size(); + if (map.get(testStrings[i]) != null) { + map.put(testStrings[i], i); + assertEquals(map.size(), size); + } + else { + map.put(testStrings[i], i); + assertEquals(map.size(), size + 1); + } + } + } + + @Test + public void hashCodeTest() { + MapInterface map = new HashMap(); + HashMap hmap = new HashMap(); + assertTrue(map.hashCode("a") == map.hashCode("a")); + for (int i = 0; i < testStrings.length; i++) { + assertTrue(map.hashCode(testStrings[i]) == hmap.hashCode(testStrings[i])); + for (int j = i + 1; j < testStrings.length; j++) { + if (testStrings[i].equals(testStrings[j])) { + assertTrue(map.hashCode(testStrings[i]) == map.hashCode(testStrings[j])); + } + else { + assertTrue(map.hashCode(testStrings[i]) != map.hashCode(testStrings[j])); + } + } + } + String str1 = "abcdefghij"; + String str2 = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"; + long t1 = System.currentTimeMillis(); + map.hashCode(str1); + long t2 = System.currentTimeMillis(); + map.hashCode(str2); + long t3 = System.currentTimeMillis(); + assertTrue((t3 - t2) <= 20 * (t2 - t1)); + } + + @Test + public void incrementalHashCodeTest() { + MapInterface map = new HashMap(); + String str1 = "abcdefghij"; + String str2 = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"; + String str3 = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"; + int oldHash; + int hash = map.hashCode(str2.substring(0, 5)); + int pattSize = 5; + for (int i = 1; i < str2.length() - pattSize; i++) { + oldHash = hash; + hash = map.incrementalHashCode(str2.substring(i, i + pattSize), oldHash, str2.charAt(i - 1)); + assertEquals(hash, map.incrementalHashCode(str3.substring(i, i + pattSize), oldHash, str3.charAt(i - 1))); + assertEquals(hash, map.hashCode(str2.substring(i, i + pattSize))); + assertTrue(oldHash != hash); + } + hash = map.hashCode(str2.substring(0, 5)); + String substr1 = str1.substring(1, 1 + pattSize); + String substr2 = str2.substring(1, 1 + pattSize + 30); + char fstr1 = str1.charAt(1 - 1); + char fstr2 = str2.charAt(1 - 1); + long t1 = System.currentTimeMillis(); + map.incrementalHashCode(substr1, hash, fstr1); + long t2 = System.currentTimeMillis(); + map.incrementalHashCode(substr2, hash, fstr2); + long t3 = System.currentTimeMillis(); + assertTrue((t3 - t2) <= 2 * (t2 - t1)); + } +} diff --git a/lost+found/CorrectInterpreter.java-Hg1gJL b/lost+found/CorrectInterpreter.java-Hg1gJL new file mode 100644 index 00000000..2ca137f0 --- /dev/null +++ b/lost+found/CorrectInterpreter.java-Hg1gJL @@ -0,0 +1,530 @@ +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.EmptyStackException; +import java.lang.ArithmeticException; +import java.util.Arrays; + + +/** + * This is the "Interpreter" class that the students have to write, but renamed "MyInterpreter" + * in order to compare the results of the students with the correct (I hope for them ! :p) results. + */ +public class Interpreter implements InterpreterInterface { + + public Hashtable variables; + private MyStack2 stack; + + /* Main method, not used for the grading */ + public static void main(String[] args) { + /*MyInterpreter interpreter = new MyInterpreter(); + //System.out.println(interpreter.interpret("true pstack pop")); + System.out.println(interpreter.interpret("1 pop 969067502 592164476 995688456 eq 2143572209 pop 1 pop dup exch 726510756 true pop pop 1261490713 pstack"));*/ + } + + public Interpreter() { + stack = new MyStack2(); + variables = new Hashtable(); + } + + public String interpret(String instruction) { + ArrayList instructions = new ArrayList(Arrays.asList(instruction.split(" "))); + ArrayList results = new ArrayList(); + for(int l = 0; l < instructions.size() ; l++) { + MyElement e = new MyElement(instructions.get(l)); + Object o = e.interpret(stack, results, variables); + + if (o == null) + {} + else if (o instanceof MyElement) + stack.push((MyElement)o); + else if(o instanceof Integer) + stack.push(new MyElement(""+(Integer)o)); + else if(o instanceof Double) + stack.push(new MyElement(""+(Double)o)); + else if(o instanceof String) + stack.push(new MyElement(""+o)); + else if (o instanceof Boolean) + stack.push(new MyElement(""+o)); + + } + String output = ""; + int i = 0; + for (String s : results) { + if (i != 0) output += " "; + output += s; + i++; + } + return output; + } + + public static void pstack(MyStack2 stack, ArrayList results, Hashtable variables) { + String s = stack.toString(); + results.add(s); + } + + public static void add(MyStack2 stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 + (Integer)o2; + stack.push(new MyElement(""+add)); + } + else + { + double add = (Integer)o1 + (Double)o2; + stack.push(new MyElement(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 + (Integer)o2; + stack.push(new MyElement(""+add)); + } + else + { + double add = (Double)o1 + (Double)o2; + stack.push(new MyElement(""+add)); + } + } + } + + public static void sub(MyStack2 stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o2 - (Integer)o1; + stack.push(new MyElement(""+add)); + } + else + { + double add = (Double)o2 - (Integer)o1; + stack.push(new MyElement(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Integer)o2 - (Double)o1; + stack.push(new MyElement(""+add)); + } + else + { + double add = (Double)o2 - (Double)o1; + stack.push(new MyElement(""+add)); + } + } + } + + public static void mul(MyStack2 stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 1; + } + if (o1 instanceof Integer) + { + if (o2 instanceof Integer) + { + int add = (Integer)o1 * (Integer)o2; + stack.push(new MyElement(""+add)); + } + else + { + double add = (Integer)o1 * (Double)o2; + stack.push(new MyElement(""+add)); + } + } + else if (o1 instanceof Double) + { + if (o2 instanceof Integer) + { + double add = (Double)o1 * (Integer)o2; + stack.push(new MyElement(""+add)); + } + else + { + double add = (Double)o1 * (Double)o2; + stack.push(new MyElement(""+add)); + } + } + } + + public static void div(MyStack2 stack, Hashtable variables) throws ArithmeticException { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + }catch(EmptyStackException e) + { + if(o1 == null) + return; + if (o2 == null) + o2 = 0 ; + } + if (Double.valueOf(""+o1) == 0) { + throw new ArithmeticException(); + } + else { + double div = Double.valueOf(""+o2) / Double.valueOf(""+o1); + stack.push(new MyElement(""+div)); + } + + } + + public static void dup(MyStack2 stack, Hashtable variables) { + MyElement e; + try{ + e = stack.pop(); + }catch(EmptyStackException ex) + { + return; + } + stack.push(e); + stack.push(e); + } + + public static void exch(MyStack2 stack, Hashtable variables) { + Object o1 = null; + Object o2 = null; + try{ + o1 = stack.pop().interpret(stack, null, variables); + o2 = stack.pop().interpret(stack, null, variables); + + }catch(EmptyStackException e) + { + if (o1 != null) + stack.push(new MyElement(""+o1)); + return; + } + MyElement e1 = new MyElement(""+o1); + MyElement e2 = new MyElement(""+o2); + stack.push(e1); + stack.push(e2); + } + + public static void eq(MyStack2 stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new MyElement(""+e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new MyElement(""+false)); + } + } + + public static void ne(MyStack2 stack, Hashtable variables) { + try{ + String e1 = ""+stack.pop().interpret(stack, null, variables); + String e2 = ""+stack.pop().interpret(stack, null, variables); + stack.push(new MyElement(""+ !e1.equals(e2))); + }catch(EmptyStackException e) + { + stack.push(new MyElement(""+true)); + } + } + + public static void def(MyStack2 stack, Hashtable variables) { + try{ + Object o1 = stack.pop().interpret(stack, null, variables); + String o2 = (String) stack.pop().interpret(stack, null, variables); + o2 = (o2.substring(1)); + variables.put(o2, new MyElement(""+o1)); + + }catch(EmptyStackException e) + { + stack.push(new MyElement(""+true)); + } + } + + public static void pop(MyStack2 stack, Hashtable variables) throws EmptyStackException { + stack.pop(); + } + +} + +class MyStack2 { + + private Node top; + private int size; + + public MyStack2() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + } + + public E top() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(isEmpty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + +class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } +} + +} + +class MyElement { + + private static String TYPE_OPERATOR = "Operator"; + private static String TYPE_INT = "Int"; + private static String TYPE_DOUBLE = "Double"; + private static String TYPE_BOOLEAN = "Boolean"; + private static String TYPE_VARIABLE = "Variable"; + + private String type; + private String element; + private double double_value; + private int int_value; + private boolean bool_value; + + public MyElement(String elem) + { + element = elem; + if(elem.contains("/")) + { + type = TYPE_VARIABLE; + } + else if (elem.contains(".")) + { + type = TYPE_DOUBLE; + double_value = Double.parseDouble(elem); + } + else if (elem.contains("1")||elem.contains("2")||elem.contains("3")||elem.contains("4")||elem.contains("5") + ||elem.contains("6")||elem.contains("7")||elem.contains("8")||elem.contains("9")||elem.contains("0")) + { + type = TYPE_INT; + int_value = Integer.parseInt(elem); + } + else if (elem.contains("pstack")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("add")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("sub")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("mul")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("div")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("dup")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("exch")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("eq")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("ne")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("def")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("pop")) + { + type = TYPE_OPERATOR; + } + else if (elem.contains("true")) + { + type = TYPE_BOOLEAN; + bool_value = true; + } + else if (elem.contains("false")) + { + type = TYPE_BOOLEAN; + bool_value = false; + } + else type = TYPE_VARIABLE; + } + + public Object interpret(MyStack2 stack, ArrayList results, Hashtable variables) + { + if (type == TYPE_OPERATOR) + { + if (element.contains("pstack")) + { + Interpreter.pstack(stack, results, variables); + } + else if (element.contains("add")) + { + Interpreter.add(stack, variables); + } + else if (element.contains("sub")) + { + Interpreter.sub(stack, variables); + } + else if (element.contains("mul")) + { + Interpreter.mul(stack, variables); + } + else if (element.contains("div")) + { + Interpreter.div(stack, variables); + } + else if (element.contains("dup")) + { + Interpreter.dup(stack, variables); + } + else if (element.contains("exch")) + { + Interpreter.exch(stack, variables); + } + else if (element.contains("eq")) + { + Interpreter.eq(stack, variables); + } + else if (element.contains("ne")) + { + Interpreter.ne(stack, variables); + } + else if (element.contains("def")) + { + Interpreter.def(stack, variables); + } + else if (element.contains("pop")) + { + Interpreter.pop(stack, variables); + } + return null; + } + else if (type == TYPE_INT) + { + return int_value; + } + else if (type == TYPE_DOUBLE) + { + return double_value; + } + else if (type == TYPE_BOOLEAN) + return bool_value; + else if (type == TYPE_VARIABLE && element.contains("/")) + return element; + else if (type == TYPE_VARIABLE && !element.contains("/")) + { + MyElement e = variables.get(element); + return e.interpret(stack, null, variables); + } + else return null; + } + + public String toString() + { + return element; + } +} \ No newline at end of file diff --git a/lost+found/CorrectInterpreterTests.java-mMcBMS b/lost+found/CorrectInterpreterTests.java-mMcBMS new file mode 100644 index 00000000..ccee5798 --- /dev/null +++ b/lost+found/CorrectInterpreterTests.java-mMcBMS @@ -0,0 +1,136 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * @author Frederic KACZYNSKI + */ +public class InterpreterTests { + + @Test + public void firstTest() { + + InterpreterInterface interpreter = new Interpreter(); + + String result = interpreter.interpret("1 1 add pstack pop"); + assertEquals(result, "2"); + + result = interpreter.interpret("10 6 sub pstack pop"); + assertEquals(result, "4"); + + result = interpreter.interpret("4 6 mul pstack pop"); + assertEquals(result, "24"); + + result = interpreter.interpret("6 dup mul pstack pop"); + assertEquals(result, "36"); + + result = interpreter.interpret("4 6 dup pop mul pstack pop"); + assertEquals(result, "24"); + + result = interpreter.interpret("2 2 eq pstack pop"); + assertEquals(result, "true"); + + result = interpreter.interpret("2 5 eq pstack pop"); + assertEquals(result, "false"); + + result = interpreter.interpret("2 2 ne pstack pop"); + assertEquals(result, "false"); + + result = interpreter.interpret("1 1 eq pop pstack"); + assertEquals(result, ""); + + result = interpreter.interpret("2 6 exch sub pstack pop"); + assertEquals(result, "4"); + + /*String instructions = "1 "; + + for (int i = 0;i < 100;i++) { + instructions += "1 add "; + } + + instructions += "pstack pop"; + + result = interpreter.interpret(instructions); + assertEquals(result, "101");*/ + + result = interpreter.interpret("2 2 add pstack pstack pop"); + assertEquals(result, "4 4"); + + result = interpreter.interpret("5 5 div pstack pop"); + assertEquals(result, "1.0"); + + result = interpreter.interpret("2 3 pstack pop pop"); + assertEquals(result, "3 2"); + } + + @Test + public void testVariable() { + + InterpreterInterface interpreter = new Interpreter(); + + String result = interpreter.interpret("/reponse 42 def"); + + result = interpreter.interpret("reponse 4 sub pstack pop"); + assertEquals(result, "38"); + + result = interpreter.interpret("3.14 /pi exch def pi pstack pop"); + assertEquals(result, "3.14"); + + } + + @Test + public void testDef() { + + InterpreterInterface interpreter = new Interpreter(); + + interpreter.interpret("/un 1 def"); + interpreter.interpret("/deux un 1 add def"); + interpreter.interpret("/quatre deux dup mul def"); + + String result = interpreter.interpret("quatre quatre mul pstack"); + assertEquals(result, "16"); + + result = interpreter.interpret("42 exch sub pstack pop"); + assertEquals(result, "26"); + + result = interpreter.interpret("2 2 exch pop dup pop pop pstack"); + assertEquals(result, ""); + + } + + @Test + public void testError() { + + InterpreterInterface interpreter = new Interpreter(); + + String result = interpreter.interpret("2 pstack pop"); + assertEquals(result, "2"); + + result = interpreter.interpret("1 2 add pstack"); + assertEquals(result, "3"); + + result = interpreter.interpret("2 add pstack pop"); + assertEquals(result, "5"); + + try { + + interpreter.interpret("2 0 div pstack pop"); + interpreter.interpret("1 exch pstack pop"); + interpreter.interpret("2 add pstack pop"); + interpreter.interpret("pop"); + + interpreter.interpret("1 1 eq 1 add pstack pop"); + + + fail("Should throw an exception"); + + } catch (ArithmeticException e) { + + assert(true); + + } + + + } +} diff --git a/lost+found/CorrectKruskalTests.java-VzqFo2 b/lost+found/CorrectKruskalTests.java-VzqFo2 new file mode 100644 index 00000000..c69e95d5 --- /dev/null +++ b/lost+found/CorrectKruskalTests.java-VzqFo2 @@ -0,0 +1,167 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.*; + +public class KruskalTests { + + @Test + public void firstTest() { + try { + applyTest("i.txt", "o.txt", 3, 3); + + applyTest("i2.txt", "o2.txt", 4, 3); + applyTest("i4.txt", "o4.txt", 4, 12); + + applyTest("i3.txt", "o3.txt", 100, 99); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + + @Test + public void secondTest() { + // TODO... + } + + public static void applyTest(String in, String out, int numberOfNodes, int optimalCost) { + Kruskal.main(new String[] {in, out}); // apply the algorithm under test + + int[] result = readSol(out, numberOfNodes); // get the solution in 'result' + + List baseEdges = read(in); + List finalEdges = read(out); + + for (int[] edge : finalEdges) + { + boolean contains = false; + for (int[] baseEdge : baseEdges) { + if (Arrays.equals(edge, baseEdge)) { + contains = true; + } + } + if (!contains) { + fail("TRIIIIIICHE !"); + } + } + + assertEquals(result[0], numberOfNodes); // all the nodes are involved (it's 'spanning') + assertEquals(result[1], numberOfNodes-1); // number of edges = number of nodes - 1 (it's a 'tree') + assertTrue(result[2] <= optimalCost); // the cost is optimal (it's a 'minimum' spanning tree) + + // TODO Assert that the graph is connected using Union/Find structures... + } + + public static ArrayList read(String path) { + + ArrayList edges = new ArrayList(); + try { + File f = new File (path); + Scanner s = new Scanner(f); + + try { + while (s.hasNextInt()) + { + int v1 = s.nextInt(); + int v2 = s.nextInt(); + int cost = s.nextInt(); + edges.add(new int[]{v1, v2, cost}); + } + + s.close(); + } catch (NoSuchElementException e) + { + fail("Error occured while reading the file : " + e.getMessage()); + } + } catch (FileNotFoundException exception) { + fail("File not found"); + } + + return edges; + + } + + public static int[] readSol(String path, int numberOfNodes) { + Set nodes = new HashSet(); + int numberOfEdges = 0; + int totalCost = 0; // cost found by the student + int cheat = 0; // incremented if fake edge + ArrayList edges = new ArrayList(); + try { + File f = new File (path); + Scanner s = new Scanner(f); + + try { + while (s.hasNextInt()) + { + int v1 = s.nextInt(); + int v2 = s.nextInt(); + int cost = s.nextInt(); + numberOfEdges += 1; + totalCost += cost; + nodes.add(v1); + nodes.add(v2); + edges.add(new int[]{v1, v2}); + } + + s.close(); + } catch (NoSuchElementException e) + { + fail("Error occured while reading the file : " + e.getMessage()); + } + } catch (FileNotFoundException exception) { + fail("File not found"); + } + assertTrue(isConnected(nodes, edges)); + + return new int[] {nodes.size(), numberOfEdges, totalCost, cheat}; + } + + public static boolean isConnected(Set nodes, List edges) + { + int[] id = new int[nodes.size()]; + for (int i = 0;i < id.length;i++) + { + id[i] = i; + } + + for (int[] edge : edges) + { + id = union(id, edge[0], edge[1]); + } + + int onlyComponent = id[0]; + for (int i = 1;i < id.length;i++) + { + if (onlyComponent != id[i]) + return false; + } + return true; + } + + public static int find(int[] id, int node) + { + return id[node]; + } + + public static int[] union(int[] id, int p, int q) + { + int pid = find(id, p); + int qid = find(id, q); + + if (pid == qid) { + assertTrue(false); + } + + for (int i = 0;i < id.length;i++) { + if (id[i] == pid) + id[i] = qid; + } + + return id; + } +} diff --git a/lost+found/CorrectKruskalTests.zip-sfzflz b/lost+found/CorrectKruskalTests.zip-sfzflz new file mode 100644 index 00000000..d4e9a60f Binary files /dev/null and b/lost+found/CorrectKruskalTests.zip-sfzflz differ diff --git a/lost+found/CorrectMergeSort.java-cf2LJt b/lost+found/CorrectMergeSort.java-cf2LJt new file mode 100644 index 00000000..8613e0e9 --- /dev/null +++ b/lost+found/CorrectMergeSort.java-cf2LJt @@ -0,0 +1,18 @@ +// 1) +if (hi - lo <= 0) { + return; +} + +int mid = (hi + lo) / 2; +sort(a, aux, lo, mid); +sort(a, aux, mid+1, hi); + +merge(a, aux, lo, mid, hi); + +// 2) +Comparable[] aux = new Comparable[a.length]; +for (int i = 0; i < aux.length; i++) { + aux[i] = a[i]; +} + +sort(a, aux, 0, a.length - 1); diff --git a/lost+found/CorrectSearchTree.java-dHkyCQ b/lost+found/CorrectSearchTree.java-dHkyCQ new file mode 100644 index 00000000..737198c4 --- /dev/null +++ b/lost+found/CorrectSearchTree.java-dHkyCQ @@ -0,0 +1,779 @@ +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.*; + +/** + * @author Charles THOMAS + */ +public class SearchTree implements OrderedMap{ + + RBTree> tree; + + public SearchTree(){ + tree = new RBTree<>(); + } + + public SearchTree(String file){ + tree = new RBTree<>(); + populateFromFile(file); + } + + public void populateFromFile(String file){ + try{ + Files.readAllLines(Paths.get(file)).stream() + .map(line -> line.split("\\t")) //Splitting tabs + .forEach(array -> { + String key = array[0]; + Set value = tree.get(key); + if(value == null) value = new HashSet<>(); + value.add(array[1]); + tree.put(key, value); + }); + }catch(IOException e){ + e.printStackTrace(); + }catch(NullPointerException e){ + System.out.println("File format incorrect!"); + } + } + + /* Methods of the Map ADT */ + + @Override + public int size() { + return tree.size(); + } + + @Override + public boolean isEmpty() { + return tree.isEmpty(); + } + + @Override + public Set get(String key) { + return tree.get(key); + } + + @Override + public Set put(String key, Set value) { + return tree.put(key, value); + } + + @Override + public Set remove(String key) { + return tree.remove(key); + } + + @Override + public Set keySet() { + return tree.keySet(); + } + + @Override + public Collection> values() { + return tree.values(); + } + + @Override + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + @Override + public Map.Entry> firstEntry() { + return tree.minEntry(); + } + + @Override + public Map.Entry> lastEntry() { + return tree.maxEntry(); + } + + @Override + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + @Override + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + @Override + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + @Override + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + @Override + public String[] getOrdered(String key){ + Set values = tree.get(key); + if(values == null) return new String[0]; + else return sortValues(values); + } + + @Override + public List>> entriesBetween(String lowest, String highest) { + return new ArrayList<>(tree.entriesBetween(lowest, highest)); + } + + @Override + public String toString(){ + return tree.toString(); + } + + private String[] sortValues(Set set){ + String[] values = set.stream().toArray(String[]::new); + QuickSort sorter = new QuickSort<>(); + sorter.sort(values); + return values; + } + + /** + * Red Black Tree implementation + * @author Charles THOMAS + * Based on http://algs4.cs.princeton.edu/33balanced/RedBlackBST.java.html + */ + public class RBTree, Value>{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; //Root of the BST + + /************************************************************* + * Class Node: + *************************************************************/ + private class Node{ + Key key; + Value val; + Node left, right; + int N; + boolean color; + + public Node(Key key, Value val, int N, boolean color) { + this.key = key; + this.val = val; + this.N = N; + this.color = color; + } + } + + /************************************************************* + * Class RBEntry: + *************************************************************/ + public final class RBEntry implements Map.Entry { + private final RBKey key; + private RBValue value; + + public RBEntry(RBKey key, RBValue value) { + this.key = key; + this.value = value; + } + + @Override + public int hashCode(){ + return (getKey()==null ? 0 : getKey().hashCode()) ^ + (getValue()==null ? 0 : getValue().hashCode()); + } + + @Override + public RBKey getKey() { + return key; + } + + @Override + public RBValue getValue() { + return value; + } + + @Override + public RBValue setValue(RBValue value) { + RBValue old = this.value; + this.value = value; + return old; + } + + @Override + public boolean equals(Object o){ + if(o instanceof RBEntry){ + RBEntry e2 = (RBEntry)o; + return (this.getKey() == null ? e2.getKey() == null : this.getKey().equals(e2.getKey())) && + (this.getValue() == null ? e2.getValue() == null : this.getValue().equals(e2.getValue())); + } + else return false; + } + } + + /************************************************************* + * General RB methods: + *************************************************************/ + + //Is node x red; false if x is null + private boolean isRed(Node x){ + if(x == null) return false; + return x.color; + } + + //Make a right-leaning link lean to the left + private Node rotateLeft(Node h){ + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = h.color; + h.color = RED; + x.N = h.N; + h.N = 1 + size(h.left) + size(h.right); + return x; + } + + //Make a left-leaning link lean to the right + private Node rotateRight(Node h){ + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = h.color; + h.color = RED; + x.N = h.N; + h.N = 1 + size(h.left) + size(h.right); + return x; + } + + //Flip the colors of a node and its two children. + private void flipColors(Node h){ + h.color = RED; + h.left.color = BLACK; + h.right.color = BLACK; + } + + //Assuming that h is red and both h.left and h.left.left are black, + //make h.left or one of its children red. + private Node moveRedLeft(Node h) { + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + //Assuming that h is red and both h.right and h.right.left are black, + //make h.right or one of its children red. + private Node moveRedRight(Node h) { + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + //Restore red-black tree invariant + private Node balance(Node h) { + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.N = size(h.left) + size(h.right) + 1; + return h; + } + + /************************************************************* + * Insertion method: + *************************************************************/ + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val){ + if(h == null) return new Node(key, val, 1, RED); + int cmp = key.compareTo(h.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if(cmp < 0) h.left = put(h.left, key, val); + else if(cmp > 0) h.right = put(h.right, key, val); + else h.val = val; + + //Fix-up any right-leaning links + if(isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if(isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if(isRed(h.left) && isRed(h.right)) flipColors(h); + + h.N = size(h.left) + size(h.right) + 1; + return h; + } + + /************************************************************* + * Search methods: + *************************************************************/ + + // value associated with the given key in subtree rooted at x; null if no such key. + private Value get(Node x, Key key) { + while(x != null) { + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + if(cmp < 0) x = x.left; + else if(cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + //The smallest node in subtree rooted at x; null if no such node. + private Node min(Node x) { + while(x != null){ + if(x.left == null) return x; + else x = x.left; + } + return null; + } + + //The largest node in subtree rooted at x; null if no such node. + private Node max(Node x) { + while(x != null){ + if(x.right == null) return x; + else x = x.right; + } + return null; + } + + //The largest node in the subtree rooted at x lower than or equal to the given key. + private Node floor(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + if(cmp == 0) return x; + if(cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if(t != null) return t; + else return x; + } + + //The smallest node in the subtree rooted at x greater than or equal to the given key. + private Node ceiling(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + if(cmp == 0) return x; + if(cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if(t != null) return t; + else return x; + } + + //The largest node in the subtree rooted at x strictly smaller than the given key. + private Node lower(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + Node t = cmp <= 0 ? lower(x.left, key) : lower(x.right, key); + if(t != null) return t; + else if(cmp > 0) return x; + else return null; + } + + //The smallest node in the subtree rooted at x strictly greater than the given key. + private Node higher(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + Node t = cmp >= 0 ? higher(x.right, key) : higher(x.left, key); + if(t != null) return t; + else if(cmp < 0) return x; + return null; + } + + /************************************************************* + * Range search methods: + *************************************************************/ + + //Add the keys in the subtree rooted at x to the set. + private void keys(Node x, Set set){ + if(x == null) return; + keys(x.left, set); + set.add(x.key); + keys(x.right, set); + } + + //Add the values in the subtree rooted at x to the list. + private void values(Node x, List list){ + if(x == null) return; + values(x.left, list); + list.add(x.val); + values(x.right, list); + } + + //Add the entries in the subtree rooted at x to the list. + private void entries(Node x, Set> set){ + if(x == null) return; + entries(x.left, set); + set.add(new RBEntry<>(x.key, x.val)); + entries(x.right, set); + } + + //Add the nodes between lo and hi in the subtree rooted at x to the list. + private void nodesBetween(Node x, List list, Key lo, Key hi){ + if (x == null) return; + int cmplo = lo.compareTo(x.key); + //int cmplo = lo instanceof String ? ((String)lo).compareToIgnoreCase((String)x.key) : lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + //int cmphi = hi instanceof String ? ((String)hi).compareToIgnoreCase((String)x.key) : hi.compareTo(x.key); + if(cmplo < 0) nodesBetween(x.left, list, lo, hi); + if(cmplo <= 0 && cmphi >= 0) list.add(x); + if(cmphi > 0) nodesBetween(x.right, list, lo, hi); + } + + /*************************************************************************** + * Deletion methods + ***************************************************************************/ + + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + private Node delete(Node h, Key key) { + int cmp = key.compareTo(h.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if(cmp < 0){ + if (!isRed(h.left) && !isRed(h.left.left)) h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + + cmp = key.compareTo(h.key); + //cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if (cmp == 0 && (h.right == null)) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + cmp = key.compareTo(h.key); + //cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if (cmp == 0){ + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /************************************************************* + * Other methods: + *************************************************************/ + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x){ + if(x == null) return 0; + else return x.N; + } + + // toString method; + private String string(Node x){ + if(x == null) return ""; + String s = ""; + for(String value : sortValues((Set)x.val)) { + s = s + "[" + x.key + "] " + value + "\n"; + } + return string(x.left) + s + string(x.right); + } + + /************************************************************* + * Public methods: + *************************************************************/ + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table. + */ + public int size(){ + return size(root); + } + + /** + * Is this symbol table empty? + * @return true if this symbol table is empty or false otherwise. + */ + public boolean isEmpty(){ + return root == null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key. + * @return true if this symbol table contains key or + * false otherwise. + * @throws NullPointerException if key is null. + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /** + * Inserts the key-value pair into the symbol table, overwriting the old value + * with the new value if the key is already in the symbol table. + * If the value is null, this effectively deletes the key from the symbol table. + * @param key the key. + * @param val the value. + * @return the old value associated with the given key if the key is already in the symbol table + * or null otherwise. + * @throws NullPointerException if key is null. + */ + public Value put(Key key, Value val){ + Value prev = get(root, key); + root = put(root, key, val); + root.color = BLACK; + return prev; + } + + /** + * Returns the value associated with the given key. + * @param key the key. + * @return the value associated with the given key if the key is in the symbol table + * or null if the key is not in the symbol table. + * @throws NullPointerException if key is null. + */ + public Value get(Key key){ + return get(root, key); + } + + /** + * Returns the smallest entry in the symbol table. + * @return the smallest entry in the symbol table or null if empty. + */ + public Map.Entry minEntry(){ + Node x = min(root); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the largest entry in the symbol table. + * @return the largest entry in the symbol table or null if empty. + */ + public Map.Entry maxEntry(){ + Node x = max(root); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the largest entry in the symbol table lower than or equal to key. + * @param key the key. + * @return the largest entry in the symbol table lower than or equal to key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry floorEntry(Key key){ + Node x = floor(root, key); + if (x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the smallest entry in the symbol table greater than or equal to key. + * @param key the key. + * @return the largest entry in the symbol table greater than or equal to key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry ceilingEntry(Key key){ + Node x = ceiling(root, key); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the largest entry in the symbol table strictly lower than key. + * @param key the key. + * @return the largest entry in the symbol table strictly lower than key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry lowerEntry(Key key){ + Node x = lower(root, key); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the smallest entry in the symbol table strictly greater than key. + * @param key the key. + * @return the largest entry in the symbol table strictly greater than key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry higherEntry(Key key) { + Node x = higher(root, key); + if (x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns all keys in the symbol table in a Set. + * @return all keys in the symbol table in a Set + */ + public Set keySet(){ + Set keys = new HashSet<>(); + keys(root, keys); + return keys; + } + + /** + * Returns all values in the symbol table in a List. + * @return all values in the symbol table in a List + */ + public List values(){ + List values = new LinkedList<>(); + values(root, values); + return values; + } + + /** + * Returns all entries in the symbol table in a Set. + * @return all entries in the symbol table in a Set + */ + public Set> entrySet(){ + Set> entries = new HashSet<>(); + entries(root, entries); + return entries; + } + + /** + * Returns the symbol table as a String. + * @return the symbol table as a String. + */ + @Override + public String toString(){ + return string(root); + } + + /** + * Returns all entries in the symbol table in the given range, as a Set. + * @return all keys in the symbol table between lo and hi + * including them (if they exist), as a Set. + * @throws NullPointerException if either lo or hi + * is null. + */ + public List> entriesBetween(Key lo, Key hi){ + List nodes = new LinkedList<>(); + nodesBetween(root, nodes, lo, hi); + List> entries = new ArrayList<>(); + for(Node node: nodes) entries.add(new RBEntry<>(node.key, node.val)); + return entries; + } + + /** + * Removes the key and associated value from the symbol table + * (if the key is in the symbol table). + * @param key the key. + * @return the value associated with the given key if the key is in the symbol table + * or null if the key is not in the symbol table. + * @throws NullPointerException if key is null. + */ + public Value remove(Key key) { + Value val = get(root, key); + if(val != null) { + // if both children of root are black, set root to red + if(!isRed(root.left) && !isRed(root.right)) root.color = RED; + + root = delete(root, key); + if(!isEmpty()) root.color = BLACK; + } + return val; + } + } + + + /** + * This class is not from me but from group 27. + * Ideally this class should contain static methods and be placed in another file (thanks Inginious!) + */ + public class QuickSort>{ + public void sort(E[] a){ + subsort(a, 0, a.length-1); + } + + public void subsort(E[] tab, int a, int b){ + if (b > a){ + //System.out.println(a + " to " + b); + pivot(tab, a, b); // create pivot + int pos = sortTable(tab, a, b); // apply quicksort on current tab + subsort(tab, a, pos - 1); // finally use recursive call on the subarrays + subsort(tab, pos + 1, b); + } + } + + public void pivot(E[]tab, int first, int last){ + int len = last-first+1; + Random r = new Random(); + int j = r.nextInt(len); // create random value to choose a new pivot + j=first+j; // pivot's position in the array + swap(tab, j, last); //switching the pivot with the last element + } + + public void swap(E[] tab, int i, int j){ // function that switches two values given their respective position in the tab + E temp; + temp = tab[j]; + tab[j] = tab[i]; + tab[i] = temp; + } + + public void exchange(E[] tab, int i, int j, int k){ // function that switches three values given their respective position in the tab + E temp; + if(i==j || j==k){ + swap(tab, i, k); + } + else{ + temp = tab[i]; + tab[i]=tab[j]; + tab[j]=tab[k]; + tab[k]=temp; + } + } + + public int sortTable(E[] tab, int first, int last){ + int current = last; + for(int i = current-1; i>=first; i--){ + if(tab[i].compareTo(tab[current])>0){ + exchange(tab, i, current-1, current); //only change pivot with one of the list's element + current--; + } + } + return current; + } + } +} diff --git a/lost+found/CorrectSearchTreeTests.java-SIK4Ex b/lost+found/CorrectSearchTreeTests.java-SIK4Ex new file mode 100644 index 00000000..d936bacf --- /dev/null +++ b/lost+found/CorrectSearchTreeTests.java-SIK4Ex @@ -0,0 +1,295 @@ +import org.junit.Test; + +import java.lang.String; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.Set; +import java.util.HashSet; + +import static org.junit.Assert.*; + +/** + * Those unit tests correctly detect the 10 buggy implements - FK + * @author Charles THOMAS + */ +public class SearchTreeTests{ + + @Test + public void fooTest(){ + try{ + OrderedMap tree = new SearchTree(); + String key = "Foo Fighters"; + Set value = new HashSet<>(); + value.add("The Pretender"); + + assertEquals(tree.put(key, value), null); + assertEquals(tree.size(), 1); + assertEquals(tree.isEmpty(), false); + + Set result = tree.get(key); + assertEquals(result.size(), 1); + assertTrue(result.contains("The Pretender")); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void emptyTest(){ + try{ + OrderedMap tree = new SearchTree(); + + assertEquals(tree.isEmpty(), true); + assertEquals(tree.size(), 0); + Set keys = tree.keySet(); + assertEquals(keys.size(), 0); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void addTest(){ + try{ + OrderedMap tree = new SearchTree(); + String key = "Cranberries"; + Set value = new HashSet<>(); + value.add("Zombie"); + String key2 = "U2"; + Set value2 = new HashSet<>(); + value2.add("Sunday Bloody Sunday"); + value2.add("City Of Blinding Lights"); + String key3 = "My Bloody Valentine"; + Set value3 = new HashSet<>(); + value3.add("Only Shallow"); + Set value4 = new HashSet<>(); + value3.add("Ode To My Family"); + + tree.put(key, value); + assertEquals(tree.size(), 1); + assertEquals(tree.isEmpty(), false); + + tree.put(key2, value2); + assertEquals(tree.size(), 2); + assertEquals(tree.isEmpty(), false); + + tree.put(key3, value3); + assertEquals(tree.size(), 3); + assertEquals(tree.isEmpty(), false); + + tree.put(key, value4); + assertEquals(tree.size(), 3); + assertEquals(tree.isEmpty(), false); + + Set keys = tree.keySet(); + assertEquals(keys.size(), 3); + assertTrue(keys.contains("Cranberries")); + assertTrue(keys.contains("U2")); + assertTrue(keys.contains("My Bloody Valentine")); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void loadFileTest() { + try{ + OrderedMap tree = new SearchTree("songs.txt"); + + assertEquals(tree.isEmpty(), false); + + Set result = tree.get("Led Zeppelin"); + assertTrue(result.contains("Stairway to Heaven")); + assertTrue(result.contains("Rock and Roll")); + assertTrue(result.contains("Kashmir")); + assertTrue(result.contains("Whole Lotta Love")); + assertTrue(result.contains("Over the Hills and Far Away")); + + result = tree.get("Eagles"); + assertTrue(result.contains("Hotel California")); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void getTest() { + try{ + OrderedMap tree = new SearchTree(); + String key = "One Republic"; + Set value = new HashSet<>(); + value.add("All The Right Moves"); + String key2 = "The Killers"; + Set value2 = new HashSet<>(); + value2.add("Human"); + value2.add("Shot At The Night"); + String key3 = "Woodkid"; + Set value3 = new HashSet<>(); + value3.add("Baltimore's Fireflies"); + Set value4 = new HashSet<>(); + value4.add("Apologize"); + value4.add("Counting Stars"); + + Set result = tree.get(key); + assertEquals(result, null); + + tree.put(key, value); + + result = tree.get(key); + assertEquals(result.size(), 1); + assertTrue(result.contains("All The Right Moves")); + result = tree.get(key2); + assertEquals(result, null); + + tree.put(key2, value2); + + result = tree.get(key2); + assertEquals(result.size(), 2); + assertTrue(result.contains("Human")); + assertTrue(result.contains("Shot At The Night")); + assertFalse(result.contains("All The Right Moves")); + result = tree.get(key); + assertEquals(result.size(), 1); + assertTrue(result.contains("All The Right Moves")); + + tree.put(key3, value3); + + result = tree.get(key3); + assertEquals(result.size(), 1); + assertTrue(result.contains("Baltimore's Fireflies")); + + tree.put(key, value4); + + result = tree.get(key); + assertEquals(result.size(), 2); + assertTrue(result.contains("Apologize")); + assertTrue(result.contains("Counting Stars")); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void removeTest(){ + try{ + OrderedMap tree = new SearchTree(); + String key = "Police"; + Set value = new HashSet<>(); + value.add("Roxanne"); + value.add("Message In A Bottle"); + value.add("Every Breath You Take"); + + tree.put(key, value); + + Set result = tree.remove(key); + assertTrue(result.contains("Roxanne")); + assertTrue(result.contains("Message In A Bottle")); + assertTrue(result.contains("Every Breath You Take")); + + assertTrue(tree.isEmpty()); + assertEquals(tree.size(), 0); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void getEntryTest() { + try{ + OrderedMap tree = new SearchTree("songs.txt"); + + Map.Entry result = tree.firstEntry(); + assertEquals(result.getKey(), "AC/DC"); + + result = tree.lastEntry(); + assertEquals(result.getKey(), "ZZ Top"); + + result = tree.floorEntry("P"); + assertEquals(result.getKey(), "Moody Blues"); + + result = tree.ceilingEntry("P"); + assertEquals(result.getKey(), "Pink Floyd"); + + result = tree.lowerEntry("Pink Floyd"); + assertEquals(result.getKey(), "Moody Blues"); + + result = tree.higherEntry("Pink Floyd"); + assertEquals(result.getKey(), "Police"); + + List>> result2 = tree.entriesBetween("Aerosmith", "Beatles"); + assertEquals(result2.size(), 3); + Iterator>> iter = result2.iterator(); + assertEquals(iter.next().getKey(), "Aerosmith"); + assertEquals(iter.next().getKey(), "Bad Company"); + assertEquals(iter.next().getKey(), "Beatles"); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void getOrderedTest() { + try{ + OrderedMap tree = new SearchTree(); + String key = "Beatles"; + Set value = new HashSet<>(); + value.add("Let It Be"); + value.add("Yesterday"); + value.add("Eleanor Rigby"); + value.add("Yellow Submarine"); + value.add("Lucy In The Sky With Diamonds"); + value.add("Hey Jude"); + + tree.put(key, value); + + String[] result = tree.getOrdered(key); + assertEquals(result.length, 6); + assertEquals(result[0], "Eleanor Rigby"); + assertEquals(result[1], "Hey Jude"); + assertEquals(result[2], "Let It Be"); + assertEquals(result[3], "Lucy In The Sky With Diamonds"); + assertEquals(result[4], "Yellow Submarine"); + assertEquals(result[5], "Yesterday"); + + result = tree.getOrdered("Rolling stones"); + assertEquals(result.length, 0); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void toStringTest() { + try{ + OrderedMap tree = new SearchTree(); + String key = "Nickelback"; + Set value = new HashSet<>(); + value.add("How You Remind Me"); + String key2 = "Green Day"; + Set value2 = new HashSet<>(); + value2.add("21 Gun"); + value2.add("American Idiot"); + value2.add("Boulevard of Broken Dreams"); + value2.add("Wake Me Up When September Ends"); + String key3 = "Dire Straits"; + Set value3 = new HashSet<>(); + value3.add("Money For Nothing"); + + tree.put(key, value); + tree.put(key2, value2); + tree.put(key3, value3); + + String expected = "[Dire Straits] Money For Nothing\n" + + "[Green Day] 21 Gun\n" + + "[Green Day] American Idiot\n" + + "[Green Day] Boulevard of Broken Dreams\n" + + "[Green Day] Wake Me Up When September Ends\n" + + "[Nickelback] How You Remind Me\n"; + + assertEquals(tree.toString(), expected); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } +} \ No newline at end of file diff --git a/lost+found/CorrectStack.java-tl5Qbz b/lost+found/CorrectStack.java-tl5Qbz new file mode 100644 index 00000000..e2353824 --- /dev/null +++ b/lost+found/CorrectStack.java-tl5Qbz @@ -0,0 +1,85 @@ +import java.util.EmptyStackException; + +public class MyStack implements Stack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean empty() { + return size == 0; + } + + public E push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + return element; + } + + public E peek() throws EmptyStackException { + if(empty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(empty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + + class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } + } +} diff --git a/lost+found/CorrectStackTests.java-JNXPZs b/lost+found/CorrectStackTests.java-JNXPZs new file mode 100644 index 00000000..657e035a --- /dev/null +++ b/lost+found/CorrectStackTests.java-JNXPZs @@ -0,0 +1,60 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * Those unit tests successfuly detects all error + * @author Simon HARDY + */ +public class StackTests { + + String element = "a"; + + @Test + public void testPushPop() { + Stack stack = new MyStack(); + + for (int i = 0;i < 15;i++) { + assertEquals((Integer) i, stack.push(i)); + } + for (int i = 14;i >= 0;i--) { + assertEquals((Integer) i, stack.pop()); + } + + assertEquals(true, stack.empty()); + } + + @Test + public void testDoublePush() { + Stack stack = new MyStack(); + stack.push(element); + stack.push("b"); + assertEquals("b", stack.pop()); + assertEquals(element, stack.pop()); + } + + @Test + public void testEmpty() { + Stack stack = new MyStack(); + stack.push(element); + assertEquals(stack.empty(), false); + assertEquals(element, stack.peek()); + assertEquals(element, stack.pop()); + assertEquals(true, stack.empty()); + } + + @Test + public void testFail() { + Stack stack = new MyStack(); + + try { + stack.pop(); + fail(); + } + catch(Exception e) + { + assertTrue(true); + } + } +} diff --git a/lost+found/Decompress.java-A7gRLU b/lost+found/Decompress.java-A7gRLU new file mode 100644 index 00000000..4dec2c79 --- /dev/null +++ b/lost+found/Decompress.java-A7gRLU @@ -0,0 +1,77 @@ +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.LinkedHashMap; +import java.io.*; + +/* Solution of Simon Hardy for the decompression (mission 5) */ + +public class Decompress { + + public static final boolean BIT_1 = true; + public static final boolean BIT_0 = false; + + /** + * MAIN + */ + public static void main(String [] args) { + decompress(args[0], args[1]); + } + + /* + * FUNCTIONS + */ + + /** + * Decompresse un fichier compresse + * @param inputFilePath Fichier d'entree, ce fichier sera decompresse apres l'operation + * @param outputFilePath Fichier de sortie, ce fichier correspond au fichier decompresse + */ + public static void decompress(String inputFilePath, String outputFilePath) { + String tree = ""; + int textLength = 0; // a lire dans le fichier compresse, taille du texte avant compression (en chars) + try { + // Ouverture d'un flux d'entree + InputBitStream in = new InputBitStream(inputFilePath); + + // Lecture de la taille de la table + textLength = in.readInt(); + int tableLength = in.readInt(); + for (int i = 0 ; i < tableLength ; i++) + tree+=in.readChar(); + //System.out.println(tree); // Attention : pb de null au debut + BinaryTree freqTree = new BinaryTree(tree); + //System.out.println(freqTree.toString()); + String output = ""; + try { + // Decompression en parcourant l'arbre au fur et a mesure de la lecture du flux binaire + BinaryTree parcours = freqTree; + int i = 0; + while(i < textLength) { + boolean resu = in.readBoolean(); + if (resu == false) + parcours = parcours.getLeft(); + else + parcours = parcours.getRight(); + if (parcours.isExternal()) { + output += parcours.getValue(); + parcours = freqTree; + i++; + } + } + } + catch (IOException e) { // Exception lancee notamment en fin de fichier + System.out.println(""); + in.close(); + } + // System.out.println(output); + ParsedFile.writeFile(outputFilePath, output); + } + catch (Exception e) { + e.printStackTrace(); + System.out.println("Exception, arret du programme. "); + } + } +} diff --git a/lost+found/DepthFirstPaths.java-nHyeqb b/lost+found/DepthFirstPaths.java-nHyeqb new file mode 100644 index 00000000..6a035da4 --- /dev/null +++ b/lost+found/DepthFirstPaths.java-nHyeqb @@ -0,0 +1,46 @@ +package templates; + +@@import@@ + +public class DepthFirstPaths { + private boolean[] marked; // marked[v] = is there an s-v path? + private int[] edgeTo; // edgeTo[v] = last edge on s-v path + private final int s; + + /** + * Computes a path between s and every other vertex in graph G + * @param G the graph + * @param s the source vertex + */ + public DepthFirstPaths(Graph G, int s) { + this.s = s; + edgeTo = new int[G.V()]; + marked = new boolean[G.V()]; + dfs(G, s); + } + + // Depth first search from v + private void dfs(Graph G, int v) { + @ @question1@@ + } + + /** + * Is there a path between the source s and vertex v? + * @param v the vertex + * @return true if there is a path, false otherwise + */ + public boolean hasPathTo(int v) { + @ @question2@@ + } + + /** + * Returns a path between the source vertex s and vertex v, or + * null if no such path + * @param v the vertex + * @return the sequence of vertices on a path between the source vertex + * s and vertex v, as an Iterable + */ + public Iterable pathTo(int v) { + @ @question3@@ + } +} diff --git a/lost+found/DepthFirstPaths.java-pzjNLS b/lost+found/DepthFirstPaths.java-pzjNLS new file mode 100644 index 00000000..b557ca56 --- /dev/null +++ b/lost+found/DepthFirstPaths.java-pzjNLS @@ -0,0 +1,44 @@ +//TODO + +public class DepthFirstPaths { + private boolean[] marked; // marked[v] = is there an s-v path? + private int[] edgeTo; // edgeTo[v] = last edge on s-v path + private final int s; + + /** + * Computes a path between s and every other vertex in graph G + * @param G the graph + * @param s the source vertex + */ + public DepthFirstPaths(Graph G, int s) { + this.s = s; + edgeTo = new int[G.V()]; + marked = new boolean[G.V()]; + dfs(G, s); + } + + // Depth first search from v + private void dfs(Graph G, int v) { + //TODO + } + + /** + * Is there a path between the source s and vertex v? + * @param v the vertex + * @return true if there is a path, false otherwise + */ + public boolean hasPathTo(int v) { + //TODO + } + + /** + * Returns a path between the source vertex s and vertex v, or + * null if no such path + * @param v the vertex + * @return the sequence of vertices on a path between the source vertex + * s and vertex v, as an Iterable + */ + public Iterable pathTo(int v) { + //TODO + } +} diff --git a/lost+found/Dicke_32_Wellpappe.xml-iGt1sj b/lost+found/Dicke_32_Wellpappe.xml-iGt1sj new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Digraph.java-Apshrk b/lost+found/Digraph.java-Apshrk new file mode 100644 index 00000000..a350e29a --- /dev/null +++ b/lost+found/Digraph.java-Apshrk @@ -0,0 +1,29 @@ +public interface Digraph { + + /** + * The number of vertices + */ + public int V(); + + /** + * The number of edges + */ + public int E(); + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w); + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v); + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse(); + + +} diff --git a/lost+found/Digraph.java-tVthBw b/lost+found/Digraph.java-tVthBw new file mode 100644 index 00000000..d524e568 --- /dev/null +++ b/lost+found/Digraph.java-tVthBw @@ -0,0 +1,31 @@ +package templates; + +public interface Digraph { + + /** + * The number of vertices + */ + public int V(); + + /** + * The number of edges + */ + public int E(); + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w); + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v); + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse(); + + +} diff --git a/lost+found/DigraphImplem.java-Kl2xqT b/lost+found/DigraphImplem.java-Kl2xqT new file mode 100644 index 00000000..3a86b01b --- /dev/null +++ b/lost+found/DigraphImplem.java-Kl2xqT @@ -0,0 +1,3 @@ +package templates; + +@ @implementation@@ diff --git a/lost+found/DigraphImplem.java-y0F9BA b/lost+found/DigraphImplem.java-y0F9BA new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/DigraphImplem.java-y0F9BA @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/DigraphImplemCorrect.java-3hHfAp b/lost+found/DigraphImplemCorrect.java-3hHfAp new file mode 100644 index 00000000..68f10b90 --- /dev/null +++ b/lost+found/DigraphImplemCorrect.java-3hHfAp @@ -0,0 +1,61 @@ +package templates; + +import java.util.LinkedList; +import java.util.List; + +public class DigraphImplemCorrect implements Digraph { + + private List [] outEdges; + private int nE = 0; + + public DigraphImplemCorrect(int V) { + outEdges = new List[V]; + for (int i = 0; i < V; i++) { + outEdges[i] = new LinkedList<>(); + } + } + + /** + * The number of vertices + */ + public int V() { + return outEdges.length; + } + + /** + * The number of edges + */ + public int E() { + return nE; + } + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w) { + outEdges[v].add(w); + nE ++; + } + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v) { + return outEdges[v]; + } + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse() { + Digraph g = new DigraphImplemCorrect(V()); + for (int v = 0; v < outEdges.length; v++) { + for (int w: adj(v)) { + g.addEdge(w,v); + } + } + return g; + } + + +} diff --git a/lost+found/DoesntCompileStack.java-yMOJvE b/lost+found/DoesntCompileStack.java-yMOJvE new file mode 100644 index 00000000..4798b3a5 --- /dev/null +++ b/lost+found/DoesntCompileStack.java-yMOJvE @@ -0,0 +1,10 @@ +import java.util.EmptyStackException; + +/** + * This class doesn't compile because it doesn't implement + * the interface + * @author Frederic KACZYNSKI + */ +public class MyStack implements Stack { + +} diff --git a/lost+found/DoesntCompileStackTests.java-uimekG b/lost+found/DoesntCompileStackTests.java-uimekG new file mode 100644 index 00000000..12ba839b --- /dev/null +++ b/lost+found/DoesntCompileStackTests.java-uimekG @@ -0,0 +1,15 @@ +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * This class doesn't compile + * @author Frederic KACZYNSKI + */ +public class StackTests { + @Test + public void firstTest() { + asserue(false); + } +} diff --git a/lost+found/Epilog Helix.png-etWnlZ b/lost+found/Epilog Helix.png-etWnlZ new file mode 100644 index 00000000..5645eb47 Binary files /dev/null and b/lost+found/Epilog Helix.png-etWnlZ differ diff --git a/lost+found/Epilog Mini.png-eAMdKT b/lost+found/Epilog Mini.png-eAMdKT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Epilog ZING.png-MZlhIs b/lost+found/Epilog ZING.png-MZlhIs new file mode 100644 index 00000000..a5f67daa Binary files /dev/null and b/lost+found/Epilog ZING.png-MZlhIs differ diff --git a/lost+found/Epilog_32_Helix.xml-9yi1Tk b/lost+found/Epilog_32_Helix.xml-9yi1Tk new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Epilog_32_Zing.xml-o8sY4L b/lost+found/Epilog_32_Zing.xml-o8sY4L new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Expo_32_Giveaway_32_Pappe.xml-NWeqO5 b/lost+found/Expo_32_Giveaway_32_Pappe.xml-NWeqO5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/ExpressionTree.java-Uhey45 b/lost+found/ExpressionTree.java-Uhey45 new file mode 100644 index 00000000..498428b8 --- /dev/null +++ b/lost+found/ExpressionTree.java-Uhey45 @@ -0,0 +1,739 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + + +/* Solution de Simon Hardy pour la mission 2 */ +public class ExpressionTree implements FormalExpressionTree +{ + private ExpressionTree left; + private ExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + + try { + ExpressionTree tree = new ExpressionTree("0"); + ExpressionTree der = tree.derive(); + System.out.println(der); + } catch (ParseException e) {System.out.println(e);} + + /*try { + Generator g = new Generator(42); + for (int k = 0 ; k < 100 ; k++) { + String[] res = g.generateWrong(20); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + //System.out.println(expression); + //String expression = "(((sin(5)^10)*50)-(5*cos(x)))"; + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("NOPE"); + } + } catch (ParseException e) { + //System.out.println("ParseException : " + e + "\n"); + }*/ + + /*Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + //expression = "(((5*x)))"; + + System.out.println("Expression: " + expression); + ExpressionTree tree = new ExpressionTree(expression); + System.out.println("ExpressionTree: " + tree.toString()); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived ExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7')); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (ParseException e) { + System.out.println(e + "\n"); + }*/ + } + + /* Checks for parsing errors */ + public void checkParsing(String expression) throws ParseException { + Stack stack = new Stack(); + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if (c == '(') { + if (stack.empty() || stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("op"); + stack.push("id"); + } + } + else if (c == ')') { + if (stack.empty() || !stack.pop().equals(")")) + throw new ParseException("')' not expected"); + } + else if (isOperator(c)) { + if(expression.length() >= 3 && i+3 <= expression.length() && (expression.substring(i, i+3).equals("sin") || expression.substring(i, i+3).equals("cos"))) { + i += 2; + if (stack.empty()) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else if (stack.pop().equals("id")) { + stack.push(")"); + stack.push("id"); + stack.push("("); + } + else + throw new ParseException("sin/cos not expected"); + } + else if (stack.empty() || !stack.pop().equals("op")) + throw new ParseException("operator not expected"); + } + else if (isNumerical(c)) { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("numerical not expected"); + else if (stack.empty() && expression.length() != j) // not the only token in the expression + throw new ParseException("numerical not expected here"); + i+=j-1; + } + else if (isVariable(c)) { + if (!stack.empty() && !stack.pop().equals("id")) + throw new ParseException("variable not expected"); + else if (stack.empty() && expression.length() != 1) // not the only token (variable) in the expression + throw new ParseException("variable not expected here"); + } + else + throw new ParseException("token not recognized"); + } + if (!stack.empty()) + throw new ParseException("expression not complete"); + } + + + /* CONSTRUCTEUR + * Construit un arbre ?l?mentaire correspondant ? l'expression "0" + */ + public ExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + + /* CONSTRUCTEUR + + * prenant comme argument une cha?ne de caract?res (String) et construisant l'arbre associ?. + + * Cette cha?ne est suppos?e correspondre ? une expression analytique syntaxiquement correcte et compl?tement parenth?s?e. + * Une gestion d'exceptions doit ?tre pr?vue lorsque cette pr?condition n'est pas v?rifi?e. + */ + public ExpressionTree(String expression) throws ParseException + { + if (expression.length() == 0) { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + return; + } + checkParsing(expression); + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new ParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new ParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + ExpressionTree e = new ExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + ExpressionTree o = new ExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + ExpressionTree e = new ExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + else + throw new ParseException("Erreur dans la ligne !"); + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + ExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + ExpressionTree t2; + ExpressionTree t; + ExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette m?thode calcule le nouvel arbre correspondant ? la d?riv?e formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifi?. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte. + * @post Une r?f?rence ? un nouvel arbre repr?sentant la d?riv?e formelle de this est renvoy?e. + */ + + // V?rifier que l'arbre courant n'est pas modifi? ! + // La m?thode dans l'interface n'a pas d'argument, correct quand m?me ? + + public ExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + ExpressionTree e = new ExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + ExpressionTree e = new ExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((ExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((ExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + ExpressionTree h = new ExpressionTree(); + + ExpressionTree gSquarre = new ExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((ExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((ExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((ExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((ExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setLeft(new ExpressionTree()); // 0 + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + ExpressionTree e = new ExpressionTree(); + ExpressionTree f = new ExpressionTree(); + ExpressionTree g = new ExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D?but modif Simon + ExpressionTree h = new ExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d?cr?mente simplement + } + else { // c'est une variable ou un op?rateur + ExpressionTree i = new ExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((ExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getLeft() { + return left; + } + + public void setLeft(ExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public ExpressionTree getRight() { + return right; + } + + public void setRight(ExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette m?thode renvoie une cha?ne de caract?res correspondant ? + * l'expression analytique repr?sent?e dans l'arbre. + * + * @pre this repr?sente une expression analytique syntaxiquement correcte + * @post une cha?ne de caract?res, correspondant ? l'expression analytique + * compl?tement parenth?s?e repr?sent?e par this, est renvoy?e. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } + + /* Duplicate of toString so that JavaScript can interpret a^b as Math.power(a,b) [unit tests] */ + public String toStringJs() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toStringJs(); + parenthese = true; + } + + // "root" peut ?tre : + // - un op?rateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toStringJs(); + } + + if (parenthese) + str = "("; + if (strRoot.equals("sin") || strRoot.equals("cos")) + str += strLeft + strRoot + "(" + strRight + ")"; + else if (strRoot.equals("^")) + str += "Math.pow(" + strLeft + "," + strRight + ")"; + else + str += strLeft + strRoot + strRight; + + if (parenthese) + str += ")"; + return str; + } +} + diff --git a/lost+found/Factsheet (1).pdf-9CgP4U b/lost+found/Factsheet (1).pdf-9CgP4U new file mode 100644 index 00000000..048971e8 Binary files /dev/null and b/lost+found/Factsheet (1).pdf-9CgP4U differ diff --git a/lost+found/Filz_40_Girlsday_95_Blume_41_.xml-LnQRaS b/lost+found/Filz_40_Girlsday_95_Blume_41_.xml-LnQRaS new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Finnpappe.xml-T12IDl b/lost+found/Finnpappe.xml-T12IDl new file mode 100644 index 00000000..9e2a72fc --- /dev/null +++ b/lost+found/Finnpappe.xml-T12IDl @@ -0,0 +1,14 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Finnpappe + + 1.0 + 1.5 + 2.0 + 3.0 + 4.0 + + \ No newline at end of file diff --git a/lost+found/Flexfolie_32__40_T-Shirt_32_druck_41_.xml-lo0FyE b/lost+found/Flexfolie_32__40_T-Shirt_32_druck_41_.xml-lo0FyE new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Flockfolie_32__40_T-Shirt_32_druck_41_.xml-JHz6mK b/lost+found/Flockfolie_32__40_T-Shirt_32_druck_41_.xml-JHz6mK new file mode 100644 index 00000000..7757c575 --- /dev/null +++ b/lost+found/Flockfolie_32__40_T-Shirt_32_druck_41_.xml-JHz6mK @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Flockfolie (T-Shirt druck) + + 0.0 + + \ No newline at end of file diff --git a/lost+found/Folie.xml-3gUvXq b/lost+found/Folie.xml-3gUvXq new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml-iuhund b/lost+found/Folie_40_Bildschirm_44_3M_32_ARMR_32_200_41_.xml-iuhund new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Folie_40_Plexiglass_41_.xml-OgdFOZ b/lost+found/Folie_40_Plexiglass_41_.xml-OgdFOZ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/ForbiddenStack.java-ZnKWSJ b/lost+found/ForbiddenStack.java-ZnKWSJ new file mode 100644 index 00000000..2a982e57 --- /dev/null +++ b/lost+found/ForbiddenStack.java-ZnKWSJ @@ -0,0 +1,30 @@ +import java.util.EmptyStackException; + +/** + * This class uses Java's Stack and therefore shouldn't be + * allowed to pass the tests + * @author Frederic KACZYNSKI + */ +public class MyStack implements Stack { + private java.util.Stack stack; + + public MyStack() { + this.stack = stack; + } + + public boolean empty() { + return this.stack.isEmpty(); + } + + public E peek() throws EmptyStackException { + return this.stack.peek(); + } + + public E pop() throws EmptyStackException { + return this.stack.pop(); + } + + public E push(E item) { + return this.stack.push(item); + } +} diff --git a/lost+found/FormalExpressionTree.java-2a4r2N b/lost+found/FormalExpressionTree.java-2a4r2N new file mode 100644 index 00000000..1c172609 --- /dev/null +++ b/lost+found/FormalExpressionTree.java-2a4r2N @@ -0,0 +1,34 @@ +/** + * Un "FormalExpressionTree" est un arbre permettant de memoriser + * et de manipuler une expression analytique. + * + * Une classe implementant cette interface doit disposer d'un CONSTRUCTEUR + * prenant comme argument une chaine de caracteres (String) et construisant + * l'arbre associe. + * Cette chaine est supposee correspondre a une expression analytique + * syntaxiquement correcte et completement parenthesee. + * Lorsque cette precondition n'est pas verifiee, une ParseException (classe a implementer) doit etre lancee. + * Un CONSTRUCTEUR sans argument ou avec l'expression vide "" comme argument + * permet de construire un arbre elementaire correspondant a l'expression "0" + */ +public interface FormalExpressionTree { + /** + * Cette methode renvoie une chaine de caracteres correspondant a + * l'expression analytique representee dans l'arbre. + * + * @pre this represente une expression analytique syntaxiquement correcte + * @post une chaine de caracteres, correspondant a l'expression analytique + * completement parenthesee representee par this, est renvoyee. + */ + public String toString(); + + /** + * Cette methode calcule le nouvel arbre correspondant a la derivee formelle + * de l'arbre courant. L'arbre courant (this) n'est pas modifie. + * + * @pre this represente une expression analytique syntaxiquement correcte. + * @post Une reference a un nouvel arbre representant la derivee formelle + * de this est renvoyee. + */ + public FormalExpressionTree derive(); +} diff --git a/lost+found/FormalExpressionTree.java-aMr3Pk b/lost+found/FormalExpressionTree.java-aMr3Pk new file mode 100644 index 00000000..fe02bec2 --- /dev/null +++ b/lost+found/FormalExpressionTree.java-aMr3Pk @@ -0,0 +1,36 @@ +/** MODIFICATION HERE : add toStringJs + * Un "FormalExpressionTree" est un arbre permettant de memoriser + * et de manipuler une expression analytique. + * + * Une classe implementant cette interface doit disposer d'un CONSTRUCTEUR + * prenant comme argument une chaine de caracteres (String) et construisant + * l'arbre associe. + * Cette chaine est supposee correspondre a une expression analytique + * syntaxiquement correcte et completement parenthesee. + * Lorsque cette precondition n'est pas verifiee, une ParseException (classe a implementer) doit etre lancee. + * Un CONSTRUCTEUR sans argument ou avec l'expression vide "" comme argument + * permet de construire un arbre elementaire correspondant a l'expression "0" + */ +public interface FormalExpressionTree { + /** + * Cette methode renvoie une chaine de caracteres correspondant a + * l'expression analytique representee dans l'arbre. + * + * @pre this represente une expression analytique syntaxiquement correcte + * @post une chaine de caracteres, correspondant a l'expression analytique + * completement parenthesee representee par this, est renvoyee. + */ + public String toString(); + + public String toStringJs(); + + /** + * Cette methode calcule le nouvel arbre correspondant a la derivee formelle + * de l'arbre courant. L'arbre courant (this) n'est pas modifie. + * + * @pre this represente une expression analytique syntaxiquement correcte. + * @post Une reference a un nouvel arbre representant la derivee formelle + * de this est renvoyee. + */ + public FormalExpressionTree derive(); +} diff --git a/lost+found/Furnier_32_Kirschbaum.xml-v9PWgM b/lost+found/Furnier_32_Kirschbaum.xml-v9PWgM new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Generator.java-X5JtH3 b/lost+found/Generator.java-X5JtH3 new file mode 100644 index 00000000..9ff4ff30 --- /dev/null +++ b/lost+found/Generator.java-X5JtH3 @@ -0,0 +1,416 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.Random; +import java.util.Arrays; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + +/** + * Random generation of a valid derivation + */ +public class Generator { + + /** + * Grammar + * E -> (E + T) + * E -> (E - T) + * E -> T + * T -> (T * F) + * T -> (T / F) + * T -> F + * F -> (F ^ G) + * F -> G + * G -> sin ( H ) + * G -> cos ( H ) + * G -> H + * H -> E + * H -> id + * id -> "x" | "0" | ("1"-"9") {"0"-"9"} + */ + + public final static String PLUS = "+"; + public final static String MINUS = "-"; + public final static String TIMES = "*"; + public final static String DIVIDE = "/"; + public final static String LEFTPAR = "("; + public final static String RIGHTPAR = ")"; + public final static String POWER = "^"; + public final static String SIN = "sin"; + public final static String COS = "cos"; + + private int seed; + private Random rand = new Random(seed); + + public Generator(int seed) { + this.seed = seed; + } + + /* Grade the student in the method main */ + public static void main(String[] args) { + + // Start with basic checks + int modifyThis = 0; // checks if derive() modifies the current tree + int emptyConstructor = 0; // checks if constructor bewares well with no argument, "", "0". + + try { + ExpressionTree tree1 = new ExpressionTree("(x+2)"); + ExpressionTree der1 = tree1.derive(); + if (!tree1.toString().equals("(x+2)")) + modifyThis++; + } catch (Exception e) { + modifyThis++; + } + + try { + ExpressionTree tree2 = new ExpressionTree(); + ExpressionTree tree3 = new ExpressionTree(""); + ExpressionTree tree4 = new ExpressionTree("0"); + if (!tree2.toString().equals("0") || !tree3.toString().equals("0") || !tree2.toString().equals("0")) + emptyConstructor++; + } catch (Exception e) { + emptyConstructor++; + } + + + // Advanced tests now + String oneWrong = "nothing"; // will contain the expression corresponding to the first failed problem + Generator g = new Generator(42); + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("JavaScript"); + + String [] firstBarrier = { + "10", + "(10+x)", + "sin(x)", + "((10*2)+(4-x))", + "(10*(x+sin(x)))", + "(x+cos((x+2)))", + "((x^3)/5)", + + "(x/12)", + "cos(x)", + "((10/x)+(2*x))", + "(x*(1-sin(x)))", + "((x*(sin(((x/10)+x))^3))-cos(x))", + "(10^(x+20))" + }; + + String [] wrongFirstBarrier = { + "-4", + "(y*cos(x))", + "(x^4+sin((x+(2/x))))", + "((x^(-1))/6)", + "(x+)3+x))" + }; + + int totPos = 100; + int okPos = 0; + int totNeg = 20; + int okNeg = 0; + int bug = 0; // unwanted exceptions with my own code, should not happen + int studentError = 0; // unwanted exceptions with the code of the student, means he failed + + for (int i = 0 ; i < totPos ; i++) { + String expression = ""; + if (i < 13) + expression = firstBarrier[i]; + else { + String[] res = g.generate(10); + for (int j = 0 ; j < res.length ; j++) { + expression += res[j]; + } + } + //System.out.println("Expression : " + expression); + + // Evaluate the correct result with my own code + MyExpressionTree myTree; + String myResult = ""; + try { + myTree = new MyExpressionTree(expression); + MyExpressionTree myDerivedTree = myTree.derive(); + String myExpr = myDerivedTree.toString(); + try { + Object result = engine.eval(myExpr.replace('x', '7').replace("sin", "Math.sin").replace("cos", "Math.cos").replace("--", "+")); + //System.out.println("ME : Evaluation of the derivative (x=7): " + result.toString()); + myResult = result.toString(); + } catch (ScriptException e) { + bug++; + //System.out.println("ME : ScriptException"); + } + } catch (MyParseException e) { + bug++; + //System.out.println("ME : MyParseException... " + e + "\n"); + } + + // Evaluate the result of the student + ExpressionTree tree; + String studentResult = ""; + try { + tree = new ExpressionTree(expression); + ExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + try { + Object result = engine.eval(expr.replace('x', '7').replace("sin", "Math.sin").replace("cos", "Math.cos").replace("--", "+")); + //System.out.println("STUDENT : Evaluation of the derivative (x=7): " + result.toString()); + studentResult = result.toString(); + } catch (ScriptException e) { + studentError++; + if (oneWrong.equals("nothing")) oneWrong = expression; + //System.out.println("STUDENT : ScriptException"); + } + } catch (Exception e) { + studentError++; + if (oneWrong.equals("nothing")) oneWrong = expression; + //System.out.println("STUDENT : ParseException... " + e + "\n"); + } + if (myResult.equals(studentResult)) + okPos++; + else + if (oneWrong.equals("nothing")) oneWrong = expression; + } + + // Check if the student effectively throws an Exception upon wrong syntax + for (int i = 0 ; i < totNeg ; i++) { + String expression = ""; + if (i < 5) + expression = wrongFirstBarrier[i]; + else { + String[] res = g.generateWrong(10); + for (int j = 0 ; j < res.length ; j++) { + expression += res[j]; + } + } + //System.out.println("Expression : " + expression); + + ExpressionTree tree; + try { + tree = new ExpressionTree(expression); + if (oneWrong.equals("nothing")) oneWrong = expression; + } catch (ParseException e) { + okNeg++; + //System.out.println("ParseException correctly thrown"); + } catch (Exception f) { + // Not the right exception + } + } + + // Compute the result of the student + if (bug != 0) + System.out.println("PROBLEM"); + else if (okPos == totPos && okNeg == totNeg && studentError == 0 && modifyThis == 0 && emptyConstructor == 0) + System.out.println("OK " + okPos + " " + okNeg); + else + System.out.println("KO " + totPos + " " + okPos + " " + totNeg + " " + okNeg + " " + studentError + " " + modifyThis + " " + emptyConstructor + " " + oneWrong); + + } + + public String[] generate(int maxDepth) { + List res = new LinkedList(); + generateE(res, maxDepth, 0); + return res.toArray((new String[res.size()])); + } + + public String[] generateWrong(int maxDepth) { // make the syntax incorrect so that the student has to throw a ParseException + List res = new LinkedList(); + generateE(res, maxDepth, 0); + if (res.size() == 0) // if empty, add a wrong element + res.add("lol"); + else if (res.size() == 1) // if size of 1, replace it with a wrong element + res.set(0, "coos"); + else { + int i = rand.nextInt(7); + switch(i) { // make a random change so that syntax becomes incorrect + case 0 : { + res.add("("); + break; + } + case 1 : { + res.add(Math.max(2, res.size()), "("); + break; + } + case 2 : { + res.add(Math.max(3, res.size()), "sinn"); + break; + } + case 3 : { + res.add(1, "tan"); + break; + } + case 4 : { + res.remove(0); + break; + } + case 5 : { + res.set(Math.max(4, res.size()-1), "^^"); + break; + } + + case 6 : { + res.add(Math.max(2, res.size()), "("); + res.add(Math.max(3, res.size()), ")"); + break; + } + } + } + return res.toArray((new String[res.size()])); + } + + public void generateE(List output, int maxDepth, int currentDepth) { + // E -> T | E + T | E - T + if(currentDepth > maxDepth) { //prevent from exploding memory + generateT(output, maxDepth, currentDepth + 1); + } + else { + + int i = rand.nextInt(3); + switch(i) { + case 0 : { + output.add(LEFTPAR); + generateE(output, maxDepth, currentDepth + 1); + output.add(PLUS); + generateT(output, maxDepth, currentDepth + 1); + output.add(RIGHTPAR); + break; + } + case 1 : { + output.add(LEFTPAR); + generateE(output, maxDepth, currentDepth + 1); + output.add(MINUS); + generateT(output, maxDepth, currentDepth + 1); + output.add(RIGHTPAR); + break; + } + case 2 : { + generateT(output, maxDepth, currentDepth + 1); + break; + } + } + } + + } + + public void generateT(List output, int maxDepth, int currentDepth) { + //T -> F | T * F | T / F + if(currentDepth > maxDepth) { //prevent from exploding memory + generateF(output, maxDepth, currentDepth + 1); + } + else { + + int i = rand.nextInt(3); + switch(i) { + case 0: { + output.add(LEFTPAR); + generateT(output, maxDepth, currentDepth + 1); + output.add(TIMES); + generateF(output, maxDepth, currentDepth + 1); + output.add(RIGHTPAR); + break; + } + case 1: { + output.add(LEFTPAR); + generateT(output, maxDepth, currentDepth + 1); + output.add(DIVIDE); + generateF(output, maxDepth, currentDepth + 1); + output.add(RIGHTPAR); + break; + } + case 2: { + generateF(output, maxDepth, currentDepth + 1); + break; + } + } + } + } + + public void generateF(List output, int maxDepth, int currentDepth) { + //F -> F ^ G | G + if(currentDepth > maxDepth) { //prevent from exploding memory + generateG(output, maxDepth, currentDepth + 1); + } + else { + + int i = rand.nextInt(2); + switch(i) { + case 0 : { + output.add(LEFTPAR); + generateF(output, maxDepth, currentDepth + 1); + output.add(POWER); + generateG(output, maxDepth, currentDepth + 1); + output.add(RIGHTPAR); + break; + } + case 1 : { + generateG(output, maxDepth, currentDepth + 1); + break; + } + } + } + } + + public void generateG(List output, int maxDepth, int currentDepth) { + //G -> sin ( H ) | cos ( H ) | H + if(currentDepth > maxDepth) { //prevent from exploding memory + generateH(output, maxDepth, currentDepth + 1); + } + else { + + int i = rand.nextInt(3); + switch(i) { + case 0: { + output.add(SIN); + output.add(LEFTPAR); + generateH(output, maxDepth, currentDepth + 1); + output.add(RIGHTPAR); + break; + } + case 1: { + output.add(COS); + output.add(LEFTPAR); + generateH(output, maxDepth, currentDepth + 1); + output.add(RIGHTPAR); + break; + } + case 2: { + generateH(output, maxDepth, currentDepth + 1); + break; + } + } + } + } + + public void generateH(List output, int maxDepth, int currentDepth) { + //H -> E | id + if(currentDepth > maxDepth) { //prevent from exploding memory + generateId(output); + } + else { + int i = rand.nextInt(2); + switch(i) { + case 0 : { + generateE(output, maxDepth, currentDepth + 1); + break; + } + case 1 : { + generateId(output); + break; + } + } + } + } + + public void generateId(List output) { + int i = rand.nextInt(2); + switch(i) { + case 0 : { + output.add(Integer.toString(rand.nextInt(Integer.MAX_VALUE))); + break; + } + case 1 : { + output.add("x"); + break; + } + } + } + +} diff --git a/lost+found/GlobalWarming.java-2GAJTi b/lost+found/GlobalWarming.java-2GAJTi new file mode 100644 index 00000000..a697b366 --- /dev/null +++ b/lost+found/GlobalWarming.java-2GAJTi @@ -0,0 +1,48 @@ +package templates; + +import java.util.List; + +abstract public class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude) { + this.altitude = altitude; + } + + /** + * + * @param waterLevel + * @return the number of entries in altitude matrix that would be above + * the specified waterLevel. + * Warning: this is not the waterLevel given in the constructor/ + */ + public abstract int nbSafePoints(int waterLevel); + + +} diff --git a/lost+found/GlobalWarming.java-6ho6jA b/lost+found/GlobalWarming.java-6ho6jA new file mode 100644 index 00000000..65dd531a --- /dev/null +++ b/lost+found/GlobalWarming.java-6ho6jA @@ -0,0 +1,62 @@ +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + public final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * + * @param p1 a safe point with valid coordinates on altitude matrix + * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix + * @return the shortest simple path (vertical/horizontal moves) if any between from p1 to p2 using only vertical/horizontal moves on safe points. + * an empty list if not path exists (i.e. p1 and p2 are not on the same island). + */ + public abstract List shortestPath(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + + +} diff --git a/lost+found/GlobalWarming.java-K6W2Zs b/lost+found/GlobalWarming.java-K6W2Zs new file mode 100644 index 00000000..ea3c474c --- /dev/null +++ b/lost+found/GlobalWarming.java-K6W2Zs @@ -0,0 +1,46 @@ +import java.util.List; + +abstract public class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude) { + this.altitude = altitude; + } + + /** + * + * @param waterLevel + * @return the number of entries in altitude matrix that would be above + * the specified waterLevel. + * Warning: this is not the waterLevel given in the constructor/ + */ + public abstract int nbSafePoints(int waterLevel); + + +} diff --git a/lost+found/GlobalWarming.java-MxNXLI b/lost+found/GlobalWarming.java-MxNXLI new file mode 100644 index 00000000..7f4b6eb1 --- /dev/null +++ b/lost+found/GlobalWarming.java-MxNXLI @@ -0,0 +1,64 @@ +package templates; + +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + public final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * + * @param p1 a safe point with valid coordinates on altitude matrix + * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix + * @return the shortest simple path (vertical/horizontal moves) if any between from p1 to p2 using only vertical/horizontal moves on safe points. + * an empty list if not path exists (i.e. p1 and p2 are not on the same island). + */ + public abstract List shortestPath(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + + +} diff --git a/lost+found/GlobalWarming.java-csmkGq b/lost+found/GlobalWarming.java-csmkGq new file mode 100644 index 00000000..84436e67 --- /dev/null +++ b/lost+found/GlobalWarming.java-csmkGq @@ -0,0 +1,68 @@ +package templates; + +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + /** + * An island is a connected components of safe points wrt to waterLevel + * @return the number of islands + */ + public abstract int nbIslands(); + + /** + * + * @param p1 a point with valid coordinates on altitude matrix + * @param p2 a point with valid coordinates on altitude matrix + * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel + * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions + */ + public abstract boolean onSameIsland(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + +} diff --git a/lost+found/GlobalWarming.java-fy4o5v b/lost+found/GlobalWarming.java-fy4o5v new file mode 100644 index 00000000..0b5959ca --- /dev/null +++ b/lost+found/GlobalWarming.java-fy4o5v @@ -0,0 +1,66 @@ +import java.util.List; + +public abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + /** + * An island is a connected components of safe points wrt to waterLevel + * @return the number of islands + */ + public abstract int nbIslands(); + + /** + * + * @param p1 a point with valid coordinates on altitude matrix + * @param p2 a point with valid coordinates on altitude matrix + * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel + * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions + */ + public abstract boolean onSameIsland(Point p1, Point p2); + + + public int nbSafePointsCorrect(int waterLevel) { + int res = 0; + for (int i = 0; i < altitude.length; i++) { + for (int j = 0; j < altitude.length; j++) { + if (altitude[i][j] > waterLevel) { + res++; + } + } + } + return res; + } + +} diff --git a/lost+found/GlobalWarming.java-r5heuj b/lost+found/GlobalWarming.java-r5heuj new file mode 100644 index 00000000..b4557b73 --- /dev/null +++ b/lost+found/GlobalWarming.java-r5heuj @@ -0,0 +1,46 @@ +import java.util.List; + +abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude) { + this.altitude = altitude; + } + + /** + * + * @param waterLevel + * @return the number of entries in altitude matrix that would be above + * the specified waterLevel. + * Warning: this is not the waterLevel given in the constructor/ + */ + public abstract int nbSafePoints(int waterLevel); + + +} \ No newline at end of file diff --git a/lost+found/GlobalWarmingImpl.java-3KuQ4g b/lost+found/GlobalWarmingImpl.java-3KuQ4g new file mode 100644 index 00000000..f02baf3f --- /dev/null +++ b/lost+found/GlobalWarmingImpl.java-3KuQ4g @@ -0,0 +1,3 @@ +package templates; + +@@implementation@@ diff --git a/lost+found/GlobalWarmingImpl.java-7UydVk b/lost+found/GlobalWarmingImpl.java-7UydVk new file mode 100644 index 00000000..70b786d1 --- /dev/null +++ b/lost+found/GlobalWarmingImpl.java-7UydVk @@ -0,0 +1 @@ +// TODO diff --git a/lost+found/GlobalWarmingImpl.java-Ea7WOl b/lost+found/GlobalWarmingImpl.java-Ea7WOl new file mode 100644 index 00000000..28048319 --- /dev/null +++ b/lost+found/GlobalWarmingImpl.java-Ea7WOl @@ -0,0 +1,3 @@ +@@implementation@@ + + diff --git a/lost+found/GlobalWarmingImpl.java-FoCYfr b/lost+found/GlobalWarmingImpl.java-FoCYfr new file mode 100644 index 00000000..f02baf3f --- /dev/null +++ b/lost+found/GlobalWarmingImpl.java-FoCYfr @@ -0,0 +1,3 @@ +package templates; + +@@implementation@@ diff --git a/lost+found/GlobalWarmingImpl.java-WtaQMP b/lost+found/GlobalWarmingImpl.java-WtaQMP new file mode 100644 index 00000000..f02baf3f --- /dev/null +++ b/lost+found/GlobalWarmingImpl.java-WtaQMP @@ -0,0 +1,3 @@ +package templates; + +@@implementation@@ diff --git a/lost+found/GlobalWarmingImpl.java-mpgi3L b/lost+found/GlobalWarmingImpl.java-mpgi3L new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/GlobalWarmingImpl.java-mpgi3L @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/GlobalWarmingImpl.java-qzj7Fq b/lost+found/GlobalWarmingImpl.java-qzj7Fq new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/GlobalWarmingImpl.java-qzj7Fq @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/GlobalWarmingTest.java-1DNV4d b/lost+found/GlobalWarmingTest.java-1DNV4d new file mode 100644 index 00000000..3084b976 --- /dev/null +++ b/lost+found/GlobalWarmingTest.java-1DNV4d @@ -0,0 +1,268 @@ +/*to be added for grading and test*/ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +/*normal import*/ +import java.io.IOException; +import java.util.List; +import java.util.List; +import java.util.Random; +import java.util.concurrent.*; + + +/** + * Created by johnaoga on 22/10/2018. + */ +//@RunWith(Parameterized.class) //For grading +public class GlobalWarmingTest { + + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + ///tests Methods Correctness + @Test + @Grade(value=10) + public void testSafePointExam() { + String message = "safe points returned (should be 14):"+new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2); + assertEquals(message, new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2), 14); + } + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix); + + if (warming.nbSafePoints(-1) != 100) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(0) != 24) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(1) != 0) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + } + + @Test + @Grade(value=30) + public void testCorrectnessNbSafePoints() { + int[][] matrix = getExamMatrix(); + GlobalWarming g1 = new GlobalWarmingImpl(matrix); + int[] true_value = {25, 18, 14, 9, 3}; + for (int l = 0; l < 5; l += 1) { + String msg = "at " +l+" number should be " + g1.nbSafePoints(l) + " but it's " + true_value[l]; + assertEquals(msg, true_value[l], g1.nbSafePoints(l)); + } + matrix = getExamMatrix2(); + GlobalWarming g2 = new GlobalWarmingImpl(matrix); + int[] true_value2 = {98, 97, 97, 97, 95, 95, 94, 94, 94, 93, 93, 92, 90, 90, 88, 87, 87, 87, 87, 87, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 84, 83, 82, 82, 81, 81, 81, 81, 80, 80, 78, 78, 78, 78, 78, 78, 77, 77, 76, 76, + 76, 76, 75, 74, 74, 74, 72, 71, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 66, 66, 65, 65, 65, 65, 64, + 63, 60, 60, 60, 58, 57, 57, 57, 57, 56, 56, 56, 53, 53, 53, 52, 52, 51, 51, 49, 49, 46, 45, 43, 43, 42, + 42, 40, 40, 39, 38, 37, 37, 35, 35, 35, 34, 32, 32, 32, 32, 32, 32, 29, 29, 29, 28, 27, 24, 23, 21, 19, + 19, 19, 18, 17, 16, 16, 15, 14, 12, 10, 10, 9, 9, 9, 8, 7, 7, 5, 2, 2, 1, 1, 0}; + for (int l = 0; l < 150; l += 1) { + String msg = "at " +l+" number should be " + g2.nbSafePoints(l) + " but it's " + true_value2[l]; + assertEquals(msg, true_value2[l], g2.nbSafePoints(l)); + } + + matrix = getExamMatrix3(); + GlobalWarming g3 = new GlobalWarmingImpl(matrix); + int[] true_value3 = {100, 99, 97, 96, 96, 95, 95, 95, 95, 95, 94, 94, 92, 92, 92, 92, 91, 91, 89, 87, 86, 85, + 84, 82, 82, 81, 80, 79, 79, 79, 78, 78, 78, 78, 77, 77, 77, 77, 76, 76, 76, 74, 73, 71, 70, 70, 70, 67, + 67, 67, 67, 66, 66, 64, 64, 63, 63, 61, 59, 59, 58, 58, 57, 57, 57, 56, 56, 55, 54, 53, 52, 52, 51, 50, + 49, 47, 47, 45, 45, 44, 43, 43, 42, 42, 42, 41, 41, 41, 39, 39, 39, 38, 38, 37, 37, 34, 33, 32, 32, 32, + 32, 31, 30, 30, 29, 27, 27, 26, 24, 24, 23, 22, 20, 20, 19, 19, 17, 15, 15, 15, 15, 15, 15, 13, 12, 12, + 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 9, 5, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g3.nbSafePoints(l) + " but it's " + true_value3[l]; + assertEquals(msg, true_value3[l], g3.nbSafePoints(l)); + } + + matrix = getExamMatrix4(); + GlobalWarming g4 = new GlobalWarmingImpl(matrix); + int[] true_value4 = {99, 99, 98, 98, 98, 97, 97, 96, 94, 93, 92, 91, 91, 89, 89, 88, 87, 87, 87, 87, 87, 86, 86, + 85, 85, 85, 85, 85, 82, 81, 81, 80, 80, 80, 77, 76, 75, 75, 75, 74, 73, 70, 70, 69, 69, 68, 68, 68, 67, + 67, 67, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 61, 61, 61, 60, 59, 56, 56, 56, 56, 54, 53, 52, 52, + 51, 51, 50, 48, 47, 45, 43, 42, 41, 40, 40, 39, 39, 39, 39, 38, 35, 35, 35, 34, 33, 33, 32, 32, 31, 31, + 30, 29, 28, 27, 27, 26, 25, 24, 24, 23, 23, 23, 21, 21, 19, 19, 18, 18, 17, 17, 16, 16, 16, 16, 13, 13, + 12, 11, 11, 10, 10, 10, 10, 9, 9, 7, 7, 6, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g4.nbSafePoints(l) + " but it's " + true_value4[l]; + assertEquals(msg, true_value4[l], g4.nbSafePoints(l)); + } + + matrix = getExamMatrix5(); + GlobalWarming g5 = new GlobalWarmingImpl(matrix); + int[] true_value5 = {100, 100, 98, 98, 98, 98, 98, 98, 98, 97, 97, 96, 95, 95, 94, 94, 92, 92, 92, 92, 92, 92, + 91, 90, 88, 87, 86, 85, 84, 84, 84, 84, 82, 82, 80, 78, 77, 77, 76, 74, 74, 74, 72, 71, 68, 67, 65, 65, + 64, 64, 62, 62, 61, 61, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 57, 57, 56, 55, 55, 52, 51, 51, 50, 48, + 48, 48, 47, 46, 45, 45, 45, 45, 45, 45, 45, 43, 42, 42, 42, 42, 41, 41, 41, 37, 36, 35, 35, 35, 33, 33, + 31, 30, 29, 28, 28, 26, 26, 24, 24, 24, 22, 22, 20, 19, 19, 18, 18, 17, 17, 16, 15, 14, 13, 13, 11, 11, + 9, 9, 9, 8, 7, 7, 6, 6, 6, 6, 6, 5, 3, 3, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g5.nbSafePoints(l) + " but it's " + true_value5[l]; + assertEquals(msg, true_value5[l], g5.nbSafePoints(l)); + } + + matrix = getExamMatrix6(); + GlobalWarming g6 = new GlobalWarmingImpl(matrix); + int[] true_value6 = {100, 99, 99, 98, 97, 96, 95, 95, 94, 93, 93, 92, 90, 90, 89, 89, 89, 89, 87, 87, 86, 84, + 84, 84, 83, 82, 82, 80, 79, 77, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 70, 69, 69, 69, 69, 69, 69, 69, + 67, 66, 65, 65, 65, 65, 64, 64, 63, 61, 61, 61, 59, 59, 58, 57, 57, 56, 56, 55, 54, 54, 53, 52, 52, 51, + 50, 50, 47, 47, 47, 46, 46, 46, 46, 46, 44, 43, 42, 42, 41, 41, 41, 41, 41, 39, 39, 39, 38, 37, 37, 36, + 36, 35, 34, 33, 33, 33, 32, 32, 32, 32, 32, 29, 25, 25, 25, 23, 22, 20, 19, 18, 16, 16, 15, 14, 14, 14, + 13, 12, 12, 12, 12, 12, 11, 11, 11, 11, 9, 8, 6, 6, 6, 5, 5, 4, 4, 3, 3, 3, 1, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g6.nbSafePoints(l) + " but it's " + true_value6[l]; + assertEquals(msg, true_value6[l], g6.nbSafePoints(l)); + } + } + + + ///extra methods + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix2() { + int [][] tab = new int[][] {{136, 14, 135, 94, 130, 4, 118, 149, 0, 84}, + {0, 12, 108, 61, 145, 112, 111, 138, 57, 129}, + {142, 74, 33, 1, 68, 104, 39, 100, 126, 11}, + {123, 123, 79, 141, 135, 92, 118, 6, 96, 134}, + {125, 80, 123, 147, 133, 145, 112, 39, 76, 102}, + {12, 45, 144, 20, 94, 52, 108, 15, 126, 57}, + {124, 75, 96, 79, 122, 105, 20, 55, 29, 47}, + {4, 102, 87, 70, 14, 96, 30, 121, 31, 98}, + {76, 144, 87, 136, 97, 56, 58, 51, 125, 98}, + {106, 118, 37, 87, 76, 131, 90, 9, 145, 55}}; + return tab; + } + + public int [][] getExamMatrix3() { + int [][] tab = new int[][] {{60, 148, 79, 47, 65, 53, 41, 111, 69, 104}, + {77, 77, 23, 112, 95, 44, 34, 75, 41, 20}, + {43, 138, 74, 47, 2, 10, 3, 82, 42, 23}, + {95, 95, 137, 137, 2, 62, 75, 53, 88, 135}, + {110, 25, 5, 80, 148, 141, 124, 136, 112, 12}, + {19, 27, 116, 96, 57, 16, 58, 137, 93, 97}, + {137, 88, 55, 108, 108, 117, 1, 68, 58, 18}, + {38, 22, 107, 101, 26, 30, 47, 12, 85, 70}, + {67, 123, 117, 19, 105, 102, 139, 43, 51, 91}, + {123, 130, 18, 114, 116, 73, 57, 72, 105, 21}}; + return tab; + } + + public int [][] getExamMatrix4() { + int [][] tab = new int[][] {{86, 15, 119, 53, 117, 67, 81, 147, 138, 13}, + {130, 125, 148, 121, 97, 7, 36, 91, 90, 51}, + {21, 134, 80, 115, 136, 104, 34, 62, 142, 0}, + {78, 53, 99, 95, 91, 10, 125, 62, 94, 9}, + {67, 11, 71, 23, 127, 28, 66, 71, 35, 41}, + {136, 43, 113, 107, 8, 78, 16, 8, 140, 75}, + {5, 45, 108, 29, 65, 125, 83, 40, 41, 106}, + {48, 82, 128, 141, 67, 79, 39, 91, 102, 31}, + {77, 81, 28, 101, 34, 113, 139, 62, 110, 73}, + {72, 115, 13, 41, 103, 2, 80, 34, 84, 28}}; + return tab; + } + + public int [][] getExamMatrix5() { + int [][] tab = new int[][] {{115, 32, 69, 98, 138, 90, 110, 16, 23, 112}, + {54, 44, 12, 78, 39, 122, 9, 124, 25, 140}, + {43, 110, 67, 100, 32, 72, 70, 93, 64, 2}, + {50, 76, 102, 45, 105, 113, 93, 48, 77, 120}, + {46, 2, 35, 26, 69, 93, 22, 107, 50, 35}, + {94, 66, 44, 98, 119, 38, 28, 85, 46, 126}, + {147, 24, 124, 39, 93, 103, 73, 42, 36, 24}, + {55, 44, 95, 146, 121, 107, 34, 137, 27, 34}, + {129, 132, 100, 58, 105, 52, 11, 130, 86, 138}, + {69, 101, 126, 42, 85, 14, 117, 16, 73, 112}}; + return tab; + } + + public int [][] getExamMatrix6() { + int [][] tab = new int[][] {{115, 12, 8, 41, 101, 136, 12, 103, 3, 18}, + {120, 88, 149, 18, 11, 60, 29, 57, 36, 65}, + {67, 25, 145, 136, 86, 74, 21, 85, 60, 1}, + {40, 24, 27, 20, 63, 27, 117, 76, 102, 84}, + {118, 79, 73, 68, 71, 141, 30, 36, 54, 143}, + {122, 106, 48, 117, 57, 84, 49, 112, 62, 127}, + {93, 138, 112, 9, 70, 76, 30, 93, 4, 119}, + {48, 97, 132, 126, 148, 99, 56, 76, 14, 116}, + {120, 123, 96, 28, 21, 5, 111, 112, 6, 148}, + {111, 115, 36, 112, 29, 137, 138, 111, 40, 50}}; + return tab; + } + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + ///Complexities + @Test(timeout=300) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(1000,2000000); + //long t0 = System.currentTimeMillis(); + final GlobalWarming g = new GlobalWarmingImpl(matrix); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + final GlobalWarming gwi = new GlobalWarmingImpl(getRandomMatrix(1000,2000000)); + + @Test(timeout=50) + @Grade(value=30) + public void timeComplexityNbSafePoints() { + //long t0 = System.currentTimeMillis(); + int max = 0; + for (int i = 0; i < 1000; i++) { + gwi.nbSafePoints(i*1000); + } + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor==:"+(t1-t0)); + } + +} diff --git a/lost+found/GlobalWarmingTest.java-B6asdo b/lost+found/GlobalWarmingTest.java-B6asdo new file mode 100644 index 00000000..f5584555 --- /dev/null +++ b/lost+found/GlobalWarmingTest.java-B6asdo @@ -0,0 +1,329 @@ + + +import java.io.IOException; +import java.util.List; +import java.util.List; +import java.util.Random; +import java.util.concurrent.*; + + +/** + * Created by pschaus on 31/07/17. + */ +public class GlobalWarmingTest { + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + + + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + + + public boolean testSafePointExam() { + System.out.println("safe points returned (should be 14):"+new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2)); + return new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2) == 14; + } + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + public boolean testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix); + + if (warming.nbSafePoints(-1) != 100) { + System.out.println("error in nbSafePoints"); + return false; + } + + if (warming.nbSafePoints(0) != 24) { + System.out.println("error in nbSafePoints"); + return false; + } + + if (warming.nbSafePoints(1) != 0) { + System.out.println("error in nbSafePoints"); + return false; + } + return true; + } + + public static int nSafePoints(int [][] matrix,int level) { + int c = 0; + int n = matrix.length; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (matrix[i][j] > level) c++; + } + } + return c; + } + + + public boolean testCorrectnessNbSafePoints() { + for (int i = 0; i < 100; i++) { + int [][] matrix = getRandomMatrix(100,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix); + + for (int l = 5; l < 10000000; l+= 10000) { + if (g1.nbSafePoints(l) != nSafePoints(matrix,l)) { + return false; + } + } + + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix); + + if (warming.nbSafePoints(-1) != 100) { + System.out.println("error in nbSafePoints"); + return false; + } + + + return true; + } + + + + public boolean neighbors(GlobalWarming.Point p1,GlobalWarming.Point p2) { + return Math.abs(p1.x-p2.x) + Math.abs(p1.y-p2.y) == 1; + } + + + public boolean timeComplexityConstructorCorrect() { + try { + + final int [][] matrix = getRandomMatrix(400,2000000); + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + int max = 0; + + // do some computation here + long t0 = System.currentTimeMillis(); + GlobalWarming g = new GlobalWarmingImpl(matrix); + long t1 = System.currentTimeMillis(); + System.out.println("time constructor:"+(t1-t0)); + + + } + }.run(500); + if (!timeOk) return false; + //Assert.assertTrue("correct time complexity", g.nCallsAdj < 3 * g.V()); + + } catch (AssertionError e) { + return false; + } + return true; + } + + public boolean timeComplexityNbSafePoints() { + try { + + final int [][] matrix = getRandomMatrix(1000,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix); + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + int max = 0; + + // do some computation here + long t0 = System.currentTimeMillis(); + + for (int i = 0; i < 1000; i++) { + g.nbSafePoints(i*1000); + } + + /* + int n = matrix.length; + for (int a = 0; a < n; a++) { + for (int b = 0; b < n; b++) { + if (matrix[a][b]> max) max = matrix[a][b]; + + } + }*/ + + long t1 = System.currentTimeMillis(); + System.out.println("time safepoints:"+(t1-t0)); + + + } + }.run(50); + if (!timeOk) return false; + //Assert.assertTrue("correct time complexity", g.nCallsAdj < 3 * g.V()); + + } catch (AssertionError e) { + return false; + } + return true; + } + + + + + + + + + + private void exec(String cmd) { + try { + Runtime.getRuntime().exec(cmd).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + private void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n"+message+"\n"}).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + + public void testGrade() { + int score = 0; + + try { + + if (testSafePointExam()) { + score += 10; + } else { + System.out.println("exam safe point -10"); + } + + if (testSimpleAll()) { + score += 10; + + if (timeComplexityConstructorCorrect()) { + score += 20; + } else { + feedback("test complexity constructor:-20"); + } + + } else { + feedback("test correctness all methods and constructor :-30"); + } + + + if (testCorrectnessNbSafePoints()) { + score += 30; + + if (timeComplexityNbSafePoints()) { + score += 30; + } else { + feedback("test complexity nbSafePoints:-30"); + } + + } else { + feedback("test correctness NbSafePoints on random matrices:-60"); + } + + } catch (Exception e) { + + } + + System.out.println("%score:" + score); + + + exec("feedback-grade "+score); + + + if (Math.min(score,100) == 100) { + feedback("Congratulations"); + exec("feedback-result success"); + } + else { + feedback("Not yet there"); + exec("feedback-result failed"); + } + + + } + + public static void main(String[] args) { + new GlobalWarmingTest().testGrade(); + } +} + + diff --git a/lost+found/GlobalWarmingTest.java-hQ6hLH b/lost+found/GlobalWarmingTest.java-hQ6hLH new file mode 100644 index 00000000..02980f4f --- /dev/null +++ b/lost+found/GlobalWarmingTest.java-hQ6hLH @@ -0,0 +1,452 @@ + + +import java.io.IOException; +import java.util.List; +import java.util.List; +import java.util.Random; +import java.util.concurrent.*; + + +/** + * Created by pschaus on 31/07/17. + */ +public class GlobalWarmingTest { + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + + + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + + public static boolean relaxedTestNbIsland(GlobalWarming gw, int expected) { + int res = gw.nbIslands(); + return res == expected || res == (expected + (gw.altitude.length*gw.altitude.length)-gw.nbSafePointsCorrect(gw.waterLevel)); + } + + + public boolean testOnSameIslandExam() { + GlobalWarming gw = new GlobalWarmingImpl(getExamMatrix(),3); + boolean ok1 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)) == false; + boolean ok2 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(1,4)) == true; + boolean ok3 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(2,3)) == true; + boolean ok4 = gw.onSameIsland(new GlobalWarming.Point(2,3),new GlobalWarming.Point(3,4)) == false; + System.out.println("onsameIslandsExam:"+ok1+" "+ok2+" "+ok3+" "+ok4); + return ok1 && ok2 && ok3 && ok4; + } + + public boolean testNbIslandsExam() { + GlobalWarming g = new GlobalWarmingImpl(getExamMatrix(),3); + boolean ok = relaxedTestNbIsland(g,4); + if (!ok) System.out.println("islands returned (should be 4):"+g.nbIslands()); + return ok; + } + + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + public boolean testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + + + if (!relaxedTestNbIsland(warming,4)) { + + System.out.println("error in nbIslands"+ warming.nbIslands()); + return false; + } + + if (warming.onSameIsland(point(0,0),point(0,0))) { + System.out.println("error in onSameIsland"); + return false; + } + + + if (warming.onSameIsland(point(0, 0), point(0, 1))) { + System.out.println("error in onSameIsland"); + return false; + } + + if (!warming.onSameIsland(point(4,5),point(1,7))) { + System.out.println("error in onSameIsland"); + return false; + } + + return true; + } + + + + + + public boolean testCorrectnessOnSameIsland() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + + for (int k = 0; k < 100; k++) { + int [][] matrix = getRandomMatrix(100,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 100; i++) { + for (int j = 0; j < 100-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + if (!g1.onSameIsland(point(i,j),point(i,j+2))) { + return false; + } + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + if (warming.onSameIsland(point(0,0),point(0,0))) { + return false; + } + + + if (warming.onSameIsland(point(0, 0), point(0, 1))) { + return false; + } + + if (!warming.onSameIsland(point(4,5),point(1,7))) { + return false; + } + + + return true; + } + + public boolean testCorrectnessNbIslands() { + + int level = 200000; + + { + int[][] matrix = getRandomMatrix(10, 10); + + if (!relaxedTestNbIsland(new GlobalWarmingImpl(matrix, 20),0)) { + // all the bounds are under the sea level + return false; + } + + if (!relaxedTestNbIsland(new GlobalWarmingImpl(matrix, -20),1)) { + // all the bounds are above the sea level + + return false; + } + + matrix[0][0] = 30; + matrix[0][1] = 30; + matrix[0][9] = 30; + matrix[9][0] = 30; + matrix[9][9] = 30; + matrix[9][8] = 30; + + if (!relaxedTestNbIsland(new GlobalWarmingImpl(matrix, 25),4)) { + // all the bounds are above the sea level + return false; + } + + } + + for (int iter = 0; iter < 100; iter++) { + + + int[][] matrix = new int[100][100]; + + boolean [] generated = new boolean[10]; + int nIslandExpected = 0; + for (int i = 0; i < rand.nextInt(10); i++) { + int k = rand.nextInt(8); + matrix[k*10][k*10] = 1; + matrix[k*10+1][k*10] = 1; + matrix[k*10][k*10+1] = 1; + matrix[k*10+1][k*10+1] = 1; + if (rand.nextBoolean()) { + matrix[k*10+2][k*10+1] = 1; + } + if (rand.nextBoolean()) { + matrix[k*10+2][k*10] = 1; + } + if (!generated[k]) { + generated[k] = true; + nIslandExpected += 1; + } + } + if (!relaxedTestNbIsland(new GlobalWarmingImpl(matrix, 0),nIslandExpected)) { + // all the bounds are above the sea level + return false; + } + } + + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + if (!relaxedTestNbIsland(warming,4)) { + return false; + } + return true; + } + + + + + + + + public boolean timeComplexityConstructorCorrect() { + try { + + final int [][] matrix = getRandomMatrix(400,2000000); + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + int max = 0; + + // do some computation here + long t0 = System.currentTimeMillis(); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + long t1 = System.currentTimeMillis(); + System.out.println("time constructor:"+(t1-t0)); + + + } + }.run(500); + if (!timeOk) return false; + //Assert.assertTrue("correct time complexity", g.nCallsAdj < 3 * g.V()); + + } catch (AssertionError e) { + return false; + } + return true; + } + + + public boolean timeComplexityNbIslands() { + try { + + final int [][] matrix = getRandomMatrix(500,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + int max = 0; + + // do some computation here + long t0 = System.currentTimeMillis(); + + g.nbIslands(); + + long t1 = System.currentTimeMillis(); + System.out.println("time nbIslands:"+(t1-t0)); + + } + }.run(5); + if (!timeOk) return false; + //Assert.assertTrue("correct time complexity", g.nCallsAdj < 3 * g.V()); + + } catch (AssertionError e) { + return false; + } + return true; + } + + public boolean timeComplexityOnSameIsland() { + try { + + final int [][] matrix = getRandomMatrix(500,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + int max = 0; + // do some computation here + long t0 = System.currentTimeMillis(); + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.onSameIsland(point(i,j),point(n-1,n-1)); + } + } + long t1 = System.currentTimeMillis(); + System.out.println("time onSameIsland:"+(t1-t0)); + } + }.run(500); + if (!timeOk) return false; + //Assert.assertTrue("correct time complexity", g.nCallsAdj < 3 * g.V()); + + } catch (AssertionError e) { + return false; + } + return true; + } + + + + + private void exec(String cmd) { + try { + Runtime.getRuntime().exec(cmd).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + private void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n"+message+"\n"}).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + + public void testGrade() { + int score = 0; + + try { + + if (testOnSameIslandExam()) { + score += 20; + } else { + System.out.println("exam on same island -20"); + } + if (testNbIslandsExam()) { + score += 20; + } else { + System.out.println("exam nb islands -20"); + } + + + if (testCorrectnessOnSameIsland()) { + score += 10; + + if (timeComplexityOnSameIsland()) { + score += 20; + } else { + feedback("test complexity nbIslands:-20"); + } + } else { + feedback("test correctness onSameIsland on random graphs:-30"); + } + + + if (testCorrectnessNbIslands()) { + score += 10; + + if (timeComplexityNbIslands()) { + score += 20; + } else { + feedback("test complexity nbIslands:-20"); + } + } else { + feedback("test correctness nbIslands on random graphs:-30"); + } + + + } catch (Exception e) { + + } + + System.out.println("%score:" + score); + + exec("feedback-grade "+score); + + if (Math.min(score,100) == 100) { + feedback("Congratulations"); + exec("feedback-result success"); + } + else { + feedback("Not yet there"); + exec("feedback-result failed"); + } + + + } + + public static void main(String[] args) { + new GlobalWarmingTest().testGrade(); + } +} + diff --git a/lost+found/GlobalWarmingTest.java-hhyQxl b/lost+found/GlobalWarmingTest.java-hhyQxl new file mode 100644 index 00000000..1934a195 --- /dev/null +++ b/lost+found/GlobalWarmingTest.java-hhyQxl @@ -0,0 +1,206 @@ +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.*; + +import student.GlobalWarmingImpl; +import student.GlobalWarming; + +public class GlobalWarmingTest { + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + + @Test + @Grade(value = 15) + public void testShortestPathExam() { + List path = new GlobalWarmingImpl(getExamMatrix(), 3).shortestPath(new GlobalWarming.Point(1, 0), new GlobalWarming.Point(3, 1)); + assertTrue( path != null && path.size() == 4 && validPath(getExamMatrix(),3,point(1,0),point(3,1),path) ); + } + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value = 10) + public void testSimpleAll() { + assertTrue(simpleAll()); + } + public boolean simpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path1 = warming.shortestPath(point(1,1),point(1,1)); + + if (!validPath(matrix,0,point(1,1),point(1,1),path1)) { + System.out.println("1::error in shortestPath"); + return false; + } + + if (warming.shortestPath(point(9,9),point(9,9)) != null) { + if(!warming.shortestPath(point(9,9),point(9,9)).isEmpty()) { + System.out.println("2::error in shortestPath"); + return false; + } + } + + if (warming.shortestPath(point(0,9),point(9,9)) != null ) { + if(!warming.shortestPath(point(0,9),point(9,9)).isEmpty()) { + System.out.println("3::error in shortestPath"); + return false; + } + } + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + System.out.println("4::error in shortestPath, path not valid"); + return false; + } + + if (path2.size() != 8) { + System.out.println("error in shortestPath, not correct length"); + System.out.println(path2.size()); + return false; + } + return true; + } + + @Test + @Grade(value = 25) + public void testCorrectnessShortestPath() { + assertTrue(correctnessShortestPath()); + } + + private boolean correctnessShortestPath() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + for (int k = 0; k < 50; k++) { + int [][] matrix = getRandomMatrix(50,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 50; i++) { + for (int j = 0; j < 50-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + + List path = g1.shortestPath(point(i,j),point(i,j+2)); + + if (path.size() != 3 && !validPath(matrix,level,point(i,j),point(i,j+2),path)) { + return false; + } + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + return false; + } + + if (path2.size() != 8) { + return false; + } + return true; + } + + + public boolean validPath(int [][] matrix, int level, GlobalWarming.Point p1, GlobalWarming.Point p2, List path) { + for (GlobalWarming.Point p: path) { + if (matrix[p.x][p.y] <= level) return false; + } + for (int i = 0; i < path.size()-1; i++) { + if (!neighbors(path.get(i),path.get(i+1))) { + return false; + } + } + if (matrix[p1.x][p1.y] <= level && !path.isEmpty()) return false; + if (matrix[p2.x][p2.y] <= level && !path.isEmpty()) return false; + + return !path.isEmpty() && path.get(0).equals(p1) && path.get(path.size()-1).equals(p2); + } + + + public boolean neighbors(GlobalWarming.Point p1,GlobalWarming.Point p2) { + return Math.abs(p1.x-p2.x) + Math.abs(p1.y-p2.y) == 1; + } + + + @Test (timeout = 10) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(100,2000000); + + int max = 0; + // do some computation here + long t0 = System.currentTimeMillis(); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + long t1 = System.currentTimeMillis(); + System.out.println("time constructor:"+(t1-t0)); + } + + @Test (timeout = 250) + @Grade(value = 40) + public void timeComplexityShortestPath() { + final int [][] matrix = getRandomMatrix(70,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + long t0 = System.currentTimeMillis(); + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.shortestPath(point(i,j),point(n-1,n-1)); + } + } + long t1 = System.currentTimeMillis(); + System.out.println("time shortestPath:"+(t1-t0)); + + } + +} diff --git a/lost+found/GlobalWarmingTests.java-Yz8P9f b/lost+found/GlobalWarmingTests.java-Yz8P9f new file mode 100644 index 00000000..522e9241 --- /dev/null +++ b/lost+found/GlobalWarmingTests.java-Yz8P9f @@ -0,0 +1,279 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import junit.framework.AssertionFailedError; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Random; +import java.util.concurrent.*; + +import static org.junit.Assert.*; +public class GlobalWarmingTests { + + final int [] seeds = new int[]{10,87,83}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix10() { + int [][] tab = new int[][] { + {0,9,0,2,4,2,7,5,3,0,}, + {1,0,9,7,3,4,3,2,1,5,}, + {0,1,9,9,4,5,8,7,8,0,}, + {8,1,9,0,5,1,8,5,7,9,}, + {1,2,8,5,9,2,7,6,9,4,}, + {2,9,0,9,2,0,5,1,0,7,}, + {6,4,3,2,5,2,6,4,0,0,}, + {2,7,6,4,6,2,5,7,4,5,}, + {3,4,4,9,8,7,0,9,8,4,}, + {3,3,3,1,7,7,6,7,1,7,} + }; + return tab; + } + + + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value=10) + public void testOnSameIslandExam() { + GlobalWarming gw = new GlobalWarmingImpl(getExamMatrix(),3); + boolean ok1 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)) == false; + boolean ok2 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(1,4)) == true; + boolean ok3 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(2,3)) == true; + boolean ok4 = gw.onSameIsland(new GlobalWarming.Point(2,3),new GlobalWarming.Point(3,4)) == false; + assertTrue(ok1 && ok2 && ok3 && ok4); + } + + @Test + @Grade(value=10) + public void testNbIslandsExam() { + GlobalWarming g = new GlobalWarmingImpl(getExamMatrix(),3); + + boolean ok = g.nbIslands()==4 || g.nbIslands()==20; + + assertTrue("islands returned (should be 4):"+g.nbIslands(),ok); + } + + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + assertTrue("error in nbIslands"+ warming.nbIslands(),warming.nbIslands()==6 ||warming.nbIslands()==78); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0,0),point(0,0))); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue("error in onSameIsland",warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessOnSameIsland() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + + for (int k = 0; k < 100; k++) { + int [][] matrix = getRandomMatrix(100,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 100; i++) { + for (int j = 0; j < 100-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + assertTrue(g1.onSameIsland(point(i,j),point(i,j+2))); + + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + assertFalse(warming.onSameIsland(point(0,0),point(0,0))); + assertFalse(warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue(warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessNbIslands() { + + int level = 200000; + + + int[][] matrix = getExamMatrix10(); + + + GlobalWarming warming = new GlobalWarmingImpl(matrix, 15); + assertTrue(warming.nbIslands()==0 || warming.nbIslands()==100); + + warming = new GlobalWarmingImpl(matrix, -15); + assertTrue(warming.nbIslands()==1); + + matrix[5][0] = 30; + matrix[0][1] = 30; + matrix[0][8] = 30; + matrix[6][0] = 30; + matrix[9][5] = 30; + matrix[9][4] = 30; + + warming = new GlobalWarmingImpl(matrix, 25); + assertTrue(warming.nbIslands()==4 ||warming.nbIslands()==98); + + + + for (int iter = 0; iter < 100; iter++) { + + + matrix = new int[100][100]; + + boolean [] generated = new boolean[10]; + int nIslandExpected = 0; + int k = 0; + int above = 0; + int count = 0; + for (int i = 0; i < rand.nextInt(10); i++) { + count = 0; + k = rand.nextInt(8); + matrix[k*10][k*10] = 1; + matrix[k*10+1][k*10] = 1; + matrix[k*10][k*10+1] = 1; + matrix[k*10+1][k*10+1] = 1; + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10+1] = 1; + count++; + } + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10] = 1; + count++; + } + if (!generated[k]) { + generated[k] = true; + nIslandExpected += 1; + above+= 4+count; + } + } + + warming = new GlobalWarmingImpl(matrix, 0); + assertTrue(warming.nbIslands()==nIslandExpected || warming.nbIslands()==nIslandExpected+10000-above); + + } + + matrix = getSimpleMatrix(); + warming = new GlobalWarmingImpl(matrix,0); + assertTrue(warming.nbIslands()==6 ||warming.nbIslands()==78); + } + + + @Test(timeout=500) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(400,2000000); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + } + + + final int [][] matrix = getRandomMatrix(500,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + @Test(timeout = 5) + @Grade(value=15) + public void timeComplexityNbIslands() { + g.nbIslands(); + } + + + + @Test(timeout = 500) + @Grade(value=15) + public void timeComplexityOnSameIsland() { + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.onSameIsland(point(i,j),point(n-1,n-1)); + } + } + } + +} diff --git a/lost+found/Graph.java-8fe585 b/lost+found/Graph.java-8fe585 new file mode 100644 index 00000000..5ba4d0e6 --- /dev/null +++ b/lost+found/Graph.java-8fe585 @@ -0,0 +1,140 @@ +import java.util.LinkedList; +import java.util.NoSuchElementException; + +/** + * The {@code Graph} class represents an undirected graph of vertices + * named 0 through V - 1. + * It supports the following two primary operations: add an edge to the graph, + * iterate over all of the vertices adjacent to a vertex. It also provides + * methods for returning the number of vertices V and the number + * of edges E. Parallel edges and self-loops are permitted. + * By convention, a self-loop v-v appears in the + * adjacency list of v twice and contributes two to the degree + * of v. + *

+ * This implementation uses an adjacency-lists representation. + * All operations take constant time (in the worst case) except + * iterating over the vertices adjacent to a given vertex, which takes + * time proportional to the number of such vertices. + *

+ * For additional documentation, see Section 4.1 + * of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class Graph { + private static final String NEWLINE = System.getProperty("line.separator"); + + private final int V; + private int E; + private LinkedList[] adj; + + /** + * Initializes an empty graph with {@code V} vertices and 0 edges. + * param V the number of vertices + * + * @param V number of vertices + * @throws IllegalArgumentException if {@code V < 0} + */ + public Graph(int V) { + if (V < 0) throw new IllegalArgumentException("Number of vertices must be nonnegative"); + this.V = V; + this.E = 0; + adj = (LinkedList[]) new LinkedList[V]; + for (int v = 0; v < V; v++) { + adj[v] = new LinkedList(); + } + } + + + + + + /** + * Returns the number of vertices in this graph. + * + * @return the number of vertices in this graph + */ + public int V() { + return V; + } + + /** + * Returns the number of edges in this graph. + * + * @return the number of edges in this graph + */ + public int E() { + return E; + } + + // throw an IllegalArgumentException unless {@code 0 <= v < V} + private void validateVertex(int v) { + if (v < 0 || v >= V) + throw new IllegalArgumentException("vertex " + v + " is not between 0 and " + (V-1)); + } + + /** + * Adds the undirected edge v-w to this graph. + * + * @param v one vertex in the edge + * @param w the other vertex in the edge + * @throws IllegalArgumentException unless both {@code 0 <= v < V} and {@code 0 <= w < V} + */ + public void addEdge(int v, int w) { + validateVertex(v); + validateVertex(w); + E++; + adj[v].add(w); + adj[w].add(v); + } + + + /** + * Returns the vertices adjacent to vertex {@code v}. + * + * @param v the vertex + * @return the vertices adjacent to vertex {@code v}, as an iterable + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public Iterable adj(int v) { + validateVertex(v); + return adj[v]; + } + + /** + * Returns the degree of vertex {@code v}. + * + * @param v the vertex + * @return the degree of vertex {@code v} + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public int degree(int v) { + validateVertex(v); + return adj[v].size(); + } + + + /** + * Returns a string representation of this graph. + * + * @return the number of vertices V, followed by the number of edges E, + * followed by the V adjacency lists + */ + public String toString() { + StringBuilder s = new StringBuilder(); + s.append(V + " vertices, " + E + " edges " + NEWLINE); + for (int v = 0; v < V; v++) { + s.append(v + ": "); + for (int w : adj[v]) { + s.append(w + " "); + } + s.append(NEWLINE); + } + return s.toString(); + } + + + +} diff --git a/lost+found/Graph.java-INfe5z b/lost+found/Graph.java-INfe5z new file mode 100644 index 00000000..617fdaba --- /dev/null +++ b/lost+found/Graph.java-INfe5z @@ -0,0 +1,57 @@ +import java.util.ArrayList; +import java.util.List; + +public class Graph { + + private List[] edges; + + public Graph(int E) + { + this.edges = (ArrayList[]) new ArrayList[E]; + for (int i = 0;i < edges.length;i++) + { + edges[i] = new ArrayList<>(); + } + } + + /** + * @return the number of vertices + */ + public int V() { + return edges.length; + } + + /** + * @return the number of edges + */ + public int E() { + int count = 0; + for (List bag : edges) { + count += bag.size(); + } + + return count/2; + } + + /** + * Add edge v-w to this graph + */ + public void addEdge(int v, int w) { + edges[v].add(w); + edges[w].add(v); + } + + /** + * @return the vertices adjacent to v + */ + public Iterable adj(int v) { + return edges[v]; + } + + /** + * @return a string representation + */ + public String toString() { + return "Ne devrait pas être utilisé"; + } +} diff --git a/lost+found/Graph.java-Jm1Dhk b/lost+found/Graph.java-Jm1Dhk new file mode 100644 index 00000000..617fdaba --- /dev/null +++ b/lost+found/Graph.java-Jm1Dhk @@ -0,0 +1,57 @@ +import java.util.ArrayList; +import java.util.List; + +public class Graph { + + private List[] edges; + + public Graph(int E) + { + this.edges = (ArrayList[]) new ArrayList[E]; + for (int i = 0;i < edges.length;i++) + { + edges[i] = new ArrayList<>(); + } + } + + /** + * @return the number of vertices + */ + public int V() { + return edges.length; + } + + /** + * @return the number of edges + */ + public int E() { + int count = 0; + for (List bag : edges) { + count += bag.size(); + } + + return count/2; + } + + /** + * Add edge v-w to this graph + */ + public void addEdge(int v, int w) { + edges[v].add(w); + edges[w].add(v); + } + + /** + * @return the vertices adjacent to v + */ + public Iterable adj(int v) { + return edges[v]; + } + + /** + * @return a string representation + */ + public String toString() { + return "Ne devrait pas être utilisé"; + } +} diff --git a/lost+found/Graph.java-etx152 b/lost+found/Graph.java-etx152 new file mode 100644 index 00000000..03c00b77 --- /dev/null +++ b/lost+found/Graph.java-etx152 @@ -0,0 +1,143 @@ +/// +package templates; + +import java.util.LinkedList; +import java.util.NoSuchElementException; + +/** + * The {@code Graph} class represents an undirected graph of vertices + * named 0 through V - 1. + * It supports the following two primary operations: add an edge to the graph, + * iterate over all of the vertices adjacent to a vertex. It also provides + * methods for returning the number of vertices V and the number + * of edges E. Parallel edges and self-loops are permitted. + * By convention, a self-loop v-v appears in the + * adjacency list of v twice and contributes two to the degree + * of v. + *

+ * This implementation uses an adjacency-lists representation. + * All operations take constant time (in the worst case) except + * iterating over the vertices adjacent to a given vertex, which takes + * time proportional to the number of such vertices. + *

+ * For additional documentation, see Section 4.1 + * of Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne. + * + * @author Robert Sedgewick + * @author Kevin Wayne + */ +public class Graph { + private static final String NEWLINE = System.getProperty("line.separator"); + + private final int V; + private int E; + private LinkedList[] adj; + + /** + * Initializes an empty graph with {@code V} vertices and 0 edges. + * param V the number of vertices + * + * @param V number of vertices + * @throws IllegalArgumentException if {@code V < 0} + */ + public Graph(int V) { + if (V < 0) throw new IllegalArgumentException("Number of vertices must be nonnegative"); + this.V = V; + this.E = 0; + adj = (LinkedList[]) new LinkedList[V]; + for (int v = 0; v < V; v++) { + adj[v] = new LinkedList(); + } + } + + + + + + /** + * Returns the number of vertices in this graph. + * + * @return the number of vertices in this graph + */ + public int V() { + return V; + } + + /** + * Returns the number of edges in this graph. + * + * @return the number of edges in this graph + */ + public int E() { + return E; + } + + // throw an IllegalArgumentException unless {@code 0 <= v < V} + private void validateVertex(int v) { + if (v < 0 || v >= V) + throw new IllegalArgumentException("vertex " + v + " is not between 0 and " + (V-1)); + } + + /** + * Adds the undirected edge v-w to this graph. + * + * @param v one vertex in the edge + * @param w the other vertex in the edge + * @throws IllegalArgumentException unless both {@code 0 <= v < V} and {@code 0 <= w < V} + */ + public void addEdge(int v, int w) { + validateVertex(v); + validateVertex(w); + E++; + adj[v].add(w); + adj[w].add(v); + } + + + /** + * Returns the vertices adjacent to vertex {@code v}. + * + * @param v the vertex + * @return the vertices adjacent to vertex {@code v}, as an iterable + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public Iterable adj(int v) { + validateVertex(v); + return adj[v]; + } + + /** + * Returns the degree of vertex {@code v}. + * + * @param v the vertex + * @return the degree of vertex {@code v} + * @throws IllegalArgumentException unless {@code 0 <= v < V} + */ + public int degree(int v) { + validateVertex(v); + return adj[v].size(); + } + + + /** + * Returns a string representation of this graph. + * + * @return the number of vertices V, followed by the number of edges E, + * followed by the V adjacency lists + */ + public String toString() { + StringBuilder s = new StringBuilder(); + s.append(V + " vertices, " + E + " edges " + NEWLINE); + for (int v = 0; v < V; v++) { + s.append(v + ": "); + for (int w : adj[v]) { + s.append(w + " "); + } + s.append(NEWLINE); + } + return s.toString(); + } + + + +} diff --git a/lost+found/Graph.java-jdVBGn b/lost+found/Graph.java-jdVBGn new file mode 100644 index 00000000..2c1a87fb --- /dev/null +++ b/lost+found/Graph.java-jdVBGn @@ -0,0 +1,59 @@ +package templates; + +import java.util.ArrayList; +import java.util.List; + +public class Graph { + + private List[] edges; + + public Graph(int E) + { + this.edges = (ArrayList[]) new ArrayList[E]; + for (int i = 0;i < edges.length;i++) + { + edges[i] = new ArrayList<>(); + } + } + + /** + * @return the number of vertices + */ + public int V() { + return edges.length; + } + + /** + * @return the number of edges + */ + public int E() { + int count = 0; + for (List bag : edges) { + count += bag.size(); + } + + return count/2; + } + + /** + * Add edge v-w to this graph + */ + public void addEdge(int v, int w) { + edges[v].add(w); + edges[w].add(v); + } + + /** + * @return the vertices adjacent to v + */ + public Iterable adj(int v) { + return edges[v]; + } + + /** + * @return a string representation + */ + public String toString() { + return "Ne devrait pas être utilisé"; + } +} diff --git a/lost+found/Graph.java-kMfdPF b/lost+found/Graph.java-kMfdPF new file mode 100644 index 00000000..4ad8cc38 --- /dev/null +++ b/lost+found/Graph.java-kMfdPF @@ -0,0 +1,60 @@ +//package tests; +package templates; + +import java.util.ArrayList; +import java.util.List; + +public class Graph { + + private List[] edges; + + public Graph(int E) + { + this.edges = (ArrayList[]) new ArrayList[E]; + for (int i = 0;i < edges.length;i++) + { + edges[i] = new ArrayList<>(); + } + } + + /** + * @return the number of vertices + */ + public int V() { + return edges.length; + } + + /** + * @return the number of edges + */ + public int E() { + int count = 0; + for (List bag : edges) { + count += bag.size(); + } + + return count/2; + } + + /** + * Add edge v-w to this graph + */ + public void addEdge(int v, int w) { + edges[v].add(w); + edges[w].add(v); + } + + /** + * @return the vertices adjacent to v + */ + public Iterable adj(int v) { + return edges[v]; + } + + /** + * @return a string representation + */ + public String toString() { + return "Ne devrait pas être utilisé"; + } +} diff --git a/lost+found/Graupappe.xml-TUMpKy b/lost+found/Graupappe.xml-TUMpKy new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Gummi_44_schwarz.xml-NEztRD b/lost+found/Gummi_44_schwarz.xml-NEztRD new file mode 100644 index 00000000..3640ab42 --- /dev/null +++ b/lost+found/Gummi_44_schwarz.xml-NEztRD @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Gummi,schwarz + + 2.0 + + \ No newline at end of file diff --git a/lost+found/HEAD-e66Jw7 b/lost+found/HEAD-e66Jw7 new file mode 100644 index 00000000..6efe28ff --- /dev/null +++ b/lost+found/HEAD-e66Jw7 @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff --git a/lost+found/HEAD-tQ6V1v b/lost+found/HEAD-tQ6V1v new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/lost+found/HEAD-tQ6V1v @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/lost+found/HashMap.java-o9rs7L b/lost+found/HashMap.java-o9rs7L new file mode 100644 index 00000000..f8da3cbe --- /dev/null +++ b/lost+found/HashMap.java-o9rs7L @@ -0,0 +1,108 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +class HashMap implements MapInterface { + + private int capacity = 2000; + private int n = 0; + private List>[] table; + + @SuppressWarnings("unchecked") + public HashMap() { + table = (LinkedList>[]) new LinkedList[capacity]; + } + + public V get(String key) { + return get(key, hashCode(key)); + } + + public V get(String key, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] != null) { + List> list = table[hash]; + for (Entry el : list) + if (el.getKey().equals(key)) + return el.getValue(); + hash = (hash + 1) % capacity; + } + return null; + } + + public void put(String key, V value) { + put(key, value, hashCode(key)); + } + /*public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] == null) + table[hash] = new LinkedList>(); + table[hash].add(new SimpleEntry(key, value)); + n++; + if (n >= capacity/2) + rehash(); + }*/ + public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + Entry entry = new SimpleEntry(key, value); + if (table[hash] == null) { + table[hash] = new LinkedList>(); + table[hash].add(entry); + n++; + } + else { + boolean found = false; + for (int i = 0 ; !found && i < table[hash].size() ; i++) { + if (table[hash].get(i).getKey().equals(key)) { + table[hash].set(i, entry); + found = true; + // don't increment n + } + } + if (!found) { + table[hash].add(entry); + n++; + } + } + if (n >= capacity/2) + rehash(); + } + + public int size() { + return n; + } + + @SuppressWarnings("unchecked") + private void rehash() { + capacity *= 2; + List>[] old = table; + table = (LinkedList>[]) new LinkedList[capacity]; + for (int i = 0 ; i < old.length ; i++) { + List> entryList = old[i]; + if (entryList != null) + for (Entry entry : entryList) + put(entry.getKey(), entry.getValue(), hashCode(entry.getKey())); + } + } + + public int hashCode(String key) { + int hash = 0; + for (int i = 0 ; i < key.length(); i++) { + int c = (int) key.charAt(i); + hash += c * pow(256, key.length() - i - 1); + } + return hash; + } + + public int incrementalHashCode(String key, int lastHash, int lastChar) { + //return hashCode(key); // this times-out + return 256*(lastHash - pow(256, key.length()-1) * lastChar) + (int) key.charAt(key.length()-1); + } + + private static int pow(int a, int b) { + int result = 1; + for (int i = 0 ; i < b ; i++) + result *= a; + return result; + } +} diff --git a/lost+found/Heap.java-R2A69A b/lost+found/Heap.java-R2A69A new file mode 100644 index 00000000..aef18d41 --- /dev/null +++ b/lost+found/Heap.java-R2A69A @@ -0,0 +1,52 @@ +/** + * Un heap binaire, dont le contenu est place dans le tableau `content`. + * + * Le tableau `contenu` represente un arbre, suivant la methode vue au cours: + * Le noeud n°i de l'arbre a pour enfant les indices 2*i et 2*I+1. + * + * Notez bien: + * - Ce heap utilise le 1-indexing, c'est a dire que le premier index du tableau est 1. Ceci est cense faciliter vos + * calculs. La position 0 de `content` doit donc toujours rester vide. + * - Vous pouvez utiliser la fonction increaseSize() pour doubler la taille de `content`, si besoin. + * - /!\ important! Les tests fournits dans ce projet assument que vous utilisez l'algorithme vu au cours. Si vous + * n'utilisez pas l'algorithme vu au cours, les tests retourneront toujours faux. + * + * INGInious va lui verifier vos reponses en se basant sur les proprietes de base d'un heap, et donc n'est pas + * sensible a l'algorithme que vous choississez. + * + * Vous etes dont libre de choisir l'algorithme de votre choix. + * + * - La complexite attendue est O(log n) par insertion dans la heap. Vous recevrez la moitie des points si votre + * algorithme est correct (s'il produit un heap valide) et l'autre moitie des points si il respecte la complexite. + */ +public class Heap { + protected int[] content; + protected int size; + + public Heap(int initSize) { + size = 0; + content = new int[initSize]; + } + + /** + * Doubles the size of the inner storage array + */ + protected void increaseSize() { + int[] newContent = new int[content.length*2]; + System.arraycopy(content, 0, newContent, 0, content.length); + content = newContent; + } + + /** + * Returns the content of the inner array + */ + public int[] getContent() { + return content; + } + + public int getSize() { + return size; + } + + //TODO +} diff --git a/lost+found/Heap.java-V37Yg9 b/lost+found/Heap.java-V37Yg9 new file mode 100644 index 00000000..3d1772c0 --- /dev/null +++ b/lost+found/Heap.java-V37Yg9 @@ -0,0 +1,54 @@ +package templates; + +/** + * Un heap binaire, dont le contenu est place dans le tableau `content`. + * + * Le tableau `contenu` represente un arbre, suivant la methode vue au cours: + * Le noeud n°i de l'arbre a pour enfant les indices 2*i et 2*I+1. + * + * Notez bien: + * - Ce heap utilise le 1-indexing, c'est a dire que le premier index du tableau est 1. Ceci est cense faciliter vos + * calculs. La position 0 de `content` doit donc toujours rester vide. + * - Vous pouvez utiliser la fonction increaseSize() pour doubler la taille de `content`, si besoin. + * - /!\ important! Les tests fournits dans ce projet assument que vous utilisez l'algorithme vu au cours. Si vous + * n'utilisez pas l'algorithme vu au cours, les tests retourneront toujours faux. + * + * INGInious va lui verifier vos reponses en se basant sur les proprietes de base d'un heap, et donc n'est pas + * sensible a l'algorithme que vous choississez. + * + * Vous etes dont libre de choisir l'algorithme de votre choix. + * + * - La complexite attendue est O(log n) par insertion dans la heap. Vous recevrez la moitie des points si votre + * algorithme est correct (s'il produit un heap valide) et l'autre moitie des points si il respecte la complexite. + */ +public class Heap { + protected int[] content; + protected int size; + + public Heap(int initSize) { + size = 0; + content = new int[initSize]; + } + + /** + * Doubles the size of the inner storage array + */ + protected void increaseSize() { + int[] newContent = new int[content.length*2]; + System.arraycopy(content, 0, newContent, 0, content.length); + content = newContent; + } + + /** + * Returns the content of the inner array + */ + public int[] getContent() { + return content; + } + + public int getSize() { + return size; + } + +@ @second@@ +} diff --git a/lost+found/Helpers.java-DE887L b/lost+found/Helpers.java-DE887L new file mode 100644 index 00000000..a3b208cd --- /dev/null +++ b/lost+found/Helpers.java-DE887L @@ -0,0 +1,43 @@ +package src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Helpers { + public static String generateWord(int size,int seed) { + int leftLimit = 97; // letter 'a' + int rightLimit = 122; // letter 'z' + Random random = new Random(seed); + StringBuilder buffer = new StringBuilder(size); + for (int i = 0; i < size; i++) { + int randomLimitedInt = leftLimit + (int) + (random.nextFloat() * (rightLimit - leftLimit + 1)); + buffer.append((char) randomLimitedInt); + } + + return buffer.toString(); + } + + public static String shuffle(String input, int seed){ + Random r = new Random(seed); + + List characters = new ArrayList(); + for(char c:input.toCharArray()){ + characters.add(c); + } + StringBuilder output = new StringBuilder(input.length()); + while(characters.size()!=0){ + int randPicker = (int)(r.nextFloat()*characters.size()); + output.append(characters.remove(randPicker)); + } + + return output.toString(); + } + + public static String repeat(String s, int times) { + if (times <= 0) return ""; + else return s + repeat(s, times-1); + } + +} diff --git a/lost+found/Helpers.java-bxshKC b/lost+found/Helpers.java-bxshKC new file mode 100644 index 00000000..646cac61 --- /dev/null +++ b/lost+found/Helpers.java-bxshKC @@ -0,0 +1,30 @@ +package tests; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class Helpers { + public static String[] readfile(String filename, int size) { + + String res[] = new String[size]; + + try(BufferedReader br = new BufferedReader(new FileReader(filename))) { + String st; + int i=0; + while ((st = br.readLine()) != null && i characters = new ArrayList(); + for(char c:input.toCharArray()){ + characters.add(c); + } + StringBuilder output = new StringBuilder(input.length()); + while(characters.size()!=0){ + int randPicker = (int)(r.nextFloat()*characters.size()); + output.append(characters.remove(randPicker)); + } + + return output.toString(); + } + + public static String repeat(String s, int times) { + if (times <= 0) return ""; + else return s + repeat(s, times-1); + } + +} diff --git a/lost+found/Huffman.java-SmqvPF b/lost+found/Huffman.java-SmqvPF new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/Huffman.java-SmqvPF @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/Huffman.java-yVHJSC b/lost+found/Huffman.java-yVHJSC new file mode 100644 index 00000000..55f0a0f1 --- /dev/null +++ b/lost+found/Huffman.java-yVHJSC @@ -0,0 +1,3 @@ +package templates; + +@@TODO1@@ diff --git a/lost+found/HuffmanTest.java-iKTDZa b/lost+found/HuffmanTest.java-iKTDZa new file mode 100644 index 00000000..8a194dd3 --- /dev/null +++ b/lost+found/HuffmanTest.java-iKTDZa @@ -0,0 +1,137 @@ +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import java.util.*; + +import static org.junit.Assert.assertTrue; + + +public class HuffmanTest { + + private void collectLeafNodes(List nodes, Huffman.Node n) { + + Stack open = new Stack(); + open.add(n); + + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (curr.isLeaf()) nodes.add(curr); + else { + open.add(curr.right); + open.add(curr.left); + } + } + } + + private int[] getRandomInstance(int size, int seed) { + int[] input = new int[size]; + for (int i = 0; i < size; i++) { + input[i] = i + 1; + } + Random rnd = new Random(seed); + for (int i = 0; i < size; i++) { + int idx1 = rnd.nextInt(size); + int idx2 = rnd.nextInt(size); + int tmp = input[idx1]; + input[idx1] = input[idx2]; + input[idx2] = tmp; + } + return input; + } + + @Test + @Grade(value = 10) + public void noCharactersDeleted() { + int[] input = getRandomInstance(256, 60); + + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = new LinkedList<>(); + collectLeafNodes(leafNodes, root); + assertTrue("Le nombre de feuille devrait être égal au nombre de caractères: -10%", input.length == leafNodes.size()); + + } + + @Test + @Grade(value = 10) + public void leafNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 18); + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = buildLinkedListOfNodes(root); + for (Huffman.Node n : leafNodes) { + if (n.freq != input[n.ch]) + assertTrue("Les feuilles n'ont pas toujours les fréquences adéquates: -10%", false); + } + + } + + public LinkedList buildLinkedListOfNodes(Huffman.Node root) { + LinkedList leafNodes = new LinkedList<>(); + if (root.isLeaf()) { + leafNodes.add(root); + } else { + leafNodes.addAll(buildLinkedListOfNodes(root.left)); + leafNodes.addAll(buildLinkedListOfNodes(root.right)); + } + + return leafNodes; + } + + @Test + @Grade(value = 10) + public void internalNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 23); + Huffman.Node root = Huffman.buildTrie(input.length, input); + assertTrue("Les noeuds internes n'ont pas toujours des fréquences valides: -10%", checkSumChildrenFreqs(root, input)); + } + + private boolean checkSumChildrenFreqs(Huffman.Node n, int[] input) { + Stack open = new Stack(); + open.add(n); + boolean hasleaf = input.length > 0; + boolean flag = false; + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (!curr.isLeaf()) { + flag = true; + if (curr.freq == 0 || curr.freq != curr.left.freq + curr.right.freq) return false; + open.add(curr.right); + open.add(curr.left); + } + } + return flag == hasleaf; + } + + @Test + @Grade(value = 28) + public void minimalWeightedExternalPathLength() { + int[] input = getRandomInstance(257, 42); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + assertTrue("La taille pondérée du chemin interne n'est pas minimale, la topologie de votre arbre est incorrecte: -30%", weightedExternalPathLength(root1, 0) == 257226); + } + + @Test(timeout=300) + @Grade(value = 42) + public void complexityOk() { + int[] input = getRandomInstance(65536, 32); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + } + + + private int weightedExternalPathLength(Huffman.Node n, int depth) { + Stack> open = new Stack>(); + open.add(new AbstractMap.SimpleEntry(n, 0)); + int res = 0; + while (!open.isEmpty()) { + Map.Entry nodeDepth = open.pop(); + + Huffman.Node curr = nodeDepth.getKey(); + if (curr.isLeaf()) res += curr.freq * nodeDepth.getValue(); + else { + open.add(new AbstractMap.SimpleEntry(curr.right, nodeDepth.getValue() + 1)); + open.add(new AbstractMap.SimpleEntry(curr.left, nodeDepth.getValue() + 1)); + } + } + return res; + } +} diff --git a/lost+found/INGIniousHelper.java-Zhr0A3 b/lost+found/INGIniousHelper.java-Zhr0A3 new file mode 100644 index 00000000..99bfc6e1 --- /dev/null +++ b/lost+found/INGIniousHelper.java-Zhr0A3 @@ -0,0 +1,73 @@ +package src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; +import java.util.HashMap; + +public class INGIniousHelper { + public static boolean checkHeapiness(int[] content, int size, HashMap counts) { + HashMap doublecheck = new HashMap<>(); + if(!visit(content, 1, Integer.MIN_VALUE, size, doublecheck)) + return false; + if(counts.size() != doublecheck.size()) + return false; + for(int x: doublecheck.keySet()) { + Integer a = counts.get(x); + Integer b = doublecheck.get(x); + if (a == null || !a.equals(b)) + return false; + } + return true; + } + + private static boolean visit(int[] content, int pos, int min, int size, HashMap counts) { + if(pos > size) + return true; + if(content[pos] < min) + return false; + counts.put(content[pos], counts.getOrDefault(content[pos], 0)+1); + return visit(content, pos*2, content[pos], size, counts) && visit(content, pos*2+1, content[pos], size, counts); + } + + public static List readTestData() throws IOException { + List list = new ArrayList(); + + File file = new File("tests/easy.txt"); + BufferedReader br = new BufferedReader(new FileReader(file)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + int nTests = Integer.parseInt(st.nextToken()); + + for(int t = 0; t < nTests; t++) { + st = new StringTokenizer(br.readLine()); + int size = Integer.parseInt(st.nextToken()); + int steps = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + int[] content = new int[size]; + for(int i = 0; i < size; i++) + content[i] = Integer.parseInt(st.nextToken()); + + int[][] expected = new int[steps][]; + int[] expectedSteps = new int[steps]; + + for(int i = 0; i < steps; i++) { + st = new StringTokenizer(br.readLine()); + expectedSteps[i] = Integer.parseInt(st.nextToken()); + int length = Integer.parseInt(st.nextToken()); + expected[i] = new int[length]; + for(int j = 0; j < length; j++) + expected[i][j] = Integer.parseInt(st.nextToken()); + } + + list.add(new Object[] {content, expected, expectedSteps}); + } + + return list; + } +} diff --git a/lost+found/INGIniousHelper.java-j3qMQ0 b/lost+found/INGIniousHelper.java-j3qMQ0 new file mode 100644 index 00000000..c3e01bcc --- /dev/null +++ b/lost+found/INGIniousHelper.java-j3qMQ0 @@ -0,0 +1,73 @@ +package tests; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; +import java.util.HashMap; + +public class INGIniousHelper { + public static boolean checkHeapiness(int[] content, int size, HashMap counts) { + HashMap doublecheck = new HashMap<>(); + if(!visit(content, 1, Integer.MIN_VALUE, size, doublecheck)) + return false; + if(counts.size() != doublecheck.size()) + return false; + for(int x: doublecheck.keySet()) { + Integer a = counts.get(x); + Integer b = doublecheck.get(x); + if (a == null || !a.equals(b)) + return false; + } + return true; + } + + private static boolean visit(int[] content, int pos, int min, int size, HashMap counts) { + if(pos > size) + return true; + if(content[pos] < min) + return false; + counts.put(content[pos], counts.getOrDefault(content[pos], 0)+1); + return visit(content, pos*2, content[pos], size, counts) && visit(content, pos*2+1, content[pos], size, counts); + } + + public static List readTestData() throws IOException { + List list = new ArrayList(); + + File file = new File("tests/easy.txt"); + BufferedReader br = new BufferedReader(new FileReader(file)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + int nTests = Integer.parseInt(st.nextToken()); + + for(int t = 0; t < nTests; t++) { + st = new StringTokenizer(br.readLine()); + int size = Integer.parseInt(st.nextToken()); + int steps = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + int[] content = new int[size]; + for(int i = 0; i < size; i++) + content[i] = Integer.parseInt(st.nextToken()); + + int[][] expected = new int[steps][]; + int[] expectedSteps = new int[steps]; + + for(int i = 0; i < steps; i++) { + st = new StringTokenizer(br.readLine()); + expectedSteps[i] = Integer.parseInt(st.nextToken()); + int length = Integer.parseInt(st.nextToken()); + expected[i] = new int[length]; + for(int j = 0; j < length; j++) + expected[i][j] = Integer.parseInt(st.nextToken()); + } + + list.add(new Object[] {content, expected, expectedSteps}); + } + + return list; + } +} diff --git a/lost+found/IncorrectHashMapTests.java-WIoP8N b/lost+found/IncorrectHashMapTests.java-WIoP8N new file mode 100644 index 00000000..10b80f7e --- /dev/null +++ b/lost+found/IncorrectHashMapTests.java-WIoP8N @@ -0,0 +1,20 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/* Partial solution to the tests of the HashMap, gets 2/6 */ + +public class HashMapTests { + + @Test + public void firstTest() { + MapInterface map = new HashMap(); + map.put("a", 1); + assertEquals(map.get("a"), new Integer(1)); + } + + @Test + public void secondTest() { + // TODO... + } +} diff --git a/lost+found/IncorrectInterpreterTests.java-3KNPVW b/lost+found/IncorrectInterpreterTests.java-3KNPVW new file mode 100644 index 00000000..01e6270a --- /dev/null +++ b/lost+found/IncorrectInterpreterTests.java-3KNPVW @@ -0,0 +1,19 @@ +import org.junit.Assert; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * + * @author Frederic KACZYNSKI + */ +public class InterpreterTests { + + InterpreterInterface interpreter = new Interpreter(); + + @Test + public void firstTest() { + Assert.assertEquals(interpreter.interpret("2 2 add pstack"), "4"); + } +} \ No newline at end of file diff --git a/lost+found/IncorrectSearchTree.java-xw9dJ6 b/lost+found/IncorrectSearchTree.java-xw9dJ6 new file mode 100644 index 00000000..e2702593 --- /dev/null +++ b/lost+found/IncorrectSearchTree.java-xw9dJ6 @@ -0,0 +1,101 @@ +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * This implementation does nothing and shouldn't pass any tests + * @author Frederic KACZYNSKI + */ +public class SearchTree implements OrderedMap { + + public SearchTree() + { + + } + + public SearchTree(String filename) + { + + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public Set get(String key) { + return null; + } + + @Override + public Set put(String key, Set value) { + return null; + } + + @Override + public Set remove(String key) { + return null; + } + + @Override + public Set keySet() { + return null; + } + + @Override + public Collection> values() { + return null; + } + + @Override + public Set>> entrySet() { + return null; + } + + @Override + public Map.Entry> firstEntry() { + return null; + } + + @Override + public Map.Entry> lastEntry() { + return null; + } + + @Override + public Map.Entry> ceilingEntry(String key) { + return null; + } + + @Override + public Map.Entry> floorEntry(String key) { + return null; + } + + @Override + public Map.Entry> lowerEntry(String key) { + return null; + } + + @Override + public Map.Entry> higherEntry(String key) { + return null; + } + + @Override + public String[] getOrdered(String key) { + return new String[0]; + } + + @Override + public List>> entriesBetween(String lowest, String highest) { + return null; + } +} diff --git a/lost+found/IncorrectStackTests.java-mHs6GT b/lost+found/IncorrectStackTests.java-mHs6GT new file mode 100644 index 00000000..6596f929 --- /dev/null +++ b/lost+found/IncorrectStackTests.java-mHs6GT @@ -0,0 +1,15 @@ +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * Those tests fail even for the correct implementation + * @author Frederic KACZYNSKI + */ +public class StackTests { + @Test + public void firstTest() { + assertTrue(false); + } +} diff --git a/lost+found/IncrementalHash.java-P7MUwP b/lost+found/IncrementalHash.java-P7MUwP new file mode 100644 index 00000000..55f0a0f1 --- /dev/null +++ b/lost+found/IncrementalHash.java-P7MUwP @@ -0,0 +1,3 @@ +package templates; + +@@TODO1@@ diff --git a/lost+found/IncrementalHash.java-psQLXy b/lost+found/IncrementalHash.java-psQLXy new file mode 100644 index 00000000..ff02040a --- /dev/null +++ b/lost+found/IncrementalHash.java-psQLXy @@ -0,0 +1 @@ +@@TODO1@@ \ No newline at end of file diff --git a/lost+found/IncrementalHash.java-sDW1Xd b/lost+found/IncrementalHash.java-sDW1Xd new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/IncrementalHash.java-sDW1Xd @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/IncrementalHashTest.java-V2ruxJ b/lost+found/IncrementalHashTest.java-V2ruxJ new file mode 100644 index 00000000..46b3a2f3 --- /dev/null +++ b/lost+found/IncrementalHashTest.java-V2ruxJ @@ -0,0 +1,186 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import java.io.IOException; +import java.util.Random; + + +public class IncrementalHashTest { + + public static class IncrementalHashBaseLine { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHashBaseLine(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + int tmp = previousHash+Q-((t[from-1]*RM)%Q); + return ((tmp*R)%Q+t[from+M-1])%Q; + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + + } + + + public boolean correct(int size, int Q, int M, int maxChar) { + Random rnd = new Random(0); + char [] input = new char[size]; + for (int i = 0; i < input.length; i++) { + input[i] = (char) rnd.nextInt(maxChar); + } + IncrementalHash hasher = new IncrementalHash(Q,M); + IncrementalHashBaseLine hasherb = new IncrementalHashBaseLine(Q,M); + + int prevHash = hasherb.hash(input,0); + for (int i = 1; i < input.length-M; i++) { + int h1 = hasher.nextHash(input,prevHash,i); + int h2 = hasherb.nextHash(input,prevHash,i); + if (h1 != h2) return false; + prevHash = h1; + } + return true; + } + + @Test(timeout=500) + @Grade(value=80) + public void timeComplexityOK() { + /*boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + correct((int)10E5,100,3000,65536); + } + }.run(500); + assertTrue("the nextHash should execute in O(1):-100\n",timeOk);*/ + correct((int)10E5,100,3000,65536); + } + + @Test + @Grade(value=10) + public void hashCorrectOnWords5InputUpTo3() { + assertTrue("wrong nextHash value returned with input values <= 3: -40\n",correct(1000,100,5,3)); + } + + + @Test + @Grade(value=6) + public void hashCorrectOnWords5InputUpTo10() { + assertTrue("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n",correct(1000,100,5,10)); + } + + @Test + @Grade(value=4) + public void hashCorrectOnWords5InputUpTo65536() { + assertTrue("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n",correct(1000,100,5,65536)); + } + + +/* + + public void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", message}).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + + public void grade() { + int score = 0; + + boolean timeComplexityOk = timeComplexityOK(); + + if (!timeComplexityOk) { + feedback("the nextHash should execute in O(1):-100\n"); + } else { + if (hashCorrectOnWords5InputUpTo3()) + score += 50; + else { + feedback("wrong nextHash value returned with input values <= 3: -40\n"); + } + if (hashCorrectOnWords5InputUpTo10()) + score += 30; + else { + feedback("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n"); + } + if (hashCorrectOnWords5InputUpTo65536()) + score += 20; + else { + feedback("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n"); + } + } + System.out.println("%score:" + score); + try { + Runtime.getRuntime().exec("feedback-grade "+score); + + if (score == 100) { + Runtime.getRuntime().exec("feedback-result success"); + Runtime.getRuntime().exec("feedback-msg -ae -m \"congratulation\n\""); + } + else { + Runtime.getRuntime().exec("feedback-msg -ae -m \"not yet there ...\n\""); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + + public static void main(String[] args) { + new IncrementalHashTest().grade(); + System.exit(0); + }*/ +} diff --git a/lost+found/IncrementalHashTest.java-VGKnuB b/lost+found/IncrementalHashTest.java-VGKnuB new file mode 100644 index 00000000..50ad5237 --- /dev/null +++ b/lost+found/IncrementalHashTest.java-VGKnuB @@ -0,0 +1,170 @@ + + + + +import java.io.IOException; +import java.util.Random; + + +public class IncrementalHashTest { + + public static class IncrementalHashBaseLine { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHashBaseLine(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + int tmp = previousHash+Q-((t[from-1]*RM)%Q); + return ((tmp*R)%Q+t[from+M-1])%Q; + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + + } + + + public boolean correct(int size, int Q, int M, int maxChar) { + Random rnd = new Random(0); + char [] input = new char[size]; + for (int i = 0; i < input.length; i++) { + input[i] = (char) rnd.nextInt(maxChar); + } + IncrementalHash hasher = new IncrementalHash(Q,M); + IncrementalHashBaseLine hasherb = new IncrementalHashBaseLine(Q,M); + + int prevHash = hasherb.hash(input,0); + for (int i = 1; i < input.length-M; i++) { + int h1 = hasher.nextHash(input,prevHash,i); + int h2 = hasherb.nextHash(input,prevHash,i); + if (h1 != h2) return false; + prevHash = h1; + } + return true; + } + + + public boolean hashCorrectOnWords5InputUpTo3() { + return correct(1000,100,5,3); + } + + + public boolean hashCorrectOnWords5InputUpTo10() { + return correct(1000,100,5,10); + } + + public boolean hashCorrectOnWords5InputUpTo65536() { + return correct(1000,100,5,65536); + } + + public boolean timeComplexityOK() { + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + correct((int)10E5,100,3000,65536); + } + }.run(500); + return timeOk; + } + + public void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", message}).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + + public void grade() { + int score = 0; + + boolean timeComplexityOk = timeComplexityOK(); + + if (!timeComplexityOk) { + feedback("the nextHash should execute in O(1):-100\n"); + } else { + if (hashCorrectOnWords5InputUpTo3()) + score += 50; + else { + feedback("wrong nextHash value returned with input values <= 3: -40\n"); + } + if (hashCorrectOnWords5InputUpTo10()) + score += 30; + else { + feedback("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n"); + } + if (hashCorrectOnWords5InputUpTo65536()) + score += 20; + else { + feedback("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n"); + } + } + System.out.println("%score:" + score); + try { + Runtime.getRuntime().exec("feedback-grade "+score); + + if (score == 100) { + Runtime.getRuntime().exec("feedback-result success"); + Runtime.getRuntime().exec("feedback-msg -ae -m \"congratulation\n\""); + } + else { + Runtime.getRuntime().exec("feedback-msg -ae -m \"not yet there ...\n\""); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + + public static void main(String[] args) { + new IncrementalHashTest().grade(); + System.exit(0); + } +} + diff --git a/lost+found/InginiousTests.java-EKWstm b/lost+found/InginiousTests.java-EKWstm new file mode 100644 index 00000000..0091347a --- /dev/null +++ b/lost+found/InginiousTests.java-EKWstm @@ -0,0 +1,139 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import templates.*; + +public class InginiousTests { + @Test + @Grade(value=20) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(2)); + + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5, 5-0] with [0] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5, 0); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 3, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + assertEquals(message, 1, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSources() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5] with [1, 5] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1, 5)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 0, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSourcesDisconnected() + { + String message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 2] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 2)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 0, bfs.distTo(2)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(5)); + + message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 3] as sources"; + graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 3)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 0, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 2, bfs.distTo(5)); + } +} diff --git a/lost+found/InginiousTests.java-ELV18I b/lost+found/InginiousTests.java-ELV18I new file mode 100644 index 00000000..53d647dd --- /dev/null +++ b/lost+found/InginiousTests.java-ELV18I @@ -0,0 +1,141 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; +import templates.*; + +public class InginiousTests { + + @Test + @Grade(value=25) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(1)); + assertTrue(message, dfs.hasPathTo(2)); + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(2)); + assertFalse(message, dfs.hasPathTo(3)); + assertFalse(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDiconnectedBis(){ + String message = "Test [0-1, 1-2, 3-4,4-5,5-6,5-7,7-8, 9-10,10-11,11-12] with 8 as source"; + Graph graph = new Graph(13); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5,6); + graph.addEdge(5,7); + graph.addEdge(7,8); + graph.addEdge(9,10); + graph.addEdge(10,11); + graph.addEdge(11,12); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 8); + + assertFalse(message, dfs.hasPathTo(0)); + assertFalse(message, dfs.hasPathTo(1)); + assertFalse(message, dfs.hasPathTo(2)); + + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(message, dfs.hasPathTo(5)); + assertTrue(message, dfs.hasPathTo(6)); + assertTrue(message, dfs.hasPathTo(7)); + + assertFalse(message, dfs.hasPathTo(9)); + assertFalse(message, dfs.hasPathTo(10)); + assertFalse(message, dfs.hasPathTo(11)); + assertFalse(message, dfs.hasPathTo(12)); + } + + @Test + @Grade(value=25) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 0 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 0); + + assertTrue(message, dfs.hasPathTo(4)); + } + + /*@Test + @Grade(value=20) + public void testIterator() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 3 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 3); + int[] pathCorr = new int[] {4, 0, 1, 2, 3}; + + assertFalse(message, dfs.hasPathTo(5)); + assertFalse(dfs.pathTo(5) != null); + + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(dfs.pathTo(4) != null); + Iterable path = dfs.pathTo(4); + int k = 0; + for (int i : path) { + assertTrue(message,i == pathCorr[k++]); + } + + }*/ +} diff --git a/lost+found/InginiousTests.java-FQ9W8j b/lost+found/InginiousTests.java-FQ9W8j new file mode 100644 index 00000000..86887063 --- /dev/null +++ b/lost+found/InginiousTests.java-FQ9W8j @@ -0,0 +1,206 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.*; +import templates.*; + +public class InginiousTests { + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + + @Test + @Grade(value = 15) + public void testShortestPathExam() { + List path = new GlobalWarmingImpl(getExamMatrix(), 3).shortestPath(new GlobalWarming.Point(1, 0), new GlobalWarming.Point(3, 1)); + assertTrue( path != null && path.size() == 4 && validPath(getExamMatrix(),3,point(1,0),point(3,1),path) ); + } + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value = 10) + public void testSimpleAll() { + assertTrue(simpleAll()); + } + public boolean simpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path1 = warming.shortestPath(point(1,1),point(1,1)); + + if (!validPath(matrix,0,point(1,1),point(1,1),path1)) { + System.out.println("1::error in shortestPath"); + return false; + } + + if (warming.shortestPath(point(9,9),point(9,9)) != null) { + if(!warming.shortestPath(point(9,9),point(9,9)).isEmpty()) { + System.out.println("2::error in shortestPath"); + return false; + } + } + + if (warming.shortestPath(point(0,9),point(9,9)) != null ) { + if(!warming.shortestPath(point(0,9),point(9,9)).isEmpty()) { + System.out.println("3::error in shortestPath"); + return false; + } + } + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + System.out.println("4::error in shortestPath, path not valid"); + return false; + } + + if (path2.size() != 8) { + System.out.println("error in shortestPath, not correct length"); + System.out.println(path2.size()); + return false; + } + return true; + } + + @Test + @Grade(value = 25) + public void testCorrectnessShortestPath() { + assertTrue(correctnessShortestPath()); + } + + private boolean correctnessShortestPath() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + for (int k = 0; k < 50; k++) { + int [][] matrix = getRandomMatrix(50,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 50; i++) { + for (int j = 0; j < 50-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + + List path = g1.shortestPath(point(i,j),point(i,j+2)); + + if (path.size() != 3 && !validPath(matrix,level,point(i,j),point(i,j+2),path)) { + return false; + } + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + List path2 = warming.shortestPath(point(4,5),point(1,7)); + if (!validPath(matrix,0,point(4,5),point(1,7),path2)) { + return false; + } + + if (path2.size() != 8) { + return false; + } + return true; + } + + + public boolean validPath(int [][] matrix, int level, GlobalWarming.Point p1, GlobalWarming.Point p2, List path) { + for (GlobalWarming.Point p: path) { + if (matrix[p.x][p.y] <= level) return false; + } + for (int i = 0; i < path.size()-1; i++) { + if (!neighbors(path.get(i),path.get(i+1))) { + return false; + } + } + if (matrix[p1.x][p1.y] <= level && !path.isEmpty()) return false; + if (matrix[p2.x][p2.y] <= level && !path.isEmpty()) return false; + + return !path.isEmpty() && path.get(0).equals(p1) && path.get(path.size()-1).equals(p2); + } + + + public boolean neighbors(GlobalWarming.Point p1,GlobalWarming.Point p2) { + return Math.abs(p1.x-p2.x) + Math.abs(p1.y-p2.y) == 1; + } + + + @Test (timeout = 10) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(100,2000000); + + int max = 0; + // do some computation here + long t0 = System.currentTimeMillis(); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + long t1 = System.currentTimeMillis(); + System.out.println("time constructor:"+(t1-t0)); + } + + @Test (timeout = 250) + @Grade(value = 40) + public void timeComplexityShortestPath() { + final int [][] matrix = getRandomMatrix(70,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + long t0 = System.currentTimeMillis(); + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.shortestPath(point(i,j),point(n-1,n-1)); + } + } + long t1 = System.currentTimeMillis(); + System.out.println("time shortestPath:"+(t1-t0)); + + } + +} diff --git a/lost+found/InginiousTests.java-IZL5is b/lost+found/InginiousTests.java-IZL5is new file mode 100644 index 00000000..887ed03f --- /dev/null +++ b/lost+found/InginiousTests.java-IZL5is @@ -0,0 +1,126 @@ +package src; + +import com.github.guillaumederval.javagrading.CustomGradingResult; +import com.github.guillaumederval.javagrading.Grade; +import com.github.guillaumederval.javagrading.GradeFeedback; +import com.github.guillaumederval.javagrading.GradeFeedbacks; +import com.github.guillaumederval.javagrading.GradingRunner; +import com.github.guillaumederval.javagrading.TestStatus; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import templates.*; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.fail; +import java.util.EmptyStackException; + +public class InginiousTests { + + @Test + @Grade + public void testEmpty() + { + String message = "Test of empty;"; + MyStack stack = new MyStack(); + stack.push("test"); + stack.pop(); + assertTrue(message, stack.empty()); + } + + @Test + @Grade + public void testNotEmpty() + { + String message = "Test of empty;"; + MyStack stack = new MyStack(); + stack.push("test"); + assertFalse(message, stack.empty()); + } + + /* PUSH IS NOW VOID + @Test + public void testPush() + { + String message = "Test of push;"; + MyStack stack = new MyStack(); + assertEquals(message, "test", stack.push("test")); + } + + @Test + public void testDoublePush() + { + String message = "Test of push (twice);"; + MyStack stack = new MyStack(); + assertEquals(message, "test", stack.push("test")); + assertEquals(message, "testBis", stack.push("testBis")); + } + */ + + @Test + @Grade + public void testPeek() + { + String message = "Test of peek;"; + MyStack stack = new MyStack(); + stack.push("elem"); + assertEquals(message, "elem", stack.peek()); + assertFalse(message, stack.empty()); + } + + @Test + @Grade + public void testMultiplePush() + { + String message = "Test of push (multiple);"; + MyStack stack = new MyStack(); + + for (int i = 0;i <= 100;i++) { + //assertEquals(message, i, stack.push(i)); + stack.push(i); + } + + for (int i = 100;i >= 0;i--) { + assertEquals(message, i, stack.pop()); + } + + assertTrue(message, stack.empty()); + } + + @Test + @Grade + public void testPopException() + { + String message = "Test of pop when empty;"; + MyStack stack = new MyStack(); + + try { + stack.pop(); + fail(message); + } catch (EmptyStackException e) { + // Ok + } + } + + @Test + @Grade + public void testPeekException() + { + String message = "Test of peek when empty;"; + MyStack stack = new MyStack(); + + try { + stack.peek(); + fail(message); + } catch (EmptyStackException e) { + // Ok + } + } +} diff --git a/lost+found/InginiousTests.java-OwScVW b/lost+found/InginiousTests.java-OwScVW new file mode 100644 index 00000000..a13b6732 --- /dev/null +++ b/lost+found/InginiousTests.java-OwScVW @@ -0,0 +1,272 @@ +package src; + +/*to be added for grading and test*/ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import templates.*; + +import static org.junit.Assert.*; + +/*normal import*/ +import java.io.IOException; +import java.util.List; +import java.util.List; +import java.util.Random; +import java.util.concurrent.*; + + +/** + * Created by johnaoga on 22/10/2018. + */ +//@RunWith(Parameterized.class) //For grading +public class InginiousTests { + + + final int [] seeds = new int[]{0,7,13}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + ///tests Methods Correctness + @Test + @Grade(value=10) + public void testSafePointExam() { + String message = "safe points returned (should be 14):"+new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2); + assertEquals(message, new GlobalWarmingImpl(getExamMatrix()).nbSafePoints(2), 14); + } + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix); + + if (warming.nbSafePoints(-1) != 100) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(0) != 24) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + + if (warming.nbSafePoints(1) != 0) { + String message = "error in nbSafePoints"; + assertTrue(message,false); + } + } + + @Test + @Grade(value=30) + public void testCorrectnessNbSafePoints() { + int[][] matrix = getExamMatrix(); + GlobalWarming g1 = new GlobalWarmingImpl(matrix); + int[] true_value = {25, 18, 14, 9, 3}; + for (int l = 0; l < 5; l += 1) { + String msg = "at " +l+" number should be " + g1.nbSafePoints(l) + " but it's " + true_value[l]; + assertEquals(msg, true_value[l], g1.nbSafePoints(l)); + } + matrix = getExamMatrix2(); + GlobalWarming g2 = new GlobalWarmingImpl(matrix); + int[] true_value2 = {98, 97, 97, 97, 95, 95, 94, 94, 94, 93, 93, 92, 90, 90, 88, 87, 87, 87, 87, 87, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 84, 83, 82, 82, 81, 81, 81, 81, 80, 80, 78, 78, 78, 78, 78, 78, 77, 77, 76, 76, + 76, 76, 75, 74, 74, 74, 72, 71, 69, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 66, 66, 65, 65, 65, 65, 64, + 63, 60, 60, 60, 58, 57, 57, 57, 57, 56, 56, 56, 53, 53, 53, 52, 52, 51, 51, 49, 49, 46, 45, 43, 43, 42, + 42, 40, 40, 39, 38, 37, 37, 35, 35, 35, 34, 32, 32, 32, 32, 32, 32, 29, 29, 29, 28, 27, 24, 23, 21, 19, + 19, 19, 18, 17, 16, 16, 15, 14, 12, 10, 10, 9, 9, 9, 8, 7, 7, 5, 2, 2, 1, 1, 0}; + for (int l = 0; l < 150; l += 1) { + String msg = "at " +l+" number should be " + g2.nbSafePoints(l) + " but it's " + true_value2[l]; + assertEquals(msg, true_value2[l], g2.nbSafePoints(l)); + } + + matrix = getExamMatrix3(); + GlobalWarming g3 = new GlobalWarmingImpl(matrix); + int[] true_value3 = {100, 99, 97, 96, 96, 95, 95, 95, 95, 95, 94, 94, 92, 92, 92, 92, 91, 91, 89, 87, 86, 85, + 84, 82, 82, 81, 80, 79, 79, 79, 78, 78, 78, 78, 77, 77, 77, 77, 76, 76, 76, 74, 73, 71, 70, 70, 70, 67, + 67, 67, 67, 66, 66, 64, 64, 63, 63, 61, 59, 59, 58, 58, 57, 57, 57, 56, 56, 55, 54, 53, 52, 52, 51, 50, + 49, 47, 47, 45, 45, 44, 43, 43, 42, 42, 42, 41, 41, 41, 39, 39, 39, 38, 38, 37, 37, 34, 33, 32, 32, 32, + 32, 31, 30, 30, 29, 27, 27, 26, 24, 24, 23, 22, 20, 20, 19, 19, 17, 15, 15, 15, 15, 15, 15, 13, 12, 12, + 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 9, 5, 4, 3, 3, 2, 2, 2, 2, 2, 2, 2, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g3.nbSafePoints(l) + " but it's " + true_value3[l]; + assertEquals(msg, true_value3[l], g3.nbSafePoints(l)); + } + + matrix = getExamMatrix4(); + GlobalWarming g4 = new GlobalWarmingImpl(matrix); + int[] true_value4 = {99, 99, 98, 98, 98, 97, 97, 96, 94, 93, 92, 91, 91, 89, 89, 88, 87, 87, 87, 87, 87, 86, 86, + 85, 85, 85, 85, 85, 82, 81, 81, 80, 80, 80, 77, 76, 75, 75, 75, 74, 73, 70, 70, 69, 69, 68, 68, 68, 67, + 67, 67, 66, 66, 64, 64, 64, 64, 64, 64, 64, 64, 64, 61, 61, 61, 60, 59, 56, 56, 56, 56, 54, 53, 52, 52, + 51, 51, 50, 48, 47, 45, 43, 42, 41, 40, 40, 39, 39, 39, 39, 38, 35, 35, 35, 34, 33, 33, 32, 32, 31, 31, + 30, 29, 28, 27, 27, 26, 25, 24, 24, 23, 23, 23, 21, 21, 19, 19, 18, 18, 17, 17, 16, 16, 16, 16, 13, 13, + 12, 11, 11, 10, 10, 10, 10, 9, 9, 7, 7, 6, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g4.nbSafePoints(l) + " but it's " + true_value4[l]; + assertEquals(msg, true_value4[l], g4.nbSafePoints(l)); + } + + matrix = getExamMatrix5(); + GlobalWarming g5 = new GlobalWarmingImpl(matrix); + int[] true_value5 = {100, 100, 98, 98, 98, 98, 98, 98, 98, 97, 97, 96, 95, 95, 94, 94, 92, 92, 92, 92, 92, 92, + 91, 90, 88, 87, 86, 85, 84, 84, 84, 84, 82, 82, 80, 78, 77, 77, 76, 74, 74, 74, 72, 71, 68, 67, 65, 65, + 64, 64, 62, 62, 61, 61, 60, 59, 59, 59, 58, 58, 58, 58, 58, 58, 57, 57, 56, 55, 55, 52, 51, 51, 50, 48, + 48, 48, 47, 46, 45, 45, 45, 45, 45, 45, 45, 43, 42, 42, 42, 42, 41, 41, 41, 37, 36, 35, 35, 35, 33, 33, + 31, 30, 29, 28, 28, 26, 26, 24, 24, 24, 22, 22, 20, 19, 19, 18, 18, 17, 17, 16, 15, 14, 13, 13, 11, 11, + 9, 9, 9, 8, 7, 7, 6, 6, 6, 6, 6, 5, 3, 3, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g5.nbSafePoints(l) + " but it's " + true_value5[l]; + assertEquals(msg, true_value5[l], g5.nbSafePoints(l)); + } + + matrix = getExamMatrix6(); + GlobalWarming g6 = new GlobalWarmingImpl(matrix); + int[] true_value6 = {100, 99, 99, 98, 97, 96, 95, 95, 94, 93, 93, 92, 90, 90, 89, 89, 89, 89, 87, 87, 86, 84, + 84, 84, 83, 82, 82, 80, 79, 77, 75, 75, 75, 75, 75, 75, 72, 72, 72, 72, 70, 69, 69, 69, 69, 69, 69, 69, + 67, 66, 65, 65, 65, 65, 64, 64, 63, 61, 61, 61, 59, 59, 58, 57, 57, 56, 56, 55, 54, 54, 53, 52, 52, 51, + 50, 50, 47, 47, 47, 46, 46, 46, 46, 46, 44, 43, 42, 42, 41, 41, 41, 41, 41, 39, 39, 39, 38, 37, 37, 36, + 36, 35, 34, 33, 33, 33, 32, 32, 32, 32, 32, 29, 25, 25, 25, 23, 22, 20, 19, 18, 16, 16, 15, 14, 14, 14, + 13, 12, 12, 12, 12, 12, 11, 11, 11, 11, 9, 8, 6, 6, 6, 5, 5, 4, 4, 3, 3, 3, 1, 0}; + for(int l = 0; l < 150; l += 1){ + String msg = "at " +l+" number should be " + g6.nbSafePoints(l) + " but it's " + true_value6[l]; + assertEquals(msg, true_value6[l], g6.nbSafePoints(l)); + } + } + + + ///extra methods + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix2() { + int [][] tab = new int[][] {{136, 14, 135, 94, 130, 4, 118, 149, 0, 84}, + {0, 12, 108, 61, 145, 112, 111, 138, 57, 129}, + {142, 74, 33, 1, 68, 104, 39, 100, 126, 11}, + {123, 123, 79, 141, 135, 92, 118, 6, 96, 134}, + {125, 80, 123, 147, 133, 145, 112, 39, 76, 102}, + {12, 45, 144, 20, 94, 52, 108, 15, 126, 57}, + {124, 75, 96, 79, 122, 105, 20, 55, 29, 47}, + {4, 102, 87, 70, 14, 96, 30, 121, 31, 98}, + {76, 144, 87, 136, 97, 56, 58, 51, 125, 98}, + {106, 118, 37, 87, 76, 131, 90, 9, 145, 55}}; + return tab; + } + + public int [][] getExamMatrix3() { + int [][] tab = new int[][] {{60, 148, 79, 47, 65, 53, 41, 111, 69, 104}, + {77, 77, 23, 112, 95, 44, 34, 75, 41, 20}, + {43, 138, 74, 47, 2, 10, 3, 82, 42, 23}, + {95, 95, 137, 137, 2, 62, 75, 53, 88, 135}, + {110, 25, 5, 80, 148, 141, 124, 136, 112, 12}, + {19, 27, 116, 96, 57, 16, 58, 137, 93, 97}, + {137, 88, 55, 108, 108, 117, 1, 68, 58, 18}, + {38, 22, 107, 101, 26, 30, 47, 12, 85, 70}, + {67, 123, 117, 19, 105, 102, 139, 43, 51, 91}, + {123, 130, 18, 114, 116, 73, 57, 72, 105, 21}}; + return tab; + } + + public int [][] getExamMatrix4() { + int [][] tab = new int[][] {{86, 15, 119, 53, 117, 67, 81, 147, 138, 13}, + {130, 125, 148, 121, 97, 7, 36, 91, 90, 51}, + {21, 134, 80, 115, 136, 104, 34, 62, 142, 0}, + {78, 53, 99, 95, 91, 10, 125, 62, 94, 9}, + {67, 11, 71, 23, 127, 28, 66, 71, 35, 41}, + {136, 43, 113, 107, 8, 78, 16, 8, 140, 75}, + {5, 45, 108, 29, 65, 125, 83, 40, 41, 106}, + {48, 82, 128, 141, 67, 79, 39, 91, 102, 31}, + {77, 81, 28, 101, 34, 113, 139, 62, 110, 73}, + {72, 115, 13, 41, 103, 2, 80, 34, 84, 28}}; + return tab; + } + + public int [][] getExamMatrix5() { + int [][] tab = new int[][] {{115, 32, 69, 98, 138, 90, 110, 16, 23, 112}, + {54, 44, 12, 78, 39, 122, 9, 124, 25, 140}, + {43, 110, 67, 100, 32, 72, 70, 93, 64, 2}, + {50, 76, 102, 45, 105, 113, 93, 48, 77, 120}, + {46, 2, 35, 26, 69, 93, 22, 107, 50, 35}, + {94, 66, 44, 98, 119, 38, 28, 85, 46, 126}, + {147, 24, 124, 39, 93, 103, 73, 42, 36, 24}, + {55, 44, 95, 146, 121, 107, 34, 137, 27, 34}, + {129, 132, 100, 58, 105, 52, 11, 130, 86, 138}, + {69, 101, 126, 42, 85, 14, 117, 16, 73, 112}}; + return tab; + } + + public int [][] getExamMatrix6() { + int [][] tab = new int[][] {{115, 12, 8, 41, 101, 136, 12, 103, 3, 18}, + {120, 88, 149, 18, 11, 60, 29, 57, 36, 65}, + {67, 25, 145, 136, 86, 74, 21, 85, 60, 1}, + {40, 24, 27, 20, 63, 27, 117, 76, 102, 84}, + {118, 79, 73, 68, 71, 141, 30, 36, 54, 143}, + {122, 106, 48, 117, 57, 84, 49, 112, 62, 127}, + {93, 138, 112, 9, 70, 76, 30, 93, 4, 119}, + {48, 97, 132, 126, 148, 99, 56, 76, 14, 116}, + {120, 123, 96, 28, 21, 5, 111, 112, 6, 148}, + {111, 115, 36, 112, 29, 137, 138, 111, 40, 50}}; + return tab; + } + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + + ///Complexities + @Test(timeout=300) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(1000,2000000); + //long t0 = System.currentTimeMillis(); + final GlobalWarming g = new GlobalWarmingImpl(matrix); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + final GlobalWarming gwi = new GlobalWarmingImpl(getRandomMatrix(1000,2000000)); + + @Test(timeout=50) + @Grade(value=30) + public void timeComplexityNbSafePoints() { + //long t0 = System.currentTimeMillis(); + int max = 0; + for (int i = 0; i < 1000; i++) { + gwi.nbSafePoints(i*1000); + } + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor==:"+(t1-t0)); + } + +} diff --git a/lost+found/InginiousTests.java-PNL8mz b/lost+found/InginiousTests.java-PNL8mz new file mode 100644 index 00000000..dac1dbc6 --- /dev/null +++ b/lost+found/InginiousTests.java-PNL8mz @@ -0,0 +1,189 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; +import templates.*; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import java.io.IOException; +import java.util.Random; + + +public class InginiousTests { + + public static class IncrementalHashBaseLine { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHashBaseLine(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + int tmp = previousHash+Q-((t[from-1]*RM)%Q); + return ((tmp*R)%Q+t[from+M-1])%Q; + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-1)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + + } + + + public boolean correct(int size, int Q, int M, int maxChar) { + Random rnd = new Random(0); + char [] input = new char[size]; + for (int i = 0; i < input.length; i++) { + input[i] = (char) rnd.nextInt(maxChar); + } + IncrementalHash hasher = new IncrementalHash(Q,M); + IncrementalHashBaseLine hasherb = new IncrementalHashBaseLine(Q,M); + + int prevHash = hasherb.hash(input,0); + for (int i = 1; i < input.length-M; i++) { + int h1 = hasher.nextHash(input,prevHash,i); + int h2 = hasherb.nextHash(input,prevHash,i); + if (h1 != h2) return false; + prevHash = h1; + } + return true; + } + + @Test(timeout=500) + @Grade(value=80) + public void timeComplexityOK() { + /*boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + correct((int)10E5,100,3000,65536); + } + }.run(500); + assertTrue("the nextHash should execute in O(1):-100\n",timeOk);*/ + correct((int)10E5,100,3000,65536); + } + + @Test + @Grade(value=10) + public void hashCorrectOnWords5InputUpTo3() { + assertTrue("wrong nextHash value returned with input values <= 3: -40\n",correct(1000,100,5,3)); + } + + + @Test + @Grade(value=6) + public void hashCorrectOnWords5InputUpTo10() { + assertTrue("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n",correct(1000,100,5,10)); + } + + @Test + @Grade(value=4) + public void hashCorrectOnWords5InputUpTo65536() { + assertTrue("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n",correct(1000,100,5,65536)); + } + + +/* + + public void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", message}).waitFor(); + } + catch (IOException e) {e.printStackTrace(); } + catch (InterruptedException e) {e.printStackTrace(); } + } + + + public void grade() { + int score = 0; + + boolean timeComplexityOk = timeComplexityOK(); + + if (!timeComplexityOk) { + feedback("the nextHash should execute in O(1):-100\n"); + } else { + if (hashCorrectOnWords5InputUpTo3()) + score += 50; + else { + feedback("wrong nextHash value returned with input values <= 3: -40\n"); + } + if (hashCorrectOnWords5InputUpTo10()) + score += 30; + else { + feedback("wrong nextHash value returned with input values <= 10, be careful with int overflow: -20\n"); + } + if (hashCorrectOnWords5InputUpTo65536()) + score += 20; + else { + feedback("wrong nextHash value returned with input values <= 65536: be careful with int overflow: -20\n"); + } + } + System.out.println("%score:" + score); + try { + Runtime.getRuntime().exec("feedback-grade "+score); + + if (score == 100) { + Runtime.getRuntime().exec("feedback-result success"); + Runtime.getRuntime().exec("feedback-msg -ae -m \"congratulation\n\""); + } + else { + Runtime.getRuntime().exec("feedback-msg -ae -m \"not yet there ...\n\""); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + + public static void main(String[] args) { + new IncrementalHashTest().grade(); + System.exit(0); + }*/ +} diff --git a/lost+found/InginiousTests.java-WBPjKm b/lost+found/InginiousTests.java-WBPjKm new file mode 100644 index 00000000..00e29ff0 --- /dev/null +++ b/lost+found/InginiousTests.java-WBPjKm @@ -0,0 +1,139 @@ +package src; +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import java.util.*; + +import static org.junit.Assert.assertTrue; +import templates.*; + + +public class InginiousTests { + + private void collectLeafNodes(List nodes, Huffman.Node n) { + + Stack open = new Stack(); + open.add(n); + + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (curr.isLeaf()) nodes.add(curr); + else { + open.add(curr.right); + open.add(curr.left); + } + } + } + + private int[] getRandomInstance(int size, int seed) { + int[] input = new int[size]; + for (int i = 0; i < size; i++) { + input[i] = i + 1; + } + Random rnd = new Random(seed); + for (int i = 0; i < size; i++) { + int idx1 = rnd.nextInt(size); + int idx2 = rnd.nextInt(size); + int tmp = input[idx1]; + input[idx1] = input[idx2]; + input[idx2] = tmp; + } + return input; + } + + @Test + @Grade(value = 10) + public void noCharactersDeleted() { + int[] input = getRandomInstance(256, 60); + + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = new LinkedList<>(); + collectLeafNodes(leafNodes, root); + assertTrue("Le nombre de feuille devrait être égal au nombre de caractères: -10%", input.length == leafNodes.size()); + + } + + @Test + @Grade(value = 10) + public void leafNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 18); + Huffman.Node root = Huffman.buildTrie(input.length, input); + LinkedList leafNodes = buildLinkedListOfNodes(root); + for (Huffman.Node n : leafNodes) { + if (n.freq != input[n.ch]) + assertTrue("Les feuilles n'ont pas toujours les fréquences adéquates: -10%", false); + } + + } + + public LinkedList buildLinkedListOfNodes(Huffman.Node root) { + LinkedList leafNodes = new LinkedList<>(); + if (root.isLeaf()) { + leafNodes.add(root); + } else { + leafNodes.addAll(buildLinkedListOfNodes(root.left)); + leafNodes.addAll(buildLinkedListOfNodes(root.right)); + } + + return leafNodes; + } + + @Test + @Grade(value = 10) + public void internalNodesHaveTheCorrectFrequencies() { + int[] input = getRandomInstance(256, 23); + Huffman.Node root = Huffman.buildTrie(input.length, input); + assertTrue("Les noeuds internes n'ont pas toujours des fréquences valides: -10%", checkSumChildrenFreqs(root, input)); + } + + private boolean checkSumChildrenFreqs(Huffman.Node n, int[] input) { + Stack open = new Stack(); + open.add(n); + boolean hasleaf = input.length > 0; + boolean flag = false; + while (!open.isEmpty()) { + Huffman.Node curr = open.pop(); + if (!curr.isLeaf()) { + flag = true; + if (curr.freq == 0 || curr.freq != curr.left.freq + curr.right.freq) return false; + open.add(curr.right); + open.add(curr.left); + } + } + return flag == hasleaf; + } + + @Test + @Grade(value = 28) + public void minimalWeightedExternalPathLength() { + int[] input = getRandomInstance(257, 42); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + assertTrue("La taille pondérée du chemin interne n'est pas minimale, la topologie de votre arbre est incorrecte: -30%", weightedExternalPathLength(root1, 0) == 257226); + } + + @Test(timeout=300) + @Grade(value = 42) + public void complexityOk() { + int[] input = getRandomInstance(65536, 32); + Huffman.Node root1 = Huffman.buildTrie(input.length, input); + } + + + private int weightedExternalPathLength(Huffman.Node n, int depth) { + Stack> open = new Stack>(); + open.add(new AbstractMap.SimpleEntry(n, 0)); + int res = 0; + while (!open.isEmpty()) { + Map.Entry nodeDepth = open.pop(); + + Huffman.Node curr = nodeDepth.getKey(); + if (curr.isLeaf()) res += curr.freq * nodeDepth.getValue(); + else { + open.add(new AbstractMap.SimpleEntry(curr.right, nodeDepth.getValue() + 1)); + open.add(new AbstractMap.SimpleEntry(curr.left, nodeDepth.getValue() + 1)); + } + } + return res; + } +} diff --git a/lost+found/InginiousTests.java-XWlexR b/lost+found/InginiousTests.java-XWlexR new file mode 100644 index 00000000..92853e02 --- /dev/null +++ b/lost+found/InginiousTests.java-XWlexR @@ -0,0 +1,197 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import templates.*; + + +public class InginiousTests { + + ///////// Base + @Test + @Grade(value=20) + public void testCeilOk() { + java.util.TreeSet correct = new java.util.TreeSet<>(); + int values[] = new int[]{12,8,18,3,11,14,20,9,15}; + int in[] = new int[]{11,14,9,4,16,10,19,21,30,40}; + + Node root = new Node(values[0]); + for (int i = 1; i < values.length; i++) { + root.add(values[i]); + correct.add(values[i]); + } + + for (int i : in ) { + assertEquals(Ceil.ceil(root,i), correct.ceiling(i)); + } + } + + /////////// Extreme + /** + * Generates a random array of Integers, of size n + */ + public static Integer[] randomArray(int n) { + java.util.Random rand = new java.util.Random(); + Integer [] array = new Integer[n]; + Arrays.setAll(array, i -> rand.nextInt(1000000)); + return array; + } + + /** + * Verifies that values.ceil(where) == ceilFound + * @param values + * @param ceilFound + * @param where + */ + public static boolean verify(Integer[] values, Integer ceilFound, int where) { + // Let a real balanced tree for the Java STD lib do the work for us: + TreeSet set = new TreeSet(); + Collections.addAll(set, values); + Integer ceil2 = set.ceiling(where); + + if(ceilFound != null && ceil2 != null) + return ceilFound.equals(ceil2); + else + return ceilFound == ceil2; + } + + @Test + @Grade(value=30) + public void testExtreme() { + for (int i = 100; i < 1000; i += 100) { + Integer[] v = randomArray(i+1); + Node root = new Node(v[0]); + for(int j = 1; j < v.length; j++) + root.add(v[j]); + for(int j = -200; j < 1000001; j += 1000) { + Integer ceil = Ceil.ceil(root, j); + assertTrue("correct ceiling value computed",verify(v,ceil,j)); + } + } + } + + ////////// complexity + static private class InstanceConfig { + int toRetrieve = 0; + boolean wrongDirection = false; + HashSet wrongTurnsCalled = new HashSet<>(); + + public void reset(int toRetrieve) { + this.toRetrieve = toRetrieve; + wrongDirection = false; + wrongTurnsCalled = new HashSet<>(); + } + } + + static private class BaseNode extends Node { + private int value; + private InstanceConfig info; + private BaseNode left; + private BaseNode right; + + BaseNode(int v, InstanceConfig tor) { + value = v; + left = null; + right = null; + info = tor; + } + + @Override + public int getValue() { + if(info.wrongTurnsCalled.contains(this)) + info.wrongDirection = true; + return value; + } + + @Override + public Node getLeft() { + if(value <= info.toRetrieve) + info.wrongTurnsCalled.add(left); + return left; + } + + @Override + public Node getRight() { + if(value >= info.toRetrieve) + info.wrongTurnsCalled.add(right); + return right; + } + + public void add(int v) { + if(v < value && left == null) left = new BaseNode(v, info); + else if(v < value) left.add(v); + else if(v > value && right == null) right = new BaseNode(v, info); + else if(v > value) right.add(v); + } + } + + @Test + @Grade(value=50) + public void testComplexity() { + int[][] tests = new int[][]{ + new int[] {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}, + new int[] {1000, 900, 800, 700, 600, 500, 400, 300, 200, 100}, + new int[] {500, 300, 800, 100, 400, 600, 900, 200, 700}, + new int[] {231,635,69,644,422,855,161,275,10,685,544,34,379,575,858,740,832,842,838,624,118,55,977,163,484,59,737,299,343,161,647,674,249,758,248,19,612,336,419,255,416,460,286,35,678,352,796,195,308,918,778,118,202,879,378,548,214,688,908,668,759,293,875,279,324,472,117,167,637,32,934,34,854,673,113,110,27,585,266,450,769,4,264,206,586,704,304,612,639,948,718,952,534,444,470,302,182,30,165,984}, + new int[] {636,403,939,800,651,781,855,72,835,858,820,463,473,665,524,759,454,454,920,674,496,571,481,255,384,933,7,116,579,895,562,381,151,454,907,146,410,566,332,364,814,193,50,462,922,510,831,766,42,69,917,254,287,65,182,35,50,64,760,822,556,203,381,34,744,360,234,965,932,406,264,581,601,792,160,531,562,997,433,987,204,383,629,132,118,716,216,621,25,11,42,854,759,435,312,741,482,722,546,490}, + new int[] {164,898,443,782,245,1,164,767,788,590,910,745,803,688,801,322,118,70,121,829,130,153,443,718,794,871,935,845,233,187,48,93,235,35,603,481,317,348,674,673,278,809,651,468,858,696,902,905,303,108,952,435,766,922,13,492,29,797,988,120,371,24,115,425,970,898,65,735,938,647,691,886,563,930,958,393,94,218,23,258,825,232,697,673,863,607,356,17,13,340,981,288,9,316,345,155,489,224,449,491}, + new int[] {4,471,616,61,568,47,232,7,921,169,153,583,849,230,996,532,864,343,435,452,391,389,903,390,356,292,769,504,509,354,980,798,825,287,136,115,128,600,31,555,450,625,515,78,940,351,22,801,16,825,338,491,891,994,10,970,381,902,387,173,765,567,81,380,695,995,337,685,631,160,728,804,906,920,905,12,103,226,288,984,15,183,488,245,223,732,8,870,806,641,663,752,468,269,275,651,378,471,259,219}, + new int[] {483,76,190,396,531,330,847,356,79,392,14,322,24,995,193,532,185,885,888,637,950,895,216,860,345,690,29,250,926,586,913,263,855,343,403,416,433,529,492,52,709,676,836,503,767,775,208,75,861,204,525,43,929,122,966,582,451,115,46,793,462,493,886,801,819,181,574,30,912,14,946,908,15,693,140,94,212,970,62,374,306,10,717,708,220,544,742,716,413,555,969,895,92,711,506,989,469,354,819,510}, + }; + boolean wrongDirection = false; + boolean ok = true; + try { + for (int testNb = 0; testNb < tests.length; testNb++) { + // Get the test + int[] test = tests[testNb]; + int[] testSorted = new int[test.length]; + System.arraycopy(test, 0, testSorted, 0, test.length); + Arrays.sort(testSorted); + + // Generate the tree + InstanceConfig info = new InstanceConfig(); + Node root = new BaseNode(test[0], info); + for (int i = 1; i < test.length; i++) + root.add(test[i]); + + // Test all the possibilities + int posInSorted = 0; + for (int i = 0; i <= 1000; i++) { + info.reset(i); + while (posInSorted != testSorted.length && testSorted[posInSorted] < i) + posInSorted++; + Integer expected = null; + if (posInSorted != testSorted.length) + expected = testSorted[posInSorted]; + Integer returned = Ceil.ceil(root, i); + wrongDirection |= info.wrongDirection; + if(returned == null && expected != null) + ok = false; + if(expected == null && returned != null) + ok = false; + if(returned != null && expected != null && !returned.equals(expected)) + ok = false; + } + } + if(ok && !wrongDirection){} + else if(ok && wrongDirection) { + System.out.println("wrong Direction : Bad Complexity!!"); + assertTrue(false); + } + else { assertTrue(false);} + + } + catch (Exception e) { + System.out.println("exception"); + } + } +} diff --git a/lost+found/InginiousTests.java-YYXW3g b/lost+found/InginiousTests.java-YYXW3g new file mode 100644 index 00000000..32d3f9ec --- /dev/null +++ b/lost+found/InginiousTests.java-YYXW3g @@ -0,0 +1,159 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import static org.junit.Assert.*; + +import java.util.*; +import templates.*; + +public class InginiousTests{ + + public int [][] maze1 = new int[][] { + {0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0}, + {0,0,0,0,0,1,0}, + {0,1,1,1,1,1,1}, + {0,0,0,0,1,0,0}, + {1,1,0,0,1,0,0}, + {0,0,0,0,1,0,0} + }; + + public int [][] maze2 = new int[][] { + {0,0,0,1,0,0,0}, + {1,1,0,0,0,1,0} + }; + + @Test + @Grade(value=10) + public void testMaze1a() { + Iterable path = Maze.shortestPath(maze1,0,0,6,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,6,0,maze1,path)); + assertTrue(pathArray.length == 15); + } + + @Test + @Grade(value=10) + public void testMaze1b() { + // should not have a path + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,0,0,6,6).iterator().hasNext()); + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,6,6,0,0).iterator().hasNext()); + // start position is a wall + assertTrue(!Maze.shortestPath(maze1,1,0,6,0).iterator().hasNext()); + // end position is a wall + assertTrue(!Maze.shortestPath(maze1,6,0,1,0).iterator().hasNext()); + } + + @Test + @Grade(value=20) + public void testMaze1c() { + Iterable path = Maze.shortestPath(maze1,0,0,0,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,0,0,maze1,path)); + assertTrue(pathArray.length == 1); + } + + @Test + @Grade(value=20) + public void testMaze2a() { + Iterable path = Maze.shortestPath(maze2,0,0,1,6); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,1,6,maze2,path)); + assertTrue(pathArray.length == 10); + } + + @Test (timeout = 20) + @Grade(value=40) + public void testComplexity() { + int positions[][] = new int[2][2]; + int[][] maze = getMaze("maze.txt",24,110, positions); + + long t0 = System.currentTimeMillis(); + Iterable path = Maze.shortestPath(maze, positions[0][0], positions[0][1], positions[1][0], positions[1][1]); + long t1 = System.currentTimeMillis(); + + int count = 0; + for (Integer it: path) { count++; } + //System.out.println(count); + + assertEquals(count, 125); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + private int[][] getMaze(String filename, int row, int col, int positions[][]) { + String line; + int[][] maze = new int[row][col]; + try { + + BufferedReader br = new BufferedReader(new FileReader(filename)); + if (!br.ready()) { + throw new IOException(); + } + int j = 0; + int pos = 0; + while ((line = br.readLine()) != null) { + for(int i = 0; i < line.length(); i++) { + try { + maze[j][i] = Integer.parseInt(line.charAt(i) + ""); + } catch (NumberFormatException r) { + positions[pos][0] = j; + positions[pos][1] = i; + pos++; + ///System.out.println(j+" "+i); + maze[j][i] = 0; + } + } + j++; + } + br.close(); + } catch (IOException e) { + System.out.println(e); + } + return maze; + } + + + public Integer[] toArray(Iterable path) { + LinkedList list = new LinkedList(); + path.forEach(list::add); + return list.toArray(new Integer[0]); + } + + + public static int row(int pos, int mCols) { return pos / mCols; } + + public static int col(int pos, int mCols) { return pos % mCols; } + + public boolean validPathSourceToDest(int x1, int y1, int x2, int y2, int [][] maze, Iterable path) { + int n = maze.length; + int m = maze[0].length; + Iterator ite = path.iterator(); + if (!ite.hasNext()) return false; + int p = ite.next(); + int x = row(p,m); + int y = col(p,m); + if (x != x1 || y != y1) return false; + while (ite.hasNext()) { + p = ite.next(); + int x_ = row(p,m); + int y_ = col(p,m); + if (maze[x][y] == 1) return false; + if (Math.abs(x_-x)+Math.abs(y_-y) != 1) return false; + x = x_; y = y_; + } + if (x != x2 || y != y2) return false; + return true; + } + +} diff --git a/lost+found/InginiousTests.java-k1V9Mp b/lost+found/InginiousTests.java-k1V9Mp new file mode 100644 index 00000000..0a312de3 --- /dev/null +++ b/lost+found/InginiousTests.java-k1V9Mp @@ -0,0 +1,123 @@ +package src; +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + + +import java.util.Random; + +import static java.lang.Math.min; +import static org.junit.Assert.assertEquals; +import templates.*; + +public class InginiousTests { + + + @Test + @Grade(value= 10) + public void basicTest(){ + String[] pat = {"comp","like"}; + String txt = "I like computer science"; + RabinKarp rc = new RabinKarp(pat); + assertEquals(2,rc.search(txt)); + } + + + @Test + @Grade(value= 20) + public void wordNotPresentTest(){ + String[] pat = {"Yavin","C-3PO","R2-D2" }; + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + RabinKarp rc = new RabinKarp(pat); + assertEquals(txt.length(),rc.search(txt)); + } + + + @Test + @Grade(value=20) + public void randomWordTest(){ + int[] seeds = new int[]{42,56,3,9,65,99,23}; + Random rand = new Random(new Random().nextInt(seeds.length)); + String[] pat = new String[10]; + int length = 8; + + + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + + + int minIndex = txt.length(); + for(int i=0;i<10;i++){ + int startIndex = rand.nextInt(txt.length()-length); + pat[i] = txt.substring(startIndex,startIndex+length); + minIndex = min(minIndex,startIndex); + } + RabinKarp rc = new RabinKarp(pat); + assertEquals(minIndex,rc.search(txt)); + } + + private int nChar = 26; + private int patSize = 3; + private String[] patterns = new String[(int)Math.pow(nChar,patSize)]; + private int nPats = 0; + private void genAllWords(String prefix, int k) { + if (k == 0) { + this.patterns[nPats] = prefix; + this.nPats++; + return; + } + + for (int i = 0; i < nChar; ++i) { + String newPrefix = prefix + (char)('a' + i); + genAllWords(newPrefix, k - 1); + } + } + + @Test(timeout=50) + @Grade(value=50) + public void complexityTest(){ + long t0 = System.currentTimeMillis(); + genAllWords("",patSize); + RabinKarp rc = new RabinKarp(this.patterns); + + String txt = ""+ + "Ra th er t ha n pu rs ui ng m or e so ph is ti ca te d sk ip pi ng , th e Ra bi n– Ka rp a l"+ + "g or it hm s ee ks t o sp ee d up t he t es ti ng o f eq ua li ty o f th e pa tt er n to"+ + " t he s ub st ri ng s in t he t ex t by u si ng a h as h fu nc ti on . A ha sh f un ct "+ + "io n is a f un ct io n wh ic h co nv er ts e ve ry s tr in g in to a n um er ic v al ue ,"+ + " ca ll ed i ts h as h va lu e; f or e xa mp le , we m ig ht h av e ha sh (h el lo )= 5. T"; + + assertEquals(txt.length(),rc.search(txt)); + + long t1 = System.currentTimeMillis(); + System.out.println("Spent time = "+(t1-t0)); + + + } + + +} diff --git a/lost+found/InginiousTests.java-rX4SCO b/lost+found/InginiousTests.java-rX4SCO new file mode 100644 index 00000000..4cd36d88 --- /dev/null +++ b/lost+found/InginiousTests.java-rX4SCO @@ -0,0 +1,282 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import junit.framework.AssertionFailedError; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Random; +import java.util.concurrent.*; + +import static org.junit.Assert.*; +import templates.*; +public class InginiousTests { + + final int [] seeds = new int[]{10,87,83}; + + Random rand = new Random(seeds[new java.util.Random().nextInt(3)]); + + abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + public int [][] getSimpleMatrix() { + int[][] matrix = new int[][]{ + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 1, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1} + }; + return matrix; + } + + + public int [][] getExamMatrix() { + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + return tab; + } + + public int [][] getExamMatrix10() { + int [][] tab = new int[][] { + {0,9,0,2,4,2,7,5,3,0,}, + {1,0,9,7,3,4,3,2,1,5,}, + {0,1,9,9,4,5,8,7,8,0,}, + {8,1,9,0,5,1,8,5,7,9,}, + {1,2,8,5,9,2,7,6,9,4,}, + {2,9,0,9,2,0,5,1,0,7,}, + {6,4,3,2,5,2,6,4,0,0,}, + {2,7,6,4,6,2,5,7,4,5,}, + {3,4,4,9,8,7,0,9,8,4,}, + {3,3,3,1,7,7,6,7,1,7,} + }; + return tab; + } + + + + + public int [][] getRandomMatrix(int n,int bound) { + int[][] matrix = new int[n][n]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = rand.nextInt(bound); + } + } + return matrix; + } + + public static GlobalWarming.Point point(int x, int y) { + return new GlobalWarming.Point(x,y); + } + + @Test + @Grade(value=10) + public void testOnSameIslandExam() { + GlobalWarming gw = new GlobalWarmingImpl(getExamMatrix(),3); + boolean ok1 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)) == false; + boolean ok2 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(1,4)) == true; + boolean ok3 = gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(2,3)) == true; + boolean ok4 = gw.onSameIsland(new GlobalWarming.Point(2,3),new GlobalWarming.Point(3,4)) == false; + assertTrue(ok1 && ok2 && ok3 && ok4); + } + + @Test + @Grade(value=10) + public void testNbIslandsExam() { + GlobalWarming g = new GlobalWarmingImpl(getExamMatrix(),3); + + boolean ok = g.nbIslands()==4 || g.nbIslands()==20; + + assertTrue("islands returned (should be 4):"+g.nbIslands(),ok); + } + + + @Test + @Grade(value=10) + public void testSimpleAll() { + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + + assertTrue("error in nbIslands"+ warming.nbIslands(),warming.nbIslands()==6 ||warming.nbIslands()==78); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0,0),point(0,0))); + assertFalse("error in onSameIsland",warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue("error in onSameIsland",warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessOnSameIsland() { + int level = 200000; + GlobalWarming.Point p1 = point(10,10); + GlobalWarming.Point p2 = point(15,15); + + + for (int k = 0; k < 100; k++) { + int [][] matrix = getRandomMatrix(100,1000000); + GlobalWarming g1 = new GlobalWarmingImpl(matrix,level); + + for (int i = 0; i < 100; i++) { + for (int j = 0; j < 100-3; j++) { + if (matrix[i][j] > level && matrix[i][j+1] > level && matrix[i][j+2] > level) { + assertTrue(g1.onSameIsland(point(i,j),point(i,j+2))); + + } + } + } + } + int [][] matrix = getSimpleMatrix(); + GlobalWarming warming = new GlobalWarmingImpl(matrix,0); + assertFalse(warming.onSameIsland(point(0,0),point(0,0))); + assertFalse(warming.onSameIsland(point(0, 0), point(0, 1))); + assertTrue(warming.onSameIsland(point(4,5),point(1,7))); + + } + + @Test + @Grade(value=10) + public void testCorrectnessNbIslands() { + + int level = 200000; + + + int[][] matrix = getExamMatrix10(); + + + GlobalWarming warming = new GlobalWarmingImpl(matrix, 15); + assertTrue(warming.nbIslands()==0 || warming.nbIslands()==100); + + warming = new GlobalWarmingImpl(matrix, -15); + assertTrue(warming.nbIslands()==1); + + matrix[5][0] = 30; + matrix[0][1] = 30; + matrix[0][8] = 30; + matrix[6][0] = 30; + matrix[9][5] = 30; + matrix[9][4] = 30; + + warming = new GlobalWarmingImpl(matrix, 25); + assertTrue(warming.nbIslands()==4 ||warming.nbIslands()==98); + + + + for (int iter = 0; iter < 100; iter++) { + + + matrix = new int[100][100]; + + boolean [] generated = new boolean[10]; + int nIslandExpected = 0; + int k = 0; + int above = 0; + int count = 0; + for (int i = 0; i < rand.nextInt(10); i++) { + count = 0; + k = rand.nextInt(8); + matrix[k*10][k*10] = 1; + matrix[k*10+1][k*10] = 1; + matrix[k*10][k*10+1] = 1; + matrix[k*10+1][k*10+1] = 1; + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10+1] = 1; + count++; + } + if (rand.nextBoolean() && !generated[k]) { + matrix[k*10+2][k*10] = 1; + count++; + } + if (!generated[k]) { + generated[k] = true; + nIslandExpected += 1; + above+= 4+count; + } + } + + warming = new GlobalWarmingImpl(matrix, 0); + assertTrue(warming.nbIslands()==nIslandExpected || warming.nbIslands()==nIslandExpected+10000-above); + + } + + matrix = getSimpleMatrix(); + warming = new GlobalWarmingImpl(matrix,0); + assertTrue(warming.nbIslands()==6 ||warming.nbIslands()==78); + } + + + @Test(timeout=500) + @Grade(value=20) + public void timeComplexityConstructorCorrect() { + final int [][] matrix = getRandomMatrix(400,2000000); + GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + } + + + final int [][] matrix = getRandomMatrix(500,2000000); + final GlobalWarming g = new GlobalWarmingImpl(matrix,1000000 ); + + @Test(timeout = 5) + @Grade(value=15) + public void timeComplexityNbIslands() { + g.nbIslands(); + } + + + + @Test(timeout = 500) + @Grade(value=15) + public void timeComplexityOnSameIsland() { + int n = matrix.length; + for (int i = 0; i < n; i++){ + for (int j = 0; j < n; j++) { + g.onSameIsland(point(i,j),point(n-1,n-1)); + } + } + } + +} diff --git a/lost+found/InginiousTests.java-t37a4z b/lost+found/InginiousTests.java-t37a4z new file mode 100644 index 00000000..b30b1acc --- /dev/null +++ b/lost+found/InginiousTests.java-t37a4z @@ -0,0 +1,130 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import java.util.Random; +import static org.junit.Assert.assertEquals; +import templates.*; + +public class InginiousTests { + + private static class WeightedQuickUnionUF { + private int[] parent; // parent[i] = parent of i + private int[] size; // size[i] = number of sites in subtree rooted at i + private int count; // number of components + + public WeightedQuickUnionUF(int n) { + count = n; + parent = new int[n]; + size = new int[n]; + for (int i = 0; i < n; i++) { + parent[i] = i; + size[i] = 1; + } + } + + + public int count() { + return count; + } + + public int find(int p) { + validate(p); + while (p != parent[p]) + p = parent[p]; + return p; + } + + // validate that p is a valid index + private void validate(int p) { + int n = parent.length; + if (p < 0 || p >= n) { + throw new IndexOutOfBoundsException("index " + p + " is not between 0 and " + (n - 1)); + } + } + + public boolean connected(int p, int q) { + return find(p) == find(q); + } + + public void union(int p, int q) { + int rootP = find(p); + int rootQ = find(q); + if (rootP == rootQ) return; + + // make smaller root point to larger one + if (size[rootP] < size[rootQ]) { + parent[rootP] = rootQ; + size[rootQ] += size[rootP]; + } else { + parent[rootQ] = rootP; + size[rootP] += size[rootQ]; + } + count--; + } + } + + public void testRandomGraphOk(int n, int e) { + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + Random r = new Random(6); + for (int i = 0; i < e; i++) { + int orig = r.nextInt(n); + int dest = r.nextInt(n); + g.addEdge(orig,dest); + uf.union(orig,dest); + } + int nbCC = ConnectedComponents.numberOfConnectedComponents(g); + assertEquals(uf.count(),nbCC); + } + + @Test + @Grade(value=25) + public void cycleGraphOk() { + int n = 1002; + Graph g = new Graph(n); + WeightedQuickUnionUF uf = new WeightedQuickUnionUF(n); + g.addEdge(0,n-1); + uf.union(0,n-1); + + for (int i = 1; i < n; i++) { + g.addEdge(i,(i-1)%n); + uf.union(i,(i-1)%n); + } + + assertEquals(uf.count(), ConnectedComponents.numberOfConnectedComponents(g)); + } + + + @Test(timeout = 3000) + @Grade(value = 25) + public void complexityOk() { + //long t0 = System.currentTimeMillis(); + int n = 7002; + Graph g = new Graph(n); + for (int i = 0; i < n; i++) { + g.addEdge(i,(i+2)%n); + } + ConnectedComponents.numberOfConnectedComponents(g); + //long t1 = System.currentTimeMillis(); + //System.out.println("time constructor bis=:"+(t1-t0)); + + } + + @Test + @Grade(value = 50) + public void correctness(){ + testRandomGraphOk(600,120); + testRandomGraphOk(220,7); + testRandomGraphOk(105,3); + testRandomGraphOk(0,0); + testRandomGraphOk(10,2*10); + testRandomGraphOk(42,23); + testRandomGraphOk(420,123); + testRandomGraphOk(90,40); + } + +} diff --git a/lost+found/InputBitStream.class-plziXm b/lost+found/InputBitStream.class-plziXm new file mode 100644 index 00000000..6d27b651 Binary files /dev/null and b/lost+found/InputBitStream.class-plziXm differ diff --git a/lost+found/InputBitStream.class-xpol9v b/lost+found/InputBitStream.class-xpol9v new file mode 100644 index 00000000..6d27b651 Binary files /dev/null and b/lost+found/InputBitStream.class-xpol9v differ diff --git a/lost+found/Interpreter.java-J4I9PK b/lost+found/Interpreter.java-J4I9PK new file mode 100644 index 00000000..85b8fc7a --- /dev/null +++ b/lost+found/Interpreter.java-J4I9PK @@ -0,0 +1,418 @@ +import java.util.EmptyStackException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.function.Function; + +/** + * An implementation of the Interpreter class as requested per mission 1. + */ +public class Interpreter implements InterpreterInterface { + /** the underlying operand stack */ + private Stack> stack = new LinkedStack>(); + /** the symbol table used to lookup names */ + private Map> symb = new HashMap>(); + + /** + * {@inheritDoc} + * + * The main functionality of the interpreter: returns a string to be printed + * iff pstack is one of the operands. + * + * @param s: the string to return + * @return a string representing the content of the stack (if need be). + * otherwise, returns an empty string. + * ---------- + * @pre: 'instructions' is a valid chain of PostScript instructions + * @post: returns a String representing the state of the stack when a 'pstack' instruction is encountered. + * If several 'pstack' instructions are present in the chain, a concatenation of the corresponding states (when 'pstack' is encountered) must be returned, separated by whitespaces. + * If several elements are still on the stack, separate them with whitespaces. + * If there is no element on the stack or no 'pstack' instruction, return the empty string (""). + */ + public String interpret(String s){ + String r = ""; + for(String tok : s.split(" ")){ + // Skip empty tokens to respect preconds. + if(tok.equals("")) + continue; + r += ( " "+token(tok).execute() ); + r = r.trim(); + } + return r; + } + + /** + * A factory method that maps an action to each of the corresponding tokens. + * + * @param token the token whose action is being looked up. + * @return a TokenAction corresponding to whatever needs to be done when this + * token is being processed. + * + * @pre: the current token is not null or "". + * @post: an appropriate tokenaction is returned or an IllegalArgumentException + * (unrecognised token) is raised. + */ + private TokenAction token(String token){ + // Values -- Double + if(token.matches("-?[0-9]+\\.[0-9]+")) + return ()-> stackvalue(Double::parseDouble, token); + // Values -- Int + if(token.matches("-?[0-9]+")) + return ()-> stackvalue(Integer::parseInt, token); + // Values -- Boolean + if(token.matches("true|false")) + return ()-> stackvalue(Boolean::parseBoolean, token); + + // Arithmetic + if(token.equals("add")) + return () -> stackply(this::add, stack.pop(), stack.pop()); + if(token.equals("sub")) + return ()-> stackply(this::sub, stack.pop(), stack.pop()); + + if(token.equals("mul")) + return ()-> stackply(this::mul, stack.pop(), stack.pop()); + if(token.equals("div")) + return ()-> stackply(this::div, stack.pop(), stack.pop()); + + if(token.equals("idiv")) + return ()-> stackply(this::idiv, stack.pop(), stack.pop()); + + // Logic + if(token.equals("eq")) + return ()-> stackply(this::eq, stack.pop(), stack.pop()); + if(token.equals("ne")) + return ()-> stackply(this::ne, stack.pop(), stack.pop()); + + // Stack manip + if(token.equals("dup")) + return ()-> { stack.push(stack.peek()); return "";}; + + if(token.equals("exch")) + return () -> { + Element a = stack.pop(); + Element b = stack.pop(); + stack.push(a); + stack.push(b); + + return ""; + }; + + if(token.equals("pop")) + return ()-> { stack.pop(); return "";}; + + // IO + if(token.equals("pstack")) + return () -> { + StringBuilder sb = new StringBuilder(); + + Stack> reversed = new LinkedStack>(); + for(Element e : stack){ reversed.push(e); } + + for(Element e : reversed){ + sb.append(e.value.toString()).append(" "); + } + return sb.toString().trim(); + }; + + // Symbols + if(token.equals("def")) + return () -> { + Element v = stack.pop(); + String k = ((String) stack.pop().value).substring(1); + + symb.put(k, v); + return ""; + }; + + if(token.startsWith("/")) + return () -> { stack.push(new Element(token)); return "";}; + + + if(symb.containsKey(token)) + return () -> { stack.push(symb.get(token)); return "";}; + + throw new IllegalArgumentException("unrecognised token"); + } + + /** + * Swaps the arguments a and b and passes them on to the given infix binary + * operator so as to produce some result. Then pushes that result onto the + * stack. + * + * IMPORTANT NOTICE: + * Swapping the arguments in this function isn't just for fun, it stemps from + * the fact that operands are popped from the stack and hence are in reverse + * order wrt. the order of the formal parameters of the operators. + * + * @return the empty string (ALWAYS). + */ + private String stackply(Operator op, Element a, Element b){ + stack.push(op.apply(b,a)); + return ""; + } + + /** + * Uses the given function `fun` to parse the token and make it an element + * which is then pushed onto the stack. + * + * @return the empty string (ALWAYS). + */ + private String stackvalue(Function fun, String token){ + stack.push(new Element(fun.apply(token))); + return ""; + } + + /** + * A functional interface to represent the action undertaken for each token + * encountered while processing the stream of actions. + */ + private interface TokenAction { + /** + * Provokes whatever side effect is required for some given token and + * returns a string representation of the result if need be. + * + * @return a string representation of the result of the action iff that + * action involves the printing of some content on the output stream + * (that is to say, iff the token is 'pstack'). + * + * @pre: the current token is not null or "". + * @post: a side effect happened (stack manipulation: push, pop, ...) + * @post: a string representation of the result is returned (if need be) + * else the empty string is returned. + */ + public String execute(); + } + + /** A functional interface to encapsulate a binary operator */ + private interface Operator { + /** + * applies this operator to params a and b and yields the resulting + * element. + */ + Element apply(Element a, Element b); + } + + /** + * Implements the binary addition operation (in infix notation). + * The resulting element will be an Element iff a and b are + * Element. Otherwise, if one or both arguments are floats, returns + * an Element. + * + * In the (unlikely) event where a or b wouldnt be a number, an + * IllegalArgumentException is raised. + */ + public Element add(Element a, Element b){ + if(a.isFloat() || b.isFloat()) + return new Element(a.fVal() + b.fVal()); + if(a.isInt() && b.isInt()) + return new Element(a.iVal() + b.iVal()); + + throw new UnsupportedOperationException(); + } + /** + * Implements the binary subtraction operation (in infix notation). + * The resulting element will be an Element iff a and b are + * Element. Otherwise, if one or both arguments are floats, returns + * an Element. + * + * In the (unlikely) event where a or b wouldnt be a number, an + * IllegalArgumentException is raised. + */ + public Element sub(Element a, Element b){ + if(a.isFloat() || b.isFloat()) + return new Element(a.fVal() - b.fVal()); + if(a.isInt() && b.isInt()) + return new Element(a.iVal() - b.iVal()); + + throw new UnsupportedOperationException(); + } + /** + * Implements the binary multiplication operation (in infix notation). + * The resulting element will be an Element iff a and b are + * Element. Otherwise, if one or both arguments are floats, returns + * an Element. + * + * In the (unlikely) event where a or b wouldnt be a number, an + * IllegalArgumentException is raised. + */ + public Element mul(Element a, Element b){ + if(a.isFloat() || b.isFloat()) + return new Element(a.fVal() * b.fVal()); + if(a.isInt() && b.isInt()) + return new Element(a.iVal() * b.iVal()); + + throw new UnsupportedOperationException(); + } + /** + * Implements the binary division operation (in infix notation). + * The resulting element Element. + * + * Anyhow, the resulting value will ALWAYS be a float (double) value. + * + * In the (unlikely) event where a or b wouldnt be a number, an + * IllegalArgumentException is raised. + */ + public Element div(Element a, Element b){ + if(a.isNumeric() && b.isNumeric()) + if(b.fVal() == 0.0) + throw new ArithmeticException("Integer division by zero"); + else + return new Element(a.fVal() / b.fVal()); + + throw new UnsupportedOperationException(); + } + + /** + * Implements the binary integer division operation (in infix notation). + * The resulting element will be an Element iff a and b are + * Element. Otherwise, if one or both arguments are floats, returns + * an Element. + * + * Anyhow, the resulting value will ALWAYS be a float (double) value. + * + * In the (unlikely) event where a or b wouldnt be a number, an + * IllegalArgumentException is raised. + */ + public Element idiv(Element a, Element b){ + if(a.isInt() && b.isInt()) + if(b.iVal() == 0) + throw new ArithmeticException("Integer division by zero"); + else + return new Element(a.iVal() / b.iVal()); + + throw new UnsupportedOperationException(); + } + + /** Implements a binary equality test operation */ + public Element eq(Element a, Element b){ + return new Element(a.value.equals(b.value)); + } + /** Implements a binary inequality test operation */ + public Element ne(Element a, Element b){ + return new Element(!a.value.equals(b.value)); + } + + /** + * Utility class meant to let other apis query the internal type of the + * value in a relatively clean fashion. (User only needs to care about the + * fact that the given element isInt or isFloat but does not need to perform + * the bulk of the tests himself). + */ + private class Element { + /** the value of the element */ + public final T value; + /** creates a new instance that wraps the given v */ + private Element(T v){ + this.value = v; + } + /** @return true iff value is an integer number */ + public boolean isInt() { + return value instanceof Integer; + } + /** @return true iff value is a floating point number (double) */ + public boolean isFloat(){ + return value instanceof Double; + } + /** @return true iff value is a number (int or floating point) */ + public boolean isNumeric(){ + return isInt() || isFloat(); + } + + /** + * @return the value of this object expressed as a floating point number + * (if possible). + */ + private double fVal(){ return ((Number) value).doubleValue();} + /** + * @return the value of this object expressed as an integer number + * (if possible). + */ + private int iVal(){ return ((Number) value).intValue();} + /** + * {@inheritDoc} + * Makes debugging easier. + */ + public String toString() { return ""+value;} + } + + /** The stack interface corresponding to the Stack ADT. */ + public interface Stack extends Iterable { + void push(T t); + T pop(); + T peek(); + boolean isEmpty(); + Iterator iterator(); + } + + /** An implementation of the stack interface relying on a singly linked list */ + private class LinkedStack implements Stack { + /** the head of the list. Null when the stack is empty */ + private Node top; + + /** {@inheritDoc} */ + public void push(T t){ + this.top = new Node(t, top); + } + /** {@inheritDoc} */ + public T pop(){ + T t = peek(); + this.top = this.top.next; + return t; + } + /** {@inheritDoc} */ + public T peek(){ + if(isEmpty()){ + throw new EmptyStackException(); + } + return this.top.value; + } + /** {@inheritDoc} */ + public boolean isEmpty(){ + return this.top == null; + } + /** {@inheritDoc} */ + public Iterator iterator(){ + return new LnkStackIterator(); + } + + /** + * The class implementing the singly linked nodes of the singly linked + * list data structure. + */ + private class Node { + T value; + Node next; + + public Node(T value, Node next){ + this.value = value; + this.next = next; + } + } + /** + * An iterator that permits to iterate over all the elements contained + * in the LinkedStack stack. + */ + private class LnkStackIterator implements Iterator{ + /** The node at which the cursor is set */ + private Node current; + /** creates a new instance */ + public LnkStackIterator() { + current = LinkedStack.this.top; + } + /** {@inheritDoc} */ + @Override + public boolean hasNext() { + return current != null; + } + /** {@inheritDoc} */ + @Override + public T next() { + T ret = current.value; + current = current.next; + return ret; + } + + } + } + +} diff --git a/lost+found/InterpreterInterface.java-Wyp13S b/lost+found/InterpreterInterface.java-Wyp13S new file mode 100644 index 00000000..6a1d3fb3 --- /dev/null +++ b/lost+found/InterpreterInterface.java-Wyp13S @@ -0,0 +1,11 @@ +public interface InterpreterInterface { + + /* + * @pre: 'instructions' is a valid chain of PostScript instructions + * @post: returns a String representing the state of the stack when a 'pstack' instruction is encountered. + * If several elements are still on the stack, separate them with whitespaces. + * If there is no element on the stack or no 'pstack' instruction, return the empty string (""). + */ + public String interpret(String instructions); + +} \ No newline at end of file diff --git a/lost+found/InterpreterInterface.java-mhXZHO b/lost+found/InterpreterInterface.java-mhXZHO new file mode 100644 index 00000000..5f773a70 --- /dev/null +++ b/lost+found/InterpreterInterface.java-mhXZHO @@ -0,0 +1,11 @@ +public interface InterpreterInterface { + + /* + * @pre: 'instructions' is a valid chain of PostScript instructions + * @post: returns a String representing the state of the stack when a 'pstack' instruction is encountered. + * If several elements are still on the stack, separate them with whitespaces. + * If there is no element on the stack or no 'pstack' instruction, return the empty string (""). + */ + public String interpret(String instructions); + +} diff --git a/lost+found/Interval.java-NfnqQ3 b/lost+found/Interval.java-NfnqQ3 new file mode 100644 index 00000000..2ad7cad3 --- /dev/null +++ b/lost+found/Interval.java-NfnqQ3 @@ -0,0 +1,35 @@ +package student; +public class Interval implements Comparable { + + final int min, max; + public Interval(int min, int max) { + assert(min <= max); + this.min = min; + this.max = max; + } + + @Override + public boolean equals(Object obj) { + return ((Interval) obj).min == min && ((Interval) obj).max == max; + } + + @Override + public String toString() { + return "["+min+","+max+"]"; + } + + @Override + public int compareTo(Interval o) { + if (min < o.min) return -1; + else if (min == o.min) return max - o.max; + else return 1; + } + + public int getMin(){ + return this.min; + } + + public int getMax(){ + return this.max; + } +} diff --git a/lost+found/Interval.java-oayVOK b/lost+found/Interval.java-oayVOK new file mode 100644 index 00000000..dd54b5ed --- /dev/null +++ b/lost+found/Interval.java-oayVOK @@ -0,0 +1,34 @@ +public class Interval implements Comparable { + + final int min, max; + public Interval(int min, int max) { + assert(min <= max); + this.min = min; + this.max = max; + } + + @Override + public boolean equals(Object obj) { + return ((Interval) obj).min == min && ((Interval) obj).max == max; + } + + @Override + public String toString() { + return "["+min+","+max+"]"; + } + + @Override + public int compareTo(Interval o) { + if (min < o.min) return -1; + else if (min == o.min) return max - o.max; + else return 1; + } + + public int getMin(){ + return this.min; + } + + public int getMax(){ + return this.max; + } +} diff --git a/lost+found/Jama-1.0.3.jar-llXaz8 b/lost+found/Jama-1.0.3.jar-llXaz8 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/JavaGrading-0.1.jar-M6MMh4 b/lost+found/JavaGrading-0.1.jar-M6MMh4 new file mode 100644 index 00000000..8fba7674 Binary files /dev/null and b/lost+found/JavaGrading-0.1.jar-M6MMh4 differ diff --git a/lost+found/JavaGrading-0.1.jar-anB0MG b/lost+found/JavaGrading-0.1.jar-anB0MG new file mode 100644 index 00000000..8fba7674 Binary files /dev/null and b/lost+found/JavaGrading-0.1.jar-anB0MG differ diff --git a/lost+found/JavaGrading-0.1.jar-iVncCM b/lost+found/JavaGrading-0.1.jar-iVncCM new file mode 100644 index 00000000..8fba7674 Binary files /dev/null and b/lost+found/JavaGrading-0.1.jar-iVncCM differ diff --git a/lost+found/JavaGrading.jar-8amIi6 b/lost+found/JavaGrading.jar-8amIi6 new file mode 100644 index 00000000..d4dfba57 Binary files /dev/null and b/lost+found/JavaGrading.jar-8amIi6 differ diff --git a/lost+found/Kapton_40_Makerbot_41_.xml-G6n4el b/lost+found/Kapton_40_Makerbot_41_.xml-G6n4el new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Karton.xml-jXQPgU b/lost+found/Karton.xml-jXQPgU new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Karton_40_300gr_44_schwarz_44_dick_41_.xml-oYm2NG b/lost+found/Karton_40_300gr_44_schwarz_44_dick_41_.xml-oYm2NG new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Kiefer.xml-5nflmt b/lost+found/Kiefer.xml-5nflmt new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml-zP4VVf b/lost+found/Klebefolie_44_schwarz_32__40_auf_32_3D-Drucker_41_.xml-zP4VVf new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Kokosschale_32_3-4mm.xml-48H51K b/lost+found/Kokosschale_32_3-4mm.xml-48H51K new file mode 100644 index 00000000..443b10d4 --- /dev/null +++ b/lost+found/Kokosschale_32_3-4mm.xml-48H51K @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Kokosschale 3-4mm + + 0.0 + + \ No newline at end of file diff --git a/lost+found/Kopierfolie_40_Soennecken_41_.xml-cmwEw2 b/lost+found/Kopierfolie_40_Soennecken_41_.xml-cmwEw2 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Kruskal.java-q703Nv b/lost+found/Kruskal.java-q703Nv new file mode 100644 index 00000000..0419556b --- /dev/null +++ b/lost+found/Kruskal.java-q703Nv @@ -0,0 +1,461 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; +import java.io.*; + +/* + * Solution of Simon Hardy for the mission 6. + * Doesn't use neither Bucket/Radix-Sort nor Union/Find structures, + * but gives the same result as the one expected from the students. + */ +public class Kruskal { + + public static AdjacencyList applyKruskal(AdjacencyList graphe) { + LinkedList v = graphe.vertices(); + int n = v.size(); + LinkedList> clusters = new LinkedList>(); + Edge e; + Vertex v1; + Vertex v2; + int a = 0, b = 0; + for (int i = 0 ; i < n; i++) { + clusters.add(new LinkedList()); + clusters.get(i).add(v.get(i)); + } + PriorityQueue Q = new PriorityQueue(graphe.edges()); + AdjacencyList T = new AdjacencyList(); // minimum spanning tree + while (T.edges().size() < n-1) { // doit avoir n-1 aretes + e = Q.remove(); // retire le minimum + v1 = e.getSrc(); + v2 = e.getDst(); + for (int i = 0 ; i < clusters.size(); i++) { + if (clusters.get(i).contains(v1)) + a = i; + if (clusters.get(i).contains(v2)) + b = i; + } + if (a != b) { + + Vertex one, two; + Vertex temp; + Edge edge; + if ((temp = T.contains(v1.getCity())) == null) { + one = T.insertVertex(v1.getCity()); + } + else { + one = temp; + } + if ((temp = T.contains(v2.getCity())) == null) { + two = T.insertVertex(v2.getCity()); + } + else + two = temp; + // Condition pour interdire deux fois la meme arete ? + edge = T.insertEdge(one, two, e.getWeight()); + one.addToI(edge); + e.setSrcEdges(one.getI()); + two.addToI(edge); + e.setDstEdges(two.getI()); + + clusters.get(a).addAll(clusters.get(b)); + clusters.remove(b); + } + } + return T; + } + + public static void main(String[] args) { + AdjacencyList list = new AdjacencyList(args[0]);//("src/data/cities.txt"); + AdjacencyList result = applyKruskal(list); + + try { + PrintWriter pw = new PrintWriter(new FileWriter(args[1]));//("src/data/cities_sol.txt")); + for (int i = 0 ; i < result.edges().size(); i++) { + pw.println(result.edges().get(i).getSrc().getCity() + "\t" + result.edges().get(i).getDst().getCity() + "\t" + result.edges().get(i).getWeight()); + } + pw.close(); + } catch (IOException e) { + System.out.println("IOException occured while writing result : " + e); + } + //System.out.println(result.cost()); + } + +} + +/** + * Classe implementant l'ADT "Graphe" par une structure de type "liste d'adjacence" + * Contient egalement un constructeur permettant de creer une + * liste d'adjacence sur base d'un String. + * + * @author Simon Hardy + */ +class AdjacencyList { + + private LinkedList V; + private LinkedList E; + + public AdjacencyList() { + V = new LinkedList(); + E = new LinkedList(); + } + + /* Construction sur base du du fichier dont le chemin est passe en argument + * NB : on considere ici que deux numeros differents correspondent + * a deux aeroports differents (et donc deux noeuds differents) */ + public AdjacencyList(String s) { + V = new LinkedList(); + E = new LinkedList(); + try + { + File f = new File (s); + FileReader fr = new FileReader (f); + BufferedReader br = new BufferedReader(fr); + + try { + String line = br.readLine(); + + while (line != null) + { + Vertex one, two; + Vertex v; + Edge e; + if ((v = this.contains(firstNode(line))) == null) { + one = insertVertex(firstNode(line)); + } + else { + one = v; + } + if ((v = this.contains(secondNode(line))) == null) { + two = insertVertex(secondNode(line)); + } + else + two = v; + // NB : on autorise 2 aretes avec les memes noeuds + e = insertEdge(one, two, firstEdge(line)); + one.addToI(e); + e.setSrcEdges(one.getI()); + two.addToI(e); + e.setDstEdges(two.getI()); + line = br.readLine(); + } + + br.close(); + fr.close(); + } + catch (IOException exception) + { + System.out.println ("Erreur lors de la lecture : " + exception.getMessage()); + } + } + catch (FileNotFoundException exception) + { + System.out.println ("Le fichier n'a pas ete trouve"); + } + } + + /* Methodes de l'ADT */ + public LinkedList vertices() { + return V; + } + + public LinkedList edges() { + return E; + } + + public LinkedList incidentEdges(Vertex v) { + return v.getI(); + } + + public Vertex opposite(Vertex v, Edge e) { + if (e.getSrc().getCity() == v.getCity()) return e.getDst(); + else if (e.getDst().getCity() == v.getCity()) return e.getSrc(); + else { + System.out.println("Error in 'opposite'"); + return null; + } + } + + public ArrayList endVertices(Edge e) { + ArrayList array = new ArrayList(); + array.add(e.getSrc()); + array.add(e.getDst()); + return array; + } + + public boolean AreAdjacent(Vertex v, Vertex w) { + LinkedList edges = v.getI(); + for (int i = 0 ; !edges.isEmpty() ; i++) { + if (edges.get(i).getSrc().getCity() == v.getCity() || edges.get(i).getDst().getCity() == v.getCity()) + return true; + } + return false; + } + + public void replace(Vertex v, int x) { + v.setCity(x); + } + + public void replace(Edge e, int x) { + e.setWeight(x); + } + + public Vertex insertVertex(int x) { + Vertex c = new Vertex(x, V.size()); + V.add(c); // a ameliorer + return c; + } + + public Edge insertEdge(Vertex v, Vertex w, int x) { + Edge c = new Edge(v, w, x, E.size()); + E.add(c); // a ameliorer + return c; + } + + public void removeVertex(Vertex v) { + LinkedList i = v.getI(); + while (!i.isEmpty()) + E.remove(i.getFirst()); // on supprime toutes les arretes incidentes a ce noeud + V.remove(v.getPosition()); // a ameliorer + } + + public void removeEdge(Edge e) { + E.remove(e.getPosition()); // a ameliorer + // Enlever les references des I vers E ? + } + + /* Autres methodes interessantes : */ + + /* Si V contient un element dont la valeur est X, on le retourne. + Sinon, on retourne null. */ + public Vertex contains(int x) { + if (V.isEmpty()) + return null; + int i = 0; + int size = V.size(); + Vertex c = null; + while (i < size) { + c = V.get(i); + if (c.getCity() == x) + return c; + i++; + } + return null; + } + + /* Renvoie le premier noeud de la ligne */ + public int firstNode(String line) { + String number = ""; + int i = 0; + char c = line.charAt(i); + while (c != '\t') { + number += c; + i++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + + /* Renvoie le second noeud de la ligne */ + + public int secondNode(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la premiere tabulation + char c = line.charAt(i); + while (c != '\t' || count == 0) { + if (count == 1) number += c; + i++; + if (c == '\t') count++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + /* Renvoie l'arete de la ligne */ + public int firstEdge(String line) { + String number = ""; + int i = 0; + int count = 0; // pour tout skipper avant la 2eme tabulation + char c = line.charAt(i); + while (i < line.length()) { + if (count == 2) number += c; + i++; + if (c == '\t') count++; + if (i < line.length()) c = line.charAt(i); + } + return Integer.parseInt(number); + } + + public boolean isConnected() { + DFS(vertices().getFirst()); + boolean result = true; + for (Vertex v : vertices()) { + if (v.visited) + v.visited = false; + else + result = false; + } + return result; + } + + public void DFS(Vertex v) { + v.visited = true; + for (Edge e : v.getI()) { + Vertex opposite = opposite(v, e); + if (!opposite.visited) + DFS(opposite); + // else there is a cycle + } + } + + public int numberOfNodes() { + return vertices().size(); + } + + public int numberOfEdges() { + return edges().size(); + } + + public int cost() { + int sum = 0; + for (Edge e : edges()) + sum += e.getWeight(); + return sum; + } +} + +/** + * Classe representant un noeud du graphe + * + * @author Simon Hardy + */ +class Vertex { + + private int city; + private LinkedList I; + private int position; // position dans V (devrait etre une reference !) + public boolean visited; // for DFS + + public Vertex(int x) { + city = x; + I = new LinkedList(); + position = 0; + visited = false; + } + + public Vertex(int x, int pos) { + city = x; + I = new LinkedList(); + position = pos; + } + public int getCity() { + return city; + } + public void setCity(int city) { + this.city = city; + } + public LinkedList getI() { + return I; + } + public void setI(LinkedList i) { + I = i; + } + public void addToI(Edge e) { + I.add(e); + } + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } +} + +/** + * Classe representant une arete du graphe + * @author Simon Hardy + **/ +class Edge implements Comparable { + + private int weight; + private Vertex src; + private Vertex dst; + private LinkedList srcEdges; // reference ! (redondant ?) + private LinkedList dstEdges; // reference ! (redondant ?) + private int position; // position dans V (devrait etre une reference !) + + public Edge(Vertex src, Vertex dst, int x) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = 0; + } + + public Edge(Vertex src, Vertex dst, int x, int pos) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = pos; + } + + public int compareTo(Edge e) + { + return this.getWeight() - e.getWeight(); + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public Vertex getSrc() { + return src; + } + + public void setSrc(Vertex src) { + this.src = src; + } + + public Vertex getDst() { + return dst; + } + + public void setDst(Vertex dst) { + this.dst = dst; + } + + public LinkedList getSrcEdges() { + return srcEdges; + } + + public void setSrcEdges(LinkedList srcEdges) { + this.srcEdges = srcEdges; + } + + public LinkedList getDstEdges() { + return dstEdges; + } + + public void setDstEdges(LinkedList dstEdges) { + this.dstEdges = dstEdges; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + +} diff --git a/lost+found/KruskalTests.java-kf9DGw b/lost+found/KruskalTests.java-kf9DGw new file mode 100644 index 00000000..874333d5 --- /dev/null +++ b/lost+found/KruskalTests.java-kf9DGw @@ -0,0 +1,502 @@ +import java.io.*; +import java.util.*; + +/* NB : I had to rename my classes Vertex, Edge and AdjacencyList + in TestVertex, TestEdge and TestAdjacencyList in order to avoid + name conflicts with student classes. */ + +public class KruskalTests { + + public static void main(String[] args) { + testSmallCities(); + testBigCities(); + testCustomCities(); + testCustomCities2(); + testCustomCities3(); + } + + public static void testSmallCities() { + String in = "./cities_small.txt"; + String out = "./cities_small_sol.txt"; + int numberOfNodes = 50; // number of nodes of this instance + int optimalCost = 20522; // optimal cost for this instance + System.out.println("Problem 1 : small cities"); + applyTest(in, out, numberOfNodes, optimalCost); + } + + public static void testBigCities() { + String in = "./cities.txt"; + String out = "./cities_sol.txt"; + int numberOfNodes = 500; // number of nodes of this instance + int optimalCost = 149718; // optimal cost for this instance + System.out.println("Problem 2 : cities"); + applyTest(in, out, numberOfNodes, optimalCost); + } + + public static void testCustomCities() { + String in = "./cities_custom.txt"; + String out = "./cities_custom_sol.txt"; + int numberOfNodes = 3; // number of nodes of this instance + int optimalCost = 3; // optimal cost for this instance + System.out.println("Problem 3 : custom cities"); + applyTest(in, out, numberOfNodes, optimalCost); + } + + public static void testCustomCities2() { + String in = "./cities_custom_2.txt"; + String out = "./cities_custom_sol_2.txt"; + int numberOfNodes = 4; // number of nodes of this instance + int optimalCost = 11; // optimal cost for this instance + System.out.println("Problem 4 : custom cities 2"); + applyTest(in, out, numberOfNodes, optimalCost); + } + + public static void testCustomCities3() { + String in = "./cities_custom_3.txt"; + String out = "./cities_custom_sol_3.txt"; + int numberOfNodes = 5; // number of nodes of this instance + int optimalCost = 11; // optimal cost for this instance + System.out.println("Problem 5 : custom cities 3"); + applyTest(in, out, numberOfNodes, optimalCost); + } + + public static void applyTest(String in, String out, int numberOfNodes, int optimalCost) { + try { + int nNodes = 0; + int nEdges = 0; + int cost = 0; + int cheat = 0; + int connected = 0; + Kruskal.main(new String[] {in, out}); // apply the student algorithm + + Map edges = fillMap(in, numberOfNodes); // to check if he didn't invent new edges + int[] result = readSol(out, edges, numberOfNodes); // get the solution of the student in 'result' + + if (result[0] != numberOfNodes) // all the nodes are involved (it's 'spanning') + nNodes++; + if (result[1] != numberOfNodes-1) // number of edges = number of nodes - 1 (it's a 'tree') + nEdges++; + if (result[2] > optimalCost) // the cost is optimal (it's a 'minimum' spanning tree) + cost++; + else if (result[2] < optimalCost) + cost--; + if (result[3] != 0) // the student didn't cheat : if an edge is part of his solution, it was in the input file + cheat++; + + TestAdjacencyList studentSol = new TestAdjacencyList(out); // create the graph representing his solution + if (studentSol.isConnected() != true) // the result of the student is a connected graph + connected++; + if (nEdges > 0) System.out.println("KO: your solution should involve N-1 edges (not a 'tree')"); + if (nNodes > 0) System.out.println("KO: your solution doesn't involve all the nodes (not a 'spanning' tree)"); + if (cost > 0) System.out.println("KO: your solution is not optimal (not a 'minimum' spanning tree)"); + if (cheat > 0) System.out.println("KO: well tried, but you must use edges given in the input file !"); + if (connected > 0) System.out.println("KO: your graph is not connected"); + if (nEdges <= 0 && nNodes <= 0 && cost <= 0 && cheat <= 0 && connected <= 0) System.out.println("OK"); + //if (cost < 0) System.out.println("It seems like your solution is better than the optimal solution !?"); + } catch(Exception e) { + System.out.println("KO: An exception occured : " + e); + //e.printStackTrace(System.out); + } + } + + public static Map fillMap(String path, int numberOfNodes) { + Map edges = new HashMap(); + try { + File f = new File (path); + Scanner s = new Scanner(f); + + try { + while (s.hasNextInt()) + { + int v1 = s.nextInt(); + int v2 = s.nextInt(); + int cost = s.nextInt(); + + int key = Math.min(v1, v2) + numberOfNodes*Math.max(v1, v2); + Triplet value = new Triplet(Math.min(v1, v2), Math.max(v1, v2), cost); + edges.put(key, value); + } + + s.close(); + } catch (Exception e) + { + //System.out.println ("Error occured while reading the file : " + e.getMessage()); + } + } catch (FileNotFoundException exception) { + //System.out.println ("File not found. "); + } + + return edges; + } + + public static int[] readSol(String path, Map edges, int numberOfNodes) { + Set nodes = new HashSet(); + int numberOfEdges = 0; + int totalCost = 0; // cost found by the student + int cheat = 0; // incremented if fake edge + try { + File f = new File(path); + Scanner s = new Scanner(f); + while (s.hasNextInt()) + { + int v1 = s.nextInt(); + int v2 = s.nextInt(); + int cost = s.nextInt(); + // Check that this line indeed exists in the original file + Triplet t = edges.get(Math.min(v1, v2) + numberOfNodes*Math.max(v1, v2)); + //System.out.println(t.v1 + " " + t.v2 + " " + t.cost); + if (t == null || t.cost != cost) + cheat++; + numberOfEdges += 1; + totalCost += cost; + nodes.add(v1); + nodes.add(v2); + } + s.close(); + } catch (Exception e) { + System.out.println("KO: error while reading your solution : " + e); + } + return new int[] {nodes.size(), numberOfEdges, totalCost, cheat}; + } +} + +class Triplet { + public int v1; + public int v2; + public int cost; + + public Triplet(int v1, int v2, int cost) { + this.v1 = v1; + this.v2 = v2; + this.cost = cost; + } +} + +/** + * Classe implementant l'ADT "Graphe" par une structure de type "liste d'adjacence" + * Contient egalement un constructeur permettant de creer une + * liste d'adjacence sur base d'un String. + * + * @author Simon Hardy + */ +class TestAdjacencyList { + + private LinkedList V; + private LinkedList E; + + public TestAdjacencyList() { + V = new LinkedList(); + E = new LinkedList(); + } + + /* Construction sur base du fichier dont le chemin est passe en argument + * NB : on considere ici que deux numeros differents correspondent + * a deux aeroports differents (et donc deux noeuds differents) */ + public TestAdjacencyList(String s) { + V = new LinkedList(); + E = new LinkedList(); + try + { + File f = new File (s); + Scanner scan = new Scanner(f); + + try { + while (scan.hasNextInt()) + { + TestVertex one, two; + TestVertex v; + TestEdge e; + int n1 = scan.nextInt(); + int n2 = scan.nextInt(); + int e1 = scan.nextInt(); + if ((v = this.contains(n1)) == null) { + one = insertVertex(n1); + } + else { + one = v; + } + if ((v = this.contains(n2)) == null) { + two = insertVertex(n2); + } + else + two = v; + // NB : on autorise 2 aretes avec les memes noeuds + e = insertEdge(one, two, e1); + one.addToI(e); + e.setSrcEdges(one.getI()); + two.addToI(e); + e.setDstEdges(two.getI()); + } + + scan.close(); + } + catch(Exception e) + { + //System.out.println ("Erreur lors de la lecture : " + e.getMessage()); + } + } + catch (FileNotFoundException exception) + { + //System.out.println ("Le fichier n'a pas ete trouve"); + } + } + + /* Methodes de l'ADT */ + public LinkedList vertices() { + return V; + } + + public LinkedList edges() { + return E; + } + + public LinkedList incidentEdges(TestVertex v) { + return v.getI(); + } + + public TestVertex opposite(TestVertex v, TestEdge e) { + if (e.getSrc().getCity() == v.getCity()) return e.getDst(); + else if (e.getDst().getCity() == v.getCity()) return e.getSrc(); + else { + System.out.println("Error in 'opposite'"); + return null; + } + } + + public ArrayList endVertices(TestEdge e) { + ArrayList array = new ArrayList(); + array.add(e.getSrc()); + array.add(e.getDst()); + return array; + } + + public boolean AreAdjacent(TestVertex v, TestVertex w) { + LinkedList edges = v.getI(); + for (int i = 0 ; !edges.isEmpty() ; i++) { + if (edges.get(i).getSrc().getCity() == v.getCity() || edges.get(i).getDst().getCity() == v.getCity()) + return true; + } + return false; + } + + public void replace(TestVertex v, int x) { + v.setCity(x); + } + + public void replace(TestEdge e, int x) { + e.setWeight(x); + } + + public TestVertex insertVertex(int x) { + TestVertex c = new TestVertex(x, V.size()); + V.add(c); // a ameliorer + return c; + } + + public TestEdge insertEdge(TestVertex v, TestVertex w, int x) { + TestEdge c = new TestEdge(v, w, x, E.size()); + E.add(c); // a ameliorer + return c; + } + + public void removeVertex(TestVertex v) { + LinkedList i = v.getI(); + while (!i.isEmpty()) + E.remove(i.getFirst()); // on supprime toutes les arretes incidentes a ce noeud + V.remove(v.getPosition()); // a ameliorer + } + + public void removeEdge(TestEdge e) { + E.remove(e.getPosition()); // a ameliorer + // Enlever les references des I vers E ? + } + + /* Autres methodes interessantes : */ + + /* Si V contient un element dont la valeur est X, on le retourne. + Sinon, on retourne null. */ + public TestVertex contains(int x) { + if (V.isEmpty()) + return null; + int i = 0; + int size = V.size(); + TestVertex c = null; + while (i < size) { + c = V.get(i); + if (c.getCity() == x) + return c; + i++; + } + return null; + } + + public boolean isConnected() { + if (vertices().isEmpty()) return true; + DFS(vertices().getFirst()); + boolean result = true; + for (TestVertex v : vertices()) { + if (v.visited) + v.visited = false; + else + result = false; + } + return result; + } + + public void DFS(TestVertex v) { + v.visited = true; + for (TestEdge e : v.getI()) { + TestVertex opposite = opposite(v, e); + if (!opposite.visited) + DFS(opposite); + // else there is a cycle + } + } + + public int numberOfNodes() { + return vertices().size(); + } + + public int numberOfEdges() { + return edges().size(); + } + + public int cost() { + int sum = 0; + for (TestEdge e : edges()) + sum += e.getWeight(); + return sum; + } +} + +/** + * Classe representant un noeud du graphe + * + * @author Simon Hardy + */ +class TestVertex { + + private int city; + private LinkedList I; + private int position; // position dans V (devrait etre une reference !) + public boolean visited; // for DFS + + public TestVertex(int x) { + city = x; + I = new LinkedList(); + position = 0; + visited = false; + } + + public TestVertex(int x, int pos) { + city = x; + I = new LinkedList(); + position = pos; + } + public int getCity() { + return city; + } + public void setCity(int city) { + this.city = city; + } + public LinkedList getI() { + return I; + } + public void setI(LinkedList i) { + I = i; + } + public void addToI(TestEdge e) { + I.add(e); + } + public int getPosition() { + return position; + } + public void setPosition(int position) { + this.position = position; + } +} + +/** + * Classe representant une arete du graphe + * @author Simon Hardy + **/ +class TestEdge implements Comparable { + + private int weight; + private TestVertex src; + private TestVertex dst; + private LinkedList srcEdges; // reference ! (redondant ?) + private LinkedList dstEdges; // reference ! (redondant ?) + private int position; // position dans V (devrait etre une reference !) + + public TestEdge(TestVertex src, TestVertex dst, int x) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = 0; + } + + public TestEdge(TestVertex src, TestVertex dst, int x, int pos) { + weight = x; + this.src = src ; + this.dst = dst; + srcEdges = src.getI(); + dstEdges = dst.getI(); + position = pos; + } + + public int compareTo(TestEdge e) + { + return this.getWeight() - e.getWeight(); + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public TestVertex getSrc() { + return src; + } + + public void setSrc(TestVertex src) { + this.src = src; + } + + public TestVertex getDst() { + return dst; + } + + public void setDst(TestVertex dst) { + this.dst = dst; + } + + public LinkedList getSrcEdges() { + return srcEdges; + } + + public void setSrcEdges(LinkedList srcEdges) { + this.srcEdges = srcEdges; + } + + public LinkedList getDstEdges() { + return dstEdges; + } + + public void setDstEdges(LinkedList dstEdges) { + this.dstEdges = dstEdges; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } +} diff --git a/lost+found/Kunstleder_32__40_Sarahs_32_Kalender_41_.xml-J2Ro8O b/lost+found/Kunstleder_32__40_Sarahs_32_Kalender_41_.xml-J2Ro8O new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/LAOS HPC.png-sHxfWw b/lost+found/LAOS HPC.png-sHxfWw new file mode 100644 index 00000000..e7f5e51c Binary files /dev/null and b/lost+found/LAOS HPC.png-sHxfWw differ diff --git a/lost+found/LAOS-HPC.png-XBq2hd b/lost+found/LAOS-HPC.png-XBq2hd new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/LAOS-HPC.xml-6E0Syc b/lost+found/LAOS-HPC.xml-6E0Syc new file mode 100644 index 00000000..bc0d2194 --- /dev/null +++ b/lost+found/LAOS-HPC.xml-6E0Syc @@ -0,0 +1,27 @@ + + Job was sent as '$jobname' +Please: +-Close the lid +-Turn on the Ventilation +-And press 'start' on the Lasercutter $name + visicut + + false + 5.0 + true + false + true + 192.168.123.111 + 69 + 0.001 + -1.0 + -1.0 + -1 + 0.0 + 300.0 + 210.0 + + LAOS-HPC.png + www.laoslaser.org + LAOS-HPC + \ No newline at end of file diff --git a/lost+found/LAOS-Suda.png-IfBowE b/lost+found/LAOS-Suda.png-IfBowE new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/LAOS_32_HPC.xml-HjEcM5 b/lost+found/LAOS_32_HPC.xml-HjEcM5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/LICENSE-JpYPOp b/lost+found/LICENSE-JpYPOp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/LPComplexityTests.java-Q35ITC b/lost+found/LPComplexityTests.java-Q35ITC new file mode 100644 index 00000000..640b4e1c --- /dev/null +++ b/lost+found/LPComplexityTests.java-Q35ITC @@ -0,0 +1,32 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; + +import student.LinearProbingHashST; + +import static org.junit.Assert.assertTrue; + +public class LPComplexityTests { + @Test(timeout = 300) + @Grade(value = 50) + public void complexityTest() { + LinearProbingHashST st = new LinearProbingHashST<>(17); + + int i = 0; + String sources[] = Helpers.readfile("data/hash-attack.txt", 3000); + + long t0 = System.currentTimeMillis(); + for (String key : sources){ + st.put(key, i); + i++; + } + long t1 = System.currentTimeMillis(); + System.out.println("time elapsed=:"+(t1-t0)); + + assertTrue(!st.isEmpty()); + + } + +} + diff --git a/lost+found/LPHackAttackTests.java-7Uo14C b/lost+found/LPHackAttackTests.java-7Uo14C new file mode 100644 index 00000000..1f64bcea --- /dev/null +++ b/lost+found/LPHackAttackTests.java-7Uo14C @@ -0,0 +1,80 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Random; + +import student.LinearProbingHashST; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +@RunWith(Parameterized.class) +public class LPHackAttackTests { + private Instance instance; + private static final int TEST_SIZE = 10; + private static final int INSTANCE_SIZE = 5; + + public LPHackAttackTests(Instance instance) { + this.instance = instance; + } + + @Test + @Grade(value = 4) + public void HackAttackTest() { + LinearProbingHashST st = new LinearProbingHashST<>(instance.capaity); + + int i = 0; + for (String key : instance.words){ + st.put(key, i); + i++; + } + + //System.out.println("cap="+instance.capaity); + + i = 0; + for (String s : st.keys()) { + assertEquals(new Integer(i),st.get(s)); + assertEquals(instance.words[i],s); + i++; + } + + assertTrue(i != 0); + } + + @Parameterized.Parameters + public static Instance[] data() { + Random wordsRandom = new Random(12345L); + Random capacityRandom = new Random(456L); + + String sources[] = Helpers.readfile("data/hash-attack.txt", 1000); + + Instance[] instances = new Instance[INSTANCE_SIZE]; + + for (int j = 0; j < INSTANCE_SIZE; j++) { + String[] tests = new String[TEST_SIZE]; + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = sources[wordsRandom.nextInt(999)+1]; + } + + instances[j] = new Instance(tests, capacityRandom.nextInt(TEST_SIZE)+1 ); + } + + return instances; + } + + private static class Instance{ + String[] words; + int capaity; + + public Instance(String[] words, int capaity) { + this.words = words; + this.capaity = capaity; + } + } + +} + diff --git a/lost+found/LPStaticTests.java-COcStD b/lost+found/LPStaticTests.java-COcStD new file mode 100644 index 00000000..60b98ab7 --- /dev/null +++ b/lost+found/LPStaticTests.java-COcStD @@ -0,0 +1,90 @@ +package tests; + +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +import student.LinearProbingHashST; + +import static org.junit.Assert.assertTrue; + +public class LPStaticTests { + + @Test + @Grade(value = 10) + public void staticTest() { + LinearProbingHashST st = new LinearProbingHashST<>(11); + String str = "S E A R C H E X A M P L E"; + + String expectedKeys = "X C E H L M P R S A "; + String expectedVals = "7 4 12 5 11 9 10 3 0 8 "; + + int i = 0; + for (String key : str.split(" ")){ + st.put(key, i); + i++; + } + + // print keys + String obtainedKeys = ""; + String obtainedVals = ""; + for (String s : st.keys()) { + obtainedKeys += s + " "; + obtainedVals += st.get(s) + " "; + } + + assertEquals(obtainedKeys,expectedKeys); + assertEquals(obtainedVals,expectedVals); + + } + + + @Test + @Grade(value = 20) + public void correctnessTest() { + + LinearProbingHashST st = new LinearProbingHashST<>(7); + + String instance[] = generateInstance(); + Integer expectedVals[] = {12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15}; + + int i = 0; + for (String key : instance){ + st.put(key, i); + i++; + } + + //System.out.println("cap="+instance.capaity); + i = 0; + for (String s : st.keys()) { + assertEquals(expectedVals[i],st.get(s)); + assertEquals(instance[expectedVals[i]],s); + i++; + } + + assertTrue(i != 0); + } + + public String[] generateInstance(){ + String[] sp = new String[]{"Aa", "BB"}; + String[] list = new String[16]; + + int count = 0; + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + for (int k = 0; k < 2; k++) { + for (int l = 0; l < 2; l++) { + list[count] = sp[i] + sp[j] + sp[k] + sp[l]; + count++; + } + } + } + } + + return list; + } + +} + + diff --git a/lost+found/LSINF1121_EXAM0119_LinearProbing.zip-CH0yWC b/lost+found/LSINF1121_EXAM0119_LinearProbing.zip-CH0yWC new file mode 100644 index 00000000..e45bad74 Binary files /dev/null and b/lost+found/LSINF1121_EXAM0119_LinearProbing.zip-CH0yWC differ diff --git a/lost+found/LSINF1121_PART1_CircularLinkedList.zip-iB57MM b/lost+found/LSINF1121_PART1_CircularLinkedList.zip-iB57MM new file mode 100644 index 00000000..e11e6a96 Binary files /dev/null and b/lost+found/LSINF1121_PART1_CircularLinkedList.zip-iB57MM differ diff --git a/lost+found/LSINF1121_PART1_Stack.zip-cS0MuP b/lost+found/LSINF1121_PART1_Stack.zip-cS0MuP new file mode 100644 index 00000000..c719f43c Binary files /dev/null and b/lost+found/LSINF1121_PART1_Stack.zip-cS0MuP differ diff --git a/lost+found/LSINF1121_PART1_Stack.zip-fk8sYx b/lost+found/LSINF1121_PART1_Stack.zip-fk8sYx new file mode 100644 index 00000000..c719f43c Binary files /dev/null and b/lost+found/LSINF1121_PART1_Stack.zip-fk8sYx differ diff --git a/lost+found/LSINF1121_PART2_GlobalWarming.zip-3vKOyE b/lost+found/LSINF1121_PART2_GlobalWarming.zip-3vKOyE new file mode 100644 index 00000000..ba6b771e Binary files /dev/null and b/lost+found/LSINF1121_PART2_GlobalWarming.zip-3vKOyE differ diff --git a/lost+found/LSINF1121_PART2_Median.zip-H9pxiA b/lost+found/LSINF1121_PART2_Median.zip-H9pxiA new file mode 100644 index 00000000..90227c0f Binary files /dev/null and b/lost+found/LSINF1121_PART2_Median.zip-H9pxiA differ diff --git a/lost+found/LSINF1121_PART2_MergeSort.zip-J0VfdX b/lost+found/LSINF1121_PART2_MergeSort.zip-J0VfdX new file mode 100644 index 00000000..b3aab941 Binary files /dev/null and b/lost+found/LSINF1121_PART2_MergeSort.zip-J0VfdX differ diff --git a/lost+found/LSINF1121_PART2_UnionIntervals.zip-PxQiZj b/lost+found/LSINF1121_PART2_UnionIntervals.zip-PxQiZj new file mode 100644 index 00000000..85952f8d Binary files /dev/null and b/lost+found/LSINF1121_PART2_UnionIntervals.zip-PxQiZj differ diff --git a/lost+found/LSINF1121_PART3_BinarySearchTree.zip-4teYHG b/lost+found/LSINF1121_PART3_BinarySearchTree.zip-4teYHG new file mode 100644 index 00000000..51ea8b52 Binary files /dev/null and b/lost+found/LSINF1121_PART3_BinarySearchTree.zip-4teYHG differ diff --git a/lost+found/LSINF1121_PART3_OrderedBstIterator.zip-rcMj37 b/lost+found/LSINF1121_PART3_OrderedBstIterator.zip-rcMj37 new file mode 100644 index 00000000..3e8eaa78 Binary files /dev/null and b/lost+found/LSINF1121_PART3_OrderedBstIterator.zip-rcMj37 differ diff --git a/lost+found/LSINF1121_PART3_UnitTestsRedBlackTree.zip-RhCj5C b/lost+found/LSINF1121_PART3_UnitTestsRedBlackTree.zip-RhCj5C new file mode 100644 index 00000000..8b1834b8 Binary files /dev/null and b/lost+found/LSINF1121_PART3_UnitTestsRedBlackTree.zip-RhCj5C differ diff --git a/lost+found/LSINF1121_PART4_IncrementalHash.zip-fvs4Pt b/lost+found/LSINF1121_PART4_IncrementalHash.zip-fvs4Pt new file mode 100644 index 00000000..6c26e597 Binary files /dev/null and b/lost+found/LSINF1121_PART4_IncrementalHash.zip-fvs4Pt differ diff --git a/lost+found/LSINF1121_PART4_RabinKarp.zip-FsGsJg b/lost+found/LSINF1121_PART4_RabinKarp.zip-FsGsJg new file mode 100644 index 00000000..8d2603fc Binary files /dev/null and b/lost+found/LSINF1121_PART4_RabinKarp.zip-FsGsJg differ diff --git a/lost+found/LSINF1121_PART5_BinaryHeapPush.zip-BTALFq b/lost+found/LSINF1121_PART5_BinaryHeapPush.zip-BTALFq new file mode 100644 index 00000000..5afa590a Binary files /dev/null and b/lost+found/LSINF1121_PART5_BinaryHeapPush.zip-BTALFq differ diff --git a/lost+found/LSINF1121_PART5_GlobalWarming.zip-hH1COC b/lost+found/LSINF1121_PART5_GlobalWarming.zip-hH1COC new file mode 100644 index 00000000..f86b9ee6 Binary files /dev/null and b/lost+found/LSINF1121_PART5_GlobalWarming.zip-hH1COC differ diff --git a/lost+found/LSINF1121_PART5_Huffman.zip-7NqcXa b/lost+found/LSINF1121_PART5_Huffman.zip-7NqcXa new file mode 100644 index 00000000..4575b46a Binary files /dev/null and b/lost+found/LSINF1121_PART5_Huffman.zip-7NqcXa differ diff --git a/lost+found/LSINF1121_PART6_BreadthFirstShortestPaths.zip-E1JJsT b/lost+found/LSINF1121_PART6_BreadthFirstShortestPaths.zip-E1JJsT new file mode 100644 index 00000000..6b129e97 Binary files /dev/null and b/lost+found/LSINF1121_PART6_BreadthFirstShortestPaths.zip-E1JJsT differ diff --git a/lost+found/LSINF1121_PART6_ConnectedComponents.zip-yU76FV b/lost+found/LSINF1121_PART6_ConnectedComponents.zip-yU76FV new file mode 100644 index 00000000..6d71aa99 Binary files /dev/null and b/lost+found/LSINF1121_PART6_ConnectedComponents.zip-yU76FV differ diff --git a/lost+found/LSINF1121_PART6_DepthFirstPaths.zip-GEuOnW b/lost+found/LSINF1121_PART6_DepthFirstPaths.zip-GEuOnW new file mode 100644 index 00000000..56b5215b Binary files /dev/null and b/lost+found/LSINF1121_PART6_DepthFirstPaths.zip-GEuOnW differ diff --git a/lost+found/LSINF1121_PART6_Digraph.zip-6eNyvl b/lost+found/LSINF1121_PART6_Digraph.zip-6eNyvl new file mode 100644 index 00000000..aae9b006 Binary files /dev/null and b/lost+found/LSINF1121_PART6_Digraph.zip-6eNyvl differ diff --git a/lost+found/LSINF1121_PART6_GlobalWarming.zip-pivAuY b/lost+found/LSINF1121_PART6_GlobalWarming.zip-pivAuY new file mode 100644 index 00000000..7b5b3c21 Binary files /dev/null and b/lost+found/LSINF1121_PART6_GlobalWarming.zip-pivAuY differ diff --git a/lost+found/LSINF1121_PART6_Maze.zip-AaOzcG b/lost+found/LSINF1121_PART6_Maze.zip-AaOzcG new file mode 100644 index 00000000..784b6562 Binary files /dev/null and b/lost+found/LSINF1121_PART6_Maze.zip-AaOzcG differ diff --git a/lost+found/LSINF1121_PART6_WordTransformation.zip-B5ufmS b/lost+found/LSINF1121_PART6_WordTransformation.zip-B5ufmS new file mode 100644 index 00000000..ad8229b2 Binary files /dev/null and b/lost+found/LSINF1121_PART6_WordTransformation.zip-B5ufmS differ diff --git a/lost+found/LaserScriptExample.ls-8jK0yD b/lost+found/LaserScriptExample.ls-8jK0yD new file mode 100644 index 00000000..da19c3a6 --- /dev/null +++ b/lost+found/LaserScriptExample.ls-8jK0yD @@ -0,0 +1,18 @@ +function rectangle(x, y, width, height) +{ + move(x, y); + line(x+width, y); + line(x+width, y+height); + line(x, y+height); + line(x, y); +} +for (var power = 0; power < 100; power += 10) +{ + set("power", power); + for (var speed = 0; speed < 100; speed += 10) + { + set("speed", speed); + rectangle(11*power/10.0, 11*speed/10.0, 10, 10); + } +} + diff --git a/lost+found/LaserScriptFocustest.ls-jed09D b/lost+found/LaserScriptFocustest.ls-jed09D new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Laser_32_acrylic.xml-3RQhLB b/lost+found/Laser_32_acrylic.xml-3RQhLB new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Laseracryl.xml-qSY3mI b/lost+found/Laseracryl.xml-qSY3mI new file mode 100644 index 00000000..5e110319 --- /dev/null +++ b/lost+found/Laseracryl.xml-qSY3mI @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Laseracryl + + 0.8 + + \ No newline at end of file diff --git a/lost+found/Laseracryl_32__40_Nametags_41_.xml-G9s6ro b/lost+found/Laseracryl_32__40_Nametags_41_.xml-G9s6ro new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Latex.xml-T3Rz3h b/lost+found/Latex.xml-T3Rz3h new file mode 100644 index 00000000..4142ff9a --- /dev/null +++ b/lost+found/Latex.xml-T3Rz3h @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Latex + + 0.4 + + \ No newline at end of file diff --git a/lost+found/Leder.xml-Sa2MBJ b/lost+found/Leder.xml-Sa2MBJ new file mode 100644 index 00000000..b3123281 --- /dev/null +++ b/lost+found/Leder.xml-Sa2MBJ @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Leder + + 0.0 + + \ No newline at end of file diff --git a/lost+found/LibLaserCut.jar-j8RWdT b/lost+found/LibLaserCut.jar-j8RWdT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Linde_40_Holzart_41_.xml-Jkhoab b/lost+found/Linde_40_Holzart_41_.xml-Jkhoab new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/LinearProbingHashST.java-asvEGC b/lost+found/LinearProbingHashST.java-asvEGC new file mode 100644 index 00000000..371c3c0f --- /dev/null +++ b/lost+found/LinearProbingHashST.java-asvEGC @@ -0,0 +1,85 @@ +package student; + +import java.util.Arrays; + +/** + * Symbol-table implementation with linear-probing hash table. + */ +public class LinearProbingHashST { + + private int n; // number of key-value pairs in the symbol table + private int m; // size of linear probing table + private Key[] keys; // the keys + private Value[] vals; // the values + + + /** + * Initializes an empty symbol table. + */ + public LinearProbingHashST() { + this(16); + } + + /** + * Initializes an empty symbol table with the specified initial capacity. + */ + public LinearProbingHashST(int capacity) { + m = capacity; + n = 0; + keys = (Key[]) new Object[m]; + vals = (Value[]) new Object[m]; + } + + /** + * Returns the number of key-value pairs in this symbol table. + */ + public int size() { + return n; + } + + /** + * Returns true if this symbol table is empty. + */ + public boolean isEmpty() { + return size() == 0; + } + + // hash function for keys - returns value between 0 and M-1 + private int hash(Key key) { + return (key.hashCode() & 0x7fffffff) % m; + } + + /** + * resizes the hash table to the given capacity by re-hashing all of the keys + */ + private void resize(int capacity) { + @@resize@@ + } + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value. + */ + public void put(Key key, Value val) { + @@put@@ + } + + /** + * Returns the value associated with the specified key. + */ + public Value get(Key key) { + @@get@@ + } + + /** + * Returns all keys in this symbol table as an Iterable + */ + public Iterable keys() { + java.util.Queue queue = new java.util.LinkedList(); + for (int i = 0; i < m; i++) + if (keys[i] != null) queue.add(keys[i]); + return queue; + } + + +} diff --git a/lost+found/MDF.xml-ZSafZX b/lost+found/MDF.xml-ZSafZX new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Map.java-LwYTT8 b/lost+found/Map.java-LwYTT8 new file mode 100644 index 00000000..16c4d3f1 --- /dev/null +++ b/lost+found/Map.java-LwYTT8 @@ -0,0 +1,32 @@ +import java.util.Set; + +/* Your class should be named MyMap and have at least a no-argument constructor. */ +public interface Map { + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key); + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value); + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet(); + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key); + + /* Returns the hash code value for this map. */ + public int hashCode(); + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty(); + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value); + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key); + + /* Returns the number of key-value mappings in this map. */ + public int size(); +} diff --git a/lost+found/Map.java-ljYW7J b/lost+found/Map.java-ljYW7J new file mode 100644 index 00000000..16c4d3f1 --- /dev/null +++ b/lost+found/Map.java-ljYW7J @@ -0,0 +1,32 @@ +import java.util.Set; + +/* Your class should be named MyMap and have at least a no-argument constructor. */ +public interface Map { + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key); + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value); + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet(); + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key); + + /* Returns the hash code value for this map. */ + public int hashCode(); + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty(); + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value); + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key); + + /* Returns the number of key-value mappings in this map. */ + public int size(); +} diff --git a/lost+found/Map.java-pXMuH0 b/lost+found/Map.java-pXMuH0 new file mode 100644 index 00000000..16c4d3f1 --- /dev/null +++ b/lost+found/Map.java-pXMuH0 @@ -0,0 +1,32 @@ +import java.util.Set; + +/* Your class should be named MyMap and have at least a no-argument constructor. */ +public interface Map { + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key); + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value); + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet(); + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key); + + /* Returns the hash code value for this map. */ + public int hashCode(); + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty(); + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value); + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key); + + /* Returns the number of key-value mappings in this map. */ + public int size(); +} diff --git a/lost+found/Map.java-tt1Af2 b/lost+found/Map.java-tt1Af2 new file mode 100644 index 00000000..16c4d3f1 --- /dev/null +++ b/lost+found/Map.java-tt1Af2 @@ -0,0 +1,32 @@ +import java.util.Set; + +/* Your class should be named MyMap and have at least a no-argument constructor. */ +public interface Map { + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key); + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value); + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet(); + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key); + + /* Returns the hash code value for this map. */ + public int hashCode(); + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty(); + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value); + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key); + + /* Returns the number of key-value mappings in this map. */ + public int size(); +} diff --git a/lost+found/MapInterface.java-1YGRo7 b/lost+found/MapInterface.java-1YGRo7 new file mode 100644 index 00000000..ba2930aa --- /dev/null +++ b/lost+found/MapInterface.java-1YGRo7 @@ -0,0 +1,30 @@ +/* A Map creates mappings between Strings and objects of type V. + * A class implementing this interface should have at least one constructor + * with no argument, initializing the map. + */ +public interface MapInterface { + + public V get(String key); + + /* Same as 'get(key)', but instead of hashing 'key', the map will directly use 'hashCode' + * and check if there is indeed an entry with key 'key' */ + public V get(String key, int hashCode); + + public void put(String key, V value); + + /* Same as 'put(key, value)', but instead of hashing 'key', + * it will directly use 'hashCode' */ + public void put(String key, V value, int hashCode); + + public int size(); + + /* Returns the hash of the String 'key' + * Complexity required : O(m) */ + public int hashCode(String key); + + /* Returns the hash of the String 'key' based on the previous hash 'lastHash' + * and on the previous character leading the sentence 'lastChar' + * Complexity required : O(1) */ + public int incrementalHashCode(String key, int lastHash, int lastChar); + +} diff --git a/lost+found/MapInterface.java-QzXPpU b/lost+found/MapInterface.java-QzXPpU new file mode 100644 index 00000000..473deaa7 --- /dev/null +++ b/lost+found/MapInterface.java-QzXPpU @@ -0,0 +1,30 @@ +/* A Map creates mappings between objects of type K and V. + * A class implementing this interface should have at least one constructor + * with no argument, initializing the map. + */ +public interface MapInterface { + + public V get(K key); + + /* Same as 'get(key)', but instead of hashing 'key', the map will directly use 'hashCode' + * and check if there is indeed an entry with key 'key' */ + public V get(K key, int hashCode); + + public void put(K key, V value); + + /* Same as 'put(key, value)', but instead of hashing 'key', + * it will directly use 'hashCode' */ + public void put(K key, V value, int hashCode); + + public int size(); + + /* Returns the hash of the K 'key' + * Complexity required : O(m) */ + public int hashCode(K key); + + /* Returns the hash of the key with length 'keyLength' and whose last character is 'lastKeyChar', + * based on the previous hash 'lastHash' and on the previous character leading the sentence 'lastChar' + * Complexity required : O(1) */ + public int incrementalHashCode(int keyLength, int lastKeyChar, int lastHash, int lastChar); + +} \ No newline at end of file diff --git a/lost+found/MapProps.scala-Axr5Pq b/lost+found/MapProps.scala-Axr5Pq new file mode 100644 index 00000000..87f25414 --- /dev/null +++ b/lost+found/MapProps.scala-Axr5Pq @@ -0,0 +1,413 @@ +import org.scalacheck.Properties +import org.scalacheck.Prop +import org.scalacheck.Gen.{listOf, alphaStr, numChar, oneOf, choose} +import java.util.HashMap +import org.scalacheck.Gen +import org.scalacheck.Arbitrary.arbitrary +import math.abs +import math.max +import math.min + +object MapProps extends Properties("Map") { + val debug = false + + property("put") = { + if (debug) println("Start put") + Prop.forAll { (key: String, value1: Int, value2: Int) => + try { + val map = new MyMap[String, Int]() + map.put(key, value1) + map.put(key, value2) == value1 + } catch { + case e: Exception => false + } + } + } + + property("get") = { + if (debug) println("Start get") + Prop.forAll { (key: String, value: Int) => + try { + val map = new MyMap[String, Int]() + map.put(key, value) + map.get(key) == value + } catch { + case e: Exception => false + } + } + } + + property("containsKey") = { + if (debug) println("Start containsKey") + Prop.forAll { (key: String, value: Int) => + try { + val map = new MyMap[String, Int]() + map.put(key, value) + map.containsKey(key) + } catch { + case e: Exception => false + } + } + } + + property("containsValue") = { + if (debug) println("Start containsValue") + Prop.forAll { (key: String, value: Int) => + try { + val map = new MyMap[String, Int]() + map.put(key, value) + map.containsValue(value) + } catch { + case e: Exception => false + } + } + } + + property("entrySet") = { + if (debug) println("Start entrySet") + Prop.forAll { (key: Int, value: String) => + try { + val map = new MyMap[Int, String]() + map.put(key, value) + val map2 = new HashMap[Int, String]() + map2.put(key, value) + val set = map.entrySet() + val it = set.iterator() + val pair = it.next() + set.size() == 1 && pair.getKey().equals(key) && pair.getValue().equals(value) && !it.hasNext() && + set.equals(map2.entrySet()) + } catch { + case e: Exception => false + } + } + } + + property("entrySet_equals") = { + if (debug) println("Start entrySet_equals") + Prop.forAll { (key: Int, value: String) => + try { + val map = new MyMap[Int, String]() + map.put(key, value) + map.put(key+1, value) + map.put(key+2, value) + val map2 = new HashMap[Int, String]() + map2.put(key+2, value) + map2.put(key, value) + map2.put(key+1, value) + map.entrySet().equals(map2.entrySet()) + } catch { + case e: Exception => false + } + } + } + + property("hashCode") = { + if (debug) println("Start hashCode") + Prop.forAll { (key: String, value: Int) => + try { + val map = new MyMap[String, Int]() + val map2 = new MyMap[String, Int]() + map.put(key, value) + map2.put(key, value) + val cond = map.hashCode() == map2.hashCode() + map.put("autre", 42) + map2.put("autre", 42) + map.hashCode() == map2.hashCode() && cond + + } catch { + case e: Exception => false + } + } + } + + property("isEmpty") = { + if (debug) println("Start isEmpty") + Prop.forAll { (key: String, value: Double) => + try { + val map = new MyMap[String, Double]() + val cond = map.isEmpty() + map.put(key, value) + !map.isEmpty() && cond + } catch { + case e: Exception => false + } + } + } + + property("remove") = { + if (debug) println("Start remove") + Prop.forAll { (key: String, value: Double) => + try { + val map = new MyMap[String, Double]() + map.put(key, value) + map.remove(key) == value && map.isEmpty() + } catch { + case e: Exception => false + } + } + } + + property("size") = { + if (debug) println(List(1,2,3).forall{x: Int => x < 4}) + Prop.forAll { (key: String, key2: String, value: Double) => + try { + val map = new MyMap[String, Double]() + val cond = (map.size() == 0) + map.put(key, value) + val cond2 = (map.size() == 1) + map.put(key2, value) + cond && cond2 && (map.size() == 2 || key.equals(key2)) + } catch { + case e: Exception => false + } + } + } + + property("collisions") = { + try { + if (debug) println("Start collisions") + val bigMap = new MyMap[String, Double]() + var i = 0 + Prop.forAll { (key: String, value: Double) => + if (!bigMap.containsKey(key)) + i+=1 + bigMap.put(key, value) + bigMap.size() == i && bigMap.containsKey(key) && bigMap.containsValue(value) && bigMap.get(key) == value + } + } catch { + case e: Exception => false + } + } + + + val numbersGen = listOf(choose(1, 100)) + if (debug) println("Start multiple_operations") + property("multiple_operations") = Prop.forAll(numbersGen) { numbers => + try { + val bigMap = new MyMap[Int, Int]() + val cond1 = numbers.forall { n: Int => + bigMap.put(n, -n) + bigMap.containsKey(n) && bigMap.containsValue(-n) && bigMap.get(n) == -n && !bigMap.isEmpty() + } + val cond2 = numbers.forall { n: Int => + val size = bigMap.size() + if (bigMap.containsKey(n)) + bigMap.remove(n) == -n && bigMap.size() == size-1 + else { + bigMap.remove(n) // doesn't remove anything + bigMap.size() == size + } + } + val cond3 = bigMap.isEmpty() && bigMap.size() == 0 + if (debug) { + if (!cond1) println("cond1") + if (!cond2) println("cond2") + if (!cond3) println("cond3 " + bigMap.size() + " " + bigMap.entrySet().iterator.next().getKey() + " " + numbers) + } + cond1 && cond2 && cond3 + } catch { + case e: Exception => false + } + } + + property("put_complexity") = { + try { + if (debug) println("Start put_complexity") + val qty = 1000000 + val map = new MyMap[Int, Int]() + val hashMap = new HashMap[Int, Int]() + val t1 = System.nanoTime() + for (i <- 1 to qty) + hashMap.put(i, -i) + val t2 = System.nanoTime() + for (i <- 1 to qty) + map.put(i, -i) + val t3 = System.nanoTime() + if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000) + max(t2-t1, t3-t2) <= 20*min(t2-t1, t3-t2) + } catch { + case e: Exception => false + } + } + + property("get_complexity") = { + try { + if (debug) println("Start get_complexity") + val qty = 1000000 + val map = new MyMap[Int, Int]() + val hashMap = new HashMap[Int, Int]() + val t1 = System.nanoTime() + for (i <- 1 to qty) + hashMap.put(i, -i) + for (i <- 1 to qty) + hashMap.get(i) + val t2 = System.nanoTime() + for (i <- 1 to qty) + map.put(i, -i) + for (i <- 1 to qty) + map.get(i) + val t3 = System.nanoTime() + if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000) + max(t2-t1, t3-t2) <= 20*min(t2-t1, t3-t2) + } catch { + case e: Exception => false + } + } + + property("remove_complexity") = { + try { + if (debug) println("Start remove_complexity") + //val qty = 1000000 + val qty1 = 5000 + val qty2 = 10000 + val map = new MyMap[Int, Int]() + val hashMap = new HashMap[Int, Int]() + val t1 = System.nanoTime() + for (i <- 1 to qty1) + hashMap.put(i, -i) + for (i <- 1 to qty1) + hashMap.remove(i) + val t2 = System.nanoTime() + for (i <- 1 to qty1) + map.put(i, -i) + for (i <- 1 to qty1) + map.remove(i) + val t3 = System.nanoTime() + for (i <- 1 to qty2) + hashMap.put(i, -i) + for (i <- 1 to qty2) + hashMap.remove(i) + val t4 = System.nanoTime() + for (i <- 1 to qty2) + map.put(i, -i) + for (i <- 1 to qty2) + map.remove(i) + val t5 = System.nanoTime() + if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000 + " " + (t4-t3)/1000000 + " " + (t5-t4)/1000000) + // max(t2-t1, t3-t2) <= 60*min(t2-t1, t3-t2) + (t5 - t4).toDouble / (t3 - t2).toDouble <= 4 * (t4 - t3).toDouble / (t2 - t1).toDouble + } catch { + case e: Exception => false + } + } + + property("contains_key_complexity") = { + try { + if (debug) println("Start contains_key complexity") + val qty = 1000000 + val map = new MyMap[Int, Int]() + val hashMap = new HashMap[Int, Int]() + val t1 = System.nanoTime() + for (i <- 1 to qty) + hashMap.put(i, -i) + for (i <- 1 to qty) + hashMap.containsKey(i) + val t2 = System.nanoTime() + for (i <- 1 to qty) + map.put(i, -i) + for (i <- 1 to qty) + map.containsKey(i) + val t3 = System.nanoTime() + if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000) + max(t2-t1, t3-t2) <= 20*min(t2-t1, t3-t2) + } catch { + case e: Exception => false + } + } + + property("contains_value_complexity") = { + try { + if (debug) println("Start contains_value complexity") + val qty = 10000 + val map = new MyMap[Int, Int]() + val hashMap = new HashMap[Int, Int]() + val t1 = System.nanoTime() + for (i <- 1 to qty) + hashMap.put(i, -i) + for (i <- 1 to qty) + hashMap.containsValue(-i) + val t2 = System.nanoTime() + for (i <- 1 to qty) + map.put(i, -i) + for (i <- 1 to qty) + map.containsValue(-i) + val t3 = System.nanoTime() + if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000) + max(t2-t1, t3-t2) <= 20*min(t2-t1, t3-t2) + } catch { + case e: Exception => false + } + } + + // Hashmap cheats a lot, don't think we ask the students to optimize so much + //property("entry_set_complexity") = { + // try { + // if (debug) println("Start entry_set_complexity") + // //val qty = 1000000 + // val qty = 20000 + // val map = new MyMap[Int, Int]() + // val hashMap = new HashMap[Int, Int]() + // val t1 = System.nanoTime() + // for (i <- 1 to qty) + // hashMap.put(i, -i) + // hashMap.entrySet() + // val t2 = System.nanoTime() + // for (i <- 1 to qty) + // map.put(i, -i) + // map.entrySet() + // val t3 = System.nanoTime() + // if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000) + // max(t2-t1, t3-t2) <= 20*min(t2-t1, t3-t2) + // } catch { + // case e: Exception => false + // } + //} + + property("is_empty_complexity") = { + try { + if (debug) println("Start is_empty_complexity") + val qty = 1000000 + val map = new MyMap[Int, Int]() + val hashMap = new HashMap[Int, Int]() + val t1 = System.nanoTime() + for (i <- 1 to qty) { + hashMap.put(i, -i) + hashMap.isEmpty() + } + val t2 = System.nanoTime() + for (i <- 1 to qty) { + map.put(i, -i) + map.isEmpty() + } + val t3 = System.nanoTime() + if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000) + max(t2-t1, t3-t2) <= 20*min(t2-t1, t3-t2) + } catch { + case e: Exception => false + } + } + + property("size_complexity") = { + try { + if (debug) println("Start size_complexity") + val qty = 1000000 + val map = new MyMap[Int, Int]() + val hashMap = new HashMap[Int, Int]() + val t1 = System.nanoTime() + for (i <- 1 to qty) { + hashMap.put(i, -i) + hashMap.size() + } + val t2 = System.nanoTime() + for (i <- 1 to qty) { + map.put(i, -i) + map.size() + } + val t3 = System.nanoTime() + if (debug) println((t2-t1)/1000000 + " " + (t3-t2)/1000000) + max(t2-t1, t3-t2) <= 20*min(t2-t1, t3-t2) + } catch { + case e: Exception => false + } + } +} \ No newline at end of file diff --git a/lost+found/Maze.java-Ca44pr b/lost+found/Maze.java-Ca44pr new file mode 100644 index 00000000..88fd6b68 --- /dev/null +++ b/lost+found/Maze.java-Ca44pr @@ -0,0 +1 @@ +@@implem@@ \ No newline at end of file diff --git a/lost+found/Maze.java-TbT287 b/lost+found/Maze.java-TbT287 new file mode 100644 index 00000000..0d403130 --- /dev/null +++ b/lost+found/Maze.java-TbT287 @@ -0,0 +1,3 @@ +package templates; + +@@implem@@ \ No newline at end of file diff --git a/lost+found/Median.java-HUStfN b/lost+found/Median.java-HUStfN new file mode 100644 index 00000000..84ff083d --- /dev/null +++ b/lost+found/Median.java-HUStfN @@ -0,0 +1,4 @@ +public class Median { + + @ @question1@@ +} \ No newline at end of file diff --git a/lost+found/Median.java-iWyJ7i b/lost+found/Median.java-iWyJ7i new file mode 100644 index 00000000..84ff083d --- /dev/null +++ b/lost+found/Median.java-iWyJ7i @@ -0,0 +1,4 @@ +public class Median { + + @ @question1@@ +} \ No newline at end of file diff --git a/lost+found/MergeSort.java-VdpWqR b/lost+found/MergeSort.java-VdpWqR new file mode 100644 index 00000000..67360e52 --- /dev/null +++ b/lost+found/MergeSort.java-VdpWqR @@ -0,0 +1,33 @@ +public class MergeSort { + private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { + for (int k = lo; k <= hi; k++) { + aux[k] = a[k]; + } + + int i = lo; + int j = mid + 1; + for (int k = lo; k <= hi; k++) { + if (i > mid) { + a[k] = aux[j++]; + } else if (j > hi) { + a[k] = aux[i++]; + } else if (aux[j].compareTo(aux[i]) < 0) { + a[k] = aux[j++]; + } else { + a[k] = aux[i++]; + } + } + } + + // Mergesort a[lo..hi] using auxiliary array aux[lo..hi] + private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { + //TODO Q1 + } + + /** + * Rearranges the array in ascending order, using the natural order + */ + public static void sort(Comparable[] a) { + //TODO Q2 + } +} diff --git a/lost+found/MergeSort.java-mh2mIt b/lost+found/MergeSort.java-mh2mIt new file mode 100644 index 00000000..ccc43b39 --- /dev/null +++ b/lost+found/MergeSort.java-mh2mIt @@ -0,0 +1,33 @@ +public class MergeSort { + private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { + for (int k = lo; k <= hi; k++) { + aux[k] = a[k]; + } + + int i = lo; + int j = mid + 1; + for (int k = lo; k <= hi; k++) { + if (i > mid) { + a[k] = aux[j++]; + } else if (j > hi) { + a[k] = aux[i++]; + } else if (aux[j].compareTo(aux[i]) < 0) { + a[k] = aux[j++]; + } else { + a[k] = aux[i++]; + } + } + } + + // Mergesort a[lo..hi] using auxiliary array aux[lo..hi] + private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { + @ @question1@@ + } + + /** + * Rearranges the array in ascending order, using the natural order + */ + public static void sort(Comparable[] a) { + @ @question2@@ + } +} diff --git a/lost+found/Moosgummi_32_PU_32__40_Polyuretan_41_.xml-LiwMPK b/lost+found/Moosgummi_32_PU_32__40_Polyuretan_41_.xml-LiwMPK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Moosgummi_44_braun.xml-EvTHHx b/lost+found/Moosgummi_44_braun.xml-EvTHHx new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Multiplex.xml-mGhhbO b/lost+found/Multiplex.xml-mGhhbO new file mode 100644 index 00000000..f139cf0f --- /dev/null +++ b/lost+found/Multiplex.xml-mGhhbO @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Multiplex + + 3.5 + + \ No newline at end of file diff --git a/lost+found/MyBucketSort.java-3JhorW b/lost+found/MyBucketSort.java-3JhorW new file mode 100644 index 00000000..50cb65bd --- /dev/null +++ b/lost+found/MyBucketSort.java-3JhorW @@ -0,0 +1,46 @@ +import java.util.ArrayList; + +public class MyBucketSort { + + /* Main method, only used in a debug purpose */ + public static void main(String[] args) { + int[] tab = {20, 13, 12, 10}; + int[] result = sort(tab, 0); + for (int i = 0 ; i < 4 ; i++) + System.out.println(result[i]); + } + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) */ + public static int[] sort(int[] tab, int digit) { + int[] result = new int[tab.length]; + ArrayList> B = new ArrayList>(10); + for (int i = 0 ; i < 10 ; i++) + B.add(i, new ArrayList()); + for (int i = 0 ; i < tab.length ; i++) { + int number = tab[i]; + int dig = getDigit(number, digit); + B.get(dig).add(number); + } + int j = 0; + for (int i = 0 ; i < 10 ; i++) { + for (int el : B.get(i)) { + result[j] = el; + j++; + } + } + return result; + } + + /* Get digit at position 'pos' out of 'number' */ + public static int getDigit(int number, int pos) { + while (pos > 0) { + number = number/10; + pos--; + } + return number % 10; + } +} diff --git a/lost+found/MyBuggyRedBlack1.java-SR0ZLs b/lost+found/MyBuggyRedBlack1.java-SR0ZLs new file mode 100644 index 00000000..da99b1b1 --- /dev/null +++ b/lost+found/MyBuggyRedBlack1.java-SR0ZLs @@ -0,0 +1,564 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.NoSuchElementException; + +public class MyRedBlack, Value> implements RedBlack{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; // root of the BST + + // BST helper node data type + private class Node { + private Key key; // key + private Value val; // associated data + private Node left, right; // links to left and right subtrees + private boolean color; // color of parent link + private int size; // subtree count + + public Node(Key key, Value val, boolean color, int size) { + this.key = key; + this.val = val; + this.color = color; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /*************************************************************************** + * Node helper methods. + ***************************************************************************/ + // is node x red; false if x is null ? + private boolean isRed(Node x) { + if (x == null) return false; + return x.color == RED; + } + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x) { + if (x == null) return 0; + return x.size; + } + + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty() { + return root == null; + } + + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + if (key == null) throw new IllegalArgumentException("argument to get() is null"); + return get(root, key); + } + + // value associated with the given key in subtree rooted at x; null if no such key + private Value get(Node x, Key key) { + while (x != null) { + int cmp = key.compareTo(x.key); + if (cmp < 0) x = x.left; + else if (cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("first argument to put() is null"); + if (val == null) { + delete(key); + return; + } + + root = put(root, key, val); + root.color = BLACK; + // assert check(); + } + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val) { + if (h == null) return new Node(key, val, RED, 1); + + int cmp = key.compareTo(h.key); + if (cmp < 0) h.left = put(h.right, key, val); + else if (cmp > 0) h.right = put(h.left, key, val); + else h.val = val; + + // fix-up any right-leaning links + if (isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + h.size = size(h.left) + size(h.right) + 1; + + return h; + } + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMin(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the minimum key rooted at h + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMax(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the maximum key rooted at h + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("argument to delete() is null"); + if (!contains(key)) return; + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = delete(root, key); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the given key rooted at h + private Node delete(Node h, Key key) { + // assert get(h, key) != null; + + if (key.compareTo(h.key) < 0) { + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + if (key.compareTo(h.key) == 0 && (h.right == null)) + return null; + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + if (key.compareTo(h.key) == 0) { + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + // h.val = get(h.right, min(h.right).key); + // h.key = min(h.right).key; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /*************************************************************************** + * Red-black tree helper functions. + ***************************************************************************/ + + // make a left-leaning link lean to the right + private Node rotateRight(Node h) { + // assert (h != null) && isRed(h.left); + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = x.right.color; + x.right.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // make a right-leaning link lean to the left + private Node rotateLeft(Node h) { + // assert (h != null) && isRed(h.right); + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = x.left.color; + x.left.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // flip the colors of a node and its two children + private void flipColors(Node h) { + // h must have opposite color of its two children + // assert (h != null) && (h.left != null) && (h.right != null); + // assert (!isRed(h) && isRed(h.left) && isRed(h.right)) + // || (isRed(h) && !isRed(h.left) && !isRed(h.right)); + h.color = !h.color; + h.left.color = !h.left.color; + h.right.color = !h.right.color; + } + + // Assuming that h is red and both h.left and h.left.left + // are black, make h.left or one of its children red. + private Node moveRedLeft(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.left) && !isRed(h.left.left); + + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + // Assuming that h is red and both h.right and h.right.left + // are black, make h.right or one of its children red. + private Node moveRedRight(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.right) && !isRed(h.right.left); + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + // restore red-black tree invariant + private Node balance(Node h) { + // assert (h != null); + + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.size = size(h.left) + size(h.right) + 1; + return h; + } + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + // the smallest key in subtree rooted at x; null if no such key + private Node min(Node x) { + // assert x != null; + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + // the largest key in the subtree rooted at x; null if no such key + private Node max(Node x) { + // assert x != null; + if (x.right == null) return x; + else return max(x.right); + } + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + // the largest key in the subtree rooted at x less than or equal to the given key + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + // the smallest key in the subtree rooted at x greater than or equal to the given key + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // the key of rank k in the subtree rooted at x + private Node select(Node x, int k) { + // assert x != null; + // assert k >= 0 && k < size(x); + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k-t-1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // number of keys less than key in the subtree rooted at x + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + // if (isEmpty() || lo.compareTo(hi) > 0) return queue; + keys(root, queue, lo, hi); + return queue; + } + + // add the keys between lo and hi in the subtree rooted at x + // to the queue + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } +} \ No newline at end of file diff --git a/lost+found/MyBuggyRedBlack2.java-Pj66XS b/lost+found/MyBuggyRedBlack2.java-Pj66XS new file mode 100644 index 00000000..5db4172e --- /dev/null +++ b/lost+found/MyBuggyRedBlack2.java-Pj66XS @@ -0,0 +1,564 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.NoSuchElementException; + +public class MyRedBlack, Value> implements RedBlack{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; // root of the BST + + // BST helper node data type + private class Node { + private Key key; // key + private Value val; // associated data + private Node left, right; // links to left and right subtrees + private boolean color; // color of parent link + private int size; // subtree count + + public Node(Key key, Value val, boolean color, int size) { + this.key = key; + this.val = val; + this.color = color; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /*************************************************************************** + * Node helper methods. + ***************************************************************************/ + // is node x red; false if x is null ? + private boolean isRed(Node x) { + if (x == null) return false; + return x.color == RED; + } + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x) { + if (x == null) return 0; + return x.size; + } + + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty() { + return root == null; + } + + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + if (key == null) throw new IllegalArgumentException("argument to get() is null"); + return get(root, key); + } + + // value associated with the given key in subtree rooted at x; null if no such key + private Value get(Node x, Key key) { + while (x != null) { + int cmp = key.compareTo(x.key); + if (cmp < 0) x = x.left; + else if (cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("first argument to put() is null"); + if (val == null) { + delete(key); + return; + } + + root = put(root, key, val); + root.color = BLACK; + // assert check(); + } + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val) { + if (h == null) return new Node(key, val, RED, 1); + + int cmp = key.compareTo(h.key); + if (cmp < 0) h.left = put(h.left, key, val); + else if (cmp > 0) h.right = put(h.right, key, val); + else h.val = val; + + // fix-up any right-leaning links + if (isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + h.size = size(h.left) + size(h.right) + 1; + + return h; + } + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMin(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the minimum key rooted at h + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMax(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the maximum key rooted at h + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("argument to delete() is null"); + if (!contains(key)) return; + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = delete(root, key); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the given key rooted at h + private Node delete(Node h, Key key) { + // assert get(h, key) != null; + + if (key.compareTo(h.key) < 0) { + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + if (key.compareTo(h.key) == 0 && (h.right == null)) + return null; + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + if (key.compareTo(h.key) == 0) { + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + // h.val = get(h.right, min(h.right).key); + // h.key = min(h.right).key; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /*************************************************************************** + * Red-black tree helper functions. + ***************************************************************************/ + + // make a left-leaning link lean to the right + private Node rotateRight(Node h) { + // assert (h != null) && isRed(h.left); + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = x.right.color; + x.right.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // make a right-leaning link lean to the left + private Node rotateLeft(Node h) { + // assert (h != null) && isRed(h.right); + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = x.left.color; + x.left.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // flip the colors of a node and its two children + private void flipColors(Node h) { + // h must have opposite color of its two children + // assert (h != null) && (h.left != null) && (h.right != null); + // assert (!isRed(h) && isRed(h.left) && isRed(h.right)) + // || (isRed(h) && !isRed(h.left) && !isRed(h.right)); + h.color = h.color; + h.left.color = h.left.color; + h.right.color = h.right.color; + } + + // Assuming that h is red and both h.left and h.left.left + // are black, make h.left or one of its children red. + private Node moveRedLeft(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.left) && !isRed(h.left.left); + + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + // Assuming that h is red and both h.right and h.right.left + // are black, make h.right or one of its children red. + private Node moveRedRight(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.right) && !isRed(h.right.left); + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + // restore red-black tree invariant + private Node balance(Node h) { + // assert (h != null); + + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.size = size(h.left) + size(h.right) + 1; + return h; + } + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + // the smallest key in subtree rooted at x; null if no such key + private Node min(Node x) { + // assert x != null; + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + // the largest key in the subtree rooted at x; null if no such key + private Node max(Node x) { + // assert x != null; + if (x.right == null) return x; + else return max(x.right); + } + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + // the largest key in the subtree rooted at x less than or equal to the given key + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + // the smallest key in the subtree rooted at x greater than or equal to the given key + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // the key of rank k in the subtree rooted at x + private Node select(Node x, int k) { + // assert x != null; + // assert k >= 0 && k < size(x); + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k-t-1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // number of keys less than key in the subtree rooted at x + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + // if (isEmpty() || lo.compareTo(hi) > 0) return queue; + keys(root, queue, lo, hi); + return queue; + } + + // add the keys between lo and hi in the subtree rooted at x + // to the queue + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } +} \ No newline at end of file diff --git a/lost+found/MyBuggyRedBlack3.java-HBMO9k b/lost+found/MyBuggyRedBlack3.java-HBMO9k new file mode 100644 index 00000000..e4d6b9f9 --- /dev/null +++ b/lost+found/MyBuggyRedBlack3.java-HBMO9k @@ -0,0 +1,417 @@ +import java.util.LinkedList; +import java.util.NoSuchElementException; +import java.util.Queue; + +public class MyRedBlack, Value> implements RedBlack { + private Node root; // root of BST + + private class Node { + private Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /** + * Returns true if this symbol table is empty. + * + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + /** + * Does this symbol table contain the given key? + * + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + if (key == null) throw new IllegalArgumentException("argument to contains() is null"); + return get(key) != null; + } + + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (key == null) throw new IllegalArgumentException("calls get() with a null key"); + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("calls put() with a null key"); + if (val == null) { + delete(key); + return; + } + root = put(root, key, val); + } + + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + + /** + * Removes the smallest key and associated value from the symbol table. + * + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("Symbol table underflow"); + root = deleteMin(root); + } + + private Node deleteMin(Node x) { + if (x.left == null) return x.right; + x.left = deleteMin(x.left); + x.size = size(x.left) + size(x.right) + 1; + return x; + } + + /** + * Removes the largest key and associated value from the symbol table. + * + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("Symbol table underflow"); + root = deleteMax(root); + } + + private Node deleteMax(Node x) { + if (x.right == null) return x.left; + x.right = deleteMax(x.right); + x.size = size(x.left) + size(x.right) + 1; + return x; + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("calls delete() with a null key"); + root = delete(root, key); + } + + private Node delete(Node x, Key key) { + if (x == null) return null; + + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = delete(x.left, key); + else if (cmp > 0) x.right = delete(x.right, key); + else { + if (x.right == null) return x.left; + if (x.left == null) return x.right; + Node t = x; + x = min(t.right); + x.right = deleteMin(t.right); + x.left = t.left; + } + x.size = size(x.left) + size(x.right) + 1; + return x; + } + + + /** + * Returns the smallest key in the symbol table. + * + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + private Node min(Node x) { + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + private Node max(Node x) { + if (x.right == null) return x; + else return max(x.right); + } + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + public Key floor2(Key key) { + return floor2(root, key, null); + } + + private Key floor2(Node x, Key key, Key best) { + if (x == null) return best; + int cmp = key.compareTo(x.key); + if (cmp < 0) return floor2(x.left, key, best); + else if (cmp > 0) return floor2(x.right, key, x.key); + else return x.key; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) { + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + return ceiling(x.right, key); + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // Return key of rank k. + private Node select(Node x, int k) { + if (x == null) return null; + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k - t - 1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // Number of keys in the subtree less than key. + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * + * @return all keys in the symbol table + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList<>(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the symbol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + keys(root, queue, lo, hi); + return queue; + } + + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the symbol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } + + /** + * Returns the height of the BST (for debugging). + * + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /** + * Returns the keys in the BST in level order (for debugging). + * + * @return the keys in the BST in level order traversal + */ + public Iterable levelOrder() { + Queue keys = new LinkedList(); + Queue queue = new LinkedList(); + queue.remove(root); + while (!queue.isEmpty()) { + Node x = queue.poll(); + if (x == null) continue; + keys.remove(x.key); + queue.remove(x.left); + queue.remove(x.right); + } + return keys; + } +} \ No newline at end of file diff --git a/lost+found/MyBuggyStack1.java-XWkkXU b/lost+found/MyBuggyStack1.java-XWkkXU new file mode 100644 index 00000000..e8c255d2 --- /dev/null +++ b/lost+found/MyBuggyStack1.java-XWkkXU @@ -0,0 +1,25 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + + public MyStack() { + myStack = new java.util.Stack(); + } + + public boolean empty() { + return !myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + return myStack.pop(); + } + + public void push(E item) { + myStack.push(item); + } + +} diff --git a/lost+found/MyBuggyStack2-removed.java-sMygEz b/lost+found/MyBuggyStack2-removed.java-sMygEz new file mode 100644 index 00000000..a90c3a1f --- /dev/null +++ b/lost+found/MyBuggyStack2-removed.java-sMygEz @@ -0,0 +1,30 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + private int nbrOp; + + public MyStack() { + myStack = new java.util.Stack(); + nbrOp = 0; + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + nbrOp++; + return myStack.pop(); + } + + public void push(E item) { + nbrOp++; + if (nbrOp > 10) myStack.push(item); + myStack.push(item); + } + +} diff --git a/lost+found/MyBuggyStack2.java-rupKGe b/lost+found/MyBuggyStack2.java-rupKGe new file mode 100644 index 00000000..7953101b --- /dev/null +++ b/lost+found/MyBuggyStack2.java-rupKGe @@ -0,0 +1,32 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + private int size; + + public MyStack() { + myStack = new java.util.Stack(); + size = 0; + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + size--; + return myStack.pop(); + } + + public void push(E item) { + // doesn't push the element + if (size < 5){ + size++; + myStack.push(item); + } + } + +} diff --git a/lost+found/MyBuggyStack3.java-WKkd2T b/lost+found/MyBuggyStack3.java-WKkd2T new file mode 100644 index 00000000..97a097bd --- /dev/null +++ b/lost+found/MyBuggyStack3.java-WKkd2T @@ -0,0 +1,34 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + private int size; + + public MyStack() { + myStack = new java.util.Stack(); + size = 0; + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + size--; + if (size >= 5) + { + return myStack.peek(); // returns the right element, but doesn't pop it + } + + return myStack.pop(); + } + + public void push(E item) { + size++; + myStack.push(item); + } + +} diff --git a/lost+found/MyBuggyStack4.java-1ha8Hz b/lost+found/MyBuggyStack4.java-1ha8Hz new file mode 100644 index 00000000..633c2c07 --- /dev/null +++ b/lost+found/MyBuggyStack4.java-1ha8Hz @@ -0,0 +1,31 @@ +import java.util.EmptyStackException; + +public class MyStack implements Stack { + + private java.util.Stack myStack; + + public MyStack() { + myStack = new java.util.Stack(); + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + try { + return myStack.pop(); + } catch (EmptyStackException e) { + return null; // FALSE : should throw the exception ! + } + } + + public void push(E item) { + myStack.push(item); + } + +} diff --git a/lost+found/MyBuggyStack5.java-anE1ag b/lost+found/MyBuggyStack5.java-anE1ag new file mode 100644 index 00000000..bbbf504b --- /dev/null +++ b/lost+found/MyBuggyStack5.java-anE1ag @@ -0,0 +1,25 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + + public MyStack() { + myStack = new java.util.Stack(); + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + return myStack.peek(); // never pops anything + } + + public void push(E item) { + myStack.push(item); + } + +} diff --git a/lost+found/MyBuggyStack6.java-iqwKcX b/lost+found/MyBuggyStack6.java-iqwKcX new file mode 100644 index 00000000..dade53c0 --- /dev/null +++ b/lost+found/MyBuggyStack6.java-iqwKcX @@ -0,0 +1,25 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + + public MyStack() { + myStack = new java.util.Stack(); + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + return myStack.pop(); + } + + public void push(E item) { + myStack.push(null); // pushes null instead of the right item + } + +} diff --git a/lost+found/MyBuggyStack7.java-dI0YxE b/lost+found/MyBuggyStack7.java-dI0YxE new file mode 100644 index 00000000..ce9dc031 --- /dev/null +++ b/lost+found/MyBuggyStack7.java-dI0YxE @@ -0,0 +1,35 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + private int size; + + public MyStack() { + myStack = new java.util.Stack(); + size = 0; + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + size--; + if (size >= 3) { + E temp = myStack.pop(); + E toReturn = myStack.pop(); + myStack.push(temp); + return toReturn; + } + return myStack.pop(); + } + + public void push(E item) { + size++; + myStack.push(item); + } + +} diff --git a/lost+found/MyBuggyStack8.java-QSijem b/lost+found/MyBuggyStack8.java-QSijem new file mode 100644 index 00000000..7aa31ef9 --- /dev/null +++ b/lost+found/MyBuggyStack8.java-QSijem @@ -0,0 +1,37 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + private int size; + + public MyStack() { + myStack = new java.util.Stack(); + size = 0; + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + size--; + return myStack.pop(); + } + + public void push(E item) { // add the element at the end instead of the top of the stack + java.util.Stack tempStack = new java.util.Stack(); + for (int i = 0 ; i < size ; i++) { + tempStack.push(myStack.pop()); + } + myStack.push(item); + for (int i = 0 ; i < size ; i++) { + myStack.push(tempStack.pop()); + } + size++; + + } + +} diff --git a/lost+found/MyExpressionTree.java-yJPEoj b/lost+found/MyExpressionTree.java-yJPEoj new file mode 100644 index 00000000..d57f4597 --- /dev/null +++ b/lost+found/MyExpressionTree.java-yJPEoj @@ -0,0 +1,612 @@ +import java.util.ArrayList; +import java.util.Stack; +import javax.script.ScriptEngineManager; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + +public class MyExpressionTree implements FormalExpressionTree +{ + + private MyExpressionTree left; + private MyExpressionTree right; + private boolean isOperator; + private boolean isVariable; + private String expression; + private int value; + + /** + * CONSTRUCTEUR + */ + + /* CONSTRUCTEUR + * Construit un arbre élémentaire correspondant à l'expression vide "" + */ + public MyExpressionTree() + { + // est la valeur 0 + this.isOperator = false; + this.isVariable = false; + this.value = 0; + } + + /* Method main for some personal tests, not used in INGInious */ + public static void main(String[] args) { + Generator g = new Generator(Integer.parseInt(args[0])); + String[] res = g.generate(1); + String expression = ""; + for (int i = 0 ; i < res.length ; i++) { + expression += res[i]; + } + try { + expression = "x-cos(x)"; + + System.out.println("Expression: " + expression); + MyExpressionTree tree = new MyExpressionTree(expression); + System.out.println("MyExpressionTree: " + tree.toString()); + MyExpressionTree derivedTree = tree.derive(); + String expr = derivedTree.toString(); + System.out.println("Derived MyExpressionTree: " + expr + "\n"); + + // Evaluate to compare them + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("js"); + try { + Object result = engine.eval(expr.replace('x', '7').replace("sin", "Math.sin").replace("cos", "Math.cos").replace("--", "+")); + System.out.println("Evaluation of the derivative (x=7): " + result.toString()); + } catch (ScriptException e) { + System.out.println("ScriptException"); + } + } catch (MyParseException e) { + System.out.println(e + "\n"); + } + } + + /* CONSTRUCTEUR + * prenant comme argument une chaîne de caractères (String) et construisant l'arbre associé. + * Cette chaîne est supposée correspondre à une expression analytique syntaxiquement correcte et complètement parenthèsée. + * TODO : Une gestion d'exceptions doit être prévue lorsque cette précondition n'est pas vérifiée. + */ + public MyExpressionTree(String expression) throws MyParseException + { + Stack stack = new Stack(); + boolean depiler = false; + int parenthesesSinceLastOperator = 0; + int countParentheses = 0; + + for(int i = 0; i < expression.length(); i++) { + if(expression.charAt(i) == '(') + countParentheses++; + + if(expression.charAt(i) == ')') + countParentheses--; + + if(expression.charAt(i) != '(' && + expression.charAt(i) != ')' && + !isOperator(expression.charAt(i)) && + !isVariable(expression.charAt(i)) && + !isNumerical(expression.charAt(i))) + throw new MyParseException("Erreur dans la ligne !"); + } + + if(countParentheses != 0) + throw new MyParseException("Erreur dans la ligne !"); + + for(int i = 0; i < expression.length(); i++) + { + char c = expression.charAt(i); + if(isOperator(c)) + { + parenthesesSinceLastOperator = 0; + if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("sin")) + { + i += 2; + MyExpressionTree e = new MyExpressionTree(); + e.setExpression("sin"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else if(expression.length() >= 3 && i+3 <= expression.length() && expression.substring(i, i+3).equals("cos")) + { + i += 2; + MyExpressionTree e = new MyExpressionTree(); + e.setExpression("cos"); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + else + { + if(depiler) { + depilage(stack); + depiler = false; + } + + if(c == '^' || c == '*' || c == '/') { + depiler = true; + } + + if(c == '-' && (stack.empty() || + (!stack.empty() && i > 1 && (expression.charAt(i-1)=='(')))) + { + depiler = false; + MyExpressionTree o = new MyExpressionTree(); + o.setValue(0); + o.setIsOperator(false); + o.setIsVariable(false); + stack.push(o); + } + + MyExpressionTree e = new MyExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(true); + e.setIsVariable(false); + stack.push(e); + } + + } + else if(isVariable(c)) + { + MyExpressionTree e = new MyExpressionTree(); + e.setExpression("" + c); + e.setIsOperator(false); + e.setIsVariable(true); + stack.push(e); + } + else if(isNumerical(c)) + { + int j=0; + while(i+j < expression.length() && isNumerical(expression.charAt(i+j))) + j++; + + int k = Integer.parseInt(expression.substring(i,i+j)); + MyExpressionTree e = new MyExpressionTree(); + e.setValue(k); + e.setIsOperator(false); + e.setIsVariable(false); + stack.push(e); + i+=j-1; + } + else if(c == '(') + { + depiler = false; + parenthesesSinceLastOperator++; + } + else if(c == ')') + { + parenthesesSinceLastOperator--; + if(((stack.peek().isOperator() || stack.peek().isVariable()) && + stack.size() >= 2 && + parenthesesSinceLastOperator == 0) + || stack.size() >= 3) { + depilage(stack); + depiler = false; + } + } + + } + + if(stack.size() != 1 && parenthesesSinceLastOperator == 0) + depilage(stack); + MyExpressionTree t = stack.pop(); + this.expression = t.getExpression(); + this.isOperator = t.isOperator(); + this.isVariable = t.isVariable(); + this.left = t.getLeft(); + this.right = t.getRight(); + this.value = t.getValue(); + } + + public static void depilage(Stack stack) { + MyExpressionTree t2; + MyExpressionTree t; + MyExpressionTree t1; + + t2 = stack.pop(); + t = stack.pop(); + if(!(t.getExpression().equals("sin") || t.getExpression().equals("cos"))) { + t1 = stack.pop(); + t.setLeft(t1); + t.setRight(t2); + stack.push(t); + } else { + t.setRight(t2); + stack.push(t); + } + } + + /** + * FONCTIONS + */ + + /** + * Cette méthode calcule le nouvel arbre correspondant à la dérivée formelle de l'arbre courant. + * L'arbre courant (this) n'est pas modifié. + * + * @pre this représente une expression analytique syntaxiquement correcte. + * @post Une référence à un nouvel arbre représentant la dérivée formelle de this est renvoyée. + */ + + // Vérifier que l'arbre courant n'est pas modifié ! + // La méthode dans l'interface n'a pas d'argument, correct quand même ? + + public MyExpressionTree derive() + { + if(!this.isOperator() && !this.isVariable() ) + { + MyExpressionTree e = new MyExpressionTree(); + e.setValue(0); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.isVariable()) + { + MyExpressionTree e = new MyExpressionTree(); + e.setValue(1); + e.setIsOperator(false); + e.setIsVariable(false); + return e; + } + else if(this.getExpression().equals("+")) + { + MyExpressionTree e = new MyExpressionTree(); + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((MyExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((MyExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("-")) + { + MyExpressionTree e = new MyExpressionTree(); + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + if(this.hasLeft()) + e.setLeft((MyExpressionTree)this.getLeft().derive()); + if(this.hasRight()) + e.setRight((MyExpressionTree)this.getRight().derive()); + return e; + } + else if(this.getExpression().equals("*")) + { + MyExpressionTree e = new MyExpressionTree(); + MyExpressionTree f = new MyExpressionTree(); + MyExpressionTree g = new MyExpressionTree(); + + e.setExpression("+"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setLeft((MyExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((MyExpressionTree)this.getRight().derive()); + + e.setLeft(f); + e.setRight(g); + return e; + } + else if(this.getExpression().equals("/")) + { + MyExpressionTree e = new MyExpressionTree(); + MyExpressionTree f = new MyExpressionTree(); + MyExpressionTree g = new MyExpressionTree(); + MyExpressionTree h = new MyExpressionTree(); + + MyExpressionTree gSquarre = new MyExpressionTree(); + + e.setExpression("/"); + e.setIsOperator(true); + e.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + gSquarre.setExpression("*"); + gSquarre.setIsOperator(true); + gSquarre.setIsVariable(false); + + f.setLeft((MyExpressionTree)this.getLeft().derive()); + f.setRight(this.getRight()); + + g.setLeft(this.getLeft()); + g.setRight((MyExpressionTree)this.getRight().derive()); + + h.setLeft(f); + h.setRight(g); + + gSquarre.setLeft(this.getRight()); + gSquarre.setRight(this.getRight()); + + e.setLeft(h); + e.setRight(gSquarre); + return e; + } + else if(this.getExpression().equals("sin")) + { + MyExpressionTree e = new MyExpressionTree(); + MyExpressionTree f = new MyExpressionTree(); + + e.setExpression("*"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("cos"); + f.setIsOperator(true); + f.setIsVariable(false); + + f.setRight(this.getRight()); + e.setLeft((MyExpressionTree)this.getRight().derive()); + e.setRight(f); + return e; + } + else if(this.getExpression().equals("cos")) + { + MyExpressionTree e = new MyExpressionTree(); + MyExpressionTree f = new MyExpressionTree(); + MyExpressionTree g = new MyExpressionTree(); + + e.setExpression("-"); + e.setIsOperator(true); + e.setIsVariable(false); + + f.setExpression("sin"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("*"); + g.setIsOperator(true); + g.setIsVariable(false); + + f.setRight(this.getRight()); + g.setLeft((MyExpressionTree)this.getRight().derive()); + g.setRight(f); + e.setRight(g); + + return e; + } + else if(this.getExpression().equals("^")) + { + MyExpressionTree e = new MyExpressionTree(); + MyExpressionTree f = new MyExpressionTree(); + MyExpressionTree g = new MyExpressionTree(); + + e.setExpression("*"); + e.setIsVariable(false); + e.setIsOperator(true); + + f.setExpression("*"); + f.setIsOperator(true); + f.setIsVariable(false); + + g.setExpression("^"); + g.setIsOperator(true); + g.setIsVariable(false); + + // D�but modif Simon + MyExpressionTree h = new MyExpressionTree(); + if (!this.getRight().isOperator() && !this.getRight().isVariable()) { // c'est une valeur + h.setValue((this.getRight().getValue())-1); + h.setIsOperator(false); + h.setIsVariable(false); + // on la d�cr�mente simplement + } + else { // c'est une variable ou un op�rateur + MyExpressionTree i = new MyExpressionTree(); // arbre de valeur 1 + i.setValue(1); + i.setIsOperator(false); + i.setIsVariable(false); + + h.setExpression("-"); + h.setIsOperator(true); + h.setIsVariable(false); + + h.setLeft(this.getRight()); + h.setRight(i); + // ==> (t, "-", 1) + } + + g.setLeft(this.getLeft()); + g.setRight(h); // this.getRight() -1 + // Fin modif Simon + + f.setLeft(this.getRight()); + f.setRight((MyExpressionTree)this.getLeft().derive()); + + e.setLeft(f); + e.setRight(g); + + return e; + } + + return null; + } + + public boolean hasLeft() { + try { + return (this.left != null); + } catch(NullPointerException e) { + return false; + } + } + + public MyExpressionTree getLeft() { + return left; + } + + public void setLeft(MyExpressionTree left) { + this.left = left; + } + + public boolean hasRight() { + try { + return (this.right != null); + } catch(NullPointerException e) { + return false; + } + } + + public MyExpressionTree getRight() { + return right; + } + + public void setRight(MyExpressionTree right) { + this.right = right; + } + + public boolean isOperator() { + return isOperator; + } + + public void setIsOperator(boolean isOperator) { + this.isOperator = isOperator; + } + + public boolean isVariable() { + return isVariable; + } + + public void setIsVariable(boolean isVariable) { + this.isVariable = isVariable; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + public boolean isVariable(char c) + { + return c == 'x'; + } + + public boolean isOperator(char c) + { + return (c == '*' || + c == '+' || + c == '-' || + c == '/' || + c == 's' || + c == 'i' || + c == 'n' || + c == 'c' || + c == 'o' || + c == '^'); + } + + public boolean isNumerical(char c) + { + return (c == '0' || + c == '1' || + c == '2' || + c == '3' || + c == '4' || + c == '5' || + c == '6' || + c == '7' || + c == '8' || + c == '9'); + } + + /** + * Cette méthode renvoie une chaîne de caractères correspondant à + * l'expression analytique représentée dans l'arbre. + * + * @pre this représente une expression analytique syntaxiquement correcte + * @post une chaîne de caractères, correspondant à l'expression analytique + * complétement parenthésée représentée par this, est renvoyée. + */ + public String toString() { + String str = "", strLeft = "", strRoot = "", strRight = ""; + boolean parenthese = false; + + if (hasLeft()) { + strLeft = this.left.toString(); + parenthese = true; + } + + // "root" peut être : + // - un opérateur + // - une variable + // - autre chose + if(this.isOperator()) + strRoot = this.getExpression(); + else if(this.isVariable()) + strRoot = this.getExpression(); + else { + if(this.getExpression() == null) + strRoot = Integer.toString(this.getValue()); + else + strRoot = this.getExpression(); + } + + if (hasRight()) { + strRight = this.right.toString(); + } + + + if(parenthese) { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = "(" + strLeft + strRoot + "(" + strRight + ")" + ")"; + else + str = "(" + strLeft + strRoot + strRight + ")"; + + } + else { + if (strRoot.equals("sin") || strRoot.equals("cos")) + str = strLeft + strRoot + "(" + strRight + ")"; + else + str = strLeft + strRoot + strRight; + } + return str; + } +} +@SuppressWarnings("serial") +class MyParseException extends Exception { + + private String err; + + public MyParseException(String err) { + this.err = err; + } + + public String toString() { + return err; + } +} diff --git a/lost+found/MyHashMap.java-XjmMBg b/lost+found/MyHashMap.java-XjmMBg new file mode 100644 index 00000000..7380311c --- /dev/null +++ b/lost+found/MyHashMap.java-XjmMBg @@ -0,0 +1,107 @@ +import java.util.LinkedList; +import java.util.List; +import java.util.AbstractMap.SimpleEntry; +import java.util.Map.Entry; + +public class MyHashMap implements MapInterface { + + private int capacity = 2000; + private int n = 0; + private List>[] table; + + @SuppressWarnings("unchecked") + public MyHashMap() { + table = (LinkedList>[]) new LinkedList[capacity]; + } + + public V get(String key) { + return get(key, hashCode(key)); + } + + public V get(String key, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] != null) { + List> list = table[hash]; + for (Entry el : list) + if (el.getKey().equals(key)) + return el.getValue(); + hash = (hash + 1) % capacity; + } + return null; + } + + public void put(String key, V value) { + put(key, value, hashCode(key)); + } + /*public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + if (table[hash] == null) + table[hash] = new LinkedList>(); + table[hash].add(new SimpleEntry(key, value)); + n++; + if (n >= capacity/2) + rehash(); + }*/ + public void put(String key, V value, int hashCode) { + int hash = Math.abs(hashCode) % capacity; + Entry entry = new SimpleEntry(key, value); + if (table[hash] == null) { + table[hash] = new LinkedList>(); + table[hash].add(entry); + n++; + } + else { + boolean found = false; + for (int i = 0 ; !found && i < table[hash].size() ; i++) { + if (table[hash].get(i).getKey().equals(key)) { + table[hash].set(i, entry); + found = true; + // don't increment n + } + } + if (!found) { + table[hash].add(entry); + n++; + } + } + if (n >= capacity/2) + rehash(); + } + + public int size() { + return n; + } + + @SuppressWarnings("unchecked") + private void rehash() { + capacity *= 2; + List>[] old = table; + table = (LinkedList>[]) new LinkedList[capacity]; + for (int i = 0 ; i < old.length ; i++) { + List> entryList = old[i]; + if (entryList != null) + for (Entry entry : entryList) + put(entry.getKey(), entry.getValue(), hashCode(entry.getKey())); + } + } + + public int hashCode(String key) { + int hash = 0; + for (int i = 0 ; i < key.length(); i++) { + int c = (int) key.charAt(i); + hash += c * pow(256, key.length() - i - 1); + } + return hash; + } + + public int incrementalHashCode(int keyLength, int lastKeyChar, int lastHash, int lastChar) { + return 256*(lastHash - pow(256, keyLength-1) * lastChar) + (int) lastKeyChar; + } + + private static int pow(int a, int b) { + int result = 1; + for (int i = 0 ; i < b ; i++) + result *= a; + return result; + } +} diff --git a/lost+found/MyMap.java-FQEtPr b/lost+found/MyMap.java-FQEtPr new file mode 100644 index 00000000..d9e97bcf --- /dev/null +++ b/lost+found/MyMap.java-FQEtPr @@ -0,0 +1,58 @@ +import java.util.HashMap; +import java.util.Set; + +/* Solution of Simon Hardy for the Map implementation (uses java.util.HashMap and doesn't use quadratic probing) */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/MyMap.java-j7a0u4 b/lost+found/MyMap.java-j7a0u4 new file mode 100644 index 00000000..d9e97bcf --- /dev/null +++ b/lost+found/MyMap.java-j7a0u4 @@ -0,0 +1,58 @@ +import java.util.HashMap; +import java.util.Set; + +/* Solution of Simon Hardy for the Map implementation (uses java.util.HashMap and doesn't use quadratic probing) */ + +public class MyMap implements Map { + + private HashMap map; + + public MyMap() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/MyMap2.java-fFBfqw b/lost+found/MyMap2.java-fFBfqw new file mode 100644 index 00000000..56726aac --- /dev/null +++ b/lost+found/MyMap2.java-fFBfqw @@ -0,0 +1,58 @@ +import java.util.HashMap; +import java.util.Set; + +/* Solution of Simon Hardy for the Map implementation (uses java.util.HashMap and doesn't use quadratic probing) */ + +public class MyMap2 implements Map { + + private HashMap map; + + public MyMap2() { + map = new HashMap(); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key) { + return map.containsKey(key); + } + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsValue(V value) { + return map.containsValue(value); + } + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet() { + return map.entrySet(); + } + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key) { + return map.get(key); + } + + /* Returns the hash code value for this map. */ + public int hashCode() { + return map.hashCode(); + } + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty() { + return map.isEmpty(); + } + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value) { + return map.put(key, value); + } + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key) { + return map.remove(key); + } + + /* Returns the number of key-value mappings in this map. */ + public int size() { + return map.size(); + } +} diff --git a/lost+found/MyPlagiarism.java-Hn5JQC b/lost+found/MyPlagiarism.java-Hn5JQC new file mode 100644 index 00000000..9a232b95 --- /dev/null +++ b/lost+found/MyPlagiarism.java-Hn5JQC @@ -0,0 +1,103 @@ +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.AbstractMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; + +public class MyPlagiarism implements PlagiarismInterface { + + private MapInterface> map; + private int w; // maximum length of the occurrences + + public MyPlagiarism(String folder, int w) { + map = new MyHashMap>(); + this.w = w; + + File dir = new File(folder); + File[] listOfFiles = dir.listFiles(); + Arrays.sort(listOfFiles); + for (File file : listOfFiles) { + if (file.isFile()) { + String s = readInput(folder + "/" + file.getName()); + processInput(s, file.getName()); + } + } + } + + private static String readInput(String filename) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + String s = ""; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + boolean first = true; + while(line != null){ + if (first) s += line; + else s += "\n" + line; + line = reader.readLine(); + first = false; + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + return s; + } + + private void processInput(String file, String filename) { + int lastHash = 0; + int lastChar = 0; + for (int i = 0 ; i <= file.length()-w ; i++) { + String key = file.substring(i, i+w); + if (i == 0) + lastHash = map.hashCode(key); + else + lastHash = map.incrementalHashCode(key.length(), key.charAt(key.length()-1), lastHash, lastChar); + lastChar = (int) key.charAt(0); + if (map.get(key, lastHash) == null) + map.put(key, new AbstractMap.SimpleEntry<>(filename, i), lastHash); + } + } + + public Set> detect(String doc) { + int lastHash = 0; + int lastChar = 0; + String document = readInput(doc); + Set> hits = new HashSet>(); + for (int i = 0 ; i <= document.length()-w ; i++) { + String key = document.substring(i, i+w); + Map.Entry entry; + if (i == 0) + lastHash = map.hashCode(key); + else + lastHash = map.incrementalHashCode(key.length(), key.charAt(key.length()-1), lastHash, lastChar); + lastChar = (int) key.charAt(0); + if ((entry = map.get(key, lastHash)) != null) { + hits.add(new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue())); + } + } + return hits; + } +} \ No newline at end of file diff --git a/lost+found/MyRedBlack.java-wp5cP4 b/lost+found/MyRedBlack.java-wp5cP4 new file mode 100644 index 00000000..6b9b0cdd --- /dev/null +++ b/lost+found/MyRedBlack.java-wp5cP4 @@ -0,0 +1,564 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.NoSuchElementException; + +public class MyRedBlack, Value> implements RedBlack{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; // root of the BST + + // BST helper node data type + private class Node { + private Key key; // key + private Value val; // associated data + private Node left, right; // links to left and right subtrees + private boolean color; // color of parent link + private int size; // subtree count + + public Node(Key key, Value val, boolean color, int size) { + this.key = key; + this.val = val; + this.color = color; + this.size = size; + } + } + + /** + * Initializes an empty symbol table. + */ + public MyRedBlack() { + } + + /*************************************************************************** + * Node helper methods. + ***************************************************************************/ + // is node x red; false if x is null ? + private boolean isRed(Node x) { + if (x == null) return false; + return x.color == RED; + } + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x) { + if (x == null) return 0; + return x.size; + } + + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty() { + return root == null; + } + + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key) { + if (key == null) throw new IllegalArgumentException("argument to get() is null"); + return get(root, key); + } + + // value associated with the given key in subtree rooted at x; null if no such key + private Value get(Node x, Key key) { + while (x != null) { + int cmp = key.compareTo(x.key); + if (cmp < 0) x = x.left; + else if (cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val) { + if (key == null) throw new IllegalArgumentException("first argument to put() is null"); + if (val == null) { + delete(key); + return; + } + + root = put(root, key, val); + root.color = BLACK; + // assert check(); + } + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val) { + if (h == null) return new Node(key, val, RED, 1); + + int cmp = key.compareTo(h.key); + if (cmp < 0) h.left = put(h.left, key, val); + else if (cmp > 0) h.right = put(h.right, key, val); + else h.val = val; + + // fix-up any right-leaning links + if (isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + h.size = size(h.left) + size(h.right) + 1; + + return h; + } + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMin(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the minimum key rooted at h + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax() { + if (isEmpty()) throw new NoSuchElementException("BST underflow"); + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = deleteMax(root); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the maximum key rooted at h + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key) { + if (key == null) throw new IllegalArgumentException("argument to delete() is null"); + if (!contains(key)) return; + + // if both children of root are black, set root to red + if (!isRed(root.left) && !isRed(root.right)) + root.color = RED; + + root = delete(root, key); + if (!isEmpty()) root.color = BLACK; + // assert check(); + } + + // delete the key-value pair with the given key rooted at h + private Node delete(Node h, Key key) { + // assert get(h, key) != null; + + if (key.compareTo(h.key) < 0) { + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + if (key.compareTo(h.key) == 0 && (h.right == null)) + return null; + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + if (key.compareTo(h.key) == 0) { + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + // h.val = get(h.right, min(h.right).key); + // h.key = min(h.right).key; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /*************************************************************************** + * Red-black tree helper functions. + ***************************************************************************/ + + // make a left-leaning link lean to the right + private Node rotateRight(Node h) { + // assert (h != null) && isRed(h.left); + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = x.right.color; + x.right.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // make a right-leaning link lean to the left + private Node rotateLeft(Node h) { + // assert (h != null) && isRed(h.right); + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = x.left.color; + x.left.color = RED; + x.size = h.size; + h.size = size(h.left) + size(h.right) + 1; + return x; + } + + // flip the colors of a node and its two children + private void flipColors(Node h) { + // h must have opposite color of its two children + // assert (h != null) && (h.left != null) && (h.right != null); + // assert (!isRed(h) && isRed(h.left) && isRed(h.right)) + // || (isRed(h) && !isRed(h.left) && !isRed(h.right)); + h.color = !h.color; + h.left.color = !h.left.color; + h.right.color = !h.right.color; + } + + // Assuming that h is red and both h.left and h.left.left + // are black, make h.left or one of its children red. + private Node moveRedLeft(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.left) && !isRed(h.left.left); + + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + // Assuming that h is red and both h.right and h.right.left + // are black, make h.right or one of its children red. + private Node moveRedRight(Node h) { + // assert (h != null); + // assert isRed(h) && !isRed(h.right) && !isRed(h.right.left); + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + // restore red-black tree invariant + private Node balance(Node h) { + // assert (h != null); + + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.size = size(h.left) + size(h.right) + 1; + return h; + } + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height() { + return height(root); + } + private int height(Node x) { + if (x == null) return -1; + return 1 + Math.max(height(x.left), height(x.right)); + } + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min() { + if (isEmpty()) throw new NoSuchElementException("calls min() with empty symbol table"); + return min(root).key; + } + + // the smallest key in subtree rooted at x; null if no such key + private Node min(Node x) { + // assert x != null; + if (x.left == null) return x; + else return min(x.left); + } + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max() { + if (isEmpty()) throw new NoSuchElementException("calls max() with empty symbol table"); + return max(root).key; + } + + // the largest key in the subtree rooted at x; null if no such key + private Node max(Node x) { + // assert x != null; + if (x.right == null) return x; + else return max(x.right); + } + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key) { + if (key == null) throw new IllegalArgumentException("argument to floor() is null"); + if (isEmpty()) throw new NoSuchElementException("calls floor() with empty symbol table"); + Node x = floor(root, key); + if (x == null) return null; + else return x.key; + } + + // the largest key in the subtree rooted at x less than or equal to the given key + private Node floor(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if (t != null) return t; + else return x; + } + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key) { + if (key == null) throw new IllegalArgumentException("argument to ceiling() is null"); + if (isEmpty()) throw new NoSuchElementException("calls ceiling() with empty symbol table"); + Node x = ceiling(root, key); + if (x == null) return null; + else return x.key; + } + + // the smallest key in the subtree rooted at x greater than or equal to the given key + private Node ceiling(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp == 0) return x; + if (cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if (t != null) return t; + else return x; + } + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k) { + if (k < 0 || k >= size()) { + throw new IllegalArgumentException("argument to select() is invalid: " + k); + } + Node x = select(root, k); + return x.key; + } + + // the key of rank k in the subtree rooted at x + private Node select(Node x, int k) { + // assert x != null; + // assert k >= 0 && k < size(x); + int t = size(x.left); + if (t > k) return select(x.left, k); + else if (t < k) return select(x.right, k-t-1); + else return x; + } + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key) { + if (key == null) throw new IllegalArgumentException("argument to rank() is null"); + return rank(key, root); + } + + // number of keys less than key in the subtree rooted at x + private int rank(Key key, Node x) { + if (x == null) return 0; + int cmp = key.compareTo(x.key); + if (cmp < 0) return rank(key, x.left); + else if (cmp > 0) return 1 + size(x.left) + rank(key, x.right); + else return size(x.left); + } + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys() { + if (isEmpty()) return new LinkedList(); + return keys(min(), max()); + } + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to keys() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to keys() is null"); + + Queue queue = new LinkedList(); + // if (isEmpty() || lo.compareTo(hi) > 0) return queue; + keys(root, queue, lo, hi); + return queue; + } + + // add the keys between lo and hi in the subtree rooted at x + // to the queue + private void keys(Node x, Queue queue, Key lo, Key hi) { + if (x == null) return; + int cmplo = lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + if (cmplo < 0) keys(x.left, queue, lo, hi); + if (cmplo <= 0 && cmphi >= 0) queue.remove(x.key); + if (cmphi > 0) keys(x.right, queue, lo, hi); + } + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi) { + if (lo == null) throw new IllegalArgumentException("first argument to size() is null"); + if (hi == null) throw new IllegalArgumentException("second argument to size() is null"); + + if (lo.compareTo(hi) > 0) return 0; + if (contains(hi)) return rank(hi) - rank(lo) + 1; + else return rank(hi) - rank(lo); + } +} \ No newline at end of file diff --git a/lost+found/MyStack.java-9mPaxQ b/lost+found/MyStack.java-9mPaxQ new file mode 100644 index 00000000..15b8abf5 --- /dev/null +++ b/lost+found/MyStack.java-9mPaxQ @@ -0,0 +1,54 @@ +import java.util.EmptyStackException; + +public class MyStack implements Stack { + + private Node top; // the node on the top of the stack + private int size; // size of the stack + + // helper linked list class + private class Node { + private E item; + private Node next; + + public Node(E element, Node next) { + this.item = element; + this.next = next; + } + } + + /** + * Tests if this stack is empty + */ + @Override + public boolean empty() { + //TODO by student + } + + /** + * Looks at the object at the top of this stack + * without removing it from the stack + */ + @Override + public E peek() throws EmptyStackException { + //TODO by student + } + + /** + * Removes the object at the top of this stack + * and returns that object as the value of this function + */ + @Override + public E pop() throws EmptyStackException { + //TODO by student + } + + /** + * Pushes an item onto the top of this stack + * @param item the item to append + */ + @Override + public void push(E item) { + //TODO by student + + } +} diff --git a/lost+found/MyStack.java-IRsZg4 b/lost+found/MyStack.java-IRsZg4 new file mode 100644 index 00000000..4ff0e9a7 --- /dev/null +++ b/lost+found/MyStack.java-IRsZg4 @@ -0,0 +1,25 @@ +public class MyStack implements Stack { + + private java.util.Stack myStack; + + public MyStack() { + myStack = new java.util.Stack(); + } + + public boolean empty() { + return myStack.empty(); + } + + public E peek() { + return myStack.peek(); + } + + public E pop() { + return myStack.pop(); + } + + public void push(E item) { + myStack.push(item); + } + +} \ No newline at end of file diff --git a/lost+found/MyStack.java-taEQ5j b/lost+found/MyStack.java-taEQ5j new file mode 100644 index 00000000..2dc17d04 --- /dev/null +++ b/lost+found/MyStack.java-taEQ5j @@ -0,0 +1,56 @@ +package templates; + +import java.util.EmptyStackException; + +public class MyStack implements Stack { + + private Node top; // the node on the top of the stack + private int size; // size of the stack + + // helper linked list class + private class Node { + private E item; + private Node next; + + public Node(E element, Node next) { + this.item = element; + this.next = next; + } + } + + /** + * Tests if this stack is empty + */ + @Override + public boolean empty() { + @@empty@@ + } + + /** + * Looks at the object at the top of this stack + * without removing it from the stack + */ + @Override + public E peek() throws EmptyStackException { + @@peek@@ + } + + /** + * Removes the object at the top of this stack + * and returns that object as the value of this function + */ + @Override + public E pop() throws EmptyStackException { + @@pop@@ + } + + /** + * Pushes an item onto the top of this stack + * @param item the item to append + */ + @Override + public void push(E item) { + @@push@@ + + } +} diff --git a/lost+found/Nessel_40_aus_32_Baumwolle_41_.xml-MT6okh b/lost+found/Nessel_40_aus_32_Baumwolle_41_.xml-MT6okh new file mode 100644 index 00000000..ef20e47b --- /dev/null +++ b/lost+found/Nessel_40_aus_32_Baumwolle_41_.xml-MT6okh @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Nessel(aus Baumwolle) + + 0.0 + + \ No newline at end of file diff --git a/lost+found/Node.java-fMGmh0 b/lost+found/Node.java-fMGmh0 new file mode 100644 index 00000000..2f236f9c --- /dev/null +++ b/lost+found/Node.java-fMGmh0 @@ -0,0 +1,46 @@ +package templates; + +public class Node { + private Node left, right; + private int value; + + public Node(int value) { + this.left = null; + this.right = null; + this.value = value; + } + + public Node() { + } + + /** + * @return la valeur contenue dans ce noeud + */ + public int getValue() { + return value; + } + + /** + * @return Le noeud situe a gauche (dont la valeur est < que la valeur actuelle) s'il existe, null sinon + */ + public Node getLeft() { + return left; + } + + /** + * @return Le noeud situe a droite (dont la valeur est > que la valeur actuelle) s'il existe, null sinon + */ + public Node getRight() { + return right; + } + + /** + * Ajoute une nouvelle valeur newVal dans le BST + */ + public void add(int newVal) { + if(newVal < value && left == null) left = new Node(newVal); + else if(newVal < value) left.add(newVal); + else if(newVal > value && right == null) right = new Node(newVal); + else if(newVal > value) right.add(newVal); + } +} diff --git a/lost+found/Node.java-ggdplh b/lost+found/Node.java-ggdplh new file mode 100644 index 00000000..85c4ff47 --- /dev/null +++ b/lost+found/Node.java-ggdplh @@ -0,0 +1,22 @@ + +public class Node { + private E element; + private Node next; + + public Node(E e, Node n) { + element = e; + next = n; + } + + public E getElement() { + return element; + } + + public Node getNext() { + return next; + } + + public void setNext(Node n) { + next = n; + } +} \ No newline at end of file diff --git a/lost+found/Node.java-h41MlI b/lost+found/Node.java-h41MlI new file mode 100644 index 00000000..b45d9c04 --- /dev/null +++ b/lost+found/Node.java-h41MlI @@ -0,0 +1,44 @@ +public class Node { + private Node left, right; + private int value; + + public Node(int value) { + this.left = null; + this.right = null; + this.value = value; + } + + public Node() { + } + + /** + * @return la valeur contenue dans ce noeud + */ + public int getValue() { + return value; + } + + /** + * @return Le noeud situe a gauche (dont la valeur est < que la valeur actuelle) s'il existe, null sinon + */ + public Node getLeft() { + return left; + } + + /** + * @return Le noeud situe a droite (dont la valeur est > que la valeur actuelle) s'il existe, null sinon + */ + public Node getRight() { + return right; + } + + /** + * Ajoute une nouvelle valeur newVal dans le BST + */ + public void add(int newVal) { + if(newVal < value && left == null) left = new Node(newVal); + else if(newVal < value) left.add(newVal); + else if(newVal > value && right == null) right = new Node(newVal); + else if(newVal > value) right.add(newVal); + } +} diff --git a/lost+found/NodeQueue.java-e7jUZi b/lost+found/NodeQueue.java-e7jUZi new file mode 100644 index 00000000..a4e0bde7 --- /dev/null +++ b/lost+found/NodeQueue.java-e7jUZi @@ -0,0 +1,33 @@ + +public class NodeQueue implements Queue { + + // Variables d’instance + + private Node marker; + private int size; + + @Override + public int size() { + @@size@@ + } + + @Override + public boolean isEmpty() { + @@isEmpty@@ + } + + @Override + public E front() throws QueueEmptyException { + @@front@@ + } + + @Override + public void enqueue(E element) { + @@enqueue@@ + } + + @Override + public E dequeue() throws QueueEmptyException { + @@dequeue@@ + } +} \ No newline at end of file diff --git a/lost+found/NodeQueueTest.java-yxXdHk b/lost+found/NodeQueueTest.java-yxXdHk new file mode 100644 index 00000000..9674cfa6 --- /dev/null +++ b/lost+found/NodeQueueTest.java-yxXdHk @@ -0,0 +1,186 @@ +import java.io.IOException; +import java.util.*; +import java.util.concurrent.*; + + +/** + * Created by pschaus on 31/07/17. + */ +public class NodeQueueTest { + + + abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + //feedback("InterruptedException!"+ie, -100, false); + ok = false; + } catch (ExecutionException ee) { + //feedback("ExecutionException!"+ee, -100, false); + ok = false; + } catch (TimeoutException te) { + //feedback("TimeoutException!"+te, -100, false); + ok = true; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + + public boolean testCorrect() { + java.util.Queue javaQueue = new ArrayDeque<>(); + Queue queue = new NodeQueue(); + Random r = new java.util.Random(); + + int nb = 1000 + r.nextInt(1000); + for (int i = 0; i < nb; i++) { + int a = r.nextInt(1000); + queue.enqueue(a); + javaQueue.add(a); + } + try { + for (int i = 0; i < nb; i++) { + int a = queue.front(); + int b = javaQueue.peek(); + if (a != b) return false; + + a = queue.dequeue(); + b = javaQueue.poll(); + if (a != b) { + System.out.println("wrong value "+a+" "+b); + return false; + } + if (queue.size() != javaQueue.size()) return false; + if (queue.isEmpty() != javaQueue.isEmpty()) return false; + } + boolean exceptionOk = false; + try { + queue.front(); + } catch (QueueEmptyException e) { + exceptionOk = true; + } + return exceptionOk; + + + } catch (Exception e) { + return false; + } + } + + + public boolean testTime() { + + java.util.Queue javaQueue = new ArrayDeque<>(); + + long t0 = System.currentTimeMillis(); + int nb = 5000000; + for (int i = 0; i < nb; i++) { + javaQueue.add(i); + javaQueue.peek(); + } + for (int i = 0; i < nb; i++) { + javaQueue.poll(); + } + long t1 = System.currentTimeMillis(); + + long baseline = t1 - t0; + + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + try { + + Queue queue = new NodeQueue(); + for (int i = 0; i < nb; i++) { + queue.enqueue(i); + queue.front(); + } + for (int i = 0; i < nb; i++) { + + queue.dequeue(); + + } + } catch (Exception e) { + feedback("bad idea 1!", -100, false); + } + } + }.run((t1 - t0) * 10); + return timeOk; + } + + + private void exec(String cmd) { + try { + Runtime.getRuntime().exec(cmd).waitFor(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + private void feedback(String message, int grade, boolean ok) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n" + message + "\n"}).waitFor(); + Runtime.getRuntime().exec("feedback-grade "+grade).waitFor(); + + if (ok ) Runtime.getRuntime().exec("feedback-result success").waitFor(); + else Runtime.getRuntime().exec("feedback-result failed").waitFor(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + + public void testGrade() { + int score = 0; + + try { + if (testCorrect()) { + score += 50; + + if (testTime()) { + score += 50; + feedback("All is correct!", score, true); + return; + } else { + feedback("Incorrect time complexity :-50", score, false); + return; + } + } else { + feedback("Incorrect behavior :-100", score, false); + return; + } + } catch (Exception e) { + feedback("Incorrect behavior:-100", score, false); + } + } + + public static void main(String[] args) { + new NodeQueueTest().testGrade(); + } +} \ No newline at end of file diff --git a/lost+found/ORIG_HEAD.lock-J5qEi1 b/lost+found/ORIG_HEAD.lock-J5qEi1 new file mode 100644 index 00000000..6bd23935 --- /dev/null +++ b/lost+found/ORIG_HEAD.lock-J5qEi1 @@ -0,0 +1 @@ +33dcdaebd2c05f84151f2d0cc409bd7f3abb58b0 diff --git a/lost+found/OpenWithVisiCut.scpt-FU2SxC b/lost+found/OpenWithVisiCut.scpt-FU2SxC new file mode 100644 index 00000000..22fba1d9 Binary files /dev/null and b/lost+found/OpenWithVisiCut.scpt-FU2SxC differ diff --git a/lost+found/OrderedMap.java-O74BKU b/lost+found/OrderedMap.java-O74BKU new file mode 100644 index 00000000..07a2927e --- /dev/null +++ b/lost+found/OrderedMap.java-O74BKU @@ -0,0 +1,74 @@ +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; + +/* An "OrderedMap" is a class which stores entries with keys of type String and values of type Set. + * In our case, the key is the name of the artist, and the value are the set of the songs of this artist. + * + * A class implementing this interface must have a constructor which takes as argument a String + * representing the path to the input file, and filling a data structure using data of this file. + * The format of this file is, for each line : the name of the artist, followed by a tabulation (\t), + * itself followed by the name of the song, and then an 'end of line' character (\n). + * It should also have a constructor which takes no argument, and creates an empty OrderedMap. + */ +public interface OrderedMap { + + // Methods of the Map ADT + + public int size(); + + public boolean isEmpty(); + + public Set get(String key); + + public Set put(String key, Set value); + + public Set remove(String key); + + public Set keySet(); + + public Collection> values(); + + public Set>> entrySet(); + + + // Methods of the Ordered Map ADT + + public Map.Entry> firstEntry(); + + public Map.Entry> lastEntry(); + + public Map.Entry> ceilingEntry(String key); + + public Map.Entry> floorEntry(String key); + + public Map.Entry> lowerEntry(String key); + + public Map.Entry> higherEntry(String key); + + + // Additional methods + + /* Same as the 'get' method, but instead of returning a Set, + * returns a String[] containing the values ordered by name. + * If there is no such key in the map, returns an empty array of Strings. + * You MUST use the QuickSort algorithm to sort the values, + * and you MUST implement it by yourself (do NOT use Arrays.sort). */ + public String[] getOrdered(String key); + + /* Returns a List containing all entries of this Map with keys between 'lowest' and 'highest', + * including them (if they exist). This list must be sorted by key name. + * If there is no such entries, returns an empty List>>. + * Complexity required : O(x + log n) where n is the total number of entries in the map, + * and x is the number of entries between 'lowest' and 'highest'. */ + public List>> entriesBetween(String lowest, String highest); + + /* Returns a String corresponding to the data stored in this Map. + * This String should contain one pair of artist and song per line, + * following this structure : [artistName] songName + * Order those lines by artist name, and for the same artist by song name. */ + public String toString(); + +} diff --git a/lost+found/OrderedMap.java-b0CUK4 b/lost+found/OrderedMap.java-b0CUK4 new file mode 100644 index 00000000..07a2927e --- /dev/null +++ b/lost+found/OrderedMap.java-b0CUK4 @@ -0,0 +1,74 @@ +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; + +/* An "OrderedMap" is a class which stores entries with keys of type String and values of type Set. + * In our case, the key is the name of the artist, and the value are the set of the songs of this artist. + * + * A class implementing this interface must have a constructor which takes as argument a String + * representing the path to the input file, and filling a data structure using data of this file. + * The format of this file is, for each line : the name of the artist, followed by a tabulation (\t), + * itself followed by the name of the song, and then an 'end of line' character (\n). + * It should also have a constructor which takes no argument, and creates an empty OrderedMap. + */ +public interface OrderedMap { + + // Methods of the Map ADT + + public int size(); + + public boolean isEmpty(); + + public Set get(String key); + + public Set put(String key, Set value); + + public Set remove(String key); + + public Set keySet(); + + public Collection> values(); + + public Set>> entrySet(); + + + // Methods of the Ordered Map ADT + + public Map.Entry> firstEntry(); + + public Map.Entry> lastEntry(); + + public Map.Entry> ceilingEntry(String key); + + public Map.Entry> floorEntry(String key); + + public Map.Entry> lowerEntry(String key); + + public Map.Entry> higherEntry(String key); + + + // Additional methods + + /* Same as the 'get' method, but instead of returning a Set, + * returns a String[] containing the values ordered by name. + * If there is no such key in the map, returns an empty array of Strings. + * You MUST use the QuickSort algorithm to sort the values, + * and you MUST implement it by yourself (do NOT use Arrays.sort). */ + public String[] getOrdered(String key); + + /* Returns a List containing all entries of this Map with keys between 'lowest' and 'highest', + * including them (if they exist). This list must be sorted by key name. + * If there is no such entries, returns an empty List>>. + * Complexity required : O(x + log n) where n is the total number of entries in the map, + * and x is the number of entries between 'lowest' and 'highest'. */ + public List>> entriesBetween(String lowest, String highest); + + /* Returns a String corresponding to the data stored in this Map. + * This String should contain one pair of artist and song per line, + * following this structure : [artistName] songName + * Order those lines by artist name, and for the same artist by song name. */ + public String toString(); + +} diff --git a/lost+found/OrderedMapProps.scala-jUbBEk b/lost+found/OrderedMapProps.scala-jUbBEk new file mode 100644 index 00000000..300fbc11 --- /dev/null +++ b/lost+found/OrderedMapProps.scala-jUbBEk @@ -0,0 +1,271 @@ +import org.scalacheck.Properties +import org.scalacheck.Prop +import org.scalacheck.Gen.{listOf, alphaStr, numChar, oneOf, choose} +import org.scalacheck.Gen +import scala.collection.mutable.Set +import scala.collection.JavaConversions.mutableSetAsJavaSet + +object OrderedMapProps extends Properties("OrderedMap") { + + /* Map ADT */ + + property("size") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + val size1 = tree.size() + tree.put(key, mutableSetAsJavaSet(value)) + val size2 = tree.size() + tree.put(key, mutableSetAsJavaSet(value)) + val size3 = tree.size() + tree.remove(key) + tree.size() == 0 && size1 == 0 && size2 == 1 && size3 == 1 + + } catch { + case e: Exception => false + } + } + + property("isEmpty") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + val e1 = tree.isEmpty() + tree.put(key, mutableSetAsJavaSet(value)) + val e2 = tree.isEmpty() + tree.put(key, mutableSetAsJavaSet(value)) + val e3 = tree.isEmpty() + tree.remove(key) + tree.isEmpty() && e1 && !e2 && !e3 + + } catch { + case e: Exception => false + } + } + + property("put_get_remove") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + val result = tree.put(key, mutableSetAsJavaSet(value)) + val result2 = tree.get(key).equals(mutableSetAsJavaSet(value)) + tree.remove(key).equals(mutableSetAsJavaSet(value)) && Option(result) == None && result2 == true + } catch { + case e: Exception => false + } + } + + property("remove_get_put_put") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + val result = tree.remove(key) + val result2 = tree.get(key) + val result3 = tree.put(key, mutableSetAsJavaSet(value)) + val result4 = tree.put(key, mutableSetAsJavaSet(value)) + Option(result) == None && Option(result2) == None && Option(result3) == None && result4.equals(mutableSetAsJavaSet(value)) + } catch { + case e: Exception => false + } + } + + property("put_get_remove") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + val result = tree.put(key, mutableSetAsJavaSet(value)) + val result2 = tree.get(key).equals(mutableSetAsJavaSet(value)) + tree.remove(key).equals(mutableSetAsJavaSet(value)) && Option(result) == None && result2 == true + } catch { + case e: Exception => false + } + } + + property("entrySet") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + tree.put(key, mutableSetAsJavaSet(value)) + val set = tree.entrySet() + val it = set.iterator() + val pair = it.next() + set.size() == 1 && pair.getKey().equals(key) && pair.getValue().equals(mutableSetAsJavaSet(value)) && !it.hasNext() + } catch { + case e: Exception => false + } + } + + property("keySet") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + tree.put(key, mutableSetAsJavaSet(value)) + val set = tree.keySet() + val it = set.iterator() + val myKey = it.next() + set.size() == 1 && myKey.equals(key) && !it.hasNext() + } catch { + case e: Exception => false + } + } + + property("values") = Prop.forAll { (key: String, value: Set[String]) => + try { + val tree = new SearchTree() + tree.put(key, mutableSetAsJavaSet(value)) + val collection = tree.values() + val it = collection.iterator() + val mySet = it.next() + collection.size() == 1 && !it.hasNext() && mySet.equals(mutableSetAsJavaSet(value)) + } catch { + case e: Exception => false + } + } + + /* OrderedMap ADT */ + + val tree = new SearchTree("songs.txt") + val emptyTree = new SearchTree() + + property("firstEntry") = { + try { + val pair = tree.firstEntry() + pair.getKey().equals("AC/DC") && pair.getValue().contains("Back In Black") && pair.getValue().contains("Live Wire") && pair.getValue().size() == 10 && + Option(emptyTree.firstEntry()) == None + } catch { + case e: Exception => false + } + } + + property("lastEntry") = { + try { + val pair = tree.lastEntry() + pair.getKey().equals("Zombies") && pair.getValue().contains("Tell Her No") && pair.getValue().size() == 3 && + Option(emptyTree.lastEntry()) == None + } catch { + case e: Exception => false + } + } + + property("ceilingEntry") = { + try { + val pair = tree.ceilingEntry("Genesis") + pair.getKey().equals("Genesis") && pair.getValue().contains("Abacab") && pair.getValue().contains("Follow You Follow Me") && pair.getValue().size() == 7 && + pair.equals(tree.ceilingEntry("Gen")) && pair.equals(tree.ceilingEntry("Geneee")) && + Option(emptyTree.ceilingEntry("Genesis")) == None + } catch { + case e: Exception => false + } + } + + property("floorEntry") = { + try { + val pair = tree.floorEntry("Genesis") + pair.getKey().equals("Genesis") && pair.getValue().contains("Abacab") && pair.getValue().contains("Follow You Follow Me") && pair.getValue().size() == 7 && + pair.equals(tree.floorEntry("Genesiss")) && pair.equals(tree.floorEntry("Genzzz")) && + Option(emptyTree.floorEntry("Genesis")) == None + } catch { + case e: Exception => false + } + } + + property("lowerEntry") = { + try { + val pair = tree.lowerEntry("Georgia Satellites") + pair.getKey().equals("Genesis") && pair.getValue().contains("Abacab") && pair.getValue().contains("Follow You Follow Me") && pair.getValue().size() == 7 && + pair.equals(tree.lowerEntry("Genesiss")) && pair.equals(tree.lowerEntry("Genzzz")) && + Option(emptyTree.lowerEntry("Genesis")) == None + } catch { + case e: Exception => false + } + } + + property("higherEntry") = { + try { + val pair = tree.higherEntry("Garcia, Jerry") + pair.getKey().equals("Genesis") && pair.getValue().contains("Abacab") && pair.getValue().contains("Follow You Follow Me") && pair.getValue().size() == 7 && + pair.equals(tree.higherEntry("Gen")) && pair.equals(tree.higherEntry("Geneee")) && + Option(emptyTree.higherEntry("Genesis")) == None + } catch { + case e: Exception => false + } + } + + /* Additional methods */ + + property("getOrdered") = { + try { + val tab = tree.getOrdered("Queen") + tab.length == 10 && tab(0).equals("Bohemian Rhapsody") && tab(2).equals("Fat Bottomed Girls") && tab(3).equals("Keep Yourself Alive") && + tab(9).equals("You're My Best Friend") && + emptyTree.getOrdered("Queen").length == 0 + } catch { + case e: Exception => false + } + } + + property("entriesBetween") = { + try { + val list = tree.entriesBetween("D", "Do") + val it = list.iterator() + val pair = it.next() + val pair2 = it.next() + list.size() == 6 && pair.getKey().equals("Davis Group, Spencer") && pair.getValue().size() == 1 && + pair2.getKey().equals("Deep Purple") && pair2.getValue().size() == 6 && + it.next().getKey().equals("Def Leppard") && + emptyTree.entriesBetween("D", "Do").size() == 0 && tree.entriesBetween("D", "Da").size() == 0 + } catch { + case e: Exception => false + } + } + + property("toString") = { + try { + val s = tree.toString() + val it = s.lines + it.next() == "[AC/DC] Back In Black" && it.next() == "[AC/DC] Dirty Deeds" && it.next() == "[AC/DC] Girls Got Rhythm" + } catch { + case e: Exception => false + } + } + + // Must be compiled with -J-Xmx2g -J-Xms2g + property("get_complexity") = { + try { + val tree = new SearchTree() + for (i <- 0 until 100000) { + tree.put(i.toString(), mutableSetAsJavaSet(Set(i.toString()))) + } + val stack = new java.util.Stack[String]() + for (i <- 0 until 100000) { + stack.push(i.toString()) + } + val t1 = System.nanoTime() + val result = tree.get("99888") + val t2 = System.nanoTime() + val last = stack.search("111") + val t3 = System.nanoTime() + //println((t2-t1)/1000 + " " + (t3-t2)/1000) + t3-t2 > (t2-t1)/20 // should be log(n) instead of n, we fix the threshold at n/20 + } catch { + case e: Exception => false + } + } + + // Must be compiled with -J-Xmx2g -J-Xms2g + property("entriesBetween_complexity") = { + try { + val tree = new SearchTree() + for (i <- 0 until 100000) { + tree.put(i.toString(), mutableSetAsJavaSet(Set(i.toString()))) + } + val stack = new java.util.Stack[String]() + for (i <- 0 until 100000) { + stack.push(i.toString()) + } + val t1 = System.nanoTime() + val result = tree.entriesBetween("99997", "99998") + val t2 = System.nanoTime() + val last = stack.search("1") + val t3 = System.nanoTime() + //println((t2-t1)/1000 + " " + (t3-t2)/1000) + t3-t2 > (t2-t1)/10 // should be log(n) instead of n, we fix the threshold at n/10 + } catch { + case e: Exception => false + } + } + +} \ No newline at end of file diff --git a/lost+found/Organza_40_Stoff_41_.xml-5qduCk b/lost+found/Organza_40_Stoff_41_.xml-5qduCk new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/OutOfMemoryDFS.java-vAQvGe b/lost+found/OutOfMemoryDFS.java-vAQvGe new file mode 100644 index 00000000..f2eda6d7 --- /dev/null +++ b/lost+found/OutOfMemoryDFS.java-vAQvGe @@ -0,0 +1,37 @@ +// 1) +import java.util.ArrayList; +import java.util.Stack; + +// 2) +for (int i = 0; i < marked.length;i++) { + marked[i] = false; + edgeTo[i] = 0; +} + +Stack stack = new Stack(); +stack.push(v); +while (!stack.empty()) { + int n = stack.peek(); // Here lies the error + marked[n] = true; + + for (int adj : G.adj(n)) { + if (!marked[adj]) { + edgeTo[adj] = n; + stack.push(adj); + } + } +} + + +// 3) +return marked[v]; + +// 4) +ArrayList list = new ArrayList<>(); +list.add(v); +while (v != s) { + v = edgeTo[v]; + list.add(v); +} + +return list; diff --git a/lost+found/OutputBitStream.class-6NtlaP b/lost+found/OutputBitStream.class-6NtlaP new file mode 100644 index 00000000..eeb79997 Binary files /dev/null and b/lost+found/OutputBitStream.class-6NtlaP differ diff --git a/lost+found/OutputBitStream.class-UqmcbZ b/lost+found/OutputBitStream.class-UqmcbZ new file mode 100644 index 00000000..eeb79997 Binary files /dev/null and b/lost+found/OutputBitStream.class-UqmcbZ differ diff --git a/lost+found/PP_32_Folie.xml-IUC235 b/lost+found/PP_32_Folie.xml-IUC235 new file mode 100644 index 00000000..52148ae3 --- /dev/null +++ b/lost+found/PP_32_Folie.xml-IUC235 @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + PP Folie + + 0.5 + + \ No newline at end of file diff --git a/lost+found/PP_40_Kunststoff_41_Dvd_95_Huelle.xml-Yc3Gz7 b/lost+found/PP_40_Kunststoff_41_Dvd_95_Huelle.xml-Yc3Gz7 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml-JJfkyU b/lost+found/PS_32_Polystyrol_32__40_Mon_32_Cherie_44__32_Rocher_44__32_etc._41_.xml-JJfkyU new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Paper.png-u56hQ6 b/lost+found/Paper.png-u56hQ6 new file mode 100644 index 00000000..f1d77453 Binary files /dev/null and b/lost+found/Paper.png-u56hQ6 differ diff --git a/lost+found/Paper.xml-2klDyH b/lost+found/Paper.xml-2klDyH new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Papier.xml-EuUHFN b/lost+found/Papier.xml-EuUHFN new file mode 100644 index 00000000..1f98837c --- /dev/null +++ b/lost+found/Papier.xml-EuUHFN @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Papier + + 0.0 + + \ No newline at end of file diff --git a/lost+found/Papier_40_120gr_41_.xml-A9nAw9 b/lost+found/Papier_40_120gr_41_.xml-A9nAw9 new file mode 100644 index 00000000..03cf8414 --- /dev/null +++ b/lost+found/Papier_40_120gr_41_.xml-A9nAw9 @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Papier(120gr) + + 0.0 + + \ No newline at end of file diff --git a/lost+found/Pappel.xml-HY96zu b/lost+found/Pappel.xml-HY96zu new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Pappel_40_Sperrholz_41_.xml-GOiLbS b/lost+found/Pappel_40_Sperrholz_41_.xml-GOiLbS new file mode 100644 index 00000000..21316cd3 --- /dev/null +++ b/lost+found/Pappel_40_Sperrholz_41_.xml-GOiLbS @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Pappel(Sperrholz) + + 4.0 + + \ No newline at end of file diff --git a/lost+found/ParseException.java-NRJpEz b/lost+found/ParseException.java-NRJpEz new file mode 100644 index 00000000..b493c22f --- /dev/null +++ b/lost+found/ParseException.java-NRJpEz @@ -0,0 +1,14 @@ +@SuppressWarnings("serial") +public class ParseException extends Exception { + + private String err; + + public ParseException(String err) { + this.err = err; + } + + public String toString() { + return err; + } + +} diff --git a/lost+found/PlagiarismInterface.java-roIo7Y b/lost+found/PlagiarismInterface.java-roIo7Y new file mode 100644 index 00000000..eefae30b --- /dev/null +++ b/lost+found/PlagiarismInterface.java-roIo7Y @@ -0,0 +1,15 @@ +import java.util.Map.Entry; +import java.util.Set; + +/* A class implementing this interface should have a constructor taking two arguments : + * - The path to the folder where lies the corpus of documents, + * - The number 'w' of characters from which we consider that a sentence is plagiarized. */ +public interface PlagiarismInterface { + + /* @pre : 'doc' is the path to a text file + * @post : searches for plagiarized sentences of at least 'w' characters between 'doc' and all text files in 'corpus'. + * returns a set of (document name, position) for each plagiarized sentence found in a corpus file + * ('position' is the position of the first character of the first occurence of that sentence in the corpus files, starting at 0 and considering the alphabetical order of the files) */ + public Set> detect(String doc); + +} diff --git a/lost+found/Plexiglass.xml-y5G1Eh b/lost+found/Plexiglass.xml-y5G1Eh new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Polycarbonat.xml-eTr4K4 b/lost+found/Polycarbonat.xml-eTr4K4 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Queue.java-YKf1qm b/lost+found/Queue.java-YKf1qm new file mode 100644 index 00000000..71254879 --- /dev/null +++ b/lost+found/Queue.java-YKf1qm @@ -0,0 +1,8 @@ +public interface Queue { + + public int size(); + public boolean isEmpty(); + public E front() throws QueueEmptyException; + public void enqueue (E element); + public E dequeue() throws QueueEmptyException; +} \ No newline at end of file diff --git a/lost+found/QueueEmptyException.java-gCDcco b/lost+found/QueueEmptyException.java-gCDcco new file mode 100644 index 00000000..7deebd80 --- /dev/null +++ b/lost+found/QueueEmptyException.java-gCDcco @@ -0,0 +1,3 @@ +public class QueueEmptyException extends Exception { +} + diff --git a/lost+found/README-zrLjEQ b/lost+found/README-zrLjEQ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/README.md-AtyBv8 b/lost+found/README.md-AtyBv8 new file mode 100644 index 00000000..da8521a7 --- /dev/null +++ b/lost+found/README.md-AtyBv8 @@ -0,0 +1,44 @@ +## Structure + +Chaque dossier correspond à une task sur INGInious; certains dossiers sont des essais de tests, mais n'ont pas été publiés sur INGInious. Ce qui suit ne concerne que les tasks demandant aux étudiants des implémentations de programmes ou des tests de programmes: + +Ces tâches demandent à l'étudiant de fournir une implémentation d'une interface: + +* m1stack +* m1interpreter +* m3orderedmap +* m4bis +* m5compressor +* m6kruskal + +Ces tâches demandent à l'étudiant de fournir une batterie de tests qui seront appliqués sur des implémentations parfois correctes parfois incorrectes: + +* m1stacktests +* m1interpretertests +* m3tests +* m4plagiarism_tests +* m5_compressor_tests +* m6_kruskal_tests + +Ces tâches demandent des choses divers et variés (QCM, simple réponse, code, ...): + +* preexam_bfs +* preexam_merge_sort +* preexam_dfs +* preexam_heap +* preexam_redblacktree +* preexam_treeqcm + +Il existe d'autres dossiers pour d'autres missions, mais ce ne sont que des ébauches, et ne sont pas utilisés ou donnés aux étudiants. (Y'as rien pour la mission 2, par exemple) + +### common + +Dans le dossier "common/" se trouve des scripts communs à chaque tâche. Le script "build" permet de copier ces scripts dans les différents dossiers des différentes tâches. (Il faut les copier car lorsque INGInious crée le container Docker, celui-ci n'a plus accès au repertoire parent, et donc à "common/") + +### run + +Chaque tâche contient un fichier "run" qui correspond aux fichier executé par INGInious lors de la soumission d'une tâche. La plupart de ces fichiers "run" utilisent les scripts copiés de "common/". + +### examples + +Le dossier "examples" contient des exemples de tests ou d'implémentations. Ca permet de rapidement vérifier si une tâche fonctionne comme il faut pour les cas les plus basiques. diff --git a/lost+found/RabinKarp.java-OUaVd0 b/lost+found/RabinKarp.java-OUaVd0 new file mode 100644 index 00000000..7fdb8ba7 --- /dev/null +++ b/lost+found/RabinKarp.java-OUaVd0 @@ -0,0 +1,3 @@ +package templates; + +@@RabinKarp@@ diff --git a/lost+found/RabinKarp.java-WFGvLk b/lost+found/RabinKarp.java-WFGvLk new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/RabinKarp.java-WFGvLk @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/RabinKarpTest.java-Yy4xGw b/lost+found/RabinKarpTest.java-Yy4xGw new file mode 100644 index 00000000..42d177b5 --- /dev/null +++ b/lost+found/RabinKarpTest.java-Yy4xGw @@ -0,0 +1,121 @@ +import org.junit.Test; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; + + +import java.util.Random; + +import static java.lang.Math.min; +import static org.junit.Assert.assertEquals; + +public class RabinKarpTest { + + + @Test + @Grade(value= 10) + public void basicTest(){ + String[] pat = {"comp","like"}; + String txt = "I like computer science"; + RabinKarp rc = new RabinKarp(pat); + assertEquals(2,rc.search(txt)); + } + + + @Test + @Grade(value= 20) + public void wordNotPresentTest(){ + String[] pat = {"Yavin","C-3PO","R2-D2" }; + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + RabinKarp rc = new RabinKarp(pat); + assertEquals(txt.length(),rc.search(txt)); + } + + + @Test + @Grade(value=20) + public void randomWordTest(){ + int[] seeds = new int[]{42,56,3,9,65,99,23}; + Random rand = new Random(new Random().nextInt(seeds.length)); + String[] pat = new String[10]; + int length = 8; + + + String txt = "Mais, vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise situation. Moi," + + " si je devais résumer ma vie aujourd'hui avec vous, je dirais que c'est d'abord des rencontres," + + " des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi." + + " Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... " + + "Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste," + + " parfois on ne trouve pas l'interlocuteur en face, je dirais, le miroir qui vous aide à avancer." + + " Alors ce n'est pas mon cas, comme je le disais là, puisque moi au contraire, j'ai pu ;" + + " et je dis merci à la vie, je lui dis merci, je chante la vie, je danse la vie... Je ne suis qu'amour !" + + " Et finalement, quand beaucoup de gens aujourd'hui me disent Mais comment fais-tu pour avoir cette" + + " humanité ?, eh ben je leur réponds très simplement, je leur dis que c'est ce goût de l'amour, ce goût donc" + + " qui m'a poussé aujourd'hui à entreprendre une construction mécanique, mais demain, qui sait," + + " peut-être seulement à me mettre au service de la communauté, à faire le don, le don de soi..."; + + + int minIndex = txt.length(); + for(int i=0;i<10;i++){ + int startIndex = rand.nextInt(txt.length()-length); + pat[i] = txt.substring(startIndex,startIndex+length); + minIndex = min(minIndex,startIndex); + } + RabinKarp rc = new RabinKarp(pat); + assertEquals(minIndex,rc.search(txt)); + } + + private int nChar = 26; + private int patSize = 3; + private String[] patterns = new String[(int)Math.pow(nChar,patSize)]; + private int nPats = 0; + private void genAllWords(String prefix, int k) { + if (k == 0) { + this.patterns[nPats] = prefix; + this.nPats++; + return; + } + + for (int i = 0; i < nChar; ++i) { + String newPrefix = prefix + (char)('a' + i); + genAllWords(newPrefix, k - 1); + } + } + + @Test(timeout=50) + @Grade(value=50) + public void complexityTest(){ + long t0 = System.currentTimeMillis(); + genAllWords("",patSize); + RabinKarp rc = new RabinKarp(this.patterns); + + String txt = ""+ + "Ra th er t ha n pu rs ui ng m or e so ph is ti ca te d sk ip pi ng , th e Ra bi n– Ka rp a l"+ + "g or it hm s ee ks t o sp ee d up t he t es ti ng o f eq ua li ty o f th e pa tt er n to"+ + " t he s ub st ri ng s in t he t ex t by u si ng a h as h fu nc ti on . A ha sh f un ct "+ + "io n is a f un ct io n wh ic h co nv er ts e ve ry s tr in g in to a n um er ic v al ue ,"+ + " ca ll ed i ts h as h va lu e; f or e xa mp le , we m ig ht h av e ha sh (h el lo )= 5. T"; + + assertEquals(txt.length(),rc.search(txt)); + + long t1 = System.currentTimeMillis(); + System.out.println("Spent time = "+(t1-t0)); + + + } + + +} diff --git a/lost+found/RedBlack.java-suWN0G b/lost+found/RedBlack.java-suWN0G new file mode 100644 index 00000000..16a996ec --- /dev/null +++ b/lost+found/RedBlack.java-suWN0G @@ -0,0 +1,187 @@ +import java.util.NoSuchElementException; + +public interface RedBlack, Value> { + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size(); + + /** + * Is this symbol table empty? + * @return {@code true} if this symbol table is empty and {@code false} otherwise + */ + public boolean isEmpty(); + + /*************************************************************************** + * Standard BST search. + ***************************************************************************/ + + /** + * Returns the value associated with the given key. + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Value get(Key key); + + + /** + * Does this symbol table contain the given key? + * @param key the key + * @return {@code true} if this symbol table contains {@code key} and + * {@code false} otherwise + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public boolean contains(Key key); + + /*************************************************************************** + * Red-black tree insertion. + ***************************************************************************/ + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value if the symbol table already contains the specified key. + * Deletes the specified key (and its associated value) from this symbol table + * if the specified value is {@code null}. + * + * @param key the key + * @param val the value + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void put(Key key, Value val); + + + /*************************************************************************** + * Red-black tree deletion. + ***************************************************************************/ + + /** + * Removes the smallest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMin(); + + + /** + * Removes the largest key and associated value from the symbol table. + * @throws NoSuchElementException if the symbol table is empty + */ + public void deleteMax(); + + /** + * Removes the specified key and its associated value from this symbol table + * (if the key is in this symbol table). + * + * @param key the key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public void delete(Key key); + + + + /*************************************************************************** + * Utility functions. + ***************************************************************************/ + + /** + * Returns the height of the BST (for debugging). + * @return the height of the BST (a 1-node tree has height 0) + */ + public int height(); + + /*************************************************************************** + * Ordered symbol table methods. + ***************************************************************************/ + + /** + * Returns the smallest key in the symbol table. + * @return the smallest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key min(); + + /** + * Returns the largest key in the symbol table. + * @return the largest key in the symbol table + * @throws NoSuchElementException if the symbol table is empty + */ + public Key max(); + + + /** + * Returns the largest key in the symbol table less than or equal to {@code key}. + * @param key the key + * @return the largest key in the symbol table less than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key floor(Key key); + + /** + * Returns the smallest key in the symbol table greater than or equal to {@code key}. + * @param key the key + * @return the smallest key in the symbol table greater than or equal to {@code key} + * @throws NoSuchElementException if there is no such key + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public Key ceiling(Key key); + + /** + * Return the key in the symbol table whose rank is {@code k}. + * This is the (k+1)st smallest key in the symbol table. + * + * @param k the order statistic + * @return the key in the symbol table of rank {@code k} + * @throws IllegalArgumentException unless {@code k} is between 0 and + * n–1 + */ + public Key select(int k); + + /** + * Return the number of keys in the symbol table strictly less than {@code key}. + * @param key the key + * @return the number of keys in the symbol table strictly less than {@code key} + * @throws IllegalArgumentException if {@code key} is {@code null} + */ + public int rank(Key key); + + /*************************************************************************** + * Range count and range search. + ***************************************************************************/ + + /** + * Returns all keys in the symbol table as an {@code Iterable}. + * To iterate over all of the keys in the symbol table named {@code st}, + * use the foreach notation: {@code for (Key key : st.keys())}. + * @return all keys in the symbol table as an {@code Iterable} + */ + public Iterable keys(); + + /** + * Returns all keys in the symbol table in the given range, + * as an {@code Iterable}. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return all keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) as an {@code Iterable} + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public Iterable keys(Key lo, Key hi); + + /** + * Returns the number of keys in the symbol table in the given range. + * + * @param lo minimum endpoint + * @param hi maximum endpoint + * @return the number of keys in the sybol table between {@code lo} + * (inclusive) and {@code hi} (inclusive) + * @throws IllegalArgumentException if either {@code lo} or {@code hi} + * is {@code null} + */ + public int size(Key lo, Key hi); +} \ No newline at end of file diff --git a/lost+found/Rubber.xml-2DESUR b/lost+found/Rubber.xml-2DESUR new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/RunTests.java-6ZlBFW b/lost+found/RunTests.java-6ZlBFW new file mode 100644 index 00000000..ab170a28 --- /dev/null +++ b/lost+found/RunTests.java-6ZlBFW @@ -0,0 +1,13 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run(ClosestPairTest.class); + } +} \ No newline at end of file diff --git a/m1stack/student/RunTests.java b/lost+found/RunTests.java-JksoTe similarity index 100% rename from m1stack/student/RunTests.java rename to lost+found/RunTests.java-JksoTe diff --git a/preexam_bfs/student/RunTests.java b/lost+found/RunTests.java-VDDIGV similarity index 100% rename from preexam_bfs/student/RunTests.java rename to lost+found/RunTests.java-VDDIGV diff --git a/lost+found/RunTests.java-fJOqAu b/lost+found/RunTests.java-fJOqAu new file mode 100644 index 00000000..a9666e19 --- /dev/null +++ b/lost+found/RunTests.java-fJOqAu @@ -0,0 +1,12 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run(UnionIntervalsTest.class); + } +} \ No newline at end of file diff --git a/lost+found/RunTests.java-jHVuwE b/lost+found/RunTests.java-jHVuwE new file mode 100644 index 00000000..13c663a2 --- /dev/null +++ b/lost+found/RunTests.java-jHVuwE @@ -0,0 +1,13 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run( LPComplexityTests.class, LPHackAttackTests.class, LPStaticTests.class); + } +} \ No newline at end of file diff --git a/preexam_dfs/student/RunTests.java b/lost+found/RunTests.java-tT2M0B similarity index 100% rename from preexam_dfs/student/RunTests.java rename to lost+found/RunTests.java-tT2M0B diff --git a/lost+found/SMSSpamCollection-3foBZT b/lost+found/SMSSpamCollection-3foBZT new file mode 100644 index 00000000..02462fc9 --- /dev/null +++ b/lost+found/SMSSpamCollection-3foBZT @@ -0,0 +1,5574 @@ +ham Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat... +ham Ok lar... Joking wif u oni... +spam Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's +ham U dun say so early hor... U c already then say... +ham Nah I don't think he goes to usf, he lives around here though +spam FreeMsg Hey there darling it's been 3 week's now and no word back! I'd like some fun you up for it still? Tb ok! XxX std chgs to send, £1.50 to rcv +ham Even my brother is not like to speak with me. They treat me like aids patent. +ham As per your request 'Melle Melle (Oru Minnaminunginte Nurungu Vettam)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune +spam WINNER!! As a valued network customer you have been selected to receivea £900 prize reward! To claim call 09061701461. Claim code KL341. Valid 12 hours only. +spam Had your mobile 11 months or more? U R entitled to Update to the latest colour mobiles with camera for Free! Call The Mobile Update Co FREE on 08002986030 +ham I'm gonna be home soon and i don't want to talk about this stuff anymore tonight, k? I've cried enough today. +spam SIX chances to win CASH! From 100 to 20,000 pounds txt> CSH11 and send to 87575. Cost 150p/day, 6days, 16+ TsandCs apply Reply HL 4 info +spam URGENT! You have won a 1 week FREE membership in our £100,000 Prize Jackpot! Txt the word: CLAIM to No: 81010 T&C www.dbuk.net LCCLTD POBOX 4403LDNW1A7RW18 +ham I've been searching for the right words to thank you for this breather. I promise i wont take your help for granted and will fulfil my promise. You have been wonderful and a blessing at all times. +ham I HAVE A DATE ON SUNDAY WITH WILL!! +spam XXXMobileMovieClub: To use your credit, click the WAP link in the next txt message or click here>> http://wap. xxxmobilemovieclub.com?n=QJKGIGHJJGCBL +ham Oh k...i'm watching here:) +ham Eh u remember how 2 spell his name... Yes i did. He v naughty make until i v wet. +ham Fine if that’s the way u feel. That’s the way its gota b +spam England v Macedonia - dont miss the goals/team news. Txt ur national team to 87077 eg ENGLAND to 87077 Try:WALES, SCOTLAND 4txt/ú1.20 POBOXox36504W45WQ 16+ +ham Is that seriously how you spell his name? +ham I‘m going to try for 2 months ha ha only joking +ham So ü pay first lar... Then when is da stock comin... +ham Aft i finish my lunch then i go str down lor. Ard 3 smth lor. U finish ur lunch already? +ham Ffffffffff. Alright no way I can meet up with you sooner? +ham Just forced myself to eat a slice. I'm really not hungry tho. This sucks. Mark is getting worried. He knows I'm sick when I turn down pizza. Lol +ham Lol your always so convincing. +ham Did you catch the bus ? Are you frying an egg ? Did you make a tea? Are you eating your mom's left over dinner ? Do you feel my Love ? +ham I'm back & we're packing the car now, I'll let you know if there's room +ham Ahhh. Work. I vaguely remember that! What does it feel like? Lol +ham Wait that's still not all that clear, were you not sure about me being sarcastic or that that's why x doesn't want to live with us +ham Yeah he got in at 2 and was v apologetic. n had fallen out and she was actin like spoilt child and he got caught up in that. Till 2! But we won't go there! Not doing too badly cheers. You? +ham K tell me anything about you. +ham For fear of fainting with the of all that housework you just did? Quick have a cuppa +spam Thanks for your subscription to Ringtone UK your mobile will be charged £5/month Please confirm by replying YES or NO. If you reply NO you will not be charged +ham Yup... Ok i go home look at the timings then i msg ü again... Xuhui going to learn on 2nd may too but her lesson is at 8am +ham Oops, I'll let you know when my roommate's done +ham I see the letter B on my car +ham Anything lor... U decide... +ham Hello! How's you and how did saturday go? I was just texting to see if you'd decided to do anything tomo. Not that i'm trying to invite myself or anything! +ham Pls go ahead with watts. I just wanted to be sure. Do have a great weekend. Abiola +ham Did I forget to tell you ? I want you , I need you, I crave you ... But most of all ... I love you my sweet Arabian steed ... Mmmmmm ... Yummy +spam 07732584351 - Rodger Burns - MSG = We tried to call you re your reply to our sms for a free nokia mobile + free camcorder. Please call now 08000930705 for delivery tomorrow +ham WHO ARE YOU SEEING? +ham Great! I hope you like your man well endowed. I am <#> inches... +ham No calls..messages..missed calls +ham Didn't you get hep b immunisation in nigeria. +ham Fair enough, anything going on? +ham Yeah hopefully, if tyler can't do it I could maybe ask around a bit +ham U don't know how stubborn I am. I didn't even want to go to the hospital. I kept telling Mark I'm not a weak sucker. Hospitals are for weak suckers. +ham What you thinked about me. First time you saw me in class. +ham A gram usually runs like <#> , a half eighth is smarter though and gets you almost a whole second gram for <#> +ham K fyi x has a ride early tomorrow morning but he's crashing at our place tonight +ham Wow. I never realized that you were so embarassed by your accomodations. I thought you liked it, since i was doing the best i could and you always seemed so happy about "the cave". I'm sorry I didn't and don't have more to give. I'm sorry i offered. I'm sorry your room was so embarassing. +spam SMS. ac Sptv: The New Jersey Devils and the Detroit Red Wings play Ice Hockey. Correct or Incorrect? End? Reply END SPTV +ham Do you know what Mallika Sherawat did yesterday? Find out now @ <URL> +spam Congrats! 1 year special cinema pass for 2 is yours. call 09061209465 now! C Suprman V, Matrix3, StarWars3, etc all 4 FREE! bx420-ip4-5we. 150pm. Dont miss out! +ham Sorry, I'll call later in meeting. +ham Tell where you reached +ham Yes..gauti and sehwag out of odi series. +ham Your gonna have to pick up a $1 burger for yourself on your way home. I can't even move. Pain is killing me. +ham Ha ha ha good joke. Girls are situation seekers. +ham Its a part of checking IQ +ham Sorry my roommates took forever, it ok if I come by now? +ham Ok lar i double check wif da hair dresser already he said wun cut v short. He said will cut until i look nice. +spam As a valued customer, I am pleased to advise you that following recent review of your Mob No. you are awarded with a £1500 Bonus Prize, call 09066364589 +ham Today is "song dedicated day.." Which song will u dedicate for me? Send this to all ur valuable frnds but first rply me... +spam Urgent UR awarded a complimentary trip to EuroDisinc Trav, Aco&Entry41 Or £1000. To claim txt DIS to 87121 18+6*£1.50(moreFrmMob. ShrAcomOrSglSuplt)10, LS1 3AJ +spam Did you hear about the new "Divorce Barbie"? It comes with all of Ken's stuff! +ham I plane to give on this month end. +ham Wah lucky man... Then can save money... Hee... +ham Finished class where are you. +ham HI BABE IM AT HOME NOW WANNA DO SOMETHING? XX +ham K..k:)where are you?how did you performed? +ham U can call me now... +ham I am waiting machan. Call me once you free. +ham Thats cool. i am a gentleman and will treat you with dignity and respect. +ham I like you peoples very much:) but am very shy pa. +ham Does not operate after <#> or what +ham Its not the same here. Still looking for a job. How much do Ta's earn there. +ham Sorry, I'll call later +ham K. Did you call me just now ah? +ham Ok i am on the way to home hi hi +ham You will be in the place of that man +ham Yup next stop. +ham I call you later, don't have network. If urgnt, sms me. +ham For real when u getting on yo? I only need 2 more tickets and one more jacket and I'm done. I already used all my multis. +ham Yes I started to send requests to make it but pain came back so I'm back in bed. Double coins at the factory too. I gotta cash in all my nitros. +ham I'm really not up to it still tonight babe +ham Ela kano.,il download, come wen ur free.. +ham Yeah do! Don‘t stand to close tho- you‘ll catch something! +ham Sorry to be a pain. Is it ok if we meet another night? I spent late afternoon in casualty and that means i haven't done any of y stuff42moro and that includes all my time sheets and that. Sorry. +ham Smile in Pleasure Smile in Pain Smile when trouble pours like Rain Smile when sum1 Hurts U Smile becoz SOMEONE still Loves to see u Smiling!! +spam Please call our customer service representative on 0800 169 6031 between 10am-9pm as you have WON a guaranteed £1000 cash or £5000 prize! +ham Havent planning to buy later. I check already lido only got 530 show in e afternoon. U finish work already? +spam Your free ringtone is waiting to be collected. Simply text the password "MIX" to 85069 to verify. Get Usher and Britney. FML, PO Box 5249, MK17 92H. 450Ppw 16 +ham Watching telugu movie..wat abt u? +ham i see. When we finish we have loads of loans to pay +ham Hi. Wk been ok - on hols now! Yes on for a bit of a run. Forgot that i have hairdressers appointment at four so need to get home n shower beforehand. Does that cause prob for u?" +ham I see a cup of coffee animation +ham Please don't text me anymore. I have nothing else to say. +ham Okay name ur price as long as its legal! Wen can I pick them up? Y u ave x ams xx +ham I'm still looking for a car to buy. And have not gone 4the driving test yet. +ham As per your request 'Melle Melle (Oru Minnaminunginte Nurungu Vettam)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune +ham wow. You're right! I didn't mean to do that. I guess once i gave up on boston men and changed my search location to nyc, something changed. Cuz on my signin page it still says boston. +ham Umma my life and vava umma love you lot dear +ham Thanks a lot for your wishes on my birthday. Thanks you for making my birthday truly memorable. +ham Aight, I'll hit you up when I get some cash +ham How would my ip address test that considering my computer isn't a minecraft server +ham I know! Grumpy old people. My mom was like you better not be lying. Then again I am always the one to play jokes... +ham Dont worry. I guess he's busy. +ham What is the plural of the noun research? +ham Going for dinner.msg you after. +ham I'm ok wif it cos i like 2 try new things. But i scared u dun like mah. Cos u said not too loud. +spam GENT! We are trying to contact you. Last weekends draw shows that you won a £1000 prize GUARANTEED. Call 09064012160. Claim Code K52. Valid 12hrs only. 150ppm +ham Wa, ur openin sentence very formal... Anyway, i'm fine too, juz tt i'm eatin too much n puttin on weight...Haha... So anythin special happened? +ham As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there. +spam You are a winner U have been specially selected 2 receive £1000 or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810910p/min (18+) +ham Goodo! Yes we must speak friday - egg-potato ratio for tortilla needed! +ham Hmm...my uncle just informed me that he's paying the school directly. So pls buy food. +spam PRIVATE! Your 2004 Account Statement for 07742676969 shows 786 unredeemed Bonus Points. To claim call 08719180248 Identifier Code: 45239 Expires +spam URGENT! Your Mobile No. was awarded £2000 Bonus Caller Prize on 5/9/03 This is our final try to contact U! Call from Landline 09064019788 BOX42WR29C, 150PPM +ham here is my new address -apples&pairs&all that malarky +spam Todays Voda numbers ending 7548 are selected to receive a $350 award. If you have a match please call 08712300220 quoting claim code 4041 standard rates app +ham I am going to sao mu today. Will be done only at 12 +ham Ü predict wat time ü'll finish buying? +ham Good stuff, will do. +ham Just so that you know,yetunde hasn't sent money yet. I just sent her a text not to bother sending. So its over, you dont have to involve yourself in anything. I shouldn't have imposed anything on you in the first place so for that, i apologise. +ham Are you there in room. +ham HEY GIRL. HOW R U? HOPE U R WELL ME AN DEL R BAK! AGAIN LONG TIME NO C! GIVE ME A CALL SUM TIME FROM LUCYxx +ham K..k:)how much does it cost? +ham I'm home. +ham Dear, will call Tmorrow.pls accomodate. +ham First answer my question. +spam Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country the Algarve is in? Txt ansr to 82277. £1.50 SP:Tyrone +spam Want 2 get laid tonight? Want real Dogging locations sent direct 2 ur mob? Join the UK's largest Dogging Network bt Txting GRAVEL to 69888! Nt. ec2a. 31p.msg@150p +ham I only haf msn. It's yijue@hotmail.com +ham He is there. You call and meet him +ham No no. I will check all rooms befor activities +spam You'll not rcv any more msgs from the chat svc. For FREE Hardcore services text GO to: 69988 If u get nothing u must Age Verify with yr network & try again +ham Got c... I lazy to type... I forgot ü in lect... I saw a pouch but like not v nice... +ham K, text me when you're on the way +ham Sir, Waiting for your mail. +ham A swt thought: "Nver get tired of doing little things 4 lovable persons.." Coz..somtimes those little things occupy d biggest part in their Hearts.. Gud ni8 +ham I know you are. Can you pls open the back? +ham Yes see ya not on the dot +ham Whats the staff name who is taking class for us? +spam FreeMsg Why haven't you replied to my text? I'm Randy, sexy, female and live local. Luv to hear from u. Netcollex Ltd 08700621170150p per msg reply Stop to end +ham Ummma.will call after check in.our life will begin from qatar so pls pray very hard. +ham K..i deleted my contact that why? +ham Sindu got job in birla soft .. +ham The wine is flowing and i'm i have nevering.. +ham Yup i thk cine is better cos no need 2 go down 2 plaza mah. +ham Ok... Ur typical reply... +ham As per your request 'Melle Melle (Oru Minnaminunginte Nurungu Vettam)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune +ham You are everywhere dirt, on the floor, the windows, even on my shirt. And sometimes when i open my mouth, you are all that comes flowing out. I dream of my world without you, then half my chores are out too. A time of joy for me, lots of tv shows i.ll see. But i guess like all things you just must exist, like rain, hail and mist, and when my time here is done, you and i become one. +ham Aaooooright are you at work? +ham I'm leaving my house now... +ham Hello, my love. What are you doing? Did you get to that interview today? Are you you happy? Are you being a good boy? Do you think of me?Are you missing me ? +spam Customer service annoncement. You have a New Years delivery waiting for you. Please call 07046744435 now to arrange delivery +spam You are a winner U have been specially selected 2 receive £1000 cash or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810810 +ham Keep yourself safe for me because I need you and I miss you already and I envy everyone that see's you in real life +ham New car and house for my parents.:)i have only new job in hand:) +ham I'm so in love with you. I'm excited each day i spend with you. You make me so happy. +spam -PLS STOP bootydelious (32/F) is inviting you to be her friend. Reply YES-434 or NO-434 See her: www.SMS.ac/u/bootydelious STOP? Send STOP FRND to 62468 +spam BangBabes Ur order is on the way. U SHOULD receive a Service Msg 2 download UR content. If U do not, GoTo wap. bangb. tv on UR mobile internet/service menu +ham I place all ur points on e cultures module already. +spam URGENT! We are trying to contact you. Last weekends draw shows that you have won a £900 prize GUARANTEED. Call 09061701939. Claim code S89. Valid 12hrs only +ham Hi frnd, which is best way to avoid missunderstding wit our beloved one's? +ham Great escape. I fancy the bridge but needs her lager. See you tomo +ham Yes :)it completely in out of form:)clark also utter waste. +ham Sir, I need AXIS BANK account no and bank address. +ham Hmmm.. Thk sure got time to hop ard... Ya, can go 4 free abt... Muz call u to discuss liao... +ham What time you coming down later? +ham Bloody hell, cant believe you forgot my surname Mr . Ill give u a clue, its spanish and begins with m... +ham Well, i'm gonna finish my bath now. Have a good...fine night. +ham Let me know when you've got the money so carlos can make the call +ham U still going to the mall? +ham Turns out my friends are staying for the whole show and won't be back til ~ <#> , so feel free to go ahead and smoke that $ <#> worth +ham Text her. If she doesnt reply let me know so i can have her log in +ham Hi! You just spoke to MANEESHA V. We'd like to know if you were satisfied with the experience. Reply Toll Free with Yes or No. +ham You lifted my hopes with the offer of money. I am in need. Especially when the end of the month approaches and it hurts my studying. Anyways have a gr8 weekend +ham Lol no. U can trust me. +ham ok. I am a gentleman and will treat you with dignity and respect. +ham He will, you guys close? +ham Going on nothing great.bye +ham Hello handsome ! Are you finding that job ? Not being lazy ? Working towards getting back that net for mummy ? Where's my boytoy now ? Does he miss me ? +ham Haha awesome, be there in a minute +spam Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed £1000 cash or £5000 prize! +ham Have you got Xmas radio times. If not i will get it now +ham I jus reached home. I go bathe first. But my sis using net tell u when she finishes k... +spam Are you unique enough? Find out from 30th August. www.areyouunique.co.uk +ham I'm sorry. I've joined the league of people that dont keep in touch. You mean a great deal to me. You have been a friend at all times even at great personal cost. Do have a great week.| +ham Hi :)finally i completed the course:) +ham It will stop on itself. I however suggest she stays with someone that will be able to give ors for every stool. +ham How are you doing? Hope you've settled in for the new school year. Just wishin you a gr8 day +ham Gud mrng dear hav a nice day +ham Did u got that persons story +ham is your hamster dead? Hey so tmr i meet you at 1pm orchard mrt? +ham Hi its Kate how is your evening? I hope i can see you tomorrow for a bit but i have to bloody babyjontet! Txt back if u can. :) xxx +ham Found it, ENC <#> , where you at? +ham I sent you <#> bucks +ham Hello darlin ive finished college now so txt me when u finish if u can love Kate xxx +ham Your account has been refilled successfully by INR <DECIMAL> . Your KeralaCircle prepaid account balance is Rs <DECIMAL> . Your Transaction ID is KR <#> . +ham Goodmorning sleeping ga. +ham U call me alter at 11 ok. +ham Ü say until like dat i dun buy ericsson oso cannot oredi lar... +ham As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there. +ham Aight yo, dats straight dogg +ham You please give us connection today itself before <DECIMAL> or refund the bill +ham Both :) i shoot big loads so get ready! +ham What's up bruv, hope you had a great break. Do have a rewarding semester. +ham Home so we can always chat +ham K:)k:)good:)study well. +ham Yup... How ü noe leh... +ham Sounds great! Are you home now? +ham Finally the match heading towards draw as your prediction. +ham Tired. I haven't slept well the past few nights. +ham Easy ah?sen got selected means its good.. +ham I have to take exam with march 3 +ham Yeah you should. I think you can use your gt atm now to register. Not sure but if there's anyway i can help let me know. But when you do be sure you are ready. +ham Ok no prob. Take ur time. +ham There is os called ubandu which will run without installing in hard disk...you can use that os to copy the important files in system and give it to repair shop.. +ham Sorry, I'll call later +ham U say leh... Of course nothing happen lar. Not say v romantic jus a bit only lor. I thk e nite scenery not so nice leh. +spam 500 New Mobiles from 2004, MUST GO! Txt: NOKIA to No: 89545 & collect yours today!From ONLY £1 www.4-tc.biz 2optout 087187262701.50gbp/mtmsg18 +ham Would really appreciate if you call me. Just need someone to talk to. +spam Will u meet ur dream partner soon? Is ur career off 2 a flyng start? 2 find out free, txt HORO followed by ur star sign, e. g. HORO ARIES +ham Hey company elama po mudyadhu. +ham Life is more strict than teacher... Bcoz Teacher teaches lesson & then conducts exam, But Life first conducts Exam & then teaches Lessons. Happy morning. . . +ham Dear good morning now only i am up +ham Get down in gandhipuram and walk to cross cut road. Right side <#> street road and turn at first right. +ham Dear we are going to our rubber place +ham Sorry battery died, yeah I'm here +ham Yes:)here tv is always available in work place.. +spam Text & meet someone sexy today. U can find a date or even flirt its up to U. Join 4 just 10p. REPLY with NAME & AGE eg Sam 25. 18 -msg recd@thirtyeight pence +ham I have printed it oh. So <#> come upstairs +ham Or ill be a little closer like at the bus stop on the same street +ham Where are you?when wil you reach here? +ham New Theory: Argument wins d SITUATION, but loses the PERSON. So dont argue with ur friends just.. . . . kick them & say, I'm always correct.! +spam U 447801259231 have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094597 +ham Tomarrow final hearing on my laptop case so i cant. +ham PLEASSSSSSSEEEEEE TEL ME V AVENT DONE SPORTSx +ham Okay. No no, just shining on. That was meant to be signing, but that sounds better. +ham Although i told u dat i'm into baig face watches now but i really like e watch u gave cos it's fr u. Thanx 4 everything dat u've done today, i'm touched... +ham U don't remember that old commercial? +ham Too late. I said i have the website. I didn't i have or dont have the slippers +ham I asked you to call him now ok +ham Kallis wont bat in 2nd innings. +ham It didnt work again oh. Ok goodnight then. I.ll fix and have it ready by the time you wake up. You are very dearly missed have a good night sleep. +spam Congratulations ur awarded 500 of CD vouchers or 125gift guaranteed & Free entry 2 100 wkly draw txt MUSIC to 87066 TnCs www.Ldew.com1win150ppmx3age16 +ham Ranjith cal drpd Deeraj and deepak 5min hold +ham Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da. +ham What you doing?how are you? +ham Ups which is 3days also, and the shipping company that takes 2wks. The other way is usps which takes a week but when it gets to lag you may have to bribe nipost to get your stuff. +ham I'm back, lemme know when you're ready +ham Don't necessarily expect it to be done before you get back though because I'm just now headin out +ham Mmm so yummy babe ... Nice jolt to the suzy +ham Where are you lover ? I need you ... +spam We tried to contact you re your reply to our offer of a Video Handset? 750 anytime networks mins? UNLIMITED TEXT? Camcorder? Reply or call 08000930705 NOW +ham I‘m parked next to a MINI!!!! When are you coming in today do you think? +ham Yup +ham Anyway i'm going shopping on my own now. Cos my sis not done yet. Dun disturb u liao. +ham MY NO. IN LUTON 0125698789 RING ME IF UR AROUND! H* +spam Hey I am really horny want to chat or see me naked text hot to 69698 text charged at 150pm to unsubscribe text stop 69698 +ham Why you Dint come with us. +ham Same. Wana plan a trip sometme then +ham Not sure yet, still trying to get a hold of him +spam Ur ringtone service has changed! 25 Free credits! Go to club4mobiles.com to choose content now! Stop? txt CLUB STOP to 87070. 150p/wk Club4 PO Box1146 MK45 2WT +ham The evo. I just had to download flash. Jealous? +spam Ringtone Club: Get the UK singles chart on your mobile each week and choose any top quality ringtone! This message is free of charge. +ham Come to mu, we're sorting out our narcotics situation +ham Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay. +spam HMV BONUS SPECIAL 500 pounds of genuine HMV vouchers to be won. Just answer 4 easy questions. Play Now! Send HMV to 86688 More info:www.100percent-real.com +ham Usf I guess, might as well take 1 car +ham No objection. My bf not coming. +ham Thanx... +ham Tell rob to mack his gf in the theater +ham Awesome, I'll see you in a bit +ham Just sent it. So what type of food do you like? +ham All done? All handed in? Celebrations in full swing yet? +ham You got called a tool? +ham "Wen u miss someone, the person is definitely special for u..... But if the person is so special, why to miss them, just Keep-in-touch" gdeve.. +ham Ok. I asked for money how far +ham Okie... +ham Yeah I think my usual guy's still passed out from last night, if you get ahold of anybody let me know and I'll throw down +ham K, I might come by tonight then if my class lets out early +ham Ok.. +ham hi baby im cruisin with my girl friend what r u up 2? give me a call in and hour at home if thats alright or fone me on this fone now love jenny xxx +ham My life Means a lot to me, Not because I love my life, But because I love the people in my life, The world calls them friends, I call them my World:-).. Ge:-).. +ham Dear,shall mail tonite.busy in the street,shall update you tonite.things are looking ok.varunnathu edukkukayee raksha ollu.but a good one in real sense. +ham Hey you told your name to gautham ah? +ham Haf u found him? I feel so stupid da v cam was working. +ham Oops. 4 got that bit. +ham Are you this much buzy +ham I accidentally deleted the message. Resend please. +spam T-Mobile customer you may now claim your FREE CAMERA PHONE upgrade & a pay & go sim card for your loyalty. Call on 0845 021 3680.Offer ends 28thFeb.T&C's apply +ham Unless it's a situation where YOU GO GURL would be more appropriate +ham Hurt me... Tease me... Make me cry... But in the end of my life when i die plz keep one rose on my grave and say STUPID I MISS U.. HAVE A NICE DAY BSLVYL +ham I cant pick the phone right now. Pls send a message +ham Need a coffee run tomo?Can't believe it's that time of week already +ham Awesome, I remember the last time we got somebody high for the first time with diesel :V +ham Shit that is really shocking and scary, cant imagine for a second. Def up for night out. Do u think there is somewhere i could crash for night, save on taxi? +ham Oh and by the way you do have more food in your fridge! Want to go out for a meal tonight? +ham He is a womdarfull actor +spam SMS. ac Blind Date 4U!: Rodds1 is 21/m from Aberdeen, United Kingdom. Check Him out http://img. sms. ac/W/icmb3cktz8r7!-4 no Blind Dates send HIDE +ham Yup... From what i remb... I think should be can book... +ham Jos ask if u wana meet up? +ham Lol yes. Our friendship is hanging on a thread cause u won't buy stuff. +spam TheMob> Check out our newest selection of content, Games, Tones, Gossip, babes and sport, Keep your mobile fit and funky text WAP to 82468 +ham Where are the garage keys? They aren't on the bookshelf +ham Today is ACCEPT DAY..U Accept me as? Brother Sister Lover Dear1 Best1 Clos1 Lvblefrnd Jstfrnd Cutefrnd Lifpartnr Belovd Swtheart Bstfrnd No rply means enemy +spam Think ur smart ? Win £200 this week in our weekly quiz, text PLAY to 85222 now!T&Cs WinnersClub PO BOX 84, M26 3UZ. 16+. GBP1.50/week +ham He says he'll give me a call when his friend's got the money but that he's definitely buying before the end of the week +ham Hi the way I was with u 2day, is the normal way&this is the real me. UR unique&I hope I know u 4 the rest of mylife. Hope u find wot was lost. +ham You made my day. Do have a great day too. +ham K.k:)advance happy pongal. +ham Hmmm... Guess we can go 4 kb n power yoga... Haha, dunno we can tahan power yoga anot... Thk got lo oso, forgot liao... +ham Not really dude, have no friends i'm afraid :( +spam December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update Co FREE on 08002986906 +ham Coffee cake, i guess... +ham Merry Christmas to you too babe, i love ya *kisses* +ham Hey... Why dont we just go watch x men and have lunch... Haha +ham cud u tell ppl im gona b a bit l8 cos 2 buses hav gon past cos they were full & im still waitin 4 1. Pete x +ham That would be great. We'll be at the Guild. Could meet on Bristol road or somewhere - will get in touch over weekend. Our plans take flight! Have a good week +ham No problem. How are you doing? +ham No calls..messages..missed calls +ham Hi da:)how is the todays class? +ham I'd say that's a good sign but, well, you know my track record at reading women +ham Cool, text me when you're parked +ham I'm reading the text i just sent you. Its meant to be a joke. So read it in that light +ham K.k:)apo k.good movie. +ham Maybe i could get book out tomo then return it immediately ..? Or something. +spam Call Germany for only 1 pence per minute! Call from a fixed line via access number 0844 861 85 85. No prepayment. Direct access! +ham Any chance you might have had with me evaporated as soon as you violated my privacy by stealing my phone number from your employer's paperwork. Not cool at all. Please do not contact me again or I will report you to your supervisor. +spam Valentines Day Special! Win over £1000 in our quiz and take your partner on the trip of a lifetime! Send GO to 83600 now. 150p/msg rcvd. CustCare:08718720201. +ham Ta-Daaaaa! I am home babe, are you still up ? +ham Cool. So how come you havent been wined and dined before? +ham Just sleeping..and surfing +ham Sorry, I'll call later +ham U calling me right? Call my hand phone... +ham Ok that's great thanx a lot. +ham I take it the post has come then! You must have 1000s of texts now! Happy reading. My one from wiv hello caroline at the end is my favourite. Bless him +ham Where u been hiding stranger? +ham Am not interested to do like that. +ham My sister cleared two round in birla soft yesterday. +ham Gudnite....tc...practice going on +ham Dis is yijue. I jus saw ur mail. In case huiming havent sent u my num. Dis is my num. +ham One small prestige problem now. +spam Fancy a shag? I do.Interested? sextextuk.com txt XXUK SUZY to 69876. Txts cost 1.50 per msg. TnCs on website. X +ham Just checking in on you. Really do miss seeing Jeremiah. Do have a great month +ham Nah can't help you there, I've never had an iphone +ham If you're not in my car in an hour and a half I'm going apeshit +ham TODAY is Sorry day.! If ever i was angry with you, if ever i misbehaved or hurt you? plz plz JUST SLAP URSELF Bcoz, Its ur fault, I'm basically GOOD +ham Yo you guys ever figure out how much we need for alcohol? Jay and I are trying to figure out how much we can safely spend on weed +ham <#> ISH MINUTES WAS 5 MINUTES AGO. WTF. +ham Thank You for calling.Forgot to say Happy Onam to you Sirji.I am fine here and remembered you when i met an insurance person.Meet You in Qatar Insha Allah.Rakhesh, ex Tata AIG who joined TISSCO,Tayseer. +spam Congratulations ur awarded 500 of CD vouchers or 125gift guaranteed & Free entry 2 100 wkly draw txt MUSIC to 87066 TnCs www.Ldew.com1win150ppmx3age16 +spam Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send CASH to 86688 only 150p/msg. CC: 08708800282 HG/Suite342/2Lands Row/W1J6HL +ham I'm an actor. When i work, i work in the evening and sleep late. Since i'm unemployed at the moment, i ALWAYS sleep late. When you're unemployed, every day is saturday. +ham Hello! Just got here, st andrews-boy its a long way! Its cold. I will keep you posted +ham Ha ha cool cool chikku chikku:-):-DB-) +ham Oh ok no prob.. +ham Check audrey's status right now +ham Busy here. Trying to finish for new year. I am looking forward to finally meeting you... +ham Good afternoon sunshine! How dawns that day ? Are we refreshed and happy to be alive? Do we breathe in the air and smile ? I think of you, my love ... As always +ham Well i know Z will take care of me. So no worries. +spam Update_Now - Xmas Offer! Latest Motorola, SonyEricsson & Nokia & FREE Bluetooth! Double Mins & 1000 Txt on Orange. Call MobileUpd8 on 08000839402 or call2optout/F4Q= +spam Here is your discount code RP176781. To stop further messages reply stop. www.regalportfolio.co.uk. Customer Services 08717205546 +ham Wat uniform? In where get? +ham Cool, text me when you're ready +ham Hello my boytoy ... Geeee I miss you already and I just woke up. I wish you were here in bed with me, cuddling me. I love you ... +ham I will spoil you in bed as well :) +ham I'm going for bath will msg you next <#> min.. +ham I cant keep talking to people if am not sure i can pay them if they agree to price. So pls tell me what you want to really buy and how much you are willing to pay +spam Thanks for your Ringtone Order, Reference T91. You will be charged GBP 4 per week. You can unsubscribe at anytime by calling customer services on 09057039994 +ham Can you say what happen +ham You could have seen me..i did't recognise you Face.:) +ham Well there's not a lot of things happening in Lindsay on New years *sighs* Some bars in Ptbo and the blue heron has something going +ham Keep my payasam there if rinu brings +ham I taught that Ranjith sir called me. So only i sms like that. Becaus hes verifying about project. Prabu told today so only pa dont mistake me.. +ham I guess that's why you re worried. You must know that there's a way the body repairs itself. And i'm quite sure you shouldn't worry. We'll take it slow. First the tests, they will guide when your ovulation is then just relax. Nothing you've said is a reason to worry but i.ll keep on followin you up. +ham Yeah sure, give me a couple minutes to track down my wallet +ham Hey leave it. not a big deal:-) take care. +ham Hey i will be late ah... Meet you at 945+ +spam Double mins and txts 4 6months FREE Bluetooth on Orange. Available on Sony, Nokia Motorola phones. Call MobileUpd8 on 08000839402 or call2optout/N9DX +ham It took Mr owl 3 licks +ham Customer place i will call you. +ham Mm that time you dont like fun +spam 4mths half price Orange line rental & latest camera phones 4 FREE. Had your phone 11mths ? Call MobilesDirect free on 08000938767 to update now! or2stoptxt +ham Yup having my lunch buffet now.. U eat already? +ham Huh so late... Fr dinner? +ham Hey so this sat are we going for the intro pilates only? Or the kickboxing too? +ham Morning only i can ok. +ham Yes i think so. I am in office but my lap is in room i think thats on for the last few days. I didnt shut that down +ham Pick you up bout 7.30ish? What time are and that going? +ham From here after The performance award is calculated every two month.not for current one month period.. +ham Was actually sleeping and still might when u call back. So a text is gr8. You rock sis. Will send u a text wen i wake. +ham You are always putting your business out there. You put pictures of your ass on facebook. You are one of the most open people i've ever met. Why would i think a picture of your room would hurt you, make you feel violated. +ham Good evening Sir, Al Salam Wahleykkum.sharing a happy news.By the grace of God, i got an offer from Tayseer,TISSCO and i joined.Hope you are fine.Inshah Allah,meet you sometime.Rakhesh,visitor from India. +ham Hmmm...k...but i want to change the field quickly da:-)i wanna get system administrator or network administrator.. +spam FREE RINGTONE text FIRST to 87131 for a poly or text GET to 87131 for a true tone! Help? 0845 2814032 16 after 1st free, tones are 3x£150pw to e£nd txt stop +ham Dear how is chechi. Did you talk to her +ham The hair cream has not been shipped. +ham None of that's happening til you get here though +ham Yep, the great loxahatchee xmas tree burning of <#> starts in an hour +ham Haha get used to driving to usf man, I know a lot of stoners +ham All was well until slightly disastrous class this pm with my fav darlings! Hope day off ok. Coffee wld be good as can't stay late tomorrow. Same time + place as always? +ham Hello! Good week? Fancy a drink or something later? +ham Headin towards busetop +ham Message:some text missing* Sender:Name Missing* *Number Missing *Sent:Date missing *Missing U a lot thats y everything is missing sent via fullonsms.com +ham Come by our room at some point so we can iron out the plan for this weekend +ham Cos i want it to be your thing +ham Okies... I'll go yan jiu too... We can skip ard oso, go cine den go mrt one, blah blah blah... +ham Bring home some Wendy =D +spam 100 dating service cal;l 09064012103 box334sk38ch +ham Whatsup there. Dont u want to sleep +ham Alright i have a new goal now +spam FREE entry into our £250 weekly competition just text the word WIN to 80086 NOW. 18 T&C www.txttowin.co.uk +ham Alright, I'll head out in a few minutes, text me where to meet you +spam Send a logo 2 ur lover - 2 names joined by a heart. Txt LOVE NAME1 NAME2 MOBNO eg LOVE ADAM EVE 07123456789 to 87077 Yahoo! POBox36504W45WQ TxtNO 4 no ads 150p +ham Yes:)from last week itself i'm taking live call. +spam Someone has contacted our dating service and entered your phone because they fancy you! To find out who it is call from a landline 09111032124 . PoBox12n146tf150p +ham Siva is in hostel aha:-. +spam URGENT! Your Mobile number has been awarded with a £2000 prize GUARANTEED. Call 09058094455 from land line. Claim 3030. Valid 12hrs only +ham Send this to ur friends and receive something about ur voice..... How is my speaking expression? 1.childish 2.naughty 3.Sentiment 4.rowdy 5.ful of attitude 6.romantic 7.shy 8.Attractive 9.funny <#> .irritating <#> .lovable. reply me.. +ham Ok. She'll be ok. I guess +ham aathi..where are you dear.. +ham Any pain on urination any thing else? +ham 7 at esplanade.. Do ü mind giving me a lift cos i got no car today.. +ham I wnt to buy a BMW car urgently..its vry urgent.but hv a shortage of <#> Lacs.there is no source to arng dis amt. <#> lacs..thats my prob +ham At home watching tv lor. +ham Does she usually take fifteen fucking minutes to respond to a yes or no question +spam Congrats! Nokia 3650 video camera phone is your Call 09066382422 Calls cost 150ppm Ave call 3mins vary from mobiles 16+ Close 300603 post BCM4284 Ldn WC1N3XX +ham Booked ticket for pongal? +ham You available now? I'm like right around hillsborough & <#> th +ham The message sent is askin for <#> dollars. Shoul i pay <#> or <#> ? +ham Ask g or iouri, I've told the story like ten times already +ham How long does applebees fucking take +ham Hi hope u get this txt~journey hasnt been gd,now about 50 mins late I think. +ham But i have to. I like to have love and arrange. +ham Yes..he is really great..bhaji told kallis best cricketer after sachin in world:).very tough to get out. +ham You were supposed to wake ME up >:( +ham Oic... I saw him too but i tot he din c me... I found a group liao... +ham Sorry, I'll call later +ham "HEY HEY WERETHE MONKEESPEOPLE SAY WE MONKEYAROUND! HOWDY GORGEOUS, HOWU DOIN? FOUNDURSELF A JOBYET SAUSAGE?LOVE JEN XXX" +ham Sorry, my battery died, I can come by but I'm only getting a gram for now, where's your place? +ham Well done, blimey, exercise, yeah, i kinda remember wot that is, hmm. +ham I wont get concentration dear you know you are my mind and everything :-) +ham LOL ... Have you made plans for new years? +ham 10 min later k... +ham hanks lotsly! +ham Thanks for this hope you had a good day today +ham K:)k:)what are detail you want to transfer?acc no enough? +ham Ok i will tell her to stay out. Yeah its been tough but we are optimistic things will improve this month. +spam Loan for any purpose £500 - £75,000. Homeowners + Tenants welcome. Have you been previously refused? We can still help. Call Free 0800 1956669 or text back 'help' +ham Si si. I think ill go make those oreo truffles. +ham LOOK AT AMY URE A BEAUTIFUL, INTELLIGENT WOMAN AND I LIKE U A LOT. I KNOW U DON’T LIKE ME LIKE THAT SO DON’T WORRY. +ham I hope you that's the result of being consistently intelligent and kind. Start asking him about practicum links and keep your ears open and all the best. ttyl +ham 1.20 that call cost. Which i guess isnt bad. Miss ya, need ya, want ya, love ya +ham Going thru a very different feeling.wavering decisions and coping up with the same is the same individual.time will heal everything i believe. +ham Where did u go? My phone is gonna die you have to stay in here +ham Great. Never been better. Each day gives even more reasons to thank God +spam UpgrdCentre Orange customer, you may now claim your FREE CAMERA PHONE upgrade for your loyalty. Call now on 0207 153 9153. Offer ends 26th July. T&C's apply. Opt-out available +ham Sorry, I'll call later ok bye +ham Ok i am on the way to railway +ham great princess! I love giving and receiving oral. Doggy style is my fave position. How about you? I enjoy making love <#> times per night :) +ham They don't put that stuff on the roads to keep it from getting slippery over there? +ham When are you going to ride your bike? +ham Yup, no need. I'll jus wait 4 e rain 2 stop. +ham There are many company. Tell me the language. +spam okmail: Dear Dave this is your final notice to collect your 4* Tenerife Holiday or #5000 CASH award! Call 09061743806 from landline. TCs SAE Box326 CW25WX 150ppm +ham How long has it been since you screamed, princess? +ham Nothing. I meant that once the money enters your account here, the bank will remove its flat rate. Someone transfered <#> to my account and <#> dollars got removed. So the banks differ and charges also differ.be sure you trust the 9ja person you are sending account details to cos... +spam Want 2 get laid tonight? Want real Dogging locations sent direct 2 ur Mob? Join the UK's largest Dogging Network by txting MOAN to 69888Nyt. ec2a. 31p.msg@150p +ham Nice line said by a broken heart- Plz don't cum 1 more times infront of me... Other wise once again I ll trust U... Good 9t:) +ham Ok I'm gonna head up to usf in like fifteen minutes +ham Love you aathi..love u lot.. +ham Tension ah?what machi?any problem? +ham K, can I pick up another 8th when you're done? +ham When're you guys getting back? G said you were thinking about not staying for mcr +ham Almost there, see u in a sec +ham Yo carlos, a few friends are already asking me about you, you working at all this weekend? +ham Watching tv lor... +ham Thank you baby! I cant wait to taste the real thing... +ham You should change your fb to jaykwon thuglyfe falconerf +ham If we win its really no 1 side for long time. +spam FREE MESSAGE Activate your 500 FREE Text Messages by replying to this message with the word FREE For terms & conditions, visit www.07781482378.com +ham Dear reached railway. What happen to you +ham Depends on quality. If you want the type i sent boye, faded glory, then about 6. If you want ralphs maybe 2 +ham I think i've fixed it can you send a test message? +ham Sorry man my account's dry or I would, if you want we could trade back half or I could buy some shit with my credit card +spam Congrats! 1 year special cinema pass for 2 is yours. call 09061209465 now! C Suprman V, Matrix3, StarWars3, etc all 4 FREE! bx420-ip4-5we. 150pm. Dont miss out! +ham Sorry,in meeting I'll call later +ham What class of <#> reunion? +ham Are you free now?can i call now? +ham Got meh... When? +ham Nope... Think i will go for it on monday... Sorry i replied so late +ham Some of them told accenture is not confirm. Is it true. +ham Kate jackson rec center before 7ish, right? +ham Dear i have reache room +ham Fighting with the world is easy, u either win or lose bt fightng with some1 who is close to u is dificult if u lose - u lose if u win - u still lose. +ham When can ü come out? +ham Check with nuerologist. +ham Lolnice. I went from a fish to ..water.? +spam +123 Congratulations - in this week's competition draw u have won the £1450 prize to claim just call 09050002311 b4280703. T&Cs/stop SMS 08718727868. Over 18 only 150ppm +ham No it's waiting in e car dat's bored wat. Cos wait outside got nothing 2 do. At home can do my stuff or watch tv wat. +ham Maybe westshore or hyde park village, the place near my house? +ham You should know now. So how's anthony. Are you bringing money. I've school fees to pay and rent and stuff like that. Thats why i need your help. A friend in need....| +ham What's the significance? +ham Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.. +ham 8 at the latest, g's still there if you can scrounge up some ammo and want to give the new ak a try +ham Prabha..i'm soryda..realy..frm heart i'm sory +ham Lol ok your forgiven :) +ham No..jst change tat only.. +spam You are guaranteed the latest Nokia Phone, a 40GB iPod MP3 player or a £500 prize! Txt word: COLLECT to No: 83355! IBHltd LdnW15H 150p/Mtmsgrcvd18+ +ham S:)no competition for him. +spam Boltblue tones for 150p Reply POLY# or MONO# eg POLY3 1. Cha Cha Slide 2. Yeah 3. Slow Jamz 6. Toxic 8. Come With Me or STOP 4 more tones txt MORE +spam Your credits have been topped up for http://www.bubbletext.com Your renewal Pin is tgxxrz +ham That way transport is less problematic than on sat night. By the way, if u want to ask n to join my bday, feel free. But need to know definite nos as booking on fri. +ham Usually the person is unconscious that's in children but in adults they may just behave abnormally. I.ll call you now +ham But that's on ebay it might be less elsewhere. +ham Shall i come to get pickle +ham Were gonna go get some tacos +ham That's very rude, you on campus? +spam URGENT!: Your Mobile No. was awarded a £2,000 Bonus Caller Prize on 02/09/03! This is our 2nd attempt to contact YOU! Call 0871-872-9755 BOX95QU +ham Hi i won't b ard 4 christmas. But do enjoy n merry x'mas. +spam Today's Offer! Claim ur £150 worth of discount vouchers! Text YES to 85023 now! SavaMob, member offers mobile! T Cs 08717898035. £3.00 Sub. 16 . Unsub reply X +ham Yes! How is a pretty lady like you single? +spam You will recieve your tone within the next 24hrs. For Terms and conditions please see Channel U Teletext Pg 750 +ham Jay says that you're a double-faggot +spam PRIVATE! Your 2003 Account Statement for 07815296484 shows 800 un-redeemed S.I.M. points. Call 08718738001 Identifier Code 41782 Expires 18/11/04 +ham What Today-sunday..sunday is holiday..so no work.. +ham Gudnite....tc...practice going on +ham I'll be late... +ham I've not called you in a while. This is hoping it was l8r malaria and that you know that we miss you guys. I miss Bani big, so pls give her my love especially. Have a great day. +ham Good afternoon, my love! How goes that day ? I hope maybe you got some leads on a job. I think of you, boytoy and send you a passionate kiss from across the sea +ham Probably gonna be here for a while, see you later tonight <) +ham Or maybe my fat fingers just press all these buttons and it doesn't know what to do. +ham Ummmmmaah Many many happy returns of d day my dear sweet heart.. HAPPY BIRTHDAY dear +ham I am in tirupur da, once you started from office call me. +spam from www.Applausestore.com MonthlySubscription@50p/msg max6/month T&CsC web age16 2stop txt stop +ham A famous quote : when you develop the ability to listen to 'anything' unconditionally without losing your temper or self confidence, it means you are ......... 'MARRIED' +ham But am going to college pa. What to do. are else ill come there it self. Pa. +ham 4 oclock at mine. Just to bash out a flat plan. +ham This girl does not stay in bed. This girl doesn't need recovery time. Id rather pass out while having fun then be cooped up in bed +ham Then any special there? +ham I know but you need to get hotel now. I just got my invitation but i had to apologise. Cali is to sweet for me to come to some english bloke's weddin +ham Sorry that took so long, omw now +ham Wait <#> min.. +ham Ok give me 5 minutes I think I see her. BTW you're my alibi. You were cutting my hair the whole time. +ham Imagine you finally get to sink into that bath after I have put you through your paces, maybe even having you eat me for a while before I left ... But also imagine the feel of that cage on your cock surrounded by the bath water, reminding you always who owns you ... Enjoy, my cuck +ham Hurry up, I've been weed-deficient for like three days +ham Sure, if I get an acknowledgement from you that it's astoundingly tactless and generally faggy to demand a blood oath fo +ham Ok. Every night take a warm bath drink a cup of milk and you'll see a work of magic. You still need to loose weight. Just so that you know +ham I‘ll have a look at the frying pan in case it‘s cheap or a book perhaps. No that‘s silly a frying pan isn‘t likely to be a book +ham O. Well uv causes mutations. Sunscreen is like essential thesedays +ham Having lunch:)you are not in online?why? +ham I know that my friend already told that. +ham Hi Princess! Thank you for the pics. You are very pretty. How are you? +ham Aiyo... U always c our ex one... I dunno abt mei, she haven reply... First time u reply so fast... Y so lucky not workin huh, got bao by ur sugardad ah...gee.. +ham Hi msg me:)i'm in office.. +ham Thanx 4 e brownie it's v nice... +ham Geeeee ... I love you so much I can barely stand it +spam GENT! We are trying to contact you. Last weekends draw shows that you won a £1000 prize GUARANTEED. Call 09064012160. Claim Code K52. Valid 12hrs only. 150ppm +ham Fuck babe ... I miss you already, you know ? Can't you let me send you some money towards your net ? I need you ... I want you ... I crave you ... +ham Ill call u 2mrw at ninish, with my address that icky American freek wont stop callin me 2 bad Jen k eh? +ham Oooh bed ridden ey? What are YOU thinking of? +ham So anyways, you can just go to your gym or whatever, my love *smiles* I hope your ok and having a good day babe ... I miss you so much already +ham Love it! Daddy will make you scream with pleasure! I am going to slap your ass with my dick! +ham WOT U WANNA DO THEN MISSY? +ham Yar lor wait 4 my mum 2 finish sch then have lunch lor... I whole morning stay at home clean my room now my room quite clean... Hee... +ham Do you know where my lab goggles went +ham Can you open the door? +ham Waiting for your call. +ham Nope i waiting in sch 4 daddy... +spam You have won ?1,000 cash or a ?2,000 prize! To claim, call09050000327 +ham I'm tired of arguing with you about this week after week. Do what you want and from now on, i'll do the same. +ham Ü wait 4 me in sch i finish ard 5.. +spam our mobile number has won £5000, to claim calls us back or ring the claims hot line on 09050005321. +ham Arngd marriage is while u r walkin unfortuntly a snake bites u. bt love marriage is dancing in frnt of d snake & sayin Bite me, bite me. +ham Huh so early.. Then ü having dinner outside izzit? +ham Ok anyway no need to change with what you said +spam We tried to contact you re your reply to our offer of 750 mins 150 textand a new video phone call 08002988890 now or reply for free delivery tomorrow +ham my ex-wife was not able to have kids. Do you want kids one day? +ham So how's scotland. Hope you are not over showing your JJC tendencies. Take care. Live the dream +ham Tell them u have a headache and just want to use 1 hour of sick time. +ham I dun thk i'll quit yet... Hmmm, can go jazz ? Yogasana oso can... We can go meet em after our lessons den... +ham "Pete can you please ring meive hardly gotany credit" +ham Ya srsly better than yi tho +ham I'm in a meeting, call me later at +spam For ur chance to win a £250 wkly shopping spree TXT: SHOP to 80878. T's&C's www.txt-2-shop.com custcare 08715705022, 1x150p/wk +spam You have been specially selected to receive a 2000 pound award! Call 08712402050 BEFORE the lines close. Cost 10ppm. 16+. T&Cs apply. AG Promo +spam PRIVATE! Your 2003 Account Statement for 07753741225 shows 800 un-redeemed S. I. M. points. Call 08715203677 Identifier Code: 42478 Expires 24/10/04 +ham You still at grand prix? +ham I met you as a stranger and choose you as my friend. As long as the world stands, our friendship never ends. Lets be Friends forever!!! Gud nitz... +ham I am great! How are you? +ham Gud mrng dear have a nice day +spam You have an important customer service announcement. Call FREEPHONE 0800 542 0825 now! +ham Will do. Was exhausted on train this morning. Too much wine and pie. You sleep well too +ham I'm going out to buy mum's present ar. +ham Mind blastin.. No more Tsunamis will occur from now on.. Rajnikant stopped swimming in Indian Ocean..:-D +ham If u sending her home first it's ok lor. I'm not ready yet. +ham Speaking of does he have any cash yet? +ham Be happy there. I will come after noon +ham Meet after lunch la... +ham TaKe CaRE n gET WeLL sOOn +spam XCLUSIVE@CLUBSAISAI 2MOROW 28/5 SOIREE SPECIALE ZOUK WITH NICHOLS FROM PARIS.FREE ROSES 2 ALL LADIES !!! info: 07946746291/07880867867 +ham what I meant to say is cant wait to see u again getting bored of this bridgwater banter +ham Neva mind it's ok.. +ham It's fine, imma get a drink or somethin. Want me to come find you? +spam 22 days to kick off! For Euro2004 U will be kept up to date with the latest news and results daily. To be removed send GET TXT STOP to 83222 +ham Its a valentine game. . . Send dis msg to all ur friends. .. If 5 answers r d same then someone really loves u. Ques- which colour suits me the best?rply me +ham I have many dependents +ham THANX4 TODAY CER IT WAS NICE 2 CATCH UP BUT WE AVE 2 FIND MORE TIME MORE OFTEN OH WELL TAKE CARE C U SOON.C +ham I called and said all to him:)then he have to choose this future. +ham "Happy valentines day" I know its early but i have hundreds of handsomes and beauties to wish. So i thought to finish off aunties and uncles 1st... +ham He like not v shock leh. Cos telling shuhui is like telling leona also. Like dat almost all know liao. He got ask me abt ur reaction lor. +ham For my family happiness.. +ham I come n pick ü up... Come out immediately aft ur lesson... +ham Let there be snow. Let there be snow. This kind of weather brings ppl together so friendships can grow. +ham Dear we got <#> dollars hi hi +ham Good words.... But words may leave u in dismay many times. +ham MAKE SURE ALEX KNOWS HIS BIRTHDAY IS OVER IN FIFTEEN MINUTES AS FAR AS YOU'RE CONCERNED +ham sorry, no, have got few things to do. may be in pub later. +ham Nah it's straight, if you can just bring bud or drinks or something that's actually a little more useful than straight cash +ham Haha good to hear, I'm officially paid and on the market for an 8th +ham How many licks does it take to get to the center of a tootsie pop? +ham Yup i thk they r e teacher said that will make my face look longer. Darren ask me not 2 cut too short. +spam New TEXTBUDDY Chat 2 horny guys in ur area 4 just 25p Free 2 receive Search postcode or at gaytextbuddy.com. TXT ONE name to 89693 +spam Todays Vodafone numbers ending with 4882 are selected to a receive a £350 award. If your number matches call 09064019014 to receive your £350 award. +ham Please dont say like that. Hi hi hi +ham Thank u! +ham Oh that was a forwarded message. I thought you send that to me +ham Got it. Seventeen pounds for seven hundred ml – hope ok. +spam Dear Voucher Holder, 2 claim this weeks offer, at your PC go to http://www.e-tlp.co.uk/expressoffer Ts&Cs apply.2 stop texts txt STOP to 80062. +ham Me n him so funny... +ham Sweetheart, hope you are not having that kind of day! Have one with loads of reasons to smile. Biola +ham When ü login dat time... Dad fetching ü home now? +ham What will we do in the shower, baby? +ham I had askd u a question some hours before. Its answer +ham Well imma definitely need to restock before thanksgiving, I'll let you know when I'm out +ham said kiss, kiss, i can't do the sound effects! He is a gorgeous man isn't he! Kind of person who needs a smile to brighten his day! +ham Probably gonna swing by in a wee bit +ham Ya very nice. . .be ready on thursday +ham Allo! We have braved the buses and taken on the trains and triumphed. I mean we‘re in b‘ham. Have a jolly good rest of week +ham Watching cartoon, listening music & at eve had to go temple & church.. What about u? +ham Do you mind if I ask what happened? You dont have to say if it is uncomfortable. +spam PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08715203694 Identifier Code: 40533 Expires 31/10/04 +ham No prob. I will send to your email. +spam You have won ?1,000 cash or a ?2,000 prize! To claim, call09050000327. T&C: RSTM, SW7 3SS. 150ppm +ham Thats cool! Sometimes slow and gentle. Sonetimes rough and hard :) +ham I'm gonna say no. Sorry. I would but as normal am starting to panic about time. Sorry again! Are you seeing on Tuesday? +ham Wait, do you know if wesleys in town? I bet she does hella drugs! +ham Fine i miss you very much. +ham Did u got that persons story +ham Tell them the drug dealer's getting impatient +ham Sun cant come to earth but send luv as rays. cloud cant come to river but send luv as rain. I cant come to meet U, but can send my care as msg to U. Gud evng +ham You will be in the place of that man +ham It doesnt make sense to take it there unless its free. If you need to know more, wikipedia.com +spam 88800 and 89034 are premium phone services call 08718711108 +ham Under the sea, there lays a rock. In the rock, there is an envelope. In the envelope, there is a paper. On the paper, there are 3 words... ' +ham Then mum's repent how? +ham Sorry me going home first... Daddy come fetch ü later... +ham Leave it de:-). Start Prepare for next:-).. +ham Yes baby! We can study all the positions of the kama sutra ;) +ham En chikku nange bakra msg kalstiya..then had tea/coffee? +ham Carlos'll be here in a minute if you still need to buy +ham This pay is <DECIMAL> lakhs:) +ham Have a good evening! Ttyl +ham Did u receive my msg? +ham Ho ho - big belly laugh! See ya tomo +spam SMS. ac sun0819 posts HELLO:"You seem cool, wanted to say hi. HI!!!" Stop? Send STOP to 62468 +spam Get ur 1st RINGTONE FREE NOW! Reply to this msg with TONE. Gr8 TOP 20 tones to your phone every week just £1.50 per wk 2 opt out send STOP 08452810071 16 +ham Ditto. And you won't have to worry about me saying ANYTHING to you anymore. Like i said last night, you do whatever you want and i'll do the same. Peace. +ham I've got <#> , any way I could pick up? +ham I dont knw pa, i just drink milk.. +ham Maybe?! Say hi to and find out if got his card. Great escape or wetherspoons? +ham Piggy, r u awake? I bet u're still sleeping. I'm going 4 lunch now... +ham Cause I'm not freaky lol +ham Missed your call cause I was yelling at scrappy. Miss u. Can't wait for u to come home. I'm so lonely today. +ham What is this 'hex' place you talk of? Explain! +ham Ü log off 4 wat. It's sdryb8i +ham Is xy going 4 e lunch? +spam Hi I'm sue. I am 20 years old and work as a lapdancer. I love sex. Text me live - I'm i my bedroom now. text SUE to 89555. By TextOperator G2 1DA 150ppmsg 18+ +ham I wanted to ask ü to wait 4 me to finish lect. Cos my lect finishes in an hour anyway. +ham Have you finished work yet? :) +ham Every King Was Once A Crying Baby And Every Great Building Was Once A Map.. Not Imprtant Where U r TODAY, BUT Where U Wil Reach TOMORW. Gud ni8 +ham Dear,Me at cherthala.in case u r coming cochin pls call bfore u start.i shall also reach accordingly.or tell me which day u r coming.tmorow i am engaged ans its holiday. +ham Thanks love. But am i doing torch or bold. +spam Please CALL 08712404000 immediately as there is an urgent message waiting for you. +ham Was the farm open? +ham Sorry to trouble u again. Can buy 4d for my dad again? 1405, 1680, 1843. All 2 big 1 small, sat n sun. Thanx. +ham My sister in law, hope you are having a great month. Just saying hey. Abiola +ham Will purchase d stuff today and mail to you. Do you have a po box number? +ham Ah poop. Looks like ill prob have to send in my laptop to get fixed cuz it has a gpu problem +ham Good. Good job. I like entrepreneurs +ham Aight, you close by or still down around alex's place? +ham meet you in corporation st outside gap … you can see how my mind is working! +ham Mum ask ü to buy food home... +ham K..u also dont msg or reply to his msg.. +ham How much r ü willing to pay? +ham Sorry, I'll call later +ham What is important is that you prevent dehydration by giving her enough fluids +ham Thats a bit weird, even ?- where is the do supposed to be happening? But good idea, sure they will be in pub! +ham True dear..i sat to pray evening and felt so.so i sms'd you in some time... +ham I don't think I can get away for a trek that long with family in town, sorry +ham So when do you wanna gym harri +ham Quite late lar... Ard 12 anyway i wun b drivin... +spam To review and KEEP the fantastic Nokia N-Gage game deck with Club Nokia, go 2 www.cnupdates.com/newsletter. unsubscribe from alerts reply with the word OUT +spam 4mths half price Orange line rental & latest camera phones 4 FREE. Had your phone 11mths+? Call MobilesDirect free on 08000938767 to update now! or2stoptxt T&Cs +ham Height of Confidence: All the Aeronautics professors wer calld & they wer askd 2 sit in an aeroplane. Aftr they sat they wer told dat the plane ws made by their students. Dey all hurried out of d plane.. Bt only 1 didnt move... He said:"if it is made by my students,this wont even start........ Datz confidence.. +ham It just seems like weird timing that the night that all you and g want is for me to come smoke is the same day as when a shitstorm is attributed to me always coming over and making everyone smoke +spam 08714712388 between 10am-7pm Cost 10p +ham Save yourself the stress. If the person has a dorm account, just send your account details and the money will be sent to you. +ham He also knows about lunch menu only da. . I know +ham When i have stuff to sell i.ll tell you +spam +449071512431 URGENT! This is the 2nd attempt to contact U!U have WON £1250 CALL 09071512433 b4 050703 T&CsBCM4235WC1N3XX. callcost 150ppm mobilesvary. max£7. 50 +ham Book which lesson? then you msg me... I will call up after work or sth... I'm going to get specs. My membership is PX3748 +spam You have WON a guaranteed £1000 cash or a £2000 prize. To claim yr prize call our customer service representative on 08714712394 between 10am-7pm +ham Macha dont feel upset.i can assume your mindset.believe me one evening with me and i have some wonderful plans for both of us.LET LIFE BEGIN AGAIN.call me anytime +ham Oh is it? Send me the address +ham S'fine. Anytime. All the best with it. +ham That is wondar full flim. +ham Ya even those cookies have jelly on them +ham The world is running and i am still.maybe all are feeling the same,so be it.or i have to admit,i am mad.then where is the correction?or let me call this is life.and keep running with the world,may be u r also running.lets run. +ham Got it! It looks scrumptious... daddy wants to eat you all night long! +ham Of cos can lar i'm not so ba dao ok... 1 pm lor... Y u never ask where we go ah... I said u would ask on fri but he said u will ask today... +ham Alright omw, gotta change my order to a half8th +ham Exactly. Anyways how far. Is jide her to study or just visiting +ham Dunno y u ask me. +spam Email AlertFrom: Jeri StewartSize: 2KBSubject: Low-cost prescripiton drvgsTo listen to email call 123 +ham No he didn't. Spring is coming early yay! +ham Lol you won't feel bad when I use her money to take you out to a steak dinner =D +ham Even u dont get in trouble while convincing..just tel him once or twice and just tel neglect his msgs dont c and read it..just dont reply +ham Leaving to qatar tonite in search of an opportunity.all went fast.pls add me in ur prayers dear.Rakhesh +ham Then why no one talking to me +ham Thanks for looking out for me. I really appreciate. +spam Hi. Customer Loyalty Offer:The NEW Nokia6650 Mobile from ONLY £10 at TXTAUCTION! Txt word: START to No: 81151 & get yours Now! 4T&Ctxt TC 150p/MTmsg +ham Wish i were with you now! +ham Haha mayb u're rite... U know me well. Da feeling of being liked by someone is gd lor. U faster go find one then all gals in our group attached liao. +ham Yes i will be there. Glad you made it. +ham Do well :)all will for little time. Thing of good times ahead: +ham Just got up. have to be out of the room very soon. …. i hadn't put the clocks back til at 8 i shouted at everyone to get up and then realised it was 7. wahay. another hour in bed. +ham Ok. There may be a free gym about. +ham Men like shorter ladies. Gaze up into his eyes. +ham Dunno he jus say go lido. Same time 930. +ham I promise to take good care of you, princess. I have to run now. Please send pics when you get a chance. Ttyl! +spam U are subscribed to the best Mobile Content Service in the UK for £3 per 10 days until you send STOP to 82324. Helpline 08706091795 +ham Is there a reason we've not spoken this year? Anyways have a great week and all the best in your exam +ham By monday next week. Give me the full gist +spam Do you realize that in about 40 years, we'll have thousands of old ladies running around with tattoos? +spam You have an important customer service announcement from PREMIER. +ham Dont gimme that lip caveboy +ham When did you get to the library +ham Realy sorry-i don't recognise this number and am now confused :) who r u please?! +ham So why didnt you holla? +ham Cant think of anyone with * spare room off * top of my head +ham Faith makes things possible,Hope makes things work,Love makes things beautiful,May you have all three this Christmas!Merry Christmas! +ham U should have made an appointment +ham Call me when you/carlos is/are here, my phone's vibrate is acting up and I might not hear texts +spam Romantic Paris. 2 nights, 2 flights from £79 Book now 4 next year. Call 08704439680Ts&Cs apply. +ham We are at grandmas. Oh dear, u still ill? I felt Shit this morning but i think i am just hungover! Another night then. We leave on sat. +spam Urgent Ur £500 guaranteed award is still unclaimed! Call 09066368327 NOW closingdate04/09/02 claimcode M39M51 £1.50pmmorefrommobile2Bremoved-MobyPOBox734LS27YF +ham Nothing but we jus tot u would ask cos u ba gua... But we went mt faber yest... Yest jus went out already mah so today not going out... Jus call lor... +ham Wishing you and your family Merry "X" mas and HAPPY NEW Year in advance.. +spam UR awarded a City Break and could WIN a £200 Summer Shopping spree every WK. Txt STORE to 88039 . SkilGme. TsCs087147403231Winawk!Age16 £1.50perWKsub +ham I'm nt goin, got somethin on, unless they meetin 4 dinner lor... Haha, i wonder who will go tis time... +ham Sorry, I'll call later +ham I cant pick the phone right now. Pls send a message +ham Lol I know! They're so dramatic. Schools already closed for tomorrow. Apparently we can't drive in the inch of snow were supposed to get. +ham Not getting anywhere with this damn job hunting over here! +ham Lol! U drunkard! Just doing my hair at d moment. Yeah still up 4 tonight. Wats the plan? +ham idc get over here, you are not weaseling your way out of this shit twice in a row +ham I wil be there with in <#> minutes. Got any space +ham Just sleeping..and surfing +ham Thanks for picking up the trash. +ham Why don't you go tell your friend you're not sure you want to live with him because he smokes too much then spend hours begging him to come smoke +ham "Hi its Kate it was lovely to see you tonight and ill phone you tomorrow. I got to sing and a guy gave me his card! xxx" +ham Happy New year my dear brother. I really do miss you. Just got your number and decided to send you this text wishing you only happiness. Abiola +ham That means get the door +ham Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.. +ham Hmmm ... I thought we said 2 hours slave, not 3 ... You are late ... How should I punish you ? +ham Beerage? +spam You have an important customer service announcement from PREMIER. Call FREEPHONE 0800 542 0578 now! +ham Dont think so. It turns off like randomlly within 5min of opening +ham She was supposed to be but couldn't make it, she's still in town though +ham It does it on its own. Most of the time it fixes my spelling. But sometimes it gets a completely diff word. Go figure +spam Ever thought about living a good life with a perfect partner? Just txt back NAME and AGE to join the mobile community. (100p/SMS) +spam 5 Free Top Polyphonic Tones call 087018728737, National Rate. Get a toppoly tune sent every week, just text SUBPOLY to 81618, £3 per pole. UnSub 08718727870. +ham Gud mrng dear hav a nice day +ham This is hoping you enjoyed your game yesterday. Sorry i've not been in touch but pls know that you are fondly bein thot off. Have a great week. Abiola +ham All e best 4 ur driving tmr :-) +ham Y?WHERE U AT DOGBREATH? ITS JUST SOUNDING LIKE JAN C THAT’S AL!!!!!!!!! +ham Omg I want to scream. I weighed myself and I lost more weight! Woohoo! +ham There generally isn't one. It's an uncountable noun - u in the dictionary. pieces of research? +ham it's really getting me down just hanging around. +spam Orange customer, you may now claim your FREE CAMERA PHONE upgrade for your loyalty. Call now on 0207 153 9996. Offer ends 14thMarch. T&C's apply. Opt-out availa +ham "Petey boy whereare you me and all your friendsare in theKingshead come down if you canlove Nic" +ham Ok i msg u b4 i leave my house. +ham "Gimme a few" was <#> minutes ago +spam Last Chance! Claim ur £150 worth of discount vouchers today! Text SHOP to 85023 now! SavaMob, offers mobile! T Cs SavaMob POBOX84, M263UZ. £3.00 Sub. 16 +ham Appt is at <TIME> am. Not my fault u don't listen. I told u twice +spam FREE for 1st week! No1 Nokia tone 4 ur mobile every week just txt NOKIA to 8077 Get txting and tell ur mates. www.getzed.co.uk POBox 36504 W45WQ 16+ norm150p/tone +spam You have won a guaranteed £200 award or even £1000 cashto claim UR award call free on 08000407165 (18+) 2 stop getstop on 88222 PHP. RG21 4JX +ham K I'll be there before 4. +ham I dled 3d its very imp +ham sure, but make sure he knows we ain't smokin yet +ham Boooo you always work. Just quit. +ham I am taking half day leave bec i am not well +ham Ugh I don't wanna get out of bed. It's so warm. +ham S:)s.nervous <#> :) +ham So there's a ring that comes with the guys costumes. It's there so they can gift their future yowifes. Hint hint +spam Congratulations ur awarded either £500 of CD gift vouchers & Free entry 2 our £100 weekly draw txt MUSIC to 87066 TnCs www.Ldew.com1win150ppmx3age16 +ham I borrow ur bag ok. +spam U were outbid by simonwatson5120 on the Shinco DVD Plyr. 2 bid again, visit sms. ac/smsrewards 2 end bid notifications, reply END OUT +ham Where's my boytoy? I miss you ... What happened? +ham He has lots of used ones babe, but the model doesn't help. Youi have to bring it over and he'll match it up +ham Also are you bringing galileo or dobby +ham Then why you not responding +ham "BOO BABE! U ENJOYIN YOURJOB? U SEEMED 2 B GETTIN ON WELL HUNNY!HOPE URE OK?TAKE CARE & I’LLSPEAK 2U SOONLOTS OF LOVEME XXXX." +ham Good afternoon starshine! How's my boytoy? Does he crave me yet? Ache to fuck me ? *sips cappuccino* I miss you babe *teasing kiss* +ham On the road so cant txt +spam SMSSERVICES. for yourinclusive text credits, pls goto www.comuk.net login= 3qxj9 unsubscribe with STOP, no extra charge. help 08702840625.COMUK. 220-CM2 9AE +spam 25p 4 alfie Moon's Children in need song on ur mob. Tell ur m8s. Txt Tone charity to 8007 for Nokias or Poly charity for polys: zed 08701417012 profit 2 charity. +ham Have a good evening! Ttyl +ham Hmm .. Bits and pieces lol ... *sighs* ... +ham Hahaha..use your brain dear +ham Hey. You got any mail? +ham Sorry light turned green, I meant another friend wanted <#> worth but he may not be around +ham Thanks for yesterday sir. You have been wonderful. Hope you enjoyed the burial. MojiBiola +spam U have a secret admirer. REVEAL who thinks U R So special. Call 09065174042. To opt out Reply REVEAL STOP. 1.50 per msg recd. Cust care 07821230901 +ham Hi mate its RV did u hav a nice hol just a message 3 say hello coz haven’t sent u 1 in ages started driving so stay off roads!RVx +spam Dear Voucher Holder, To claim this weeks offer, at you PC please go to http://www.e-tlp.co.uk/expressoffer Ts&Cs apply. To stop texts, txt STOP to 80062 +ham Thank you so much. When we skyped wit kz and sura, we didnt get the pleasure of your company. Hope you are good. We've given you ultimatum oh! We are countin down to aburo. Enjoy! This is the message i sent days ago +ham Surely result will offer:) +ham Good Morning my Dear........... Have a great & successful day. +spam Do you want 750 anytime any network mins 150 text and a NEW VIDEO phone for only five pounds per week call 08002888812 or reply for delivery tomorrow +ham Sir, I have been late in paying rent for the past few months and had to pay a $ <#> charge. I felt it would be inconsiderate of me to nag about something you give at great cost to yourself and that's why i didnt speak up. I however am in a recession and wont be able to pay the charge this month hence my askin well ahead of month's end. Can you please help. Thanks +spam We tried to contact you re our offer of New Video Phone 750 anytime any network mins HALF PRICE Rental camcorder call 08000930705 or reply for delivery Wed +spam Last chance 2 claim ur £150 worth of discount vouchers-Text YES to 85023 now!SavaMob-member offers mobile T Cs 08717898035. £3.00 Sub. 16 . Remove txt X or STOP +ham I luv u soo much u don’t understand how special u r 2 me ring u 2morrow luv u xxx +ham Pls send me a comprehensive mail about who i'm paying, when and how much. +ham Our Prashanthettan's mother passed away last night. pray for her and family. +spam Urgent! call 09066350750 from your landline. Your complimentary 4* Ibiza Holiday or 10,000 cash await collection SAE T&Cs PO BOX 434 SK3 8WP 150 ppm 18+ +ham K.k:)when are you going? +ham Meanwhile in the shit suite: xavier decided to give us <#> seconds of warning that samantha was coming over and is playing jay's guitar to impress her or some shit. Also I don't think doug realizes I don't live here anymore +ham My stomach has been thru so much trauma I swear I just can't eat. I better lose weight. +ham I am in office:)whats the matter..msg me now.i will call you at break:). +ham Yeah there's barely enough room for the two of us, x has too many fucking shoes. Sorry man, see you later +spam Today's Offer! Claim ur £150 worth of discount vouchers! Text YES to 85023 now! SavaMob, member offers mobile! T Cs 08717898035. £3.00 Sub. 16 . Unsub reply X +ham U reach orchard already? U wan 2 go buy tickets first? +ham I am real, baby! I want to bring out your inner tigress... +ham No da if you run that it activate the full version da. +ham "AH POOR BABY!HOPE URFEELING BETTERSN LUV! PROBTHAT OVERDOSE OF WORK HEY GO CAREFUL SPK 2 U SN LOTS OF LOVEJEN XXX." +ham Stop the story. I've told him i've returned it and he's saying i should not re order it. +spam Talk sexy!! Make new friends or fall in love in the worlds most discreet text dating service. Just text VIP to 83110 and see who you could meet. +ham Going to take your babe out ? +ham Hai ana tomarrow am coming on morning. <DECIMAL> ill be there in sathy then we ll go to RTO office. Reply me after came to home. +ham Spoons it is then okay? +ham Did he just say somebody is named tampa +ham In work now. Going have in few min. +ham Your brother is a genius +ham Sorry, I guess whenever I can get a hold of my connections, maybe an hour or two? I'll text you +ham Did u find out what time the bus is at coz i need to sort some stuff out. +ham Dude ive been seeing a lotta corvettes lately +spam Congratulations ur awarded either a yrs supply of CDs from Virgin Records or a Mystery Gift GUARANTEED Call 09061104283 Ts&Cs www.smsco.net £1.50pm approx 3mins +ham Same here, but I consider walls and bunkers and shit important just because I never play on peaceful but I guess your place is high enough that it don't matter +spam PRIVATE! Your 2003 Account Statement for 07808 XXXXXX shows 800 un-redeemed S. I. M. points. Call 08719899217 Identifier Code: 41685 Expires 07/11/04 +spam Hello. We need some posh birds and chaps to user trial prods for champneys. Can i put you down? I need your address and dob asap. Ta r +spam What do U want for Xmas? How about 100 free text messages & a new video phone with half price line rental? Call free now on 0800 0721072 to find out more! +ham Well am officially in a philosophical hole, so if u wanna call am at home ready to be saved! +ham Its going good...no problem..but still need little experience to understand american customer voice... +ham I'll text you when I drop x off +ham Ugh its been a long day. I'm exhausted. Just want to cuddle up and take a nap +ham Talk With Yourself Atleast Once In A Day...!!! Otherwise You Will Miss Your Best FRIEND In This WORLD...!!! -Shakespeare- SHESIL <#> +spam Shop till u Drop, IS IT YOU, either 10K, 5K, £500 Cash or £100 Travel voucher, Call now, 09064011000. NTT PO Box CR01327BT fixedline Cost 150ppm mobile vary +ham Are you in castor? You need to see something +spam Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country Liverpool played in mid week? Txt ansr to 82277. £1.50 SP:Tyrone +spam U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094565 +spam U have a Secret Admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09065171142-stopsms-08 +spam Reminder: You have not downloaded the content you have already paid for. Goto http://doit. mymoby. tv/ to collect your content. +ham see, i knew giving you a break a few times woul lead to you always wanting to miss curfew. I was gonna gibe you 'til one, but a MIDNIGHT movie is not gonna get out til after 2. You need to come home. You need to getsleep and, if anything, you need to b studdying ear training. +ham I love to give massages. I use lots of baby oil... What is your fave position? +ham Dude we should go sup again +ham Yoyyooo u know how to change permissions for a drive in mac. My usb flash drive +ham Gibbs unsold.mike hussey +ham I like to talk pa but am not able to. I dont know y. +ham Y dun cut too short leh. U dun like ah? She failed. She's quite sad. +ham You unbelievable faglord +ham Wife.how she knew the time of murder exactly +ham Why do you ask princess? +ham I am great princess! What are you thinking about me? :) +ham Nutter. Cutter. Ctter. Cttergg. Cttargg. Ctargg. Ctagg. ie you +ham It's ok i noe u're busy but i'm really too bored so i msg u. I oso dunno wat colour she choose 4 me one. +ham Doesn't g have class early tomorrow and thus shouldn't be trying to smoke at <#> +ham Superb Thought- "Be grateful that u dont have everything u want. That means u still have an opportunity to be happier tomorrow than u are today.":-) +ham Hope you are having a good week. Just checking in +ham I'm used to it. I just hope my agents don't drop me since i've only booked a few things this year. This whole me in boston, them in nyc was an experiment. +ham Thursday night? Yeah, sure thing, we'll work it out then +spam Your free ringtone is waiting to be collected. Simply text the password "MIX" to 85069 to verify. Get Usher and Britney. FML, PO Box 5249, MK17 92H. 450Ppw 16 +ham Probably money worries. Things are coming due and i have several outstanding invoices for work i did two and three months ago. +ham How is it possible to teach you. And where. +ham I wonder if your phone battery went dead ? I had to tell you, I love you babe +ham Lovely smell on this bus and it ain't tobacco... +ham We're all getting worried over here, derek and taylor have already assumed the worst +ham Hey what's up charles sorry about the late reply. +spam all the lastest from Stereophonics, Marley, Dizzee Racal, Libertines and The Strokes! Win Nookii games with Flirt!! Click TheMob WAP Bookmark or text WAP to 82468 +ham I.ll give her once i have it. Plus she said grinule greet you whenever we speak +ham WHITE FUDGE OREOS ARE IN STORES +spam January Male Sale! Hot Gay chat now cheaper, call 08709222922. National rate from 1.5p/min cheap to 7.8p/min peak! To stop texts call 08712460324 (10p/min) +ham My love ! How come it took you so long to leave for Zaher's? I got your words on ym and was happy to see them but was sad you had left. I miss you +ham I am sorry it hurt you. +ham Can't. I feel nauseous. I'm so pissed. I didn't eat any sweets all week cause today I was planning to pig out. I was dieting all week. And now I'm not hungry :/ +ham Ok lor but not too early. Me still having project meeting now. +ham Call me da, i am waiting for your call. +ham I could ask carlos if we could get more if anybody else can chip in +ham Was actually about to send you a reminder today. Have a wonderful weekend +ham When people see my msgs, They think Iam addicted to msging... They are wrong, Bcoz They don\'t know that Iam addicted to my sweet Friends..!! BSLVYL +ham Hey you gave them your photo when you registered for driving ah? Tmr wanna meet at yck? +ham Dont talk to him ever ok its my word. +ham When u wana see it then +ham On ma way to school. Can you pls send me ashley's number +ham It shall be fine. I have avalarr now. Will hollalater +ham She went to attend another two rounds today..but still did't reach home.. +ham Actually i deleted my old website..now i m blogging at magicalsongs.blogspot.com +ham K, wait chikku..il send aftr <#> mins +ham But I'm on a diet. And I ate 1 too many slices of pizza yesterday. Ugh I'm ALWAYS on a diet. +ham K:)i will give my kvb acc details:) +ham Oh all have to come ah? +spam money!!! you r a lucky winner ! 2 claim your prize text money 2 88600 over £1million to give away ! ppt150x3+normal text rate box403 w1t1jy +ham I'm really sorry i won't b able 2 do this friday.hope u can find an alternative.hope yr term's going ok:-) +ham Congratulations ore mo owo re wa. Enjoy it and i wish you many happy moments to and fro wherever you go +ham So do you have samus shoulders yet +ham What time you think you'll have it? Need to know when I should be near campus +spam Dear Matthew please call 09063440451 from a landline, your complimentary 4*Lux Tenerife holiday or £1000 CASH await collection. ppm150 SAE T&Cs Box334 SK38XH. +ham Then dun wear jeans lor... +ham Since when, which side, any fever, any vomitin. +ham K:)k.are you in college? +spam Urgent! call 09061749602 from Landline. Your complimentary 4* Tenerife Holiday or £10,000 cash await collection SAE T&Cs BOX 528 HP20 1YF 150ppm 18+ +ham Better. Made up for Friday and stuffed myself like a pig yesterday. Now I feel bleh. But at least its not writhing pain kind of bleh. +ham No we sell it all so we'll have tons if coins. Then sell our coins to someone thru paypal. Voila! Money back in life pockets:) +ham Theyre doing it to lots of places. Only hospitals and medical places are safe. +spam How about getting in touch with folks waiting for company? Just txt back your NAME and AGE to opt in! Enjoy the community (150p/SMS) +ham And also I've sorta blown him off a couple times recently so id rather not text him out of the blue looking for weed +ham I sent my scores to sophas and i had to do secondary application for a few schools. I think if you are thinking of applying, do a research on cost also. Contact joke ogunrinde, her school is one me the less expensive ones +ham I cant wait to see you! How were the photos were useful? :) +spam Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send GO to 86688 only 150p/msg. CC: 08718720201 PO BOX 114/14 TCR/W1 +ham Hey i booked the kb on sat already... what other lessons are we going for ah? Keep your sat night free we need to meet and confirm our lodging +ham Chk in ur belovd ms dict +ham Is that what time you want me to come? +ham Awesome, lemme know whenever you're around +ham Shb b ok lor... Thanx... +ham Beautiful Truth against Gravity.. Read carefully: "Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it.." GOOD NIGHT +ham Also remember to get dobby's bowl from your car +spam Filthy stories and GIRLS waiting for your +ham Sorry i now then c ur msg... Yar lor so poor thing... But only 4 one night... Tmr u'll have a brand new room 2 sleep in... +ham Love isn't a decision, it's a feeling. If we could decide who to love, then, life would be much simpler, but then less magical +ham Welp apparently he retired +ham My sort code is and acc no is . The bank is natwest. Can you reply to confirm i've sent this to the right person! +ham Where @ +ham U sure u can't take any sick time? +spam URGENT! We are trying to contact U. Todays draw shows that you have won a £800 prize GUARANTEED. Call 09050001808 from land line. Claim M95. Valid12hrs only +ham Watching cartoon, listening music & at eve had to go temple & church.. What about u? +ham Yo chad which gymnastics class do you wanna take? The site says Christians class is full.. +ham Are you this much buzy +ham Or better still can you catch her and let ask her if she can sell <#> for me. +ham I am not sure about night menu. . . I know only about noon menu +ham What do u want when i come back?.a beautiful necklace as a token of my heart for you.thats what i will give but ONLY to MY WIFE OF MY LIKING.BE THAT AND SEE..NO ONE can give you that.dont call me.i will wait till i come. +ham Are you willing to go for aptitude class. +ham It wont b until 2.15 as trying 2 sort house out, is that ok? +ham Yar lor he wan 2 go c horse racing today mah, so eat earlier lor. I ate chicken rice. U? +ham Haha awesome, omw back now then +ham Yup i thk so until e shop closes lor. +ham what is your account number? +ham Eh u send wrongly lar... +ham Hey no I ad a crap nite was borin without ya 2 boggy with me u boring biatch! Thanx but u wait til nxt time il ave ya +ham Ok i shall talk to him +ham Dont hesitate. You know this is the second time she has had weakness like that. So keep i notebook of what she eat and did the day before or if anything changed the day before so that we can be sure its nothing +ham Hey you can pay. With salary de. Only <#> . +ham Another month. I need chocolate weed and alcohol. +ham If he started searching he will get job in few days.he have great potential and talent. +ham Reckon need to be in town by eightish to walk from * carpark. +spam Congrats! 2 mobile 3G Videophones R yours. call 09063458130 now! videochat wid your mates, play java games, Dload polyPH music, noline rentl. +ham LOOK AT THE FUCKIN TIME. WHAT THE FUCK YOU THINK IS UP +ham Yo guess what I just dropped +ham Carlos says he'll be at mu in <#> minutes +ham I'm in office now . I will call you <#> min:) +ham Geeee ... I miss you already, you know ? Your all I can think about. Fuck, I can't wait till next year when we will be together ... *loving kiss* +ham Yun ah.the ubi one say if ü wan call by tomorrow.call 67441233 look for irene.ere only got bus8,22,65,61,66,382. Ubi cres,ubi tech park.6ph for 1st 5wkg days.èn +ham Ugh. Gotta drive back to sd from la. My butt is sore. +ham 26th OF JULY +ham Hi im having the most relaxing time ever! we have to get up at 7am every day! was the party good the other night? I get home tomorrow at 5ish. +ham Up to ü... Ü wan come then come lor... But i din c any stripes skirt... +ham The Xmas story is peace.. The Xmas msg is love.. The Xmas miracle is jesus.. Hav a blessed month ahead & wish U Merry Xmas... +ham I can't, I don't have her number! +ham Change again... It's e one next to escalator... +ham Yetunde i'm in class can you not run water on it to make it ok. Pls now. +ham Not a lot has happened here. Feels very quiet. Beth is at her aunts and charlie is working lots. Just me and helen in at the mo. How have you been? +ham Then ü wait 4 me at bus stop aft ur lect lar. If i dun c ü then i go get my car then come back n pick ü. +ham Aight will do, thanks again for comin out +ham No..but heard abt tat.. +spam Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed £1000 cash or £5000 prize! +ham Yes..he is really great..bhaji told kallis best cricketer after sachin in world:).very tough to get out. +ham <#> am I think? Should say on syllabus +ham Umma. Did she say anything +ham Give me a sec to think think about it +spam Panasonic & BluetoothHdset FREE. Nokia FREE. Motorola FREE & DoubleMins & DoubleTxt on Orange contract. Call MobileUpd8 on 08000839402 or call 2optout +ham I don't quite know what to do. I still can't get hold of anyone. I cud pick you up bout 7.30pm and we can see if they're in the pub? +ham Poyyarikatur,kolathupalayam,unjalur post,erode dis, <#> . +ham Dear Hero,i am leaving to qatar tonite for an apt opportunity.pls do keep in touch at <EMAIL> ,kerala +ham Lol I would but my mom would have a fit and tell the whole family how crazy and terrible I am +ham I just got home babe, are you still awake ? +ham I dunno they close oredi not... Ü v ma fan... +ham Just buy a pizza. Meat lovers or supreme. U get to pick. +ham Ya, told..she was asking wats matter? +ham Dear,regret i cudnt pick call.drove down frm ctla now at cochin home.left mobile in car..ente style ishtamayoo?happy bakrid! +spam FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W45WQ norm150p/tone 16+ +ham Shall i send that exe to your mail id. +ham Nope watching tv at home... Not going out. V bored... +ham Don know..wait i will check it. +ham Good afternoon on this glorious anniversary day, my sweet J !! I hope this finds you happy and content, my Prey. I think of you and send a teasing kiss from across the sea coaxing images of fond souveniers ... You Cougar-Pen +spam Guess what! Somebody you know secretly fancies you! Wanna find out who it is? Give us a call on 09065394514 From Landline DATEBox1282EssexCM61XN 150p/min 18 +ham We still on for tonight? +ham May i call You later Pls +ham Hasn't that been the pattern recently crap weekends? +ham I have a sore throat. It's scratches when I talk +ham Yes da. Any plm at ur office +ham Are you not around or just still asleep? :V +ham Lol you forgot it eh ? Yes, I'll bring it in babe +ham Its good, we'll find a way +ham Can not use foreign stamps in this country. Good lecture . +ham Yup bathe liao... +ham HAPPY NEW YEAR MY NO.1 MAN +ham OH MR SHEFFIELD! You wanna play THAT game, okay. You're the boss and I'm the nanny. You give me a raise and I'll give YOU one!! +ham ZOE IT JUST HIT ME 2 IM FUCKING SHITIN MYSELF IL DEFO TRY MY HARDEST 2 CUM 2MOROW LUV U MILLIONS LEKDOG +ham Hello baby, did you get back to your mom's ? Are you setting up the computer now ? Filling your belly ? How goes it loverboy ? I miss you already ... *sighs* +ham No my blankets are sufficient, thx +ham naughty little thought: 'its better to flirt, flirt n flirt, rather than loving someone n gettin hurt, hurt n hurt...:-) Gud nyt +ham Edison has rightly said, "A fool can ask more questions than a wise man can answer" Now you know why all of us are speechless during ViVa.. GM,GN,GE,GNT:-) +ham They just talking thats it de. They wont any other. +ham Today am going to college so am not able to atten the class. +ham I'm in class. Will holla later +ham Easy ah?sen got selected means its good.. +ham Mmm thats better now i got a roast down me! i’d b better if i had a few drinks down me 2! Good indian? +spam We know someone who you know that fancies you. Call 09058097218 to find out who. POBox 6, LS15HB 150p +ham Come round, it's . +ham Do 1 thing! Change that sentence into: "Because i want 2 concentrate in my educational career im leaving here.." +spam 1000's flirting NOW! Txt GIRL or BLOKE & ur NAME & AGE, eg GIRL ZOE 18 to 8007 to join and get chatting! +ham I walked an hour 2 c u! doesn’t that show I care y wont u believe im serious? +spam 18 days to Euro2004 kickoff! U will be kept informed of all the latest news and results daily. Unsubscribe send GET EURO STOP to 83222. +ham Are you available for soiree on June 3rd? +ham Do u noe wat time e place dat sells 4d closes? +ham I got another job! The one at the hospital doing data analysis or something, starts on monday! Not sure when my thesis will got finished +ham Jay's getting really impatient and belligerent +ham HIYA COMIN 2 BRISTOL 1 ST WEEK IN APRIL. LES GOT OFF + RUDI ON NEW YRS EVE BUT I WAS SNORING.THEY WERE DRUNK! U BAK AT COLLEGE YET? MY WORK SENDS INK 2 BATH. +ham I'm at work. Please call +ham Then u drive lor. +ham Ard 515 like dat. Y? +ham Tell me they're female :V how're you throwing in? We're deciding what all to get now +spam EASTENDERS TV Quiz. What FLOWER does DOT compare herself to? D= VIOLET E= TULIP F= LILY txt D E or F to 84025 NOW 4 chance 2 WIN £100 Cash WKENT/150P16+ +ham I'm working technical support :)voice process.networking field. +ham I might come to kerala for 2 days.so you can be prepared to take a leave once i finalise .dont plan any travel during my visit.need to finish urgent works. +ham Ok. Not sure what time tho as not sure if can get to library before class. Will try. See you at some point! Have good eve. +spam We have new local dates in your area - Lots of new people registered in YOUR AREA. Reply DATE to start now! 18 only www.flirtparty.us REPLYS150 +ham That's fine, I'll bitch at you about it later then +ham No my mum went 2 dentist. +ham Once free call me sir. I am waiting for you. +ham Meeting u is my work. . . Tel me when shall i do my work tomorrow +spam Someone U know has asked our dating service 2 contact you! Cant Guess who? CALL 09058091854 NOW all will be revealed. PO BOX385 M6 6WU +ham Jus finish bathing... +ham alright, I'll make sure the car is back tonight +spam URGENT! We are trying to contact U. Todays draw shows that you have won a £800 prize GUARANTEED. Call 09050003091 from land line. Claim C52. Valid12hrs only +spam Dear U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688 +ham Lul im gettin some juicy gossip at the hospital. Two nurses are talking about how fat they are gettin. And one thinks shes obese. Oyea. +ham Aight ill get on fb in a couple minutes +ham Oi. Ami parchi na re. Kicchu kaaj korte iccha korche na. Phone ta tul na. Plz. Plz. +ham Where can download clear movies. Dvd copies. +ham Yep, by the pretty sculpture +ham Convey my regards to him +ham Me too watching surya movie only. . .after 6 pm vijay movie POKKIRI +ham You tell what happen dont behave like this to me. Ok no need to say +ham Can u get pic msgs to your phone? +ham Send to someone else :-) +ham Wat makes some people dearer is not just de happiness dat u feel when u meet them but de pain u feel when u miss dem!!! +ham For me the love should start with attraction.i should feel that I need her every time around me.she should be the first thing which comes in my thoughts.I would start the day and end it with her.she should be there every time I dream.love will be then when my every breath has her name.my life should happen around her.my life will be named to her.I would cry for her.will give all my happiness and take all her sorrows.I will be ready to fight with anyone for her.I will be in love when I will be doing the craziest things for her.love will be when I don't have to proove anyone that my girl is the most beautiful lady on the whole planet.I will always be singing praises for her.love will be when I start up making chicken curry and end up makiing sambar.life will be the most beautiful then.will get every morning and thank god for the day because she is with me.I would like to say a lot..will tell later.. +ham FR'NDSHIP is like a needle of a clock. Though V r in d same clock, V r nt able 2 met. Evn if V meet,itz only 4few seconds. Bt V alwys stay conected. Gud 9t;-) +ham I don't think he has spatula hands! +ham You can never do NOTHING +spam You are awarded a SiPix Digital Camera! call 09061221061 from landline. Delivery within 28days. T Cs Box177. M221BP. 2yr warranty. 150ppm. 16 . p p£3.99 +ham Goodmorning today i am late for <DECIMAL> min. +spam WIN URGENT! Your mobile number has been awarded with a £2000 prize GUARANTEED call 09061790121 from land line. claim 3030 valid 12hrs only 150ppm +ham Please da call me any mistake from my side sorry da. Pls da goto doctor. +ham Where r we meeting? +ham Well the weather in cali's great. But its complexities are great. You need a car to move freely, its taxes are outrageous. But all in all its a great place. The sad part is i missing home. +ham Now only i reached home. . . I am very tired now. . I will come tomorro +ham Ryder unsold.now gibbs. +spam Dear Subscriber ur draw 4 £100 gift voucher will b entered on receipt of a correct ans. When was Elvis Presleys Birthday? TXT answer to 80062 +ham Don't fret. I'll buy the ovulation test strips and send them to you. You wont get them til like march. Can you send me your postal address.u'll be alright.Okay. +ham NO GIFTS!! You trying to get me to throw myself off a cliff or something? +ham Been up to ne thing interesting. Did you have a good birthday? When are u wrking nxt? I started uni today. +ham You busy or can I come by at some point and figure out what we're doing tomorrow +ham Yeah go on then, bored and depressed sittin waitin for phone to ring... Hope the wind drops though, scary +ham Black shirt n blue jeans... I thk i c ü... +ham Aiyah sorry lor... I watch tv watch until i forgot 2 check my phone. +spam Message Important information for O2 user. Today is your lucky day! 2 find out why log onto http://www.urawinner.com there is a fantastic surprise awaiting you +ham on hen night. Going with a swing +ham Good afternoon, my love. How goes your day ? What are you up to ? I woke early and am online waiting for you ... Hmmm ... Italian boy is online I see . *grins* +ham From someone not to smoke when every time I've smoked in the last two weeks is because of you calling or texting me that you wanted to smoke +ham No you'll just get a headache trying to figure it out. U can trust me to do the math. I promise. O:-) +ham S s..first time..dhoni rocks... +ham Ok ill tell the company +ham Awesome, think we can get an 8th at usf some time tonight? +ham So that means you still think of teju +ham No I'm good for the movie, is it ok if I leave in an hourish? +ham No no:)this is kallis home ground.amla home town is durban:) +ham So lets make it saturday or monday as per convenience. +ham Hey... What time is your driving on fri? We go for evaluation on fri? +spam 449050000301 You have won a £2,000 price! To claim, call 09050000301. +ham I'm going 4 lunch now wif my family then aft dat i go str 2 orchard lor. +spam Bored of speed dating? Try SPEEDCHAT, txt SPEEDCHAT to 80155, if you don't like em txt SWAP and get a new chatter! Chat80155 POBox36504W45WQ 150p/msg rcd 16 +ham Cancel cheyyamo?and get some money back? +spam Do you want 750 anytime any network mins 150 text and a NEW video phone for only five pounds per week call 08000776320 now or reply for delivery Tomorrow +ham Ok.ok ok..then..whats ur todays plan +ham Good morning princess! How are you? +ham Aiyar sorry lor forgot 2 tell u... +spam For taking part in our mobile survey yesterday! You can now have 500 texts 2 use however you wish. 2 get txts just send TXT to 80160 T&C www.txt43.com 1.50p +ham Not tonight mate. Catching up on some sleep. This is my new number by the way. +ham Height of "Oh shit....!!" situation: A guy throws a luv letter on a gal but falls on her brothers head whos a gay,.;-):-D +spam Ur HMV Quiz cash-balance is currently £500 - to maximize ur cash-in now send HMV1 to 86688 only 150p/msg +ham So check your errors and if you had difficulties, do correction. +ham Howz pain?hope u r fine.. +ham Sorry, I'll call later +ham Good morning princess! How are you? +ham As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there. +ham U wake up already? Thanx 4 e tau sar piah it's quite nice. +ham K do I need a login or anything +spam Dont forget you can place as many FREE Requests with 1stchoice.co.uk as you wish. For more Information call 08707808226. +ham LOL ... No just was busy +ham What * u wearing? +ham Message:some text missing* Sender:Name Missing* *Number Missing *Sent:Date missing *Missing U a lot thats y everything is missing sent via fullonsms.com +ham Oh:)as usual vijay film or its different? +spam I don't know u and u don't know me. Send CHAT to 86688 now and let's find each other! Only 150p/Msg rcvd. HG/Suite342/2Lands/Row/W1J6HL LDN. 18 years or over. +ham Have you had a good day? Mine was really busy are you up to much tomorrow night? +ham And is there a way you can send shade's stuff to her. And she has been wonderful too. +ham Really... I tot ur paper ended long ago... But wat u copied jus now got use? U happy lar... I still haf 2 study :-( +spam Thank you, winner notified by sms. Good Luck! No future marketing reply STOP to 84122 customer services 08450542832 +ham Babe ? I lost you ... :-( +ham Ok... Help me ask if she's working tmr a not? +ham I'm not driving... Raining! Then i'll get caught at e mrt station lor. +ham Not a drop in the tank +ham (That said can you text him one more time?) +ham Sorry, I'll call later +ham Ok i go change also... +spam 1000's of girls many local 2 u who r virgins 2 this & r ready 2 4fil ur every sexual need. Can u 4fil theirs? text CUTE to 69911(£1.50p. m) +ham Did u find a sitter for kaitlyn? I was sick and slept all day yesterday. +ham Sorry man, accidentally left my phone on silent last night and didn't check it til I got up +ham Hey.. Something came up last min.. Think i wun be signing up tmr.. Hee +ham He's an adult and would learn from the experience. There's no real danger. I just dont like peeps using drugs they dont need. But no comment +ham Hey! There's veggie pizza... :/ +ham Yun buying... But school got offer 2000 plus only... +ham You sure your neighbors didnt pick it up +ham K. I will sent it again +spam Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's +ham New Theory: Argument wins d SITUATION, but loses the PERSON. So dont argue with ur friends just.. . . . kick them & say, I'm always correct.! +ham Well. Im computerless. Time to make some oreo truffles +ham Haha yeah I see that now, be there in a sec +ham I am not having her number sir +ham Lol now I'm after that hot air balloon! +ham Ok . . now i am in bus. . If i come soon i will come otherwise tomorrow +ham Msgs r not time pass.They silently say that I am thinking of U right now and also making U think of me at least 4 a moment. Gd nt.swt drms @Shesil +ham Yeah, we can probably swing by once my roommate finishes up with his girl +spam Got what it takes 2 take part in the WRC Rally in Oz? U can with Lucozade Energy! Text RALLY LE to 61200 (25p), see packs or lucozade.co.uk/wrc & itcould be u! +ham Happy new years melody! +ham Ü dun need to pick ur gf? +ham Yay! You better not have told that to 5 other girls either. +ham Horrible u eat macs eat until u forgot abt me already rite... U take so long 2 reply. I thk it's more toot than b4 so b prepared. Now wat shall i eat? +ham Did he say how fantastic I am by any chance, or anything need a bigger life lift as losing the will 2 live, do you think I would be the first person 2 die from N V Q? +ham Just nw i came to hme da.. +ham I'm outside islands, head towards hard rock and you'll run into me +ham To day class is there are no class. +ham I'm in chennai velachery:) +ham You flippin your shit yet? +ham K give me a sec, breaking a <#> at cstore +ham Am i that much bad to avoid like this? +ham Yo, you around? Just got my car back +ham Annoying isn't it. +ham Goodmorning, Today i am late for <#> min. +ham There's no point hangin on to mr not right if he's not makin u happy +ham All will come alive.better correct any good looking figure there itself.. +ham In that case I guess I'll see you at campus lodge +ham We're done... +ham Come to my home for one last time i wont do anything. Trust me. +ham I was up all night too worrying about this appt. It's a shame we missed a girls night out with quizzes popcorn and you doing my hair. +spam Sex up ur mobile with a FREE sexy pic of Jordan! Just text BABE to 88600. Then every wk get a sexy celeb! PocketBabe.co.uk 4 more pics. 16 £3/wk 087016248 +ham Ok... C ya... +spam You have 1 new voicemail. Please call 08719181503 +ham What he said is not the matter. My mind saying some other matter is there. +ham He also knows about lunch menu only da. . I know +ham Al he does is moan at me if n e thin goes wrong its my fault&al de arguments r my fault&fed up of him of himso y bother? Hav 2go, thanx.xx +ham NEFT Transaction with reference number <#> for Rs. <DECIMAL> has been credited to the beneficiary account on <#> at <TIME> : <#> +ham Otherwise had part time job na-tuition.. +ham I know she called me +ham Me also da, i feel yesterday night wait til 2day night dear. +ham Thanks for understanding. I've been trying to tell sura that. +spam WIN a year supply of CDs 4 a store of ur choice worth £500 & enter our £100 Weekly draw txt MUSIC to 87066 Ts&Cs www.Ldew.com.subs16+1win150ppmx3 +ham The whole car appreciated the last two! Dad and are having a map reading semi argument but apart from that things are going ok. P. +spam As a SIM subscriber, you are selected to receive a Bonus! Get it delivered to your door, Txt the word OK to No: 88600 to claim. 150p/msg, EXP. 30Apr +ham I need you to be in my strong arms... +ham Also maaaan are you missing out +ham His bday real is in april . +ham Guessin you ain't gonna be here before 9? +ham Ok then i will come to ur home after half an hour +ham Yo, the game almost over? Want to go to walmart soon +ham Yeah, probably but not sure. Ilol let u know, but personally I wuldnt bother, then again if ur goin to then I mite as well!! +ham I'll text now! All creepy like so he won't think that we forgot +ham that would be good … I'll phone you tomo lunchtime, shall I, to organise something? +spam You have 1 new voicemail. Please call 08719181513. +ham Damn, can you make it tonight or do you want to just wait til tomorrow +ham K..k..i'm also fine:)when will you complete the course? +ham True. It is passable. And if you get a high score and apply for phd, you get 5years of salary. So it makes life easier. +spam No. 1 Nokia Tone 4 ur mob every week! Just txt NOK to 87021. 1st Tone FREE ! so get txtin now and tell ur friends. 150p/tone. 16 reply HL 4info +ham Prakesh is there know. +ham Teach me apps da. When you come to college. +ham Rofl betta invest in some anti aging products +spam You are a winner U have been specially selected 2 receive £1000 cash or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810810 +ham sir, you will receive the account no another 1hr time. Sorry for the delay. +spam Reply with your name and address and YOU WILL RECEIVE BY POST a weeks completely free accommodation at various global locations www.phb1.com ph:08700435505150p +ham So ü'll be submitting da project tmr rite? +spam FREE entry into our £250 weekly comp just send the word ENTER to 84128 NOW. 18 T&C www.textcomp.com cust care 08712405020. +ham Jus ans me lar. U'll noe later. +ham I want to send something that can sell fast. <#> k is not easy money. +ham have got * few things to do. may be in * pub later. +ham 1's finish meeting call me. +ham Lol ok. I'll snatch her purse too. +ham "Hello-/@drivby-:0quit edrunk sorry iff pthis makes no senrd-dnot no how ^ dancce 2 drum n basq!ihave fun 2nhite x ros xxxxxxx" +ham Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.. +ham How much are we getting? +ham Is ur paper in e morn or aft tmr? +ham Dear relieved of westonzoyland, all going to plan this end too! +ham Hope you are having a great new semester. Do wish you the very best. You are made for greatness. +ham Oh yes I can speak txt 2 u no! Hmm. Did u get email? +ham I want to show you the world, princess :) how about europe? +ham Nobody can decide where to eat and dad wants Chinese +ham No shoot me. I'm in the docs waiting room. :/ +ham Now? I'm going out 4 dinner soon.. +ham Hello which the site to download songs its urgent pls +ham I do know what u mean, is the king of not havin credit! I'm goin2bed now. Night night sweet! Only1more sleep! +ham Horrible gal. Me in sch doing some stuff. How come u got mc? +ham HI HUN! IM NOT COMIN 2NITE-TELL EVERY1 IM SORRY 4 ME, HOPE U AVA GOODTIME!OLI RANG MELNITE IFINK IT MITE B SORTED,BUT IL EXPLAIN EVERYTHIN ON MON.L8RS.x +ham I call you later, don't have network. If urgnt, sms me. +ham Ummmmmaah Many many happy returns of d day my dear sweet heart.. HAPPY BIRTHDAY dear +spam Please CALL 08712402779 immediately as there is an urgent message waiting for you +ham Yeah like if it goes like it did with my friends imma flip my shit in like half an hour +ham Mum say we wan to go then go... Then she can shun bian watch da glass exhibition... +ham What your plan for pongal? +ham Just wait till end of march when el nino gets himself. Oh. +ham Not yet chikku..going to room nw, i'm in bus.. +ham Am also doing in cbe only. But have to pay. +ham Honey boo I'm missing u. +ham We have sent JD for Customer Service cum Accounts Executive to ur mail id, For details contact us +ham Yo, I'm at my parents' gettin cash. Good news: we picked up a downstem +ham Thank you so much. When we skyped wit kz and sura, we didnt get the pleasure of your company. Hope you are good. We've given you ultimatum oh! We are countin down to aburo. Enjoy! +spam Hungry gay guys feeling hungry and up 4 it, now. Call 08718730555 just 10p/min. To stop texts call 08712460324 (10p/min) +ham Ok. No wahala. Just remember that a friend in need ... +ham I will see in half an hour +ham Im in inperialmusic listening2the weirdest track ever by”leafcutter john”-sounds like insects being molested&someone plumbing,remixed by evil men on acid! +ham "Hey sorry I didntgive ya a a bellearlier hunny,just been in bedbut mite go 2 thepub l8tr if uwana mt up?loads a luv Jenxxx." +ham SERIOUSLY. TELL HER THOSE EXACT WORDS RIGHT NOW. +spam Can U get 2 phone NOW? I wanna chat 2 set up meet Call me NOW on 09096102316 U can cum here 2moro Luv JANE xx Calls£1/minmoremobsEMSPOBox45PO139WA +ham Tee hee. Off to lecture, cheery bye bye. +ham Sorry chikku, my cell got some problem thts y i was nt able to reply u or msg u.. +ham If you still havent collected the dough pls let me know so i can go to the place i sent it to get the control number +ham Ok... +spam network operator. The service is free. For T & C's visit 80488.biz +ham Let me know how to contact you. I've you settled in a room. Lets know you are ok. +ham Wot u up 2 u weirdo? +ham Can do lor... +ham Dont put your phone on silent mode ok +ham Can i meet ü at 5.. As 4 where depends on where ü wan 2 in lor.. +ham Waiting 4 my tv show 2 start lor... U leh still busy doing ur report? +ham Oh ho. Is this the first time u use these type of words +ham Am I the only one who doesn't stalk profiles? +ham Ever green quote ever told by Jerry in cartoon "A Person Who Irritates u Always Is the one Who Loves u Vry Much But Fails to Express It...!..!! :-) :-) gud nyt +ham Yes i thought so. Thanks. +ham But if she.s drinkin i'm ok. +ham Just wondering, the others just took off +ham Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay. Gud mrng +ham What do you do, my dog ? Must I always wait till the end of your day to have word from you ? Did you run out of time on your cell already? +ham Happy new year to u too! +ham Hey...Great deal...Farm tour 9am to 5pm $95/pax, $50 deposit by 16 May +ham Eat jap done oso aft ur lect wat... Ü got lect at 12 rite... +ham Hey babe! I saw you came online for a second and then you disappeared, what happened ? +ham Da my birthdate in certificate is in april but real date is today. But dont publish it. I shall give you a special treat if you keep the secret. Any way thanks for the wishes +ham Happy birthday... May all ur dreams come true... +ham Aiyah u did ok already lar. E nydc at wheellock? +ham TELL HER I SAID EAT SHIT. +ham Sure! I am driving but will reach my destination soon. +ham K so am I, how much for an 8th? Fifty? +ham Your daily text from me – a favour this time +ham Great to hear you are settling well. So what's happenin wit ola? +ham Those cocksuckers. If it makes you feel better ipads are worthless garbage novelty items and you should feel bad for even wanting one +ham I tot u reach liao. He said t-shirt. +ham FRAN I DECIDED 2 GO N E WAY IM COMPLETELY BROKE AN KNACKERED I GOT UP BOUT 3 C U 2MRW LOVE JANX P.S THIS IS MY DADS FONE, -NO CREDIT +ham I cant pick the phone right now. Pls send a message +ham Your right! I'll make the appointment right now. +ham Designation is software developer and may be she get chennai:) +spam Enjoy the jamster videosound gold club with your credits for 2 new videosounds+2 logos+musicnews! get more fun from jamster.co.uk! 16+only Help? call: 09701213186 +spam Get 3 Lions England tone, reply lionm 4 mono or lionp 4 poly. 4 more go 2 www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply +ham I jokin oni lar.. Ü busy then i wun disturb ü. +ham Ok, be careful ! Don't text and drive ! +ham I.ll always be there, even if its just in spirit. I.ll get a bb soon. Just trying to be sure i need it. +ham U r too much close to my heart. If u go away i will be shattered. Plz stay with me. +ham I love u 2 babe! R u sure everything is alrite. Is he being an idiot? Txt bak girlie +ham How abt making some of the pics bigger? +ham Got but got 2 colours lor. One colour is quite light n e other is darker lor. Actually i'm done she's styling my hair now. +ham Whenevr ur sad, Whenevr ur gray, Remembr im here 2 listn 2 watevr u wanna say, Jus walk wid me a little while,& I promise I'll bring back ur smile.:-) +ham Why nothing. Ok anyway give me treat +spam Win the newest “Harry Potter and the Order of the Phoenix (Book 5) reply HARRY, answer 5 questions - chance to be the first among readers! +ham Ok... +ham Correct. So how was work today +ham Just sent again. Do you scream and moan in bed, princess? +ham I wake up long ago already... Dunno, what other thing? +ham Oh just getting even with u.... u? +ham I thk 50 shd be ok he said plus minus 10.. Did ü leave a line in between paragraphs? +ham Can you call me plz. Your number shows out of coveragd area. I have urgnt call in vasai & have to reach before 4'o clock so call me plz +ham Yeah jay's sort of a fucking retard +ham Sorry, was in the bathroom, sup +spam Ur balance is now £500. Ur next question is: Who sang 'Uptown Girl' in the 80's ? 2 answer txt ur ANSWER to 83600. Good luck! +ham My exam is for february 4. Wish you a great day. +ham I dont know what to do to come out of this so only am ask questions like this dont mistake me. +ham Aight no rush, I'll ask jay +ham Good Morning plz call me sir +ham It's ok lar. U sleep early too... Nite... +ham Oh... Icic... K lor, den meet other day... +ham Oh ! A half hour is much longer in Syria than Canada, eh ? Wow you must get SO much more work done in a day than us with all that extra time ! *grins* +ham Sometimes we put walls around our hearts,not just to be safe from getting hurt.. But to find out who cares enough to break the walls & get closer.. GOODNOON:) +ham Sweet, we may or may not go to 4U to meet carlos so gauge patty's interest in that +ham Then she buying today? Ü no need to c meh... +ham Aight sorry I take ten years to shower. What's the plan? +ham Every monday..nxt week vl be completing.. +ham Might ax well im there. +ham Just chill for another 6hrs. If you could sleep the pain is not a surgical emergency so see how it unfolds. Okay +ham Yeah I'll try to scrounge something up +ham Crazy ar he's married. Ü like gd looking guys not me. My frens like say he's korean leona's fave but i dun thk he is. Aft some thinking mayb most prob i'll go. +ham Were somewhere on Fredericksburg +ham Que pases un buen tiempo or something like that +ham Is it ok if I stay the night here? Xavier has a sleeping bag and I'm getting tired +ham She doesnt need any test. +ham Nothing much, chillin at home. Any super bowl plan? +spam FREE2DAY sexy St George's Day pic of Jordan!Txt PIC to 89080 dont miss out, then every wk a saucy celeb!4 more pics c PocketBabe.co.uk 0870241182716 £3/wk +ham Bugis oso near wat... +ham Yo theres no class tmrw right? +ham Let Ur Heart Be Ur Compass Ur Mind Ur Map Ur Soul Ur Guide And U Will Never loose in world....gnun - Sent via WAY2SMS.COM +ham Goodnight, sleep well da please take care pa. Please. +ham Baaaaabe! I misss youuuuu ! Where are you ? I have to go and teach my class at 5 ... +ham Convey my regards to him +ham U ned to convince him tht its not possible witot hurting his feeling its the main +ham Good afternoon loverboy ! How goes you day ? Any luck come your way? I think of you, sweetie and send my love across the sea to make you smile and happy +ham If i start sending blackberry torch to nigeria will you find buyer for me?like 4a month. And tell dad not to buy bb from anyone oh. +ham <#> %of pple marry with their lovers... becz they hav gud undrstndng dat avoids problems. i sent dis 2 u, u wil get gud news on friday by d person you like. And tomorrow will be the best day of your life. Dont break this chain. If you break you will suffer. send this to <#> frnds in <#> mins whn u read... +ham Yo dude guess who just got arrested the other day +ham Shuhui say change 2 suntec steamboat? U noe where? Where r u now? +ham What does the dance river do? +ham Yetunde, i'm sorry but moji and i seem too busy to be able to go shopping. Can you just please find some other way to get what you wanted us to get. Please forgive me. You can reply free via yahoo messenger. +ham Hey i will be really pretty late... You want to go for the lesson first? I will join you. I'm only reaching tp mrt +spam HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870..k +ham Bbq this sat at mine from 6ish. Ur welcome 2 come +ham I don't know, same thing that's wrong everyso often, he panicks starts goin on bout not bein good enough … +ham Alright. I'm out--have a good night! +ham Did you try making another butt. +ham Hope you are feeling great. Pls fill me in. Abiola +ham I though we shd go out n have some fun so bar in town or something – sound ok? +ham 1) Go to write msg 2) Put on Dictionary mode 3)Cover the screen with hand, 4)Press <#> . 5)Gently remove Ur hand.. Its interesting..:) +spam Bears Pic Nick, and Tom, Pete and ... Dick. In fact, all types try gay chat with photo upload call 08718730666 (10p/min). 2 stop texts call 08712460324 +spam 500 New Mobiles from 2004, MUST GO! Txt: NOKIA to No: 89545 & collect yours today!From ONLY £1 www.4-tc.biz 2optout 087187262701.50gbp/mtmsg18 TXTAUCTION +ham We're finally ready fyi +ham Auntie huai juan never pick up her phone +spam Double Mins & Double Txt & 1/2 price Linerental on Latest Orange Bluetooth mobiles. Call MobileUpd8 for the very latest offers. 08000839402 or call2optout/LF56 +ham Ya tel, wats ur problem.. +spam No. 1 Nokia Tone 4 ur mob every week! Just txt NOK to 87021. 1st Tone FREE ! so get txtin now and tell ur friends. 150p/tone. 16 reply HL 4info +ham i dnt wnt to tlk wid u +ham We spend our days waiting for the ideal path to appear in front of us.. But what we forget is.. "paths are made by walking.. not by waiting.." Goodnight! +ham Its ok my arm is feeling weak cuz i got a shot so we can go another time +ham Please reserve ticket on saturday eve from chennai to thirunelvali and again from tirunelvali to chennai on sunday eve...i already see in net..no ticket available..i want to book ticket through tackle .. +ham Storming msg: Wen u lift d phne, u say "HELLO" Do u knw wt is d real meaning of HELLO?? . . . It's d name of a girl..! . . . Yes.. And u knw who is dat girl?? "Margaret Hello" She is d girlfrnd f Grahmbell who invnted telphone... . . . . Moral:One can 4get d name of a person, bt not his girlfrnd... G o o d n i g h t . . .@ +ham That's ok. I popped in to ask bout something and she said you'd been in. Are you around tonght wen this girl comes? +ham All e best 4 ur exam later. +ham Hope ur head doesn't hurt 2 much ! Am ploughing my way through a pile of ironing ! Staying in with a chinky tonight come round if you like. +ham Oh k.i think most of wi and nz players unsold. +ham Haha... Where got so fast lose weight, thk muz go 4 a month den got effect... Gee,later we go aust put bk e weight. +ham I wonder how you got online, my love ? Had you gone to the net cafe ? Did you get your phone recharged ? Were you on a friends net ? I think of you, boytoy +ham Haha just kidding, papa needs drugs +ham Thk shld b can... Ya, i wana go 4 lessons... Haha, can go for one whole stretch... +ham Oh ok.. +ham R we still meeting 4 dinner tonight? +ham Thats cool! I am a gentleman and will treat you with dignity and respect. +ham Shall i start from hear. +ham Then we wait 4 u lor... No need 2 feel bad lar... +ham No did you check? I got his detailed message now +ham You have registered Sinco as Payee. Log in at icicibank.com and enter URN <#> to confirm. Beware of frauds. Do NOT share or disclose URN to anyone. +ham No, I decided that only people who care about stuff vote and caring about stuff is for losers +ham Kaiez... Enjoy ur tuition... Gee... Thk e second option sounds beta... I'll go yan jiu den msg u... +ham You have registered Sinco as Payee. Log in at icicibank.com and enter URN <#> to confirm. Beware of frauds. Do NOT share or disclose URN to anyone. +ham cool. We will have fun practicing making babies! +ham Actually getting ready to leave the house. +ham K..k..any special today? +spam URGENT, IMPORTANT INFORMATION FOR O2 USER. TODAY IS YOUR LUCKY DAY! 2 FIND OUT WHY LOG ONTO HTTP://WWW.URAWINNER.COM THERE IS A FANTASTIC SURPRISE AWAITING FOR YOU +ham Then we gotta do it after that +ham I've got ten bucks, jay is being noncomittal +ham Where at were hungry too +ham Pls speak to that customer machan. +ham somewhere out there beneath the pale moon light someone think in of u some where out there where dreams come true... goodnite & sweet dreams +ham Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da. +spam Dear U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688 150p/MsgrcvdHG/Suite342/2Lands/Row/W1J6HL LDN 18 yrs +ham So wats ur opinion abt him and how abt is character? +ham Jay is snickering and tells me that x is totally fucking up the chords as we speak +ham No..few hours before.went to hair cut . +ham No wonder... Cos i dun rem seeing a silver car... But i thk i saw a black one... +ham Lmao. Take a pic and send it to me. +ham "Speak only when you feel your words are better than the silence..." Gud mrng:-) +ham No. She's currently in scotland for that. +ham Do you work all this week ? +spam Congratulations ur awarded either £500 of CD gift vouchers & Free entry 2 our £100 weekly draw txt MUSIC to 87066 TnCs www.Ldew.com 1 win150ppmx3age16 +ham Lol great now im getting hungry. +ham Yes.. now only saw your message.. +ham I'll be at mu in like <#> seconds +ham Ok... +ham THING R GOOD THANX GOT EXAMS IN MARCH IVE DONE NO REVISION? IS FRAN STILL WITH BOYF? IVE GOTTA INTERVIW 4 EXETER BIT WORRIED!x +ham Tell you what, if you make a little spreadsheet and track whose idea it was to smoke to determine who "smokes too much" for the entire month of february, I'll come up +spam For sale - arsenal dartboard. Good condition but no doubles or trebles! +ham Don't look back at the building because you have no coat and i don't want you to get more sick. Just hurry home and wear a coat to the gym!!! +ham My painful personal thought- "I always try to keep everybody happy all the time. But nobody recognises me when i am alone" +ham Thanks for ve lovely wisheds. You rock +ham You intrepid duo you! Have a great time and see you both soon. +ham I asked sen to come chennai and search for job. +ham Dad went out oredi... +ham I jus hope its true that missin me cos i'm really missin him! You haven't done anything to feel guilty about, yet. +ham Wat so late still early mah. Or we juz go 4 dinner lor. Aiya i dunno... +ham Arms fine, how's Cardiff and uni? +ham In fact when do you leave? I think addie goes back to school tues or wed +ham Cool breeze... Bright sun... Fresh flower... Twittering birds... All these waiting to wish u: "GOODMORNING & HAVE A NICE DAY" :) +ham Ya:)going for restaurant.. +ham Its ok., i just askd did u knw tht no? +spam Free 1st week entry 2 TEXTPOD 4 a chance 2 win 40GB iPod or £250 cash every wk. Txt POD to 84128 Ts&Cs www.textpod.net custcare 08712405020. +ham Those ducking chinchillas +ham I am in a marriage function +ham Looks like u wil b getting a headstart im leaving here bout 2.30ish but if u r desperate for my company I could head in earlier-we were goin to meet in rummer. +ham Don‘t give a flying monkeys wot they think and I certainly don‘t mind. Any friend of mine and all that! +spam As a registered optin subscriber ur draw 4 £100 gift voucher will be entered on receipt of a correct ans to 80062 Whats No1 in the BBC charts +ham say thanks2. +ham Msg me when rajini comes. +ham Ya! when are ü taking ure practical lessons? I start in june.. +ham That's good, because I need drugs +ham Stupid.its not possible +ham Can ü all decide faster cos my sis going home liao.. +spam Summers finally here! Fancy a chat or flirt with sexy singles in yr area? To get MATCHED up just reply SUMMER now. Free 2 Join. OptOut txt STOP Help08714742804 +ham U sleeping now.. Or you going to take? Haha.. I got spys wat.. Me online checking n replying mails lor.. +spam CLAIRE here am havin borin time & am now alone U wanna cum over 2nite? Chat now 09099725823 hope 2 C U Luv CLAIRE xx Calls£1/minmoremobsEMSPOBox45PO139WA +ham Fighting with the world is easy, u either win or lose bt fightng with some1 who is close to u is dificult if u lose - u lose if u win - u still lose. +spam Bought one ringtone and now getting texts costing 3 pound offering more tones etc +ham Yalru lyfu astne chikku.. Bt innu mundhe lyf ali halla ke bilo (marriage)program edhae, so lyf is nt yet ovr chikku..ali vargu lyfu meow meow:-D +ham Kinda. First one gets in at twelve! Aah. Speak tomo +spam 09066362231 URGENT! Your mobile No 07xxxxxxxxx won a £2,000 bonus caller prize on 02/06/03! this is the 2nd attempt to reach YOU! call 09066362231 ASAP! +ham Ok good then i later come find ü... C lucky i told ü to go earlier... Later pple take finish ü no more again... +ham Wat makes u thk i'll fall down. But actually i thk i'm quite prone 2 falls. Lucky my dad at home i ask him come n fetch me already. +spam YOU 07801543489 are guaranteed the latests Nokia Phone, a 40GB iPod MP3 player or a £500 prize! Txt word:COLLECT to No:83355! TC-LLC NY-USA 150p/Mt msgrcvd18+ +ham Your account has been refilled successfully by INR <DECIMAL> . Your KeralaCircle prepaid account balance is Rs <DECIMAL> . Your Transaction ID is KR <#> . +ham I wont touch you with out your permission. +spam Hi its LUCY Hubby at meetins all day Fri & I will B alone at hotel U fancy cumin over? Pls leave msg 2day 09099726395 Lucy x Calls£1/minMobsmoreLKPOBOX177HP51FL +ham 7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st "Ur Lovely Friendship"... good morning dear +ham Take some small dose tablet for fever +ham Oh. U must have taken your REAL Valentine out shopping first. +ham Just sent you an email – to an address with incomm in it, is that right? +ham Will do, you gonna be at blake's all night? I might be able to get out of here a little early +ham Friendship is not a game to play, It is not a word to say, It doesn\'t start on March and ends on May, It is tomorrow, yesterday, today and e +ham Nice. Wait...should you be texting right now? I'm not gonna pay your ticket, ya know! +ham I'm watching lotr w my sis dis aft. So u wan 2 meet me 4 dinner at nite a not? +ham Why you keeping me away like this +ham I think its far more than that but find out. Check google maps for a place from your dorm. +ham My trip was ok but quite tiring lor. Uni starts today but it's ok 4 me cos i'm not taking any modules but jus concentrating on my final yr project. +ham Have you always been saying welp? +ham I'm a guy, browsin is compulsory +ham Ok... +ham Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng musthu +ham Sorry, I'll call later +ham (I should add that I don't really care and if you can't I can at least get this dude to fuck off but hey, your money if you want it) +ham Hello lover! How goes that new job? Are you there now? Are you happy? Do you think of me? I wake, my slave and send you a teasing kiss from across the sea +ham I told your number to gautham.. +ham Tell them no need to investigate about me anywhere. +ham Ok i juz receive.. +ham Cant believe i said so many things to you this morning when all i really wanted to say was good morning, i love you! Have a beautiful morning. See you in the library later. +spam Your account has been credited with 500 FREE Text Messages. To activate, just txt the word: CREDIT to No: 80488 T&Cs www.80488.biz +ham In the end she might still vomit but its okay. Not everything will come out. +ham How are you with moneY...as in to you...money aint a thing....how are you sha! +ham It has everything to do with the weather. Keep extra warm. Its a cold but nothing serious. Pls lots of vitamin c +ham Hey gals.. Anyone of u going down to e driving centre tmr? +ham I'm always on yahoo messenger now. Just send the message to me and i.ll get it you may have to send it in the mobile mode sha but i.ll get it. And will reply. +ham I'm putting it on now. It should be ready for <TIME> +ham Time n Smile r the two crucial things in our life. Sometimes time makes us to forget smile, and sometimes someone's smile makes us to forget time gud noon +spam SMS. ac JSco: Energy is high, but u may not know where 2channel it. 2day ur leadership skills r strong. Psychic? Reply ANS w/question. End? Reply END JSCO +ham Host-based IDPS for linux systems. +spam HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national rate call +ham Don no da:)whats you plan? +ham Ill be there on <#> ok. +ham Oh my God. I'm almost home +ham Total video converter free download type this in google search:) +spam Thanks for the Vote. Now sing along with the stars with Karaoke on your mobile. For a FREE link just reply with SING now. +ham Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da. +ham Sounds like something that someone testing me would sayy +ham When u love someone Dont make them to love u as much as u do. But Love them so much that they dont want to be loved by anyone except you... Gud nit. +ham Pete,is this your phone still? Its Jenny from college and Leanne.what are you up to now?:) +ham Oops sorry. Just to check that you don't mind picking me up tomo at half eight from station. Would that be ok? +ham Hey sweet, I was wondering when you had a moment if you might come to me ? I want to send a file to someone but it won't go over yahoo for them because their connection sucks, remember when you set up that page for me to go to and download the format disc ? Could you tell me how to do that ? Or do you know some other way to download big files ? Because they can download stuff directly from the internet. Any help would be great, my prey ... *teasing kiss* +ham Hows the champ just leaving glasgow! +ham K:)all the best:)congrats... +ham I wonder if you'll get this text? +ham I need to come home and give you some good lovin... +spam Our brand new mobile music service is now live. The free music player will arrive shortly. Just install on your phone to browse content from the top artists. +ham Shall i ask one thing if you dont mistake me. +ham Check wid corect speling i.e. Sarcasm +spam URGENT! Your Mobile No was awarded a £2,000 Bonus Caller Prize on 1/08/03! This is our 2nd attempt to contact YOU! Call 0871-4719-523 BOX95QU BT National Rate +ham Are you angry with me. What happen dear +ham I thk u dun haf 2 hint in e forum already lor... Cos i told ron n darren is going 2 tell shuhui. +ham Yup ok thanx... +ham Hi:)cts employee how are you? +ham Pls pls find out from aunt nike. +ham Wow ... I love you sooo much, you know ? I can barely stand it ! I wonder how your day goes and if you are well, my love ... I think of you and miss you +ham No screaming means shouting.. +ham Hey what happen de. Are you alright. +ham Should I have picked up a receipt or something earlier +ham I think chennai well settled? +ham Oh dang! I didn't mean o send that to you! Lol! +ham Unfortunately i've just found out that we have to pick my sister up from the airport that evening so don't think i'll be going out at all. We should try to go out one of th +ham Horrible bf... I now v hungry... +ham Remember on that day.. +spam You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG/Suite342/2Lands Row/W1JHL 16+ +ham How's it feel? Mr. Your not my real Valentine just my yo Valentine even tho u hardly play!! +ham All sounds good. Fingers . Makes it difficult to type +ham Midnight at the earliest +ham You're not sure that I'm not trying to make xavier smoke because I don't want to smoke after being told I smoke too much? +ham K come to nordstrom when you're done +ham Do u konw waht is rael FRIENDSHIP Im gving yuo an exmpel: Jsut ese tihs msg.. Evrey splleing of tihs msg is wrnog.. Bt sitll yuo can raed it wihtuot ayn mitsake.. GOODNIGHT & HAVE A NICE SLEEP..SWEET DREAMS.. +ham Now press conference da:) +spam Hello from Orange. For 1 month's free access to games, news and sport, plus 10 free texts and 20 photo messages, reply YES. Terms apply: www.orange.co.uk/ow +ham After completed degree. There is no use in joining finance. +ham Good afternoon, my love ! Any job prospects ? Are you missing me ? What do you do ? Are you being lazy and bleak, hmmm ? Or happy and filled with my love ? +ham Shant disturb u anymore... Jia you... +ham Bishan lar nearer... No need buy so early cos if buy now i gotta park my car... +ham Me, i dont know again oh +ham Dude sux for snake. He got old and raiden got buff +ham He says hi and to get your ass back to south tampa (preferably at a kegger) +ham In e msg jus now. U said thanks for gift. +ham U too... +ham Ok how you dear. Did you call chechi +ham Yeah we do totes. When u wanna? +ham Ok i found dis pierre cardin one which looks normal costs 20 its on sale. +ham Good sleep is about rhythm. The person has to establish a rhythm that the body will learn and use. If you want to know more :-) +ham Wat r u doing? +ham Message from . I am at Truro Hospital on ext. You can phone me here. as I have a phone by my side +ham Single line with a big meaning::::: "Miss anything 4 ur "Best Life" but, don't miss ur best life for anything... Gud nyt... +ham Just got some gas money, any chance you and the gang want to go on a grand nature adventure? +ham Dnt worry...use ice pieces in a cloth pack.also take 2 tablets. +ham Dude just saw a parked car with its sunroof popped up. Sux +ham Get ready to put on your excellent sub face :) +ham Tmrw. Im finishing 9 doors +ham The <#> g that i saw a few days ago, the guy wants sell wifi only for <#> and with 3g for <#> . That's why i blanked him. +ham I am late. I will be there at +ham whatever, im pretty pissed off. +ham Today is ACCEPT DAY..U Accept me as? Brother Sister Lover Dear1 Best1 Clos1 Lvblefrnd Jstfrnd Cutefrnd Lifpartnr Belovd Swtheart Bstfrnd No rply means enemy +ham I dont have that much image in class. +ham No:-)i got rumour that you going to buy apartment in chennai:-) +ham Near kalainar tv office.thenampet +spam Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send GO to 86688 only 150p/msg. CC 08718720201 HG/Suite342/2Lands Row/W1J6HL +spam SMS AUCTION - A BRAND NEW Nokia 7250 is up 4 auction today! Auction is FREE 2 join & take part! Txt NOKIA to 86021 now! HG/Suite342/2Lands Row/W1J6HL +ham My sis is catching e show in e afternoon so i'm not watching w her. So c u wan 2 watch today or tmr lor. +ham Sounds gd... Haha... Can... Wah, u yan jiu so fast liao... +ham No. To be nosy I guess. Idk am I over reacting if I'm freaked? +ham Remember all those whom i hurt during days of satanic imposter in me.need to pay a price,so be it.may destiny keep me going and as u said pray that i get the mind to get over the same. +ham How to Make a girl Happy? It's not at all difficult to make girls happy. U only need to be... 1. A friend 2. Companion 3. Lover 4. Chef . . . <#> . Good listener <#> . Organizer <#> . Good boyfriend <#> . Very clean <#> . Sympathetic <#> . Athletic <#> . Warm . . . <#> . Courageous <#> . Determined <#> . True <#> . Dependable <#> . Intelligent . . . <#> . Psychologist <#> . Pest exterminator <#> . Psychiatrist <#> . Healer . . <#> . Stylist <#> . Driver . . Aaniye pudunga venaam.. +ham Why is that, princess? I bet the brothas are all chasing you! +ham I shall book chez jules for half eight, if that's ok with you? +ham Hhahhaahahah rofl wtf nig was leonardo in your room or something +ham Yep, at derek's house now, see you Sunday <3 +ham It's cool, let me know before it kicks off around <#> , I'll be out and about all day +ham Sorry, I'll call later +ham I was wondering if it would be okay for you to call uncle john and let him know that things are not the same in nigeria as they r here. That <#> dollars is 2years sent and that you know its a strain but i plan to pay back every dime he gives. Every dime so for me to expect anything from you is not practical. Something like that. +ham There are no other charges after transfer charges and you can withdraw anyhow you like +ham Dont search love, let love find U. Thats why its called falling in love, bcoz U dont force yourself, U just fall and U know there is smeone to hold U... BSLVYL +ham At 4. Let's go to bill millers +ham I love you. You set my soul on fire. It is not just a spark. But it is a flame. A big rawring flame. XoXo +ham Somewhr someone is surely made 4 u. And God has decided a perfect time to make u meet dat person. . . . till den, . . . . . Enjoy ur crushes..!!!;-) +ham That's my honeymoon outfit. :) +ham Will it help if we propose going back again tomorrow +spam PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08719899230 Identifier Code: 41685 Expires 07/11/04 +ham Never blame a day in ur life. Good days give u happiness. Bad days give u experience. Both are essential in life! All are Gods blessings! good morning.: +ham Pls confirm the time to collect the cheque. +spam As a Registered Subscriber yr draw 4 a £100 gift voucher will b entered on receipt of a correct ans. When are the next olympics. Txt ans to 80062 +spam URGENT! Your Mobile number has been awarded with a £2000 prize GUARANTEED. Call 09061790121 from land line. Claim 3030. Valid 12hrs only 150ppm +ham Daddy will take good care of you :) +ham Yeah probably, I still gotta check out with leo +ham K.then any other special? +ham Carlos is taking his sweet time as usual so let me know when you and patty are done/want to smoke and I'll tell him to haul ass +ham Ok pa. Nothing problem:-) +ham Have you heard about that job? I'm going to that wildlife talk again tonight if u want2come. Its that2worzels and a wizzle or whatever it is?! +ham God picked up a flower and dippeditinaDEW, lovingly touched itwhichturnedinto u, and the he gifted tomeandsaid,THIS FRIEND IS 4U +ham When you came to hostel. +ham Ok no prob... I'll come after lunch then... +ham Jus telling u dat i'll b leaving 4 shanghai on 21st instead so we'll haf more time 2 meet up cya... +ham Are your freezing ? Are you home yet ? Will you remember to kiss your mom in the morning? Do you love me ? Do you think of me ? Are you missing me yet ? +ham You all ready for * big day tomorrow? +ham I'll probably be around mu a lot +ham 645 +spam RT-KIng Pro Video Club>> Need help? info@ringtoneking.co.uk or call 08701237397 You must be 16+ Club credits redeemable at www.ringtoneking.co.uk! Enjoy! +ham Thnx dude. u guys out 2nite? +ham Me sef dey laugh you. Meanwhile how's my darling anjie! +ham Mm i had my food da from out +ham K, makes sense, btw carlos is being difficult so you guys are gonna smoke while I go pick up the second batch and get gas +ham Did u download the fring app? +ham The 2 oz guy is being kinda flaky but one friend is interested in picking up $ <#> worth tonight if possible +ham Friends that u can stay on fb chat with +ham Fuck babe, I miss you sooooo much !! I wish you were here to sleep with me ... My bed is so lonely ... I go now, to sleep ... To dream of you, my love ... +ham Living is very simple.. Loving is also simple.. Laughing is too simple.. Winning is tooo simple.. But, being 'SIMPLE' is very difficult.. Gud nte.:- +spam U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094599 +ham Ah, well that confuses things, doesn‘t it? +spam 500 free text msgs. Just text ok to 80488 and we'll credit your account +ham Hi Dear Call me its urgnt. I don't know whats your problem. You don't want to work or if you have any other problem at least tell me. Wating for your reply. +ham Dear how you. Are you ok? +spam You have been selected to stay in 1 of 250 top British hotels - FOR NOTHING! Holiday Worth £350! To Claim, Call London 02072069400. Bx 526, SW73SS +ham Yes princess! I want to make you happy... +ham Sounds like you have many talents! would you like to go on a dinner date next week? +ham I am going to film 2day da. At 6pm. Sorry da. +ham We not watching movie already. Xy wants 2 shop so i'm shopping w her now. +ham Hello my little party animal! I just thought I'd buzz you as you were with your friends ...*grins*... Reminding you were loved and send a naughty adoring kiss +ham Yesterday its with me only . Now am going home. +spam Eerie Nokia tones 4u, rply TONE TITLE to 8007 eg TONE DRACULA to 8007 Titles: GHOST, ADDAMSFA, MUNSTERS, EXORCIST, TWILIGHT www.getzed.co.uk POBox36504W45WQ 150p +ham You have come into my life and brought the sun ..Shiny down on me, warming my heart. Putting a constant smile on my face ... Making me feel loved and cared for +ham No shit, but I wasn't that surprised, so I went and spent the evening with that french guy I met in town here and we fooled around a bit but I didn't let him fuck me +spam 0A$NETWORKS allow companies to bill for SMS, so they are responsible for their "suppliers", just as a shop has to give a guarantee on what they sell. B. G. +ham Great comedy..cant stop laughing da:) +spam FreeMsg:Feelin kinda lnly hope u like 2 keep me company! Jst got a cam moby wanna c my pic?Txt or reply DATE to 82242 Msg150p 2rcv Hlp 08712317606 stop to 82242 +ham Alright, we're all set here, text the man +ham Hi , where are you? We're at and they're not keen to go out i kind of am but feel i shouldn't so can we go out tomo, don't mind do you? +ham Sleeping nt feeling well +ham U WILL SWITCH YOUR FONE ON DAMMIT!! +ham India have to take lead:) +ham I.ll post her out l8r. In class +ham Thts wat Wright Brother did to fly.. +ham Evening * v good if somewhat event laden. Will fill you in, don't you worry … Head * ok but throat * wrecked. See you at six then! +ham If u laugh really loud.. If u talk spontaneously.. If u dont care what others feel.. U are probably with your dear & best friends.. GOODEVENING Dear..:) +ham ITS A LAPTOP TAKE IT WITH YOU. +ham I dont have any of your file in my bag..i was in work when you called me.i 'll tell you if i find anything in my room. +ham I wan but too early lei... Me outside now wun b home so early... Neva mind then... +spam For ur chance to win a £250 cash every wk TXT: ACTION to 80608. T's&C's www.movietrivia.tv custcare 08712405022, 1x150p/wk +ham I was at bugis juz now wat... But now i'm walking home oredi... Ü so late then reply... I oso saw a top dat i like but din buy... Where r ü now? +ham Wishing you and your family Merry "X" mas and HAPPY NEW Year in advance.. +ham At 7 we will go ok na. +ham Yes I posted a couple of pics on fb. There's still snow outside too. I'm just waking up :) +ham S:-)if we have one good partnership going we will take lead:) +spam RGENT! This is the 2nd attempt to contact U!U have WON £1250 CALL 09071512433 b4 050703 T&CsBCM4235WC1N3XX. callcost 150ppm mobilesvary. max£7. 50 +ham Yeah, where's your class at? +ham No just send to you. Bec you in temple na. +ham You aren't coming home between class, right? I need to work out and shower! +spam Hi if ur lookin 4 saucy daytime fun wiv busty married woman Am free all next week Chat now 2 sort time 09099726429 JANINExx Calls£1/minMobsmoreLKPOBOX177HP51FL +ham S but mostly not like that. +ham Ü v ma fan... +ham Dunno cos i was v late n when i reach they inside already... But we ate spageddies lor... It's e gals who r laughing at me lor... +ham Guess who spent all last night phasing in and out of the fourth dimension +ham So now my dad is gonna call after he gets out of work and ask all these crazy questions. +ham Yes..but they said its IT., +ham Very hurting n meaningful lines ever: "I compromised everything for my love, But at d end my love compromised me for everything:-(".. Gud mornin:-) +ham Lmao!nice 1 +ham Glad to see your reply. +spam URGENT! We are trying to contact U. Todays draw shows that you have won a £800 prize GUARANTEED. Call 09050001295 from land line. Claim A21. Valid 12hrs only +spam Monthly password for wap. mobsi.com is 391784. Use your wap phone not PC. +ham Nah dub but je still buff +ham Painful words- "I thought being Happy was the most toughest thing on Earth... But, the toughest is acting Happy with all unspoken pain inside.." +ham Yeah, that's fine! It's £6 to get in, is that ok? +ham Lol where do u come up with these ideas? +ham So many people seems to be special at first sight, But only very few will remain special to you till your last sight.. Maintain them till life ends.. Sh!jas +ham Today is "song dedicated day.." Which song will u dedicate for me? Send this to all ur valuable frnds but first rply me... +ham Okay... We wait ah +ham Y lei? +ham HI BABE U R MOST LIKELY TO BE IN BED BUT IM SO SORRY ABOUT TONIGHT! I REALLY WANNA SEE U TOMORROW SO CALL ME AT 9. LOVE ME XXX +ham Already am squatting is the new way of walking +ham Do you want bold 2 or bb torch +ham Cramps stopped. Going back to sleep +spam todays vodafone numbers ending with 0089(my last four digits) are selected to received a £350 award. If your number matches please call 09063442151 to claim your £350 award +spam Free Top ringtone -sub to weekly ringtone-get 1st week free-send SUBPOLY to 81618-?3 per week-stop sms-08718727870 +ham Nan sonathaya soladha. Why boss? +ham Bring tat cd don forget +spam Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country the Algarve is in? Txt ansr to 82277. £1.50 SP:Tyrone +ham I don't know but I'm raping dudes at poker +ham Weightloss! No more girl friends. Make loads of money on ebay or something. And give thanks to God. +ham Was gr8 to see that message. So when r u leaving? Congrats dear. What school and wat r ur plans. +ham Ü eatin later but i'm eatin wif my frens now lei... Ü going home first? +ham Finish already... Yar they keep saying i mushy... I so embarrassed ok... +ham Sorry man, my stash ran dry last night and I can't pick up more until sunday +ham Hai priya are you right. What doctor said pa. Where are you. +spam Free msg. Sorry, a service you ordered from 81303 could not be delivered as you do not have sufficient credit. Please top up to receive the service. +ham Ok... +ham Please ask mummy to call father +ham Can come my room but cannot come my house cos my house still messy... Haha... +ham I have lost 10 kilos as of today! +ham Just taste fish curry :-P +ham What can i do? Might accidant tookplace between somewhere ghodbandar rd. Traffic moves slovely. So plz slip & don't worry. +ham Yun ah.now ü wkg where?btw if ü go nus sc. Ü wana specialise in wad? +ham Yes! I am a one woman man! Please tell me your likes and dislikes in bed... +ham Was doing my test earlier. I appreciate you. Will call you tomorrow. +ham How's my loverboy doing ? What does he do that keeps him from coming to his Queen, hmmm ? Doesn't he ache to speak to me ? Miss me desparately ? +ham U meet other fren dun wan meet me ah... Muz b a guy rite... +ham (No promises on when though, haven't even gotten dinner yet) +ham I got your back! Do you have any dislikes in bed? +ham o turns out i had stereo love on mi phone under the unknown album. +spam Hard LIVE 121 chat just 60p/min. Choose your girl and connect LIVE. Call 09094646899 now! Cheap Chat UK's biggest live service. VU BCM1896WC1N3XX +ham Yeah I don't see why not +ham Asking do u knw them or nt? May be ur frnds or classmates? +ham Sorry about earlier. Putting out fires.Are you around to talk after 9? Or do you actually have a life, lol! +spam WOW! The Boys R Back. TAKE THAT 2007 UK Tour. Win VIP Tickets & pre-book with VIP Club. Txt CLUB to 81303. Trackmarque Ltd info@vipclub4u. +ham As in missionary hook up, doggy hook up, standing...| +ham Then u better go sleep.. Dun disturb u liao.. U wake up then msg me lor.. +ham Fighting with the world is easy, u either win or lose bt fightng with some1 who is close to u is dificult if u lose - u lose if u win - u still lose. +ham Am watching house – very entertaining – am getting the whole hugh laurie thing – even with the stick – indeed especially with the stick. +ham Thought praps you meant another one. Goodo! I'll look tomorrow +ham Hi Jon, Pete here, Ive bin 2 Spain recently & hav sum dinero left, Bill said u or ur ‘rents mayb interested in it, I hav 12,000pes, so around £48, tb, James. +ham There bold 2 <#> . Is that yours +ham You know there is. I shall speak to you in <#> minutes then +ham "ALRITE HUNNY!WOT U UP 2 2NITE? DIDNT END UP GOIN DOWN TOWN JUS DA PUB INSTEAD! JUS CHILLIN AT DA MO IN ME BEDROOM!LOVE JEN XXX." +ham I went to project centre +ham As per your request 'Maangalyam (Alaipayuthe)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune +ham Lol yeah at this point I guess not +ham Doing project w frens lor. +ham Lol. Well quality aint bad at all so i aint complaining +ham K, can that happen tonight? +spam Hi, this is Mandy Sullivan calling from HOTMIX FM...you are chosen to receive £5000.00 in our Easter Prize draw.....Please telephone 09041940223 to claim before 29/03/05 or your prize will be transferred to someone else.... +ham I think we're going to finn's now, come +ham Why tired what special there you had +ham I will come tomorrow di +ham I cant pick the phone right now. Pls send a message +ham K go and sleep well. Take rest:-). +ham U guys never invite me anywhere :( +spam UR GOING 2 BAHAMAS! CallFREEFONE 08081560665 and speak to a live operator to claim either Bahamas cruise of£2000 CASH 18+only. To opt out txt X to 07786200117 +ham I can do that! I want to please you both inside and outside the bedroom... +ham "EY! CALM DOWNON THEACUSATIONS.. ITXT U COS IWANA KNOW WOTU R DOIN AT THEW/END... HAVENTCN U IN AGES..RING ME IF UR UP4 NETHING SAT.LOVE J XXX." +ham I love to wine and dine my lady! +spam Someone has conacted our dating service and entered your phone because they fancy you!To find out who it is call from landline 09111030116. PoBox12n146tf15 +ham I’m cool ta luv but v.tired 2 cause i have been doin loads of planning all wk, we have got our social services inspection at the nursery! Take care & spk sn x. +ham I don know account details..i will ask my mom and send you.my mom is out of reach now. +ham I think u have the wrong number. +ham Feel Yourself That You Are Always Happy.. Slowly It Becomes Your Habit & Finally It Becomes Part Of Your Life.. Follow It.. Happy Morning & Have A Happy Day:) +ham DO NOT B LATE LOVE MUM +ham Got it..mail panren paru.. +ham * Was thinking about chuckin ur red green n black trainners 2 save carryin them bac on train +ham Give one miss from that number please +ham Jus came back fr lunch wif my sis only. U leh? +ham How is your schedule next week? I am out of town this weekend. +ham Really good:)dhanush rocks once again:) +ham Lmao ok I wont be needing u to do my hair anymore. +ham Miss ya, need ya, want ya, love ya. +ham Sorry i'm not free... +ham Do u ever get a song stuck in your head for no reason and it won't go away til u listen to it like 5 times? +ham Nt yet chikku..simple habba..hw abt u? +ham Got ur mail Dileep.thank you so muchand look forward to lots of support...very less contacts here,remember one venugopal you mentioned.tomorrow if not late,i shall try to come up till there.goodnight dear. +ham Sometimes Heart Remembrs someone Very much... Forgets someone soon... Bcoz Heart will not like everyone. But liked ones will be Remembered Everytime... BSLVYL +ham Joy's father is John. Then John is the NAME of Joy's father. Mandan +spam Hi 07734396839 IBH Customer Loyalty Offer: The NEW NOKIA6600 Mobile from ONLY £10 at TXTAUCTION!Txt word:START to No:81151 & get Yours Now!4T& +ham Hi this is yijue... It's regarding the 3230 textbook it's intro to algorithms second edition... I'm selling it for $50... +spam SMS AUCTION You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG/Suite342/2Lands Row/W1JHL 16+ +ham K, want us to come by now? +ham How. Its a little difficult but its a simple way to enter this place +ham Ha... Both of us doing e same thing. But i got tv 2 watch. U can thk of where 2 go tonight or u already haf smth in mind... +ham Dont show yourself. How far. Put new pictures up on facebook. +ham Watching tv now. I got new job :) +ham Good afternoon sexy buns! How goes the job search ? I wake and you are my first thought as always, my love. I wish your fine and happy and know I adore you! +ham I'm not coming over, do whatever you want +ham Its ok chikku, and its my 1 of favourite song..:-) +ham Did u see what I posted on your Facebook? +spam Call FREEPHONE 0800 542 0578 now! +spam Buy Space Invaders 4 a chance 2 win orig Arcade Game console. Press 0 for Games Arcade (std WAP charge) See o2.co.uk/games 4 Terms + settings. No purchase +ham 7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st "Ur Lovely Friendship"... good morning dear +spam Loan for any purpose £500 - £75,000. Homeowners + Tenants welcome. Have you been previously refused? We can still help. Call Free 0800 1956669 or text back 'help' +spam BIG BROTHER ALERT! The computer has selected u for 10k cash or #150 voucher. Call 09064018838. NTT PO Box CRO1327 18+ BT Landline Cost 150ppm mobiles vary +ham ;-( oh well, c u later +ham My uncles in Atlanta. Wish you guys a great semester. +ham No dear i do have free messages without any recharge. Hi hi hi +ham Dont search love, let love find U. Thats why its called falling in love, bcoz U dont force yourself, U just fall and U know there is smeone to hold U... BSLVYL +ham I dun believe u. I thk u told him. +ham Do you know why god created gap between your fingers..? So that, One who is made for you comes & fills those gaps by holding your hand with LOVE..! +ham Yes:)sura in sun tv.:)lol. +ham Arun can u transfr me d amt +ham Takin a shower now but yeah I'll leave when I'm done +ham Am not working but am up to eyes in philosophy so will text u later when a bit more free for chat... +ham U haven’t lost me ill always b here 4u.i didn’t intend 2 hurt u but I never knew how u felt about me when Iwas+marine&that’s what itried2tell urmom.i careabout u +spam WIN: We have a winner! Mr. T. Foley won an iPod! More exciting prizes soon, so keep an eye on ur mobile or visit www.win-82050.co.uk +ham You bad girl. I can still remember them +ham How much i gave to you. Morning. +ham I hope your alright babe? I worry that you might have felt a bit desparate when you learned the job was a fake ? I am here waiting when you come back, my love +ham Hey, can you tell me blake's address? Carlos wanted me to meet him there but I got lost and he's not answering his phone +ham Can i get your opinion on something first? +ham That one week leave i put know that time. Why. +ham If we hit it off, you can move in with me :) +ham excellent. I spent <#> years in the Air Force. Iraq and afghanistan. I am stable and honest. do you like traveling? +ham I wanna watch that movie +ham Ok lor thanx... Ü in school? +ham I'm in class. Did you get my text. +ham The bus leaves at <#> +ham God bless.get good sleep my dear...i will pray! +spam Todays Voda numbers ending 1225 are selected to receive a £50award. If you have a match please call 08712300220 quoting claim code 3100 standard rates app +ham Do have a nice day today. I love you so dearly. +ham Aiyo a bit pai seh ü noe... Scared he dun rem who i am then die... Hee... But he become better lookin oredi leh... +ham Aight, I'll ask a few of my roommates +ham Now, whats your house # again ? And do you have any beer there ? +ham Do ü all wan 2 meet up n combine all the parts? How's da rest of da project going? +ham "Getting tickets 4 walsall tue 6 th march. My mate is getting me them on sat. ill pay my treat. Want 2 go. Txt bak .Terry" +ham Yes we are chatting too. +ham HI ITS JESS I DONT KNOW IF YOU ARE AT WORK BUT CALL ME WHEN U CAN IM AT HOME ALL EVE. XXX +ham Sian... Aft meeting supervisor got work 2 do liao... U working now? +ham Are you going to write ccna exam this week?? +ham Well i will watch shrek in 3D!!B) +ham Am i that much dirty fellow? +ham Dunno dat's wat he told me. Ok lor... +ham I'll probably be by tomorrow (or even later tonight if something's going on) +ham I couldn't say no as he is a dying man and I feel sad for him so I will go and I just wanted you to know I would probably be gone late into your night +ham If you're thinking of lifting me one then no. +ham Same as u... Dun wan... Y u dun like me already ah... Wat u doing now? Still eating? +ham Sent me ur email id soon +ham Wat makes some people dearer is not just de happiness dat u feel when u meet them but de pain u feel when u miss dem!!! +ham Dude. What's up. How Teresa. Hope you have been okay. When i didnt hear from these people, i called them and they had received the package since dec <#> . Just thot you'ld like to know. Do have a fantastic year and all the best with your reading. Plus if you can really really Bam first aid for Usmle, then your work is done. +ham Hey gorgeous man. My work mobile number is. Have a good one babe. Squishy Mwahs. +ham May i call You later Pls +spam Hottest pics straight to your phone!! See me getting Wet and Wanting, just for you xx Text PICS to 89555 now! txt costs 150p textoperator g696ga 18 XxX +ham That's the way you should stay oh. +ham Hello- thanx for taking that call. I got a job! Starts on monday! +ham What time is ur flight tmr? +ham When should I come over? +ham I have a rather prominent bite mark on my right cheek +ham * Will be september by then! +ham Are you wet right now? +ham And how's your husband. +spam Hack Chat. Get backdoor entry into 121 chat rooms at a fraction of the cost. Reply NEO69 or call 09050280520, to subscribe 25p pm. DPS, Bcm box 8027 Ldn, wc1n3xx +ham Are we doing the norm tomorrow? I finish just a 4.15 cos of st tests. Need to sort library stuff out at some point tomo - got letter from today - access til end march so i better get move on! +ham Yeah. I got a list with only u and Joanna if I'm feeling really anti social +ham I am in your office na. +ham "Are you comingdown later?" +ham Super da:)good replacement for murali +ham Da is good good player.why he is unsold. +ham Hi. || Do u want | to join me with sts later? || Meeting them at five. || Call u after class. +ham Its on in engalnd! But telly has decided it won't let me watch it and mia and elliot were kissing! Damn it! +spam FREE NOKIA Or Motorola with upto 12mths 1/2price linerental, 500 FREE x-net mins&100txt/mth FREE B'tooth*. Call Mobileupd8 on 08001950382 or call 2optout/D3WV +ham I dont want to hear philosophy. Just say what happen +ham You got job in wipro:)you will get every thing in life in 2 or 3 years. +ham Then cant get da laptop? My matric card wif ü lei... +ham Dunno da next show aft 6 is 850. Toa payoh got 650. +spam This is the 2nd time we have tried 2 contact u. U have won the 750 Pound prize. 2 claim is easy, call 08718726970 NOW! Only 10p per min. BT-national-rate +ham I just made some payments so dont have that much. Sorry. Would you want it fedex or the other way. +ham They did't play one day last year know even though they have very good team.. Like india. +ham K.:)you are the only girl waiting in reception ah? +ham Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it... +ham I hate when she does this. She turns what should be a fun shopping trip into an annoying day of how everything would look in her house. +ham Sir, i am waiting for your call. +ham What's up. Do you want me to come online? +ham It could work, we'll reach a consensus at the next meeting +ham Aiyah then i wait lor. Then u entertain me. Hee... +ham The last thing i ever wanted to do was hurt you. And i didn't think it would have. You'd laugh, be embarassed, delete the tag and keep going. But as far as i knew, it wasn't even up. The fact that you even felt like i would do it to hurt you shows you really don't know me at all. It was messy wednesday, but it wasn't bad. The problem i have with it is you HAVE the time to clean it, but you choose not to. You skype, you take pictures, you sleep, you want to go out. I don't mind a few things here and there, but when you don't make the bed, when you throw laundry on top of it, when i can't have a friend in the house because i'm embarassed that there's underwear and bras strewn on the bed, pillows on the floor, that's something else. You used to be good about at least making the bed. +ham I'll let you know when it kicks in +ham You call him now ok i said call him +ham Call to the number which is available in appointment. And ask to connect the call to waheed fathima. +ham Or ü go buy wif him then i meet ü later can? +ham Mmmm ... Fuck ... Not fair ! You know my weaknesses ! *grins* *pushes you to your knee's* *exposes my belly and pulls your head to it* Don't forget ... I know yours too *wicked smile* +ham Today my system sh get ready.all is well and i am also in the deep well +ham Mom wants to know where you at +ham Aight, I'll text you when I'm back +ham Dont know supports ass and srt i thnk. I think ps3 can play through usb too +ham Oh ok i didnt know what you meant. Yep i am baby jontin +spam You have WON a guaranteed £1000 cash or a £2000 prize.To claim yr prize call our customer service representative on +spam Would you like to see my XXX pics they are so hot they were nearly banned in the uk! +spam HMV BONUS SPECIAL 500 pounds of genuine HMV vouchers to be won. Just answer 4 easy questions. Play Now! Send HMV to 86688 More info:www.100percent-real.com +ham Watching tv now. I got new job :) +ham This pen thing is beyond a joke. Wont a Biro do? Don't do a masters as can't do this ever again! +ham I AM AT A PARTY WITH ALEX NICHOLS +spam U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094594 +ham Just seeing your missed call my dear brother. Do have a gr8 day. +ham Ok.. Ü finishing soon? +ham Sorry, I can't help you on this. +ham Come to me, slave. Your doing it again ... Going into your shell and unconsciously avoiding me ... You are making me unhappy :-( +ham I love your ass! Do you enjoy doggy style? :) +ham I think asking for a gym is the excuse for lazy people. I jog. +spam Dear 0776xxxxxxx U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688 150p/MsgrcvdHG/Suite342/2Lands/Row/W1J6HL LDN 18yrs +spam Urgent! Please call 09061743811 from landline. Your ABTA complimentary 4* Tenerife Holiday or £5000 cash await collection SAE T&Cs Box 326 CW25WX 150ppm +ham No. On the way home. So if not for the long dry spell the season would have been over +ham I gotta collect da car at 6 lei. +ham Ok but knackered. Just came home and went to sleep! Not good at this full time work lark. +ham Probably earlier than that if the station's where I think it is +spam CALL 09090900040 & LISTEN TO EXTREME DIRTY LIVE CHAT GOING ON IN THE OFFICE RIGHT NOW TOTAL PRIVACY NO ONE KNOWS YOUR [sic] LISTENING 60P MIN 24/7MP 0870753331018+ +ham Good Morning plz call me sir +spam FreeMsg Hey U, i just got 1 of these video/pic fones, reply WILD to this txt & ill send U my pics, hurry up Im so bored at work xxx (18 150p/rcvd STOP2stop) +ham Uh, heads up we don't have THAT much left +ham I tot u outside cos darren say u come shopping. Of course we nice wat. We jus went sim lim look at mp3 player. +ham Aight, sounds good. When do you want me to come down? +ham Wat would u like 4 ur birthday? +ham I love working from home :) +ham And miss vday the parachute and double coins??? U must not know me very well... +ham Sorry, I'll call later +ham My sister got placed in birla soft da:-) +spam Free entry in 2 a weekly comp for a chance to win an ipod. Txt POD to 80182 to get entry (std txt rate) T&C's apply 08452810073 for details 18+ +ham Wah... Okie okie... Muz make use of e unlimited... Haha... +ham There're some people by mu, I'm at the table by lambda +ham And stop being an old man. You get to build snowman snow angels and snowball fights. +ham ELLO BABE U OK? +ham Hello beautiful r u ok? I've kinda ad a row wiv and he walked out the pub?? I wanted a night wiv u Miss u +ham Then u going ikea str aft dat? +ham Becoz its <#> jan whn al the post ofice is in holiday so she cn go fr the post ofice...got it duffer +ham Lol grr my mom is taking forever with my prescription. Pharmacy is like 2 minutes away. Ugh. +ham For real tho this sucks. I can't even cook my whole electricity is out. And I'm hungry. +ham You want to go? +spam New TEXTBUDDY Chat 2 horny guys in ur area 4 just 25p Free 2 receive Search postcode or at gaytextbuddy.com. TXT ONE name to 89693. 08715500022 rpl Stop 2 cnl +ham Its not that time of the month nor mid of the time? +ham Fffff. Can you text kadeem or are you too far gone +ham We not leaving yet. Ok lor then we go elsewhere n eat. U thk... +ham Is fujitsu s series lifebook good? +ham Yar i wanted 2 scold u yest but late already... I where got zhong se qing you? If u ask me b4 he ask me then i'll go out w u all lor. N u still can act so real. +ham Dont know you bring some food +ham No current and food here. I am alone also +ham I'll be in sch fr 4-6... I dun haf da book in sch... It's at home... +ham Hello. They are going to the village pub at 8 so either come here or there accordingly. Ok? +ham Ok +ham We don call like <#> times oh. No give us hypertension oh. +ham Dont give a monkeys wot they think and i certainly don't mind. Any friend of mine&all that! Just don't sleep wiv , that wud be annoyin! +ham Omg it could snow here tonite! +spam Call from 08702490080 - tells u 2 call 09066358152 to claim £5000 prize. U have 2 enter all ur mobile & personal details @ the prompts. Careful! +spam Free 1st week entry 2 TEXTPOD 4 a chance 2 win 40GB iPod or £250 cash every wk. Txt VPOD to 81303 Ts&Cs www.textpod.net custcare 08712405020. +ham Carry on not disturbing both of you +ham What pa tell me.. I went to bath:-) +ham Jus finished avatar nigro +ham R u over scratching it? +ham Hope you are having a great day. +ham Did either of you have any idea's? Do you know of anyplaces doing something? +ham My planning usually stops at "find hella weed, smoke hella weed" +ham The fact that you're cleaning shows you know why i'm upset. Your priority is constantly "what i want to do," not "what i need to do." +ham Excellent! Are you ready to moan and scream in ecstasy? +spam More people are dogging in your area now. Call 09090204448 and join like minded guys. Why not arrange 1 yourself. There's 1 this evening. A£1.50 minAPN LS278BB +ham Dude avatar 3d was imp. At one point i thought there were actually flies in the room and almost tried hittng one as a reflex +spam WELL DONE! Your 4* Costa Del Sol Holiday or £5000 await collection. Call 09050090044 Now toClaim. SAE, TCs, POBox334, Stockport, SK38xh, Cost£1.50/pm, Max10mins +ham K...k:)why cant you come here and search job:) +ham I got lousy sleep. I kept waking up every 2 hours to see if my cat wanted to come in. I worry about him when its cold :( +ham Yeah, I'll leave in a couple minutes & let you know when I get to mu +ham Can ü call me at 10:10 to make sure dat i've woken up... +ham Hey we can go jazz power yoga hip hop kb and yogasana +ham The battery is for mr adewale my uncle. Aka Egbon +ham I cant pick the phone right now. Pls send a message +ham Wait 2 min..stand at bus stop +ham Oh ic. I thought you meant mary jane. +ham Haha... Really oh no... How? Then will they deduct your lesson tmr? +ham Nah im goin 2 the wrks with j wot bout u? +ham Then just eat a shit and wait for ur monkey face bitch.......... U asshole.................. +ham Good night. Am going to sleep. +ham Aight I'll grab something to eat too, text me when you're back at mu +ham K...k:)why cant you come here and search job:) +ham Take something for pain. If it moves however to any side in the next 6hrs see a doctor. +ham Lol ... Oh no babe, I wont be sliding into your place after midnight, but thanks for the invite +ham Howz that persons story +spam Guess what! Somebody you know secretly fancies you! Wanna find out who it is? Give us a call on 09065394973 from Landline DATEBox1282EssexCM61XN 150p/min 18 +ham LOL that would be awesome payback. +spam it to 80488. Your 500 free text messages are valid until 31 December 2005. +ham Yes :)it completely in out of form:)clark also utter waste. +ham Honeybee Said: *I'm d Sweetest in d World* God Laughed & Said: *Wait,U Havnt Met d Person Reading This Msg* MORAL: Even GOD Can Crack Jokes! GM+GN+GE+GN:) +ham Thanks. It was only from tescos but quite nice. All gone now. Speak soon +ham What's a feathery bowa? Is that something guys have that I don't know about? +ham Even i cant close my eyes you are in me our vava playing umma :-D +ham 2 laptop... I noe infra but too slow lar... I wan fast one +spam You have won a guaranteed £200 award or even £1000 cashto claim UR award call free on 08000407165 (18+) 2 stop getstop on 88222 PHP +ham Nvm it's ok... +ham Enjoy ur life. . Good night +ham Yes but can we meet in town cos will go to gep and then home. You could text at bus stop. And don't worry we'll have finished by march … ish! +ham I had askd u a question some hours before. Its answer +ham Thats cool. Where should i cum? On you or in you? :) +ham Delhi and chennai still silent. +ham Lol alright i was thinkin that too haha +spam Reply to win £100 weekly! Where will the 2006 FIFA World Cup be held? Send STOP to 87239 to end service +ham No I'm in the same boat. Still here at my moms. Check me out on yo. I'm half naked. +ham Shhhhh nobody is supposed to know! +ham Sorry, I'll call later +ham Sorry, I'll call later in meeting any thing related to trade please call Arul. <#> +ham Hey i will be late... i'm at amk. Need to drink tea or coffee +ham I wnt to buy a BMW car urgently..its vry urgent.but hv a shortage of <#> Lacs.there is no source to arng dis amt. <#> lacs..thats my prob +spam Urgent! Please call 09061743810 from landline. Your ABTA complimentary 4* Tenerife Holiday or #5000 cash await collection SAE T&Cs Box 326 CW25WX 150 ppm +ham The length is e same but e top shorter n i got a fringe now. I thk i'm not going liao. Too lazy. Dun wan 2 distract u also. +ham S..antha num corrct dane +ham No calls..messages..missed calls +ham Sorry, I'll call later +ham The basket's gettin full so I might be by tonight +ham HI DARLIN IVE JUST GOT BACK AND I HAD A REALLY NICE NIGHT AND THANKS SO MUCH FOR THE LIFT SEE U TOMORROW XXX +ham No other Valentines huh? The proof is on your fb page. Ugh I'm so glad I really DIDN'T watch your rupaul show you TOOL! +spam Free tones Hope you enjoyed your new content. text stop to 61610 to unsubscribe. help:08712400602450p Provided by tones2you.co.uk +ham Eh den sat u book e kb liao huh... +ham Have you been practising your curtsey? +ham Shall i come to get pickle +ham Lol boo I was hoping for a laugh +ham "YEH I AM DEF UP4 SOMETHING SAT,JUST GOT PAYED2DAY & I HAVBEEN GIVEN A£50 PAY RISE 4MY WORK & HAVEBEEN MADE PRESCHOOLCO-ORDINATOR 2I AM FEELINGOOD LUV" +ham Well, I have to leave for my class babe ... You never came back to me ... :-( ... Hope you have a nice sleep, my love +ham LMAO where's your fish memory when I need it? +ham But i'll b going 2 sch on mon. My sis need 2 take smth. +ham Idea will soon get converted to live:) +spam TheMob>Yo yo yo-Here comes a new selection of hot downloads for our members to get for FREE! Just click & open the next link sent to ur fone... +ham S....s...india going to draw the series after many years in south african soil.. +ham Goodmorning, today i am late for <DECIMAL> min. +ham Can't take any major roles in community outreach. You rock mel +ham Shopping lor. Them raining mah hard 2 leave orchard. +ham Hi here. have birth at on the to at 8lb 7oz. Mother and baby doing brilliantly. +ham See the forwarding message for proof +ham I can't keep going through this. It was never my intention to run you out, but if you choose to do that rather than keep the room clean so *I* don't have to say no to visitors, then maybe that's the best choice. Yes, I wanted you to be embarassed, so maybe you'd feel for once how I feel when i have a friend who wants to drop buy and i have to say no, as happened this morning. I've tried everything. I don't know what else to do. +ham Dunno lei... I thk mum lazy to go out... I neva ask her yet... +ham Do whatever you want. You know what the rules are. We had a talk earlier this week about what had to start happening, you showing responsibility. Yet, every week it's can i bend the rule this way? What about that way? Do whatever. I'm tired of having thia same argument with you every week. And a <#> movie DOESNT inlude the previews. You're still getting in after 1. +ham Beautiful Truth against Gravity.. Read carefully: "Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it.." GOODMORNING +spam Great News! Call FREEFONE 08006344447 to claim your guaranteed £1000 CASH or £2000 gift. Speak to a live operator NOW! +ham Ambrith..madurai..met u in arun dha marrge..remembr? +ham Just re read it and I have no shame but tell me how he takes it and if he runs I will blame u 4 ever!! Not really 4 ever just a long time +ham Princess, is your kitty shaved or natural? +ham Better than bb. If he wont use it, his wife will or them doctor +ham Ya it came a while ago +ham From tomorrow onwards eve 6 to 3 work. +ham Anything lor but toa payoh got place 2 walk meh... +ham I don't have anybody's number, I still haven't thought up a tactful way to ask alex +spam U can WIN £100 of Music Gift Vouchers every week starting NOW Txt the word DRAW to 87066 TsCs www.ldew.com SkillGame,1Winaweek, age16.150ppermessSubscription +ham Is there any movie theatre i can go to and watch unlimited movies and just pay once? +ham U having lunch alone? I now so bored... +ham Yes obviously, but you are the eggs-pert and the potato head… Speak soon! +ham Nah man, my car is meant to be crammed full of people +ham No got new job at bar in airport on satsgettin 4.47per hour but means no lie in! keep in touch +ham Kallis is ready for bat in 2nd innings +ham Thanx but my birthday is over already. +ham Ugh y can't u just apologize, admit u were wrong and ask me to take u back? +ham I noe la... U wana pei bf oso rite... K lor, other days den... +ham Yes, i'm small kid.. And boost is the secret of my energy.. +ham IM GONNA MISS U SO MUCH +ham Is avatar supposed to have subtoitles +ham Simply sitting and watching match in office.. +ham You can jot down things you want to remember later. +ham Oh sorry please its over +ham Hey are we going for the lo lesson or gym? +ham Dont pack what you can buy at any store.like cereals. If you must pack food, pack gari or something 9ja that you will miss. +ham You always make things bigger than they are +ham Ü dun wan to watch infernal affair? +ham Me not waking up until 4 in the afternoon, sup +spam 4mths half price Orange line rental & latest camera phones 4 FREE. Had your phone 11mths ? Call MobilesDirect free on 08000938767 to update now! or2stoptxt +ham I can send you a pic if you like :) +ham Okay... I booked all already... Including the one at bugis. +ham Aight fuck it, I'll get it later +ham No de. But call me after some time. Ill tell you k +ham So dont use hook up any how +ham How much is blackberry bold2 in nigeria. +ham Hi where you. You in home or calicut? +ham Hey darlin.. i can pick u up at college if u tell me wen & where 2 mt.. love Pete xx +spam Call 09094100151 to use ur mins! Calls cast 10p/min (mob vary). Service provided by AOM, just GBP5/month. AOM Box61,M60 1ER until u stop. Ages 18+ only! +ham Oh... I was thkin of goin yogasana at 10 den no nd to go at 3 den can rush to parco 4 nb... Okie lor, u call me when ready... +ham Y so late but i need to go n get da laptop... +ham Sir, I am waiting for your mail. +ham .Please charge my mobile when you get up in morning. +ham Nothing, i got msg frm tht unknown no.. +ham Ugh fuck it I'm resubbing to eve +ham He didn't see his shadow. We get an early spring yay +ham I did. One slice and one breadstick. Lol +ham Hey ! I want you ! I crave you ! I miss you ! I need you ! I love you, Ahmad Saeed al Hallaq ... +ham Is there any training tomorrow? +spam URGENT! Your mobile No *********** WON a £2,000 Bonus Caller Prize on 02/06/03! This is the 2nd attempt to reach YOU! Call 09066362220 ASAP! BOX97N7QP, 150ppm +ham Pass dis to all ur contacts n see wat u get! Red;i'm in luv wid u. Blue;u put a smile on my face. Purple;u r realy hot. Pink;u r so swt. Orange;i thnk i lyk u. Green;i realy wana go out wid u. Yelow;i wnt u bck. Black;i'm jealous of u. Brown;i miss you Nw plz giv me one color +ham Cos daddy arranging time c wat time fetch ü mah... +ham Then. You are eldest know. +ham Who's there say hi to our drugdealer +ham Its hard to believe things like this. All can say lie but think twice before saying anything to me. +spam Eerie Nokia tones 4u, rply TONE TITLE to 8007 eg TONE DRACULA to 8007 Titles: GHOST, ADDAMSFA, MUNSTERS, EXORCIST, TWILIGHT www.getzed.co.uk POBox36504W45WQ 150p +spam Sexy Singles are waiting for you! Text your AGE followed by your GENDER as wither M or F E.G.23F. For gay men text your AGE followed by a G. e.g.23G. +ham Good night my dear.. Sleepwell&Take care +ham That is wondarfull song +spam FreeMsg: Claim ur 250 SMS messages-Text OK to 84025 now!Use web2mobile 2 ur mates etc. Join Txt250.com for 1.50p/wk. T&C BOX139, LA32WU. 16 . Remove txtX or stop +ham Yar lor actually we quite fast... Cos da ge slow wat... Haha... +ham Must come later.. I normally bathe him in da afternoon mah.. +ham Trust me. Even if isn't there, its there. +ham Hey hun-onbus goin 2 meet him. He wants 2go out 4a meal but I donyt feel like it cuz have 2 get last bus home!But hes sweet latelyxxx +spam 85233 FREE>Ringtone!Reply REAL +ham I can take you at like noon +ham Where is it. Is there any opening for mca. +ham I'm aight. Wat's happening on your side. +ham I'm done oredi... +ham you are sweet as well, princess. Please tell me your likes and dislikes in bed... +ham How are you. Wish you a great semester +ham Moji i love you more than words. Have a rich day +ham Dude how do you like the buff wind. +ham "alright babe, justthought i’d sayhey! how u doin?nearly the endof me wk offdam nevamind!We will have 2Hook up sn if uwant m8? loveJen x." +spam Well done ENGLAND! Get the official poly ringtone or colour flag on yer mobile! text TONE or FLAG to 84199 NOW! Opt-out txt ENG STOP. Box39822 W111WX £1.50 +ham No i'm not. I can't give you everything you want and need. You actually could do better for yourself on yor own--you've got more money than i do. I can't get work, i can't get a man, i can't pay the rent, i can't even fill my fucking gas tank. yes, i'm stressed and depressed. I didn't even call home for thanksgiving cuz i'll have to tell them i,m up to nothing. +ham S:-)kallis wont play in first two odi:-) +ham Then get some cash together and I'll text jason +ham Oh, my love, it's soooo good to hear from you. Omg I missed you so much today. I'm sorry your having problems with the provider but thank you for tming me +spam Final Chance! Claim ur £150 worth of discount vouchers today! Text YES to 85023 now! SavaMob, member offers mobile! T Cs SavaMob POBOX84, M263UZ. £3.00 Subs 16 +spam PRIVATE! Your 2004 Account Statement for 07742676969 shows 786 unredeemed Bonus Points. To claim call 08719180248 Identifier Code: 45239 Expires +ham Probably, want to pick up more? +ham I'm done... +ham Are you the cutest girl in the world or what +ham No dice, art class 6 thru 9 :( thanks though. Any idea what time I should come tomorrow? +spam SMS SERVICES. for your inclusive text credits, pls goto www.comuk.net login= ***** unsubscribe with STOP. no extra charge. help:08700469649. PO BOX420. IP4 5WE +ham Oh Howda gud gud.. Mathe en samachara chikku:-) +ham I thk 530 lor. But dunno can get tickets a not. Wat u doing now? +ham Audrie lousy autocorrect +ham Its a site to simulate the test. It just gives you very tough questions to test your readiness. +ham Anyway seriously hit me up when you're back because otherwise I have to light up with armand and he always has shit and/or is vomiting +ham I fetch yun or u fetch? +ham Thank you. I like you as well... +ham Hmmm ... And imagine after you've come home from that having to rub my feet, make me dinner and help me get ready for my date ! Are you sure your ready for that kind of life ? +spam FREE2DAY sexy St George's Day pic of Jordan!Txt PIC to 89080 dont miss out, then every wk a saucy celeb!4 more pics c PocketBabe.co.uk 0870241182716 £3/wk +ham Lara said she can loan me <#> . +ham Do we have any spare power supplies +ham Yar he quite clever but aft many guesses lor. He got ask me 2 bring but i thk darren not so willing 2 go. Aiya they thk leona still not attach wat. +spam You are a winner you have been specially selected to receive £1000 cash or a £2000 award. Speak to a live operator to claim call 087123002209am-7pm. Cost 10p +ham Yeah, don't go to bed, I'll be back before midnight +spam Sunshine Hols. To claim ur med holiday send a stamped self address envelope to Drinks on Us UK, PO Box 113, Bray, Wicklow, Eire. Quiz Starts Saturday! Unsub Stop +ham Well I wasn't available as I washob nobbing with last night so they had to ask Nickey Platt instead of me!; +ham It's that time of the week again, ryan +ham Wish u many many returns of the day.. Happy birthday vikky.. +spam U can WIN £100 of Music Gift Vouchers every week starting NOW Txt the word DRAW to 87066 TsCs www.Idew.com SkillGame, 1Winaweek, age16. 150ppermessSubscription +ham I hope you know I'm still mad at you. +ham Argh my 3g is spotty, anyway the only thing I remember from the research we did was that province and sterling were the only problem-free places we looked at +ham In xam hall boy asked girl Tell me the starting term for dis answer I can den manage on my own After lot of hesitation n lookin around silently she said THE! intha ponnungale ipaditan;) +ham Do you know when the result. +spam +123 Congratulations - in this week's competition draw u have won the £1450 prize to claim just call 09050002311 b4280703. T&Cs/stop SMS 08718727868. Over 18 only 150ppm +ham Beautiful Truth against Gravity.. Read carefully: "Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it.." GOOD NIGHT +ham Sorry im getting up now, feel really bad- totally rejected that kinda me thing. +ham You do got a shitload of diamonds though +ham Tessy..pls do me a favor. Pls convey my birthday wishes to Nimya..pls dnt forget it. Today is her birthday Shijas +ham Well I'm going to be an aunty! +ham Mine here like all fr china then so noisy. +ham Later i guess. I needa do mcat study too. +ham S...from the training manual it show there is no tech process:)its all about password reset and troubleshooting:) +spam Your B4U voucher w/c 27/03 is MARSMS. Log onto www.B4Utele.com for discount credit. To opt out reply stop. Customer care call 08717168528 +ham Spoke with uncle john today. He strongly feels that you need to sacrifice to keep me here. He's going to call you. When he does, i beg you to just listen. Dont make any promises or make it clear things are not easy. And i need you to please let us work things out. As long as i keep expecting help, my creativity will be stifled so pls just keep him happy, no promises on your part. +ham If he started searching he will get job in few days.he have great potential and talent. +ham Carlos took a while (again), we leave in a minute +ham Well done and ! luv ya all +ham Then why you came to hostel. +ham K still are you loving me. +ham But i juz remembered i gotta bathe my dog today.. +ham After the drug she will be able to eat. +ham Alright took the morphine. Back in yo. +ham You see the requirements please +ham You stayin out of trouble stranger!!saw Dave the other day he’s sorted now!still with me bloke when u gona get a girl MR!ur mum still Thinks we will get 2GETHA! +spam FreeMsg: Hey - I'm Buffy. 25 and love to satisfy men. Home alone feeling randy. Reply 2 C my PIX! QlynnBV Help08700621170150p a msg Send stop to stop txts +spam Sunshine Hols. To claim ur med holiday send a stamped self address envelope to Drinks on Us UK, PO Box 113, Bray, Wicklow, Eire. Quiz Starts Saturday! Unsub Stop +ham So can collect ur laptop? +ham Ok. Can be later showing around 8-8:30 if you want + cld have drink before. Wld prefer not to spend money on nosh if you don't mind, as doing that nxt wk. +ham I will once i get home +ham Waaaat?? Lololo ok next time then! +ham The table's occupied, I'm waiting by the tree +ham I surely dont forgot to come:)i will always be in touch in with you:-) +ham Hi kindly give us back our documents which we submitted for loan from STAPATI +ham I dont have i shall buy one dear +ham Oh god i am happy to see your message after 3 days +ham What year. And how many miles. +ham Hey cutie. How goes it? Here in WALES its kinda ok. There is like hills and shit but i still avent killed myself. +ham Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish. As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there. She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife, My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...! +ham I think you should go the honesty road. Call the bank tomorrow. Its the tough decisions that make us great people. +spam FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 87077 Get txting and tell ur mates. zed POBox 36504 W45WQ norm150p/tone 16+ +ham No. Its not specialisation. Can work but its slave labor. Will look for it this month sha cos no shakara 4 beggar. +ham Is she replying. Has boye changed his phone number +ham 1) Go to write msg 2) Put on Dictionary mode 3)Cover the screen with hand, 4)Press <#> . 5)Gently remove Ur hand.. Its interesting..:) +ham hi my darlin im on my way to London and we have just been smashed into by another driver! and have a big dent! im really missing u what have u been up to? xxx +ham Nothing really, just making sure everybody's up to speed +ham I'm not coming home 4 dinner. +ham Thank you. And by the way, I just lost. +ham Yes.he have good crickiting mind +ham Thx. All will be well in a few months +spam Shop till u Drop, IS IT YOU, either 10K, 5K, £500 Cash or £100 Travel voucher, Call now, 09064011000. NTT PO Box CR01327BT fixedline Cost 150ppm mobile vary +ham "CAN I PLEASE COME UP NOW IMIN TOWN.DONTMATTER IF URGOIN OUTL8R,JUST REALLYNEED 2DOCD.PLEASE DONTPLEASE DONTIGNORE MYCALLS,U NO THECD ISV.IMPORTANT TOME 4 2MORO" +ham I wont. So wat's wit the guys +ham Yavnt tried yet and never played original either +ham Hiya, had a good day? Have you spoken to since the weekend? +ham See? I thought it all through +ham I'm at work. Please call +ham get ready to moan and scream :) +ham Oh k :)why you got job then whats up? +ham I don,t think so. You don't need to be going out that late on a school night. ESPECIALLY when the one class you have is the one you missed last wednesday and probably failed a test in on friday +ham And popping <#> ibuprofens was no help. +ham Babe ! How goes that day ? What are you doing ? Where are you ? I sip my cappuccino and think of you, my love ... I send a kiss to you from across the sea +ham Ok. +ham PS U no ur a grown up now right? +ham Chinatown got porridge, claypot rice, yam cake, fishhead beehoon... Either we eat cheap den go cafe n tok or go nydc or somethin... +ham I know a few people I can hit up and fuck to the yes +ham Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng +ham So is there anything specific I should be doing with regards to jaklin or what because idk what the fuck +ham Oh god. I'm gonna Google nearby cliffs now. +spam FREE camera phones with linerental from 4.49/month with 750 cross ntwk mins. 1/2 price txt bundle deals also avble. Call 08001950382 or call2optout/J MF +ham Yup i shd haf ard 10 pages if i add figures... Ü all got how many pages? +ham Ooh, 4got, i'm gonna start belly dancing in moseley weds 6.30 if u want 2 join me, they have a cafe too. +ham Thankyou so much for the call. I appreciate your care. +ham Congrats ! Treat pending.i am not on mail for 2 days.will mail once thru.Respect mother at home.check mails. +ham I called but no one pick up e phone. I ask both of them already they said ok. +ham Hi my email address has changed now it is +ham V-aluable. A-ffectionate. L-oveable. E-ternal. N-oble. T-ruthful. I-ntimate. N-atural. E-namous. Happy "VALENTINES DAY" in advance +ham Not much, just some textin'. How bout you? +ham Bring it if you got it +ham I'm in a movie. Call me 4 wat? +ham Not sure I have the stomach for it ... +ham Haha... can... But i'm having dinner with my cousin... +ham A boy was late 2 home. His father: "POWER OF FRNDSHIP" +ham (And my man carlos is definitely coming by mu tonight, no excuses) +ham soon you will have the real thing princess! Do i make you wet? :) +ham Raji..pls do me a favour. Pls convey my Birthday wishes to Nimya. Pls. Today is her birthday. +ham Haha, my legs and neck are killing me and my amigos are hoping to end the night with a burn, think I could swing by in like an hour? +spam URGENT! Your mobile No 07xxxxxxxxx won a £2,000 bonus caller prize on 02/06/03! this is the 2nd attempt to reach YOU! call 09066362231 ASAP! BOX97N7QP, 150PPM +ham Usually the body takes care of it buy making sure it doesnt progress. Can we pls continue this talk on saturday. +spam URGENT!! Your 4* Costa Del Sol Holiday or £5000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost£1.50/pm, Max10mins +ham Hmm well, night night +ham Just wanted to say holy shit you guys weren't kidding about this bud +ham Just gettin a bit arty with my collages at the mo, well tryin 2 ne way! Got a roast in a min lovely i shall enjoy that! +ham This is one of the days you have a billion classes, right? +ham Goodmorning, today i am late for 2hrs. Because of back pain. +ham Ok then i'll let him noe later n ask him call u tmr... +ham Prabha..i'm soryda..realy..frm heart i'm sory +ham OK i'm waliking ard now... Do u wan me 2 buy anything go ur house? +ham * Will have two more cartons off u and is very pleased with shelves +ham Nice talking to you! please dont forget my pix :) i want to see all of you... +spam You have WON a guaranteed £1000 cash or a £2000 prize. To claim yr prize call our customer service representative on 08714712379 between 10am-7pm Cost 10p +ham But really quite funny lor wat... Then u shd haf run shorter distance wat... +ham I notice you like looking in the shit mirror youre turning into a right freak +ham Great. I was getting worried about you. Just know that a wonderful and caring person like you will have only the best in life. Know that u r wonderful and God's love is yours. +spam Thanks for your ringtone order, ref number K718. Your mobile will be charged £4.50. Should your tone not arrive please call customer services on 09065069120 +ham I prefer my free days... Tues, wed, fri oso can... Ü ask those workin lor... +ham Alrite jod hows the revision goin? Keris bin doin a smidgin. N e way u wanna cum over after college?xx +ham If you have belive me. Come to my home. +ham Oh k.k..where did you take test? +ham Those were my exact intentions +ham haha but no money leh... Later got to go for tuition... Haha and looking for empty slots for driving lessons +ham Hey... Thk we juz go accordin to wat we discussed yest lor, except no kb on sun... Cos there's nt much lesson to go if we attend kb on sat... +ham K, wen ur free come to my home and also tel vikky i hav sent mail to him also.. Better come evening il be free today aftr 6pm..:-) +ham Nothing just getting msgs by dis name wit different no's.. +ham Good Morning plz call me sir +ham What's your room number again? Wanna make sure I'm knocking on the right door +ham "Si.como no?!listened2the plaid album-quite gd&the new air1 which is hilarious-also bought”braindance”a comp.ofstuff on aphex’s ;abel,u hav2hear it!c u sn xxxx" +ham Pls tell nelson that the bb's are no longer comin. The money i was expecting aint coming +ham Give her something to drink, if she takes it and doesn't vomit then you her temp might drop. If she unmits however let me know. +ham Think you sent the text to the home phone. That cant display texts. If you still want to send it his number is +ham Every day i use to sleep after <#> so only. +ham K I'll call you when I'm close +ham U buy newspapers already? +ham Nope wif my sis lor... Aft bathing my dog then i can bathe... Looks like it's going 2 rain soon. +ham Boo I'm on my way to my moms. She's making tortilla soup. Yummmm +ham No management puzzeles. +ham How did you find out in a way that didn't include all of these details +spam Hi ya babe x u 4goten bout me?' scammers getting smart..Though this is a regular vodafone no, if you respond you get further prem rate msg/subscription. Other nos used also. Beware! +spam Back 2 work 2morro half term over! Can U C me 2nite 4 some sexy passion B4 I have 2 go back? Chat NOW 09099726481 Luv DENA Calls £1/minMobsmoreLKPOBOX177HP51FL +ham will you like to be spoiled? :) +spam Thanks for your ringtone order, ref number R836. Your mobile will be charged £4.50. Should your tone not arrive please call customer services on 09065069154 +ham I am getting threats from your sales executive Shifad as i raised complaint against him. Its an official message. +ham hope things went well at 'doctors' ;) reminds me i still need 2go.did u c d little thing i left in the lounge? +ham Den wat will e schedule b lk on sun? +ham Lol enjoy role playing much? +ham Ok. Me watching tv too. +ham I just lov this line: "Hurt me with the truth, I don't mind,i wil tolerat.bcs ur my someone..... But, Never comfort me with a lie" gud ni8 and sweet dreams +ham Just checked out, heading out to drop off my stuff now +ham Here got lots of hair dresser fr china. +ham Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish. +ham Ill call you evening ill some ideas. +spam SplashMobile: Choose from 1000s of gr8 tones each wk! This is a subscrition service with weekly tones costing 300p. U have one credit - kick back and ENJOY +ham Did you show him and wot did he say or could u not c him 4 dust? +ham It should take about <#> min +spam Not heard from U4 a while. Call 4 rude chat private line 01223585334 to cum. Wan 2C pics of me gettin shagged then text PIX to 8552. 2End send STOP 8552 SAM xxx +ham Ok . . now i am in bus. . If i come soon i will come otherwise tomorrow +ham I cant pick the phone right now. Pls send a message +spam FREE entry into our £250 weekly comp just send the word ENTER to 88877 NOW. 18 T&C www.textcomp.com +ham Finish liao... U? +spam 88066 FROM 88066 LOST 3POUND HELP +ham Haha i think i did too +ham U know we watchin at lido? +ham Life spend with someone for a lifetime may be meaningless but a few moments spent with someone who really love you means more than life itself.. +ham Haha awesome, I've been to 4u a couple times. Who all's coming? +ham Cold. Dont be sad dear +ham Think I could stop by in like an hour or so? My roommate's looking to stock up for a trip +ham Is that on the telly? No its Brdget Jones! +ham Love you aathi..love u lot.. +ham Hello! How r u? Im bored. Inever thought id get bored with the tv but I am. Tell me something exciting has happened there? Anything! =/ +ham Hmm...Bad news...Hype park plaza $700 studio taken...Only left 2 bedrm-$900... +ham Sorry, I'll call later in meeting +ham R ü comin back for dinner? +ham I hav almost reached. Call, i m unable to connect u. +ham Whom you waited for yesterday +ham I reach home safe n sound liao... +ham Velly good, yes please! +ham Hi, wkend ok but journey terrible. Wk not good as have huge back log of marking to do +ham I have had two more letters from . I will copy them for you cos one has a message for you. Speak soon +ham Alex knows a guy who sells mids but he's down in south tampa and I don't think I could set it up before like 8 +ham Dont you have message offer +spam Had your mobile 11mths ? Update for FREE to Oranges latest colour camera mobiles & unlimited weekend calls. Call Mobile Upd8 on freefone 08000839402 or 2StopTx +ham HEY THERE BABE, HOW U DOIN? WOT U UP 2 2NITE LOVE ANNIE X. +ham Remind me how to get there and I shall do so +ham :-( that's not v romantic! +ham Hello. Damn this christmas thing. I think i have decided to keep this mp3 that doesnt work. +spam You have 1 new message. Please call 08718738034. +ham HI DARLIN IM MISSIN U HOPE YOU ARE HAVING A GOOD TIME. WHEN ARE U BACK AND WHAT TIME IF U CAN GIVE ME A CALL AT HOME. JESS XX +spam Hi - this is your Mailbox Messaging SMS alert. You have 4 messages. You have 21 matches. Please call back on 09056242159 to retrieve your messages and matches +ham Draw va?i dont think so:) +ham Dont pick up d call when something important is There to tell. Hrishi +spam Congrats! 1 year special cinema pass for 2 is yours. call 09061209465 now! C Suprman V, Matrix3, StarWars3, etc all 4 FREE! bx420-ip4-5we. 150pm. Dont miss out! +ham Nothin comes to my mind. Ü help me buy hanger lor. Ur laptop not heavy? +ham <#> , that's all? Guess that's easy enough +ham We can make a baby in yo tho +ham Should I tell my friend not to come round til like <#> ish? +ham Friendship poem: Dear O Dear U R Not Near But I Can Hear Dont Get Fear Live With Cheer No More Tear U R Always my Dear. Gud ni8 +ham Still in the area of the restaurant. Ill try to come back soon +ham Aight that'll work, thanks +spam WIN a year supply of CDs 4 a store of ur choice worth £500 & enter our £100 Weekly draw txt MUSIC to 87066 Ts&Cs www.Ldew.com.subs16+1win150ppmx3 +spam Moby Pub Quiz.Win a £100 High Street prize if u know who the new Duchess of Cornwall will be? Txt her first name to 82277.unsub STOP £1.50 008704050406 SP Arrow +ham I have 2 sleeping bags, 1 blanket and paper and phone details. Anything else? +spam You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG/Suite342/2Lands Row/W1JHL 16+ +spam Congratulations! Thanks to a good friend U have WON the £2,000 Xmas prize. 2 claim is easy, just call 08718726971 NOW! Only 10p per minute. BT-national-rate. +spam tddnewsletter@emc1.co.uk (More games from TheDailyDraw) Dear Helen, Dozens of Free Games - with great prizesWith.. +ham So what do you guys do. +ham Also that chat was awesome but don't make it regular unless you can see her in person +ham That's significant but dont worry. +ham That's cause your old. I live to be high. +ham Waqt se pehle or naseeb se zyada kisi ko kuch nahi milta,Zindgi wo nahi he jo hum sochte hai Zindgi wo hai jo ham jeetey hai.......... +ham On the way to office da.. +ham In which place do you want da. +ham This pain couldn't have come at a worse time. +ham Ok... +ham Should I be stalking u? +ham Sorry dude. Dont know how i forgot. Even after Dan reminded me. Sorry. Hope you guys had fun. +ham Ok lor. +ham Apps class varaya elaya. +ham The Xmas story is peace.. The Xmas msg is love.. The Xmas miracle is jesus.. Hav a blessed month ahead & wish U Merry Xmas... +spam URGENT! Your mobile number *************** WON a £2000 Bonus Caller prize on 10/06/03! This is the 2nd attempt to reach you! Call 09066368753 ASAP! Box 97N7QP, 150ppm +ham That day you asked about anand number. Why:-) +ham Am surfing online store. For offers do you want to buy any thing. +ham Long beach lor. Expected... U having dinner now? +ham At home by the way +ham We are both fine. Thanks +ham What happen to her tell the truth +ham Do you like Italian food? +ham Which is weird because I know I had it at one point +ham "Aww you must be nearly dead!Well Jez isComing over toDo some workAnd that whillTake forever!" +ham Tell your friends what you plan to do on Valentines day @ <URL> +ham Alright, see you in a bit +ham Cheers for the message Zogtorius. I’ve been staring at my phone for an age deciding whether to text or not. +ham I will take care of financial problem.i will help:) +ham Tell dear what happen to you. Why you talking to me like an alian +spam Double your mins & txts on Orange or 1/2 price linerental - Motorola and SonyEricsson with B/Tooth FREE-Nokia FREE Call MobileUpd8 on 08000839402 or2optout/HV9D +ham 1) Go to write msg 2) Put on Dictionary mode 3)Cover the screen with hand, 4)Press <#> . 5)Gently remove Ur hand.. Its interesting..:) +ham Okie... +ham Hi this is yijue, can i meet u at 11 tmr? +ham Its posible dnt live in <#> century cm frwd n thnk different +ham But i dint slept in afternoon. +ham That seems unnecessarily affectionate +ham Yar else i'll thk of all sorts of funny things. +ham You will be in the place of that man +spam Download as many ringtones as u like no restrictions, 1000s 2 choose. U can even send 2 yr buddys. Txt Sir to 80082 £3 +ham Thats cool. How was your day? +spam Please CALL 08712402902 immediately as there is an urgent message waiting for you. +ham R we going with the <#> bus? +ham Hello, my love ! How went your day ? Are you alright ? I think of you, my sweet and send a jolt to your heart to remind you ... I LOVE YOU! Can you hear it ? I screamed it across the sea for all the world to hear. Ahmad al Hallaq is loved ! and owned ! *possessive passionate kiss* +ham No..he joined today itself. +ham Okay same with me. Well thanks for the clarification +ham I'll talk to the others and probably just come early tomorrow then +spam Spook up your mob with a Halloween collection of a logo & pic message plus a free eerie tone, txt CARD SPOOK to 8007 zed 08701417012150p per logo/pic +ham Had the money issue weigh me down but thanks to you, I can breathe easier now. I.ll make sure you dont regret it. Thanks. +ham Hi. I'm sorry i missed your call. Can you pls call back. +ham How are you doing? Hope you've settled in for the new school year. Just wishin you a gr8 day +spam Fantasy Football is back on your TV. Go to Sky Gamestar on Sky Active and play £250k Dream Team. Scoring starts on Saturday, so register now!SKY OPT OUT to 88088 +ham Ok then no need to tell me anything i am going to sleep good night +ham Ok try to do week end course in coimbatore. +spam Tone Club: Your subs has now expired 2 re-sub reply MONOC 4 monos or POLYC 4 polys 1 weekly @ 150p per week Txt STOP 2 stop This msg free Stream 0871212025016 +ham V nice! Off 2 sheffield tom 2 air my opinions on categories 2 b used 2 measure ethnicity in next census. Busy transcribing. :-) +ham If you r @ home then come down within 5 min +ham A Boy loved a gal. He propsd bt she didnt mind. He gv lv lttrs, Bt her frnds threw thm. Again d boy decided 2 aproach d gal , dt time a truck was speeding towards d gal. Wn it was about 2 hit d girl,d boy ran like hell n saved her. She asked 'hw cn u run so fast?' D boy replied "Boost is d secret of my energy" n instantly d girl shouted "our energy" n Thy lived happily 2gthr drinking boost evrydy Moral of d story:- I hv free msgs:D;): gud ni8 +ham That day ü say ü cut ur hair at paragon, is it called hair sense? Do ü noe how much is a hair cut? +ham Hmm, too many of them unfortunately... Pics obviously arent hot cakes. Its kinda fun tho +ham Watching tv lor... Y she so funny we bluff her 4 wat. Izzit because she thk it's impossible between us? +spam XMAS Prize draws! We are trying to contact U. Todays draw shows that you have won a £2000 prize GUARANTEED. Call 09058094565 from land line. Valid 12hrs only +ham Dunno lei he neva say... +ham Thanx 4 2day! U r a goodmate I THINK UR RITE SARY! ASUSUAL!1 U CHEERED ME UP! LOVE U FRANYxxxxx +ham I'm on my way home. Went to change batt 4 my watch then go shop a bit lor. +spam YES! The only place in town to meet exciting adult singles is now in the UK. Txt CHAT to 86688 now! 150p/Msg. +ham Hi, Mobile no. <#> has added you in their contact list on www.fullonsms.com It s a great place to send free sms to people For more visit fullonsms.com +ham Good evening Sir, hope you are having a nice day. I wanted to bring it to your notice that I have been late in paying rent for the past few months and have had to pay a $ <#> charge. I felt it would be inconsiderate of me to nag about something you give at great cost to yourself and that's why i didnt speak up. I however am in a recession and wont be able to pay the charge this month hence my askin well ahead of month's end. Can you please help. Thank you for everything. +ham If i let you do this, i want you in the house by 8am. +ham Best line said in Love: . "I will wait till the day I can forget u Or The day u realize that u cannot forget me."... Gn +ham I will reach before ten morning +ham Your pussy is perfect! +ham Sorry, I'll call later +spam Someone has contacted our dating service and entered your phone becausethey fancy you! To find out who it is call from a landline 09058098002. PoBox1, W14RG 150p +ham No message..no responce..what happend? +ham Also where's the piece +ham wiskey Brandy Rum Gin Beer Vodka Scotch Shampain Wine "KUDI"yarasu dhina vaazhthukkal. .. +ham Boo. How's things? I'm back at home and a little bored already :-( +ham First has she gained more than <#> kg since she took in. Second has she done the blood sugar tests. If she has and its ok and her blood pressure is within normal limits then no worries +ham PICK UR FONE UP NOW U DUMB? +ham Thanks da thangam, i feel very very happy dear. I also miss you da. +ham Okey doke. I'm at home, but not dressed cos laying around ill! Speak to you later bout times and stuff. +ham I don't run away frm u... I walk slowly & it kills me that u don't care enough to stop me... +ham Babe, I'm back ... Come back to me ... +ham Well you told others you'd marry them... +ham Neshanth..tel me who r u? +ham YO YO YO BYATCH WHASSUP? +ham Oh... Kay... On sat right? +ham Hi! This is Roger from CL. How are you? +spam Babe: U want me dont u baby! Im nasty and have a thing 4 filthyguys. Fancy a rude time with a sexy bitch. How about we go slo n hard! Txt XXX SLO(4msgs) +ham Oh oh... Wasted... Den muz chiong on sat n sun liao... +ham Jesus christ bitch I'm trying to give you drugs answer your fucking phone +ham Please give it 2 or i will pick it up on Tuesday evening about 8 if that is ok. +ham I'm meeting Darren... +ham One of best dialogue in cute reltnship..!! "Wen i Die, Dont Come Near My Body..!! Bcoz My Hands May Not Come 2 Wipe Ur Tears Off That Time..!Gud ni8 +ham Solve d Case : A Man Was Found Murdered On <DECIMAL> . <#> AfterNoon. 1,His wife called Police. 2,Police questioned everyone. 3,Wife: Sir,I was sleeping, when the murder took place. 4.Cook: I was cooking. 5.Gardener: I was picking vegetables. 6.House-Maid: I went 2 d post office. 7.Children: We went 2 play. 8.Neighbour: We went 2 a marriage. Police arrested d murderer Immediately. Who's It? Reply With Reason, If U r Brilliant. +ham Dear where you will be when i reach there +ham Aww that's the first time u said u missed me without asking if I missed u first. You DO love me! :) +ham Ok... Thanx... Gd nite 2 ü too... +ham Come to me right now, Ahmad +spam I don't know u and u don't know me. Send CHAT to 86688 now and let's find each other! Only 150p/Msg rcvd. HG/Suite342/2Lands/Row/W1J6HL LDN. 18 years or over. +ham Lol please do. Actually send a pic of yourself right now. I wanna see. Pose with a comb and hair dryer or something. +ham O was not into fps then. +ham Huh means computational science... Y they like dat one push here n there... +ham Could you not read me, my Love ? I answered you +ham Oh... Lk tt den we take e one tt ends at cine lor... Dun wan yogasana oso can... +ham Madam,regret disturbance.might receive a reference check from DLF Premarica.kindly be informed.Rgds,Rakhesh,Kerala. +spam SMS SERVICES For your inclusive text credits pls gotto www.comuk.net login 3qxj9 unsubscribe with STOP no extra charge help 08702840625 comuk.220cm2 9AE +ham Oic... Then better quickly go bathe n settle down... +ham Err... Cud do. I'm going to at 8pm. I haven't got a way to contact him until then. +ham A bloo bloo bloo I'll miss the first bowl +ham Lmao but its so fun... +ham Oh k k:)but he is not a big hitter.anyway good +ham Hey!!! I almost forgot ... Happy B-day babe ! I love ya!! +spam Valentines Day Special! Win over £1000 in our quiz and take your partner on the trip of a lifetime! Send GO to 83600 now. 150p/msg rcvd. CustCare:08718720201 +ham Do you think i can move <#> in a week +ham She.s find. I sent you an offline message to know how anjola's now. +spam Guess who am I?This is the first time I created a web page WWW.ASJESUS.COM read all I wrote. I'm waiting for your opinions. I want to be your friend 1/1 +ham How was txting and driving +ham That's good. Lets thank God. Please complete the drug. Have lots of water. And have a beautiful day. +ham Really dun bluff me leh... U sleep early too. Nite... +ham Indians r poor but India is not a poor country. Says one of the swiss bank directors. He says that " <#> lac crore" of Indian money is deposited in swiss banks which can be used for 'taxless' budget for <#> yrs. Can give <#> crore jobs to all Indians. From any village to Delhi 4 lane roads. Forever free power suply to more than <#> social projects. Every citizen can get monthly <#> /- for <#> yrs. No need of World Bank & IMF loan. Think how our money is blocked by rich politicians. We have full rights against corrupt politicians. Itna forward karo ki pura INDIA padhe.g.m." +ham Uncle boye. I need movies oh. Guide me. Plus you know torrents are not particularly legal here. And the system is slowing down. What should i do. Have a gr8 day. Plus have you started cos i dont meet you online. How was the honey moon. +ham Oh ya ya. I remember da. . +ham Btw regarding that we should really try to see if anyone else can be our 4th guy before we commit to a random dude +spam For ur chance to win £250 cash every wk TXT: PLAY to 83370. T's&C's www.music-trivia.net custcare 08715705022, 1x150p/wk. +ham I not busy juz dun wan 2 go so early.. Hee.. +ham Rightio. 11.48 it is then. Well arent we all up bright and early this morning. +ham Great. I'm in church now, will holla when i get out +ham Back in brum! Thanks for putting us up and keeping us all and happy. See you soon +ham I donno if they are scorable +ham <#> great loxahatchee xmas tree burning update: you can totally see stars here +ham Yes but i dont care! I need you bad, princess! +ham The guy (kadeem) hasn't been selling since the break, I know one other guy but he's paranoid as fuck and doesn't like selling without me there and I can't be up there til late tonight +ham Sorry, I'll call later +ham Tmr then ü brin lar... Aiya later i come n c lar... Mayb ü neva set properly ü got da help sheet wif ü... +ham Do u knw dis no. <#> ? +ham Then she dun believe wat? +ham K..give back my thanks. +ham I know complain num only..bettr directly go to bsnl offc nd apply for it.. +ham Okay. I've seen it. So i should pick it on friday? +ham How much she payed. Suganya. +ham Left dessert. U wan me 2 go suntec look 4 u? +ham Abeg, make profit. But its a start. Are you using it to get sponsors for the next event? +ham Onum ela pa. Normal than. +ham K.k..how is your sister kids? +ham Cool, I'll text you when I'm on the way +ham Nope. Meanwhile she talk say make i greet you. +ham i cant talk to you now.i will call when i can.dont keep calling. +ham Anything lar... +ham Rose needs water, season needs change, poet needs imagination..My phone needs ur sms and i need ur lovely frndship forever.... +ham Good afternoon, babe. How goes that day ? Any job prospects yet ? I miss you, my love ... *sighs* ... :-( +ham They will pick up and drop in car.so no problem.. +ham S.i think he is waste for rr.. +ham He is world famamus.... +ham Is there coming friday is leave for pongal?do you get any news from your work place. +ham Lol well don't do it without me. We could have a big sale together. +ham * Am on my way +ham Eat at old airport road... But now 630 oredi... Got a lot of pple... +ham sry can't talk on phone, with parents +spam Final Chance! Claim ur £150 worth of discount vouchers today! Text YES to 85023 now! SavaMob, member offers mobile! T Cs SavaMob POBOX84, M263UZ. £3.00 Subs 16 +ham Ok lor wat time ü finish? +ham Princess, i like to make love <#> times per night. Hope thats not a problem! +ham Mm i am on the way to railway +ham i dnt wnt to tlk wid u +ham I'm done. I'm sorry. I hope your next space gives you everything you want. Remember all the furniture is yours. If i'm not around when you move it, just lock all the locks and leave the key with jenne. +ham Not yet. Just i'd like to keep in touch and it will be the easiest way to do that from barcelona. By the way how ru and how is the house? +spam Sppok up ur mob with a Halloween collection of nokia logo&pic message plus a FREE eerie tone, txt CARD SPOOK to 8007 +spam Urgent! call 09066612661 from landline. Your complementary 4* Tenerife Holiday or £10,000 cash await collection SAE T&Cs PO Box 3 WA14 2PX 150ppm 18+ Sender: Hol Offer +ham K.:)do it at evening da:)urgent:) +ham Pansy! You've been living in a jungle for two years! Its my driving you should be more worried about! +ham Mm have some kanji dont eat anything heavy ok +ham Only if you promise your getting out as SOON as you can. And you'll text me in the morning to let me know you made it in ok. +ham Lol that's different. I don't go trying to find every real life photo you ever took. +ham I dont thnk its a wrong calling between us +ham K ill drink.pa then what doing. I need srs model pls send it to my mail id pa. +ham Aiyah e rain like quite big leh. If drizzling i can at least run home. +ham I have 2 docs appointments next week.:/ I'm tired of them shoving stuff up me. Ugh why couldn't I have had a normal body? +ham Dun b sad.. It's over.. Dun thk abt it already. Concentrate on ur other papers k. +ham Greetings me, ! Consider yourself excused. +ham No drama Pls.i have had enough from you and family while i am struggling in the hot sun in a strange place.No reason why there should be an ego of not going 'IF NOT INVITED' when actually its necessity to go.wait for very serious reppurcussions. +ham they released another Italian one today and it has a cosign option +ham You at mu? You should try to figure out how much money everyone has for gas and alcohol, jay and I are trying to figure out our weed budget +spam WINNER! As a valued network customer you hvae been selected to receive a £900 reward! To collect call 09061701444. Valid 24 hours only. ACL03530150PM +ham HCL chennai requires FRESHERS for voice process.Excellent english needed.Salary upto <#> .Call Ms.Suman <#> for Telephonic interview -via Indyarocks.com +ham Dai what this da.. Can i send my resume to this id. +ham I know where the <#> is, I'll be there around 5 +ham Yup i've finished c ü there... +ham Remember to ask alex about his pizza +ham No da..today also i forgot.. +ham Ola would get back to you maybe not today but I ve told him you can be his direct link in the US in getting cars he bids for online, you arrange shipping and you get a cut. Or U????? For a partnership where U????? Invest money for shipping and he takes care of the rest!U??Wud b self reliant soon dnt worry +ham Fwiw the reason I'm only around when it's time to smoke is that because of gas I can only afford to be around when someone tells me to be and that apparently only happens when somebody wants to light up +ham Hello, my boytoy! I made it home and my constant thought is of you, my love. I hope your having a nice visit but I can't wait till you come home to me ...*kiss* +ham Congrats kano..whr s the treat maga? +ham Who u talking about? +ham Yup... +ham Ok... +ham U wake up already? Wat u doing? U picking us up later rite? I'm taking sq825, reaching ard 7 smth 8 like dat. U can check e arrival time. C ya soon... +ham Yunny i'm walking in citylink now ü faster come down... Me very hungry... +ham Er yep sure. Props? +ham Hiya , have u been paying money into my account? If so, thanks. Got a pleasant surprise when i checked my balance -u c, i don't get statements 4 that acc +spam U have won a nokia 6230 plus a free digital camera. This is what u get when u win our FREE auction. To take part send NOKIA to 83383 now. POBOX114/14TCR/W1 16 +ham Ok ill send you with in <DECIMAL> ok. +ham Bognor it is! Should be splendid at this time of year. +ham Yes.i'm in office da:) +ham Sorry, I'll call later +ham Joy's father is John. Then John is the NAME of Joy's father. Mandan +ham Ok. I only ask abt e movie. U wan ktv oso? +ham Misplaced your number and was sending texts to your old number. Wondering why i've not heard from you this year. All the best in your mcat. Got this number from my atlanta friends +ham Sorry, I'll call later +ham Dunno lei... I might b eatin wif my frens... If ü wan to eat then i wait 4 ü lar +ham Sorry, I'll call later +spam FREE entry into our £250 weekly comp just send the word WIN to 80086 NOW. 18 T&C www.txttowin.co.uk +ham Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it... +ham Do u noe how 2 send files between 2 computers? +ham Mmmmm ... I loved waking to your words this morning ! I miss you too, my Love. I hope your day goes well and you are happy. I wait for us to be together again +ham jay says he'll put in <#> +ham Can you just come in for a sec? There's somebody here I want you to see +ham So the sun is anti sleep medicine. +ham What's happening with you. Have you gotten a job and have you begun registration for permanent residency +ham Yup ok... +ham Glad it went well :) come over at 11 then we'll have plenty of time before claire goes to work. +ham Ok enjoy . R u there in home. +ham Can you pls pls send me a mail on all you know about relatives coming to deliver here? All you know about costs, risks, benefits and anything else. Thanks. +ham You do what all you like +ham That's y we haf to combine n c how lor... +ham The monthly amount is not that terrible and you will not pay anything till 6months after finishing school. +ham Hmmm:)how many players selected? +ham They said if its gonna snow, it will start around 8 or 9 pm tonite! They are predicting an inch of accumulation. +ham I dont. Can you send it to me. Plus how's mode. +ham Aiyo please ü got time meh. +ham Package all your programs well +ham She is our sister.. She belongs 2 our family.. She is d hope of tomorrow.. Pray 4 her,who was fated 4 d Shoranur train incident. Lets hold our hands together & fuelled by love & concern prior 2 her grief & pain. Pls join in dis chain & pass it. STOP VIOLENCE AGAINST WOMEN. +ham So are you guys asking that i get that slippers again or its gone with last year +ham Company is very good.environment is terrific and food is really nice:) +spam Text82228>> Get more ringtones, logos and games from www.txt82228.com. Questions: info@txt82228.co.uk +ham Honestly i've just made a lovely cup of tea and promptly dropped my keys in it and then burnt my fingers getting them out! +ham Yup but not studying surfing lor. I'm in e lazy mode today. +ham Please sen :)my kind advice :-)please come here and try:-) +ham I'm done. C ü there. +ham Oh fine, I'll be by tonight +ham Ü give me some time to walk there. +ham I'll reach in ard 20 mins ok... +spam FreeMSG You have been awarded a FREE mini DIGITAL CAMERA, just reply SNAP to collect your prize! (quizclub Opt out? Stop 80122300p/wk SP:RWM Ph:08704050406) +ham Fuck babe ... What happened to you ? How come you never came back? +spam This message is brought to you by GMW Ltd. and is not connected to the +ham Some friends want me to drive em someplace, probably take a while +ham I also thk too fast... Xy suggest one not me. U dun wan it's ok. Going 2 rain leh where got gd. +ham Are you still getting the goods. +ham And maybe some pressies +ham Yeah I am, so I'll leave maybe 7ish? +ham K..k..i'm also fine:)when will you complete the course? +ham Under the sea, there lays a rock. In the rock, there is an envelope. In the envelope, there is a paper. On the paper, there are 3 words... ' +ham I told her I had a Dr appt next week. She thinks I'm gonna die. I told her its just a check. Nothing to be worried about. But she didn't listen. +ham You in your room? I need a few +ham I dont want to hear anything +ham Hey. For me there is no leave on friday. Wait i will ask my superior and tell you.. +ham Ultimately tor motive tui achieve korli. +ham From 5 to 2 only my work timing. +ham … and don‘t worry we‘ll have finished by march … ish! +ham The house is on the water with a dock, a boat rolled up with a newscaster who dabbles in jazz flute behind the wheel +spam Congrats 2 mobile 3G Videophones R yours. call 09063458130 now! videochat wid ur mates, play java games, Dload polypH music, noline rentl. bx420. ip4. 5we. 150p +spam Your next amazing xxx PICSFREE1 video will be sent to you enjoy! If one vid is not enough for 2day text back the keyword PICSFREE1 to get the next video. +ham Now thats going to ruin your thesis! +ham In sch but neva mind u eat 1st lor.. +ham Hey whats up? U sleeping all morning? +ham Erm. I thought the contract ran out the4th of october. +ham I dunno until when... Lets go learn pilates... +spam U are subscribed to the best Mobile Content Service in the UK for £3 per ten days until you send STOP to 83435. Helpline 08706091795. +ham Yup i'm elaborating on the safety aspects and some other issues.. +spam 3 FREE TAROT TEXTS! Find out about your love life now! TRY 3 FOR FREE! Text CHANCE to 85555 16 only! After 3 Free, Msgs £1.50 each +ham Goodmorning, today i am late for 1hr. +ham Hi happy birthday. Hi hi hi hi hi hi hi +ham I will be outside office take all from there +ham If you don't respond imma assume you're still asleep and imma start calling n shit +ham Aight, see you in a bit +ham My superior telling that friday is leave for all other department except ours:)so it will be leave for you:)any way call waheed fathima hr and conform it:) +spam Join the UK's horniest Dogging service and u can have sex 2nite!. Just sign up and follow the instructions. Txt ENTRY to 69888 now! Nyt.EC2A.3LP.msg@150p +ham Lol I have to take it. member how I said my aunt flow didn't visit for 6 months? It's cause I developed ovarian cysts. Bc is the only way to shrink them. +ham Still work going on:)it is very small house. +ham My friend just got here and says he's upping his order by a few grams (he's got $ <#> ), when can you get here? +ham Tmr timin still da same wat cos i got lesson until 6... +ham That‘s the thing with apes, u can fight to the death to keep something, but the minute they have it when u let go, thats it! +spam Sunshine Quiz Wkly Q! Win a top Sony DVD player if u know which country Liverpool played in mid week? Txt ansr to 82277. £1.50 SP:Tyrone +ham No i'm not gonna be able to. || too late notice. || i'll be home in a few weeks anyway. || what are the plans +ham Got fujitsu, ibm, hp, toshiba... Got a lot of model how to say... +ham Okie... Thanx... +ham Gosh that , what a pain. Spose I better come then. +ham As usual..iam fine, happy & doing well..:) +ham Okie +ham So when you gonna get rimac access +ham "Im at arestaurant eating squid! i will be out about 10:30 wanna dosomething or is that to late?" +ham You call times job today ok umma and ask them to speed up +ham "HELLO U.CALL WEN U FINISH WRK.I FANCY MEETIN UP WIV U ALL TONITE AS I NEED A BREAK FROM DABOOKS. DID 4 HRS LAST NITE+2 TODAY OF WRK!" +ham R U &SAM P IN EACHOTHER. IF WE MEET WE CAN GO 2 MY HOUSE +ham :-) yeah! Lol. Luckily i didn't have a starring role like you! +ham Hello madam how are you ? +ham Awesome, text me when you're restocked +ham As usual..iam fine, happy & doing well..:) +spam Knock Knock Txt whose there to 80082 to enter r weekly draw 4 a £250 gift voucher 4 a store of yr choice. T&Cs www.tkls.com age16 to stoptxtstop£1.50/week +ham Yes. It's all innocent fun. O:-) +ham Thanks for sending this mental ability question.. +ham Sir, hope your day is going smoothly. i really hoped i wont have to bother you about this. I have some bills that i can't settle this month. I am out of all extra cash. I know this is a challenging time for you also but i have to let you know. +ham 2marrow only. Wed at <#> to 2 aha. +ham I went to ur hon lab but no one is there. +ham I cant pick the phone right now. Pls send a message +ham Hey pple...$700 or $900 for 5 nights...Excellent location wif breakfast hamper!!! +spam Hi - this is your Mailbox Messaging SMS alert. You have 40 matches. Please call back on 09056242159 to retrieve your messages and matches cc100p/min +ham How come? +ham Lol! Nah wasn't too bad thanks. Its good to b home but its been quite a reality check. Hows ur day been? Did u do anything with website? +ham Ok lor... +ham I'm coming home 4 dinner. +ham S da..al r above <#> +spam FREE RING TONE just text "POLYS" to 87131. Then every week get a new tone. 0870737910216yrs only £1.50/wk. +ham Unni thank you dear for the recharge..Rakhesh +ham I know I'm lacking on most of this particular dramastorm's details but for the most part I'm not worried about that +ham Haha... They cant what... At the most tmr forfeit... haha so how? +ham Hey there! Glad u r better now. I hear u treated urself to a digi cam, is it good? We r off at 9pm. Have a fab new year, c u in coupla wks! +ham No way I'm going back there! +spam URGENT! Your mobile No 077xxx WON a £2,000 Bonus Caller Prize on 02/06/03! This is the 2nd attempt to reach YOU! Call 09066362206 ASAP! BOX97N7QP, 150ppm +ham I WILL CAL YOU SIR. In meeting +ham That's what I love to hear :V see you sundayish, then +ham Sorry da thangam, very very sorry i am held up with prasad. +ham Tiwary to rcb.battle between bang and kochi. +ham Thank god they are in bed! +ham No I don't have cancer. Moms making a big deal out of a regular checkup aka pap smear +ham Am in gobi arts college +ham Why she wants to talk to me +ham Pandy joined 4w technologies today.he got job.. +spam You are guaranteed the latest Nokia Phone, a 40GB iPod MP3 player or a £500 prize! Txt word: COLLECT to No: 83355! IBHltd LdnW15H 150p/Mtmsgrcvd18 +ham They can try! They can get lost, in fact. Tee hee +ham Hi! You just spoke to MANEESHA V. We'd like to know if you were satisfied with the experience. Reply Toll Free with Yes or No. +ham My friends use to call the same. +ham Sorry, I'll call later +ham Em, its olowoyey@ usc.edu have a great time in argentina. Not sad about secretary, everything is a blessing +ham It,,s a taxt massage....tie-pos argh ok! Lool! +ham Hi, can i please get a <#> dollar loan from you. I.ll pay you back by mid february. Pls. +ham You might want to pull out more just in case and just plan on not spending it if you can, I don't have much confidence in derek and taylor's money management +ham Do you like shaking your booty on the dance floor? +ham Text me when you get off, don't call, my phones having problems +ham No need for the drug anymore. +ham Sorry da:)i was thought of calling you lot of times:)lil busy.i will call you at noon.. +ham Its sarcasm.. .nt scarcasim +ham Great! I have to run now so ttyl! +ham Feel like trying kadeem again? :V +ham Dai <#> naal eruku. +ham Not yet chikku..wat abt u? +ham Ok... +ham Want to finally have lunch today? +ham Do you know when dad will be back? +spam Hello darling how are you today? I would love to have a chat, why dont you tell me what you look like and what you are in to sexy? +spam 8007 FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W4 5WQ norm 150p/tone 16+ +ham He remains a bro amongst bros +ham R u meeting da ge at nite tmr? +ham * Was a nice day and, impressively, i was sensible, went home early and now feel fine. Or am i just boring?! When's yours, i can't remember. +ham Why de. You looking good only:-).. +spam Wanna get laid 2nite? Want real Dogging locations sent direct to ur mobile? Join the UK's largest Dogging Network. Txt PARK to 69696 now! Nyt. ec2a. 3lp £1.50/msg +spam we tried to contact you re your response to our offer of a new nokia fone and camcorder hit reply or call 08000930705 for delivery +ham Yes. They replied my mail. I'm going to the management office later. Plus will in to bank later also.or on wednesday. +ham That's cool, I'll come by like <#> ish +ham Super msg da:)nalla timing. +ham Good afternoon, my boytoy ... How are you feeling today ? Better I hope? Are you being my good boy? Are you my obedient, slave? Do you please your Queen? +ham I am 6 ft. We will be a good combination! +ham I'm sick !! I'm needy !! I want you !! *pouts* *stomps feet* Where are you ?! *pouts* *stomps feet* I want my slave !! I want him now !! +ham * Am on a train back from northampton so i'm afraid not! +ham Where in abj are you serving. Are you staying with dad or alone. +ham Was playng 9 doors game and gt racing on phone lol +spam New Tones This week include: 1)McFly-All Ab.., 2) Sara Jorge-Shock.. 3) Will Smith-Switch.. To order follow instructions on next message +ham Solve d Case : A Man Was Found Murdered On <DECIMAL> . <#> AfterNoon. 1,His wife called Police. 2,Police questioned everyone. 3,Wife: Sir,I was sleeping, when the murder took place. 4.Cook: I was cooking. 5.Gardener: I was picking vegetables. 6.House-Maid: I went 2 d post office. 7.Children: We went 2 play. 8.Neighbour: We went 2 a marriage. Police arrested d murderer Immediately. Who's It? Reply With Reason, If U r Brilliant. +ham I'm on da bus going home... +ham I got a call from a landline number. . . I am asked to come to anna nagar . . . I will go in the afternoon +ham I'm okay. Chasing the dream. What's good. What are you doing next. +ham Yupz... I've oredi booked slots 4 my weekends liao... +spam URGENT! We are trying to contact U. Todays draw shows that you have won a £800 prize GUARANTEED. Call 09050003091 from land line. Claim C52. Valid 12hrs only +ham There r many model..sony ericson also der.. <#> ..it luks good bt i forgot modl no +ham Okie +ham Yes I know the cheesy songs from frosty the snowman :) +ham Ya ok, vikky vl c witin <#> mins and il reply u.. +spam sports fans - get the latest sports news str* 2 ur mobile 1 wk FREE PLUS a FREE TONE Txt SPORT ON to 8007 www.getzed.co.uk 0870141701216+ norm 4txt/120p +ham Hey tmr meet at bugis 930 ? +spam Urgent Urgent! We have 800 FREE flights to Europe to give away, call B4 10th Sept & take a friend 4 FREE. Call now to claim on 09050000555. BA128NNFWFLY150ppm +ham All these nice new shirts and the only thing I can wear them to is nudist themed ;_; you in mu? +ham Hey sexy buns! What of that day? No word from you this morning on YM ... :-( ... I think of you +ham And whenever you and i see we can still hook up too. +ham Nope but i'm going home now then go pump petrol lor... Like going 2 rain soon... +ham Can you use foreign stamps for whatever you send them off for? +spam FROM 88066 LOST £12 HELP +ham Oh baby of the house. How come you dont have any new pictures on facebook +ham Feb <#> is "I LOVE U" day. Send dis to all ur "VALUED FRNDS" evn me. If 3 comes back u'll gt married d person u luv! If u ignore dis u will lose ur luv 4 Evr +ham Hiya, sorry didn't hav signal. I haven't seen or heard from and neither has, which is unusual in itself! I'll put on the case and get him to sort it out! Hugs and snogs. +ham Omw back to tampa from west palm, you hear what happened? +ham Yup no more already... Thanx 4 printing n handing it up. +spam FreeMsg: Fancy a flirt? Reply DATE now & join the UKs fastest growing mobile dating service. Msgs rcvd just 25p to optout txt stop to 83021. Reply DATE now! +ham What i mean is do they come chase you out when its over or is it stated you can watch as many movies as you want. +ham S now only i took tablets . Reaction morning only. +spam Great NEW Offer - DOUBLE Mins & DOUBLE Txt on best Orange tariffs AND get latest camera phones 4 FREE! Call MobileUpd8 free on 08000839402 NOW! or 2stoptxt T&Cs +ham Nah, I'm a perpetual DD +ham Sorry de i went to shop. +spam Hope you enjoyed your new content. text stop to 61610 to unsubscribe. help:08712400602450p Provided by tones2you.co.uk +ham Wen ur lovable bcums angry wid u, dnt take it seriously.. Coz being angry is d most childish n true way of showing deep affection, care n luv!.. kettoda manda... Have nice day da. +ham Hey you still want to go for yogasana? Coz if we end at cine then can go bathe and hav the steam bath +ham Nope i'm not drivin... I neva develop da photos lei... +ham I am thinking of going down to reg for pract lessons.. Flung my advance.. Haha wat time u going? +ham Cool. I am <#> inches long. hope you like them big! +ham House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office..understand? +ham Okie.. Thanx.. +spam 18 days to Euro2004 kickoff! U will be kept informed of all the latest news and results daily. Unsubscribe send GET EURO STOP to 83222. +ham Go where n buy? Juz buy when we get there lar. +ham Ok lor... +ham I'm working technical support :)voice process. +ham It's justbeen overa week since we broke up and already our brains are going to mush! +ham Tunde, how are you doing. This is just wishing you a great day. Abiola. +ham Nope... C ü then... +ham No. But we'll do medical missions to nigeria +ham No i am not having not any movies in my laptop +ham Whatsup there. Dont u want to sleep +spam Urgent Please call 09066612661 from landline. £5000 cash or a luxury 4* Canary Islands Holiday await collection. T&Cs SAE award. 20M12AQ. 150ppm. 16+ “ +spam Urgent! Please call 09066612661 from your landline, your complimentary 4* Lux Costa Del Sol holiday or £1000 CASH await collection. ppm 150 SAE T&Cs James 28, EH74RR +ham I havent lei.. Next mon can? +ham Mm feeling sleepy. today itself i shall get that dear +ham How dare you stupid. I wont tell anything to you. Hear after i wont talk to you:-. +ham Do ü noe if ben is going? +ham Can you do a mag meeting this avo at some point? +ham I meant middle left or right? +ham Really? I crashed out cuddled on my sofa. +ham Hi Chachi tried calling u now unable to reach u .. Pl give me a missed cal once u c tiz msg Kanagu +ham I sent you the prices and do you mean the <#> g, +ham Are you this much buzy +ham Nothing. Can... +spam I don't know u and u don't know me. Send CHAT to 86688 now and let's find each other! Only 150p/Msg rcvd. HG/Suite342/2Lands/Row/W1J6HL LDN. 18 years or over. +ham No * am working on the ringing u thing but have whole houseful of screaming brats so * am pulling my hair out! Loving u +ham But my family not responding for anything. Now am in room not went to home for diwali but no one called me and why not coming. It makes me feel like died. +ham Tick, tick, tick ... Babe +ham R ü going 4 today's meeting? +ham K da:)how many page you want? +ham Ya had just now.onion roast. +ham Send his number and give reply tomorrow morning for why you said that to him like that ok +ham You said not now. No problem. When you can. Let me know. +ham Ok but tell me half an hr b4 u come i need 2 prepare. +ham Play w computer? Aiyah i tok 2 u lor? +ham Sat right? Okay thanks... +ham Derp. Which is worse, a dude who always wants to party or a dude who files a complaint about the three drug abusers he lives with +ham Ok Chinese food on its way. When I get fat you're paying for my lipo. +ham We r outside already. +ham Have a good trip. Watch out for . Remember when you get back we must decide about easter. +ham Yo we are watching a movie on netflix +ham What time. I‘m out until prob 3 or so +ham Can meh? Thgt some will clash... Really ah, i dun mind... I dun seen to have lost any weight... Gee... +ham I dont thnk its a wrong calling between us +ham I am not sure about night menu. . . I know only about noon menu +ham ARR birthday today:) i wish him to get more oscar. +ham Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it... +ham Open rebtel with firefox. When it loads just put plus sign in the user name place, and it will show you two numbers. The lower number is my number. Once you pick that number the pin will display okay! +ham and picking them up from various points +spam Married local women looking for discreet action now! 5 real matches instantly to your phone. Text MATCH to 69969 Msg cost 150p 2 stop txt stop BCMSFWC1N3XX +ham Wow v v impressed. Have funs shopping! +ham I am on the way to ur home +spam Burger King - Wanna play footy at a top stadium? Get 2 Burger King before 1st Sept and go Large or Super with Coca-Cola and walk out a winner +ham No problem. Talk to you later +ham Then ur sis how? +ham Still in customer place +spam How come it takes so little time for a child who is afraid of the dark to become a teenager who wants to stay out all night? +ham Dude u knw also telugu..thts gud..k, gud nyt.. +ham We confirm eating at esplanade? +ham Send me your id and password +ham Kind of. Took it to garage. Centre part of exhaust needs replacing. Part ordered n taking it to be fixed tomo morning. +spam For ur chance to win a £250 cash every wk TXT: ACTION to 80608. T's&C's www.movietrivia.tv custcare 08712405022, 1x150p/wk. +ham Well I might not come then... +ham Long after I quit. I get on only like 5 minutes a day as it is. +ham Then its most likely called Mittelschmertz. Google it. If you dont have paracetamol dont worry it will go. +ham Well at this right I'm gonna have to get up and check today's steam sales/pee so text me when you want me to come get you +ham Just arrived, see you in a couple days <3 +ham K, wat s tht incident? +ham Yeah get the unlimited +ham cThen i thk shd b enuff.. Still got conclusion n contents pg n references.. I'll b doing da contents pg n cover pg.. +ham Forgot it takes me 3 years to shower, sorry. Where you at/your phone dead yet? +ham Ü got wat to buy tell us then ü no need to come in again. +ham When you are big..| God will bring success. +spam U’ve Bin Awarded £50 to Play 4 Instant Cash. Call 08715203028 To Claim. EVERY 9th Player Wins Min £50-£500. OptOut 08718727870 +ham … we r stayin here an extra week, back next wed. How did we do in the rugby this weekend? Hi to and and , c u soon " +ham Well there's still a bit left if you guys want to tonight +ham Not from this campus. Are you in the library? +ham The affidavit says <#> E Twiggs St, division g, courtroom <#> , <TIME> AM. I'll double check and text you again tomorrow +ham How will I creep on you now? ;_; +ham Tell your friends what you plan to do on Valentines day @ <URL> +ham If I get there before you after your ten billion calls and texts so help me god +ham Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng musthu +ham I've told him that i've returned it. That should i re order it. +ham House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office.. +ham Depends on where u going lor. +ham And smile for me right now as you go and the world will wonder what you are smiling about and think your crazy and keep away from you ... *grins* +spam FreeMsg>FAV XMAS TONES!Reply REAL +ham Lil fever:) now fine:) +ham I think it's all still in my car +ham Can a not? +spam December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update Co FREE on 08002986906 +ham Yes princess! I want to catch you with my big strong hands... +ham Oh yeah I forgot. U can only take 2 out shopping at once. +ham Mm so you asked me not to call radio +ham Thinkin about someone is all good. No drugs for that +ham Say this slowly.? GOD,I LOVE YOU & I NEED YOU,CLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people & u c miracle tomorrow, do it,pls,pls do it... +ham Enjoy the showers of possessiveness poured on u by ur loved ones, bcoz in this world of lies, it is a golden gift to be loved truly.. +ham Alright if you're sure, let me know when you're leaving +ham Some are lasting as much as 2 hours. You might get lucky. +ham Genius what's up. How your brother. Pls send his number to my skype. +spam Gr8 Poly tones 4 ALL mobs direct 2u rply with POLY TITLE to 8007 eg POLY BREATHE1 Titles: CRAZYIN, SLEEPINGWITH, FINEST, YMCA :getzed.co.uk POBox365O4W45WQ 300p +ham Thk some of em find wtc too far... Weiyi not goin... E rest i dunno yet... R ur goin 4 dinner den i might b able to join... +ham Don't forget who owns you and who's private property you are ... And be my good boy always .. *passionate kiss* +spam INTERFLORA - “It's not too late to order Interflora flowers for christmas call 0800 505060 to place your order before Midnight tomorrow. +ham Oh god..taken the teeth?is it paining +spam ROMCAPspam Everyone around should be responding well to your presence since you are so warm and outgoing. You are bringing in a real breath of sunshine. +ham Then u ask darren go n pick u lor... But i oso sian tmr haf 2 meet lect... +ham No need to buy lunch for me.. I eat maggi mee.. +spam Congratulations - Thanks to a good friend U have WON the £2,000 Xmas prize. 2 claim is easy, just call 08712103738 NOW! Only 10p per minute. BT-national-rate +ham Ok lor... +ham Oh right, ok. I'll make sure that i do loads of work during the day! got a really nasty cough today and is dry n shot so that should really help it! +ham Wife.how she knew the time of murder exactly +spam Send a logo 2 ur lover - 2 names joined by a heart. Txt LOVE NAME1 NAME2 MOBNO eg LOVE ADAM EVE 07123456789 to 87077 Yahoo! POBox36504W45WQ TxtNO 4 no ads 150p. +ham Howz that persons story +ham Thanx 4 sending me home... +ham Its normally hot mail. Com you see! +spam You've won tkts to the EURO2004 CUP FINAL or £800 CASH, to collect CALL 09058099801 b4190604, POBOX 7876150ppm +ham U sick still can go shopping? +ham Ya they are well and fine., BBD(pooja) full pimples..even she become quite black..and ur rite here its too cold, wearing sweatter.. +ham Nice.nice.how is it working? +ham 1's reach home call me. +ham Were trying to find a Chinese food place around here +ham Easy mate, * guess the quick drink was bit ambitious. +ham BABE !!! I miiiiiiissssssssss you ! I need you !!! I crave you !!! :-( ... Geeee ... I'm so sad without you babe ... I love you ... +ham Ok thanx... +ham aathi..where are you dear.. +ham Tunji, how's the queen? how are you doing. This is just wishing you a great day. Abiola. +ham Today iZ Yellow rose day. If u love my frndship give me 1 misscall & send this to ur frndZ & See how many miss calls u get. If u get 6missed U marry ur Lover. +ham Will be out of class in a few hours. Sorry +ham Wat time u finish ur lect today? +spam Free-message: Jamster!Get the crazy frog sound now! For poly text MAD1, for real text MAD2 to 88888. 6 crazy sounds for just 3 GBP/week! 16+only! T&C's apply +ham Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish. As I entered my cabin my PA said, '' Happy B'day Boss !!''. I felt special. She askd me 4 lunch. After lunch she invited me to her apartment. We went there. She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife, My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...! +spam YOUR CHANCE TO BE ON A REALITY FANTASY SHOW call now = 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national = rate call +ham She's fine. Good to hear from you. How are you my dear? Happy new year oh. +ham Are you going to wipro interview today? +ham how tall are you princess? +ham I doubt you could handle 5 times per night in any case... +ham Haha... Hope ü can hear the receipt sound... Gd luck! +ham Your gonna be the death if me. I'm gonna leave a note that says its all robs fault. Avenge me. +ham Japanese Proverb: If one Can do it, U too Can do it, If none Can do it,U must do it Indian version: If one Can do it, LET HIM DO it.. If none Can do it,LEAVE it!! And finally Kerala version: If one can do it, Stop him doing it.. If none can do it, Make a strike against it ... +ham Today i'm not workin but not free oso... Gee... Thgt u workin at ur fren's shop ? +ham In life when you face choices Just toss a coin not becoz its settle the question But while the coin in the air U will know what your heart is hoping for. Gudni8 +ham Do you know why god created gap between your fingers..? So that, One who is made for you comes & fills those gaps by holding your hand with LOVE..! +ham I want to be there so i can kiss you and feel you next to me +ham I am not at all happy with what you saying or doing +spam Adult 18 Content Your video will be with you shortly +ham Ok that would b lovely, if u r sure. Think about wot u want to do, drinkin, dancin, eatin, cinema, in, out, about... Up to u! Wot about ? +ham What I'm saying is if you haven't explicitly told nora I know someone I'm probably just not gonna bother +ham He says hi and to get your ass back to south tampa (preferably at a kegger) +ham Smith waste da.i wanna gayle. +ham Mum, i've sent you many many messages since i got here. I just want to know that you are actually getting them. Do enjoy the rest of your day. +ham Aight, tomorrow around <#> it is +ham House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office..understand? +spam YOUR CHANCE TO BE ON A REALITY FANTASY SHOW call now = 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national = rate call. +ham I actually did for the first time in a while. I went to bed not too long after i spoke with you. Woke up at 7. How was your night? +ham See you there! +ham I dont understand your message. +ham Crucify is c not s. You should have told me earlier. +ham Idk. You keep saying that you're not, but since he moved, we keep butting heads over freedom vs. responsibility. And i'm tired. I have so much other shit to deal with that i'm barely keeping myself together once this gets added to it. +ham Fuck cedar key and fuck her (come over anyway tho) +ham twenty past five he said will this train have been to durham already or not coz i am in a reserved seat +spam Hey Boys. Want hot XXX pics sent direct 2 ur phone? Txt PORN to 69855, 24Hrs free and then just 50p per day. To stop text STOPBCM SF WC1N3XX +ham U still painting ur wall? +spam Last Chance! Claim ur £150 worth of discount vouchers today! Text SHOP to 85023 now! SavaMob, offers mobile! T Cs SavaMob POBOX84, M263UZ. £3.00 Sub. 16 +ham Printer is cool. I mean groovy. Wine is groovying +ham Hi Harish's rent has been transfred to ur Acnt. +ham Anything lor is she coming? +ham Cbe is really good nowadays:)lot of shop and showrooms:)city is shaping good. +ham Ü still attending da talks? +ham No probs hon! How u doinat the mo? +ham K I'll take care of it +ham I take it we didn't have the phone callon Friday. Can we assume we won't have it this year now? +ham My battery is low babe +ham Shuhui has bought ron's present it's a swatch watch... +ham Yeah there's quite a bit left, I'll swing by tomorrow when I get up +ham Babe? You said 2 hours and it's been almost 4 ... Is your internet down ? +ham K I'll be sure to get up before noon and see what's what +ham K...k...yesterday i was in cbe . +ham Went to ganesh dress shop +spam pdate_Now - Double mins and 1000 txts on Orange tariffs. Latest Motorola, SonyEricsson & Nokia & Bluetooth FREE! Call MobileUpd8 on 08000839402 or call2optout/!YHL +ham Ü collecting ur laptop then going to configure da settings izzit? +ham If you r @ home then come down within 5 min +ham Aight, I should be there by 8 at the latest, probably closer to 7. Are jay and tyler down or should we just do two trips? +ham Come aftr <DECIMAL> ..now i m cleaning the house +spam Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send CASH to 86688 only 150p/msg. CC: 08718720201 PO BOX 114/14 TCR/W1 +ham Bill, as in: Are there any letters for me. i’m expecting one from orange that isn’t a bill but may still say orange on it. +ham Tell me pa. How is pain de. +ham HI DARLIN I HOPE YOU HAD A NICE NIGHT I WISH I HAD COME CANT WAIT TO SEE YOU LOVE FRAN PS I WANT DIRTY ANAL SEX AND I WANT A 10 MAN GANG BANG +ham Ha. You don‘t know either. I did a a clever but simple thing with pears the other day, perfect for christmas. +ham Helloooo... Wake up..! "Sweet" "morning" "welcomes" "You" "Enjoy" "This Day" "with full of joy".. "GUD MRNG". +ham ALRITE +ham Why must we sit around and wait for summer days to celebrate. Such a magical sight when the worlds dressed in white. Oooooh let there be snow. +spam URGENT! Your Mobile number has been awarded with a £2000 prize GUARANTEED. Call 09058094454 from land line. Claim 3030. Valid 12hrs only +ham How do you guys go to see movies on your side. +ham Sorry,in meeting I'll call later +ham You didn't have to tell me that...now i'm thinking. Plus he's going to stop all your runs +ham Kindly send some one to our flat before <DECIMAL> today. +spam Sorry! U can not unsubscribe yet. THE MOB offer package has a min term of 54 weeks> pls resubmit request after expiry. Reply THEMOB HELP 4 more info +ham Nothing lor... A bit bored too... Then y dun u go home early 2 sleep today... +ham What time should I tell my friend to be around? +ham Yes. that will be fine. Love you. Be safe. +ham Thanks chikku..:-) gud nyt:-* +ham Is xy in ur car when u picking me up? +ham Thanx 4 the time we’ve spent 2geva, its bin mint! Ur my Baby and all I want is u!xxxx +ham Yo, any way we could pick something up tonight? +ham I've not sent it. He can send me. +ham Fine am simply sitting. +ham Thts god's gift for birds as humans hav some natural gift frm god.. +ham Are you coming to day for class. +ham Im done. Just studyn in library +ham Ok... U enjoy ur shows... +ham Anything... +ham Where wuld I be without my baby? The thought alone mite break me and I don’t wanna go crazy but everyboy needs his lady xxxxxxxx +ham Wat's my dear doing? Sleeping ah? +ham Hi' Test on <#> rd .... +ham Only 2% students solved this CAT question in 'xam... 5+3+2= <#> 9+2+4= <#> 8+6+3= <#> then 7+2+5=????? Tell me the answer if u r brilliant...1thing.i got d answr. +ham Yo do you know anyone <#> or otherwise able to buy liquor? Our guy flaked and right now if we don't get a hold of somebody its just 4 loko all night +ham Yup n her fren lor. I'm meeting my fren at 730. +ham Yeah, we got one lined up for us +ham And stop wondering "wow is she ever going to stop tm'ing me ?!" because I will tm you whenever I want because you are MINE ... *laughs* +ham Lol yep did that yesterday. Already got my fireplace. Now its just another icon sitting there for me. +ham Hey i've booked the pilates and yoga lesson already... Haha +ham Are you ok. What happen to behave like this +spam You have 1 new message. Please call 08712400200. +ham My supervisor find 4 me one lor i thk his students. I havent ask her yet. Tell u aft i ask her. +ham Hello. No news on job, they are making me wait a fifth week! Yeah im up for some woozles and weasels... In exeter still, but be home about 3. +ham No message..no responce..what happend? +spam We currently have a message awaiting your collection. To collect your message just call 08718723815. +ham Hey babe, sorry i didn't get sooner. Gary can come and fix it cause he thinks he knows what it is but he doesn't go as far a Ptbo and he says it will cost <#> bucks. I don't know if it might be cheaper to find someone there ? We don't have any second hand machines at all right now, let me know what you want to do babe +ham make that 3! 4 fucks sake?! x +ham Leave it. U will always be ignorant. +ham Nope but i'll b going 2 sch on fri quite early lor cos mys sis got paper in da morn :-) +ham at bruce b downs & fletcher now +ham Where are you ? You said you would be here when I woke ... :-( +ham Hey now am free you can call me. +ham Tell me whos this pls:-) +spam URGENT! Your mobile was awarded a £1,500 Bonus Caller Prize on 27/6/03. Our final attempt 2 contact U! Call 08714714011 +ham Think i might have to give it a miss. Am teaching til twelve, then have lecture at two. Damn this working thing. +ham Id have to check but there's only like 1 bowls worth left +ham Yes there were many sweets +ham I would but I'm still cozy. And exhausted from last night.nobody went to school or work. Everything is closed. +spam U have a secret admirer. REVEAL who thinks U R So special. Call 09065174042. To opt out Reply REVEAL STOP. 1.50 per msg recd. Cust care 07821230901 +ham Buzzzz! *grins* Did I buzz your ass? Buzz your chest ? Buzz your cock ? Where do you keep your phone ? Is the vibrator on ? Did you feel it shake ? +ham Sir send to group mail check it. +ham I'm doing da intro covers energy trends n pros n cons... Brief description of nuclear fusion n oso brief history of iter n jet got abt 7 n half pages.. +ham "NONE!NOWHERE IKNO DOESDISCOUNT!SHITINNIT" +ham You dont know you jabo me abi. +spam Do you ever notice that when you're driving, anyone going slower than you is an idiot and everyone driving faster than you is a maniac? +ham Not yet had..ya sapna aunty manege y'day hogidhe..chinnu full weak and swalpa black agidhane.. +ham Are you being good, baby? :) +ham NEFT Transaction with reference number <#> for Rs. <DECIMAL> has been credited to the beneficiary account on <#> at <TIME> : <#> +ham Mostly sports type..lyk footbl,crckt.. +ham Ma head dey swell oh. Thanks for making my day +ham U should make a fb list +ham Height of Confidence: All the Aeronautics professors wer calld & they wer askd 2 sit in an aeroplane. Aftr they sat they wer told dat the plane ws made by their students. Dey all hurried out of d plane.. Bt only 1 didnt move... He said:"if it is made by my students,this wont even start........ Datz confidence.. +ham Sary just need Tim in the bollox &it hurt him a lot so he tol me! +ham Happy New Year Princess! +ham I'll text carlos and let you know, hang on +ham Don't worry, * is easy once have ingredients! +ham I love u 2 my little pocy bell I am sorry but I love u +ham Ok omw now, you at castor? +ham Yar lor... Keep raining non stop... Or u wan 2 go elsewhere? +spam Xmas Offer! Latest Motorola, SonyEricsson & Nokia & FREE Bluetooth or DVD! Double Mins & 1000 Txt on Orange. Call MobileUpd8 on 08000839402 or call2optout/4QF2 +ham What u mean u almost done? Done wif sleeping? But i tot u going to take a nap.. Yup i send her liao so i'm picking her up at ard 4 smth lor.. +ham 7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st "Ur Lovely Friendship"... good morning dear +ham Tonight? Yeah, I'd be down for that +ham What should i eat fo lunch senor +ham He said that he had a right giggle when he saw u again! You would possibly be the first person2die from NVQ, but think how much you could for! +ham No break time one... How... I come out n get my stuff fr ü? +spam Reply to win £100 weekly! What professional sport does Tiger Woods play? Send STOP to 87239 to end service +ham I'm there and I can see you, but you can't see me ? Maybe you should reboot ym ? I seen the buzz +ham Do you still have the grinder? +spam No 1 POLYPHONIC tone 4 ur mob every week! Just txt PT2 to 87575. 1st Tone FREE ! so get txtin now and tell ur friends. 150p/tone. 16 reply HL 4info +ham Love isn't a decision, it's a feeling. If we could decide who to love, then, life would be much simpler, but then less magical +spam HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national rate call +ham K.i did't see you.:)k:)where are you now? +ham So i'm doing a list of buyers. +ham No idea, I guess we'll work that out an hour after we're supposed to leave since as usual nobody has any interest in figuring shit out before the last second +ham Mm not entirely sure i understood that text but hey. Ho. Which weekend? +ham They released vday shirts and when u put it on it makes your bottom half naked instead of those white underwear. +ham Don know..he is watching film in computer.. +ham No b4 Thursday +ham Oh, then your phone phoned me but it disconnected +ham Id onluy matters when getting on from offcampus +spam This message is free. Welcome to the new & improved Sex & Dogging club! To unsubscribe from this service reply STOP. msgs@150p 18+only +ham Excellent, I'll see what riley's plans are +ham I will see in half an hour +spam You've won tkts to the EURO2004 CUP FINAL or £800 CASH, to collect CALL 09058099801 b4190604, POBOX 7876150ppm +ham Ew are you one of them? +ham Also hi wesley how've you been +ham Ah you see. You have to be in the lingo. I will let you know wot on earth it is when has finished making it! +spam Loan for any purpose £500 - £75,000. Homeowners + Tenants welcome. Have you been previously refused? We can still help. Call Free 0800 1956669 or text back 'help' +spam Update_Now - 12Mths Half Price Orange line rental: 400mins...Call MobileUpd8 on 08000839402 or call2optout=J5Q +ham Imagine Life WITHOUT ME... see.. How fast u are searching me?Don't worry.. l'm always there To disturb U.. Goodnoon..:) +ham Hm good morning, headache anyone? :-) +ham Yeah no probs - last night is obviously catching up with you... Speak soon +spam FREE UNLIMITED HARDCORE PORN direct 2 your mobile Txt PORN to 69200 & get FREE access for 24 hrs then chrgd@50p per day txt Stop 2exit. This msg is free +ham I might go 2 sch. Yar at e salon now v boring. +ham <#> mins but i had to stop somewhere first. +ham <#> is fast approaching. So, Wish u a very Happy New Year Happy Sankranti Happy republic day Happy Valentines Day Happy Shivratri Happy Ugadi Happy Fools day Happy May Day Happy Independence Day, Happy Friendship,Mother,Father,Teachers,Childrens Day, & HAPPY BIRTHDAY 4 U. Happy Ganesh festival Happy Dasara Happy Diwali Happy Christmas <#> Good Mornings Afternoons, Evenings Nights. RememberI AM the first to WISHING U ALL THESE...your's Raj +ham One of the joys in lifeis waking up each daywith thoughts that somewhereSomeone cares enough tosend a warm morning greeting.. - +ham I didn't get the second half of that message +ham Wat time do u wan 2 meet me later? +ham I thank you so much for all you do with selflessness. I love you plenty. +ham Am in film ill call you later. +ham How dare you change my ring +ham You are a very very very very bad girl. Or lady. +ham I love ya too but try and budget your money better babe. Gary would freak on me if he knew +ham What part of "don't initiate" don't you understand +ham I finished my lunch already. U wake up already? +ham You still at the game? +ham You have got tallent but you are wasting. +ham What is your record for one night? :) +ham Also sir, i sent you an email about how to log into the usc payment portal. I.ll send you another message that should explain how things are back home. Have a great weekend. +ham gonna let me know cos comes bak from holiday that day. is coming. Don't4get2text me number. +ham Jokin only lar... :-) depends on which phone my father can get lor... +ham Aight, lemme know what's up +ham Get ready for <#> inches of pleasure... +ham Raji..pls do me a favour. Pls convey my Birthday wishes to Nimya. Pls. Today is her birthday. +ham ;-) ok. I feel like john lennon. +ham Cos darren say ü considering mah so i ask ü... +ham You are not bothering me but you have to trust my answers. Pls. +ham Wishing you and your family Merry "X" mas and HAPPY NEW Year in advance.. +ham One day a crab was running on the sea shore..The waves came n cleared the footprints of the crab.. Crab asked: being my frnd y r u clearing my beautiful footprints? Waves replied: A fox was following ur footprints to catch you! thats y i cleared it off:) frndsship never lets u dwn :-) GUD nyt.. +ham Aight what time you want me to come up? +ham Slaaaaave ! Where are you ? Must I summon you to me all the time now ? Don't you wish to come to me on your own anymore? +ham Your bill at 3 is £33.65 so thats not bad! +ham Let me know how it changes in the next 6hrs. It can even be appendix but you are out of that age range. However its not impossible. So just chill and let me know in 6hrs +ham Hello, yeah i've just got out of the bath and need to do my hair so i'll come up when i'm done, yeah? +ham So how's the weather over there? +ham Ok. Not much to do here though. H&M Friday, cant wait. Dunno wot the hell im gonna do for another 3 weeks! Become a slob- oh wait, already done that! +ham Die... Now i have e toot fringe again... +ham Lol they don't know about my awesome phone. I could click delete right now if I want. +ham Ok +ham Awesome question with a cute answer: Someone asked a boy "how is ur life?" . . He smiled & answered: . . "She is fine!" Gudnite +ham Please leave this topic..sorry for telling that.. +ham Pls send me the correct name da. +ham What happened to our yo date? +spam EASTENDERS TV Quiz. What FLOWER does DOT compare herself to? D= VIOLET E= TULIP F= LILY txt D E or F to 84025 NOW 4 chance 2 WIN £100 Cash WKENT/150P16+ +ham Webpage s not available! +ham Just woke up. Yeesh its late. But I didn't fall asleep til <#> am :/ +spam You are now unsubscribed all services. Get tons of sexy babes or hunks straight to your phone! go to http://gotbabes.co.uk. No subscriptions. +ham Dear all, as we know <#> th is the <#> th birthday of our loving Gopalettan. We are planning to give a small gift on that day. Those who like to participate in that you are welcome. Please contact our admin team for more details +ham K..k...from tomorrow onwards started ah? +ham What u talking bout early morning? It's almost noon where your at! +ham Fine. Do you remember me. +spam Hi babe its Jordan, how r u? Im home from abroad and lonely, text me back if u wanna chat xxSP visionsms.com Text stop to stopCost 150p 08712400603 +ham Ok. How many should i buy. +ham Sounds good, keep me posted +spam Get a brand new mobile phone by being an agent of The Mob! Plus loads more goodies! For more info just text MAT to 87021. +ham Ok. So april. Cant wait +ham Boy you best get yo ass out here quick +ham Ay wana meet on sat?ü wkg on sat? +ham I'm now but have to wait till 2 for the bus to pick me. +ham Apart from the one i told you about yesterday? +ham Ok lor... But buy wat? +ham Somebody should go to andros and steal ice +ham Don know. I did't msg him recently. +ham Take us out shopping and Mark will distract Isaiah.=D +ham Mum, hope you are having a great day. Hoping this text meets you well and full of life. Have a great day. Abiola +ham There is no sense in my foot and penis. +ham Okay but i thought you were the expert +ham *deep sigh* ... I miss you :-( ... I am really surprised you haven't gone to the net cafe yet to get to me ... Don't you miss me? +ham S.s:)i thinl role is like sachin.just standing. Others have to hit. +ham Have a great trip to India. And bring the light to everyone not just with the project but with everyone that is lucky to see you smile. Bye. Abiola +ham And very importantly, all we discuss is between u and i only. +ham K..k:)how about your training process? +ham Ok lor. I ned 2 go toa payoh 4 a while 2 return smth u wan 2 send me there or wat? +ham In da car park +ham I wish that I was with you. Holding you tightly. Making you see how important you are. How much you mean to me ... How much I need you ... In my life ... +ham So i asked how's anthony. Dad. And your bf +ham 'Wnevr i wana fal in luv vth my books, My bed fals in luv vth me..!'' . Yen madodu, nav pretsorginta, nammanna pretsovru important alwa....!!:) Gud eveB-). +ham What Today-sunday..sunday is holiday..so no work.. +ham Am going to take bath ill place the key in window:-) +spam LORD OF THE RINGS:RETURN OF THE KING in store NOW!REPLY LOTR by 2 June 4 Chance 2 WIN LOTR soundtrack CDs StdTxtRate. Reply STOP to end txts +ham Dear, take care. I am just reaching home.love u a lot. +ham staff.science.nus.edu.sg/~phyhcmk/teaching/pc1323 +ham Have you emigrated or something? Ok maybe 5.30 was a bit hopeful... +ham Olol i printed out a forum post by a guy with the exact same prob which was fixed with a gpu replacement. Hopefully they dont ignore that. +ham We walked from my moms. Right on stagwood pass right on winterstone left on victors hill. Address is <#> +ham Yo, you at jp and hungry like a mofo? +ham This is all just creepy and crazy to me. +ham Ok... I din get ur msg... +ham Tessy..pls do me a favor. Pls convey my birthday wishes to Nimya..pls dnt forget it. Today is her birthday Shijas +ham Pathaya enketa maraikara pa' +ham Even if he my friend he is a priest call him now +ham U so lousy, run already come back then half dead... Hee... +ham That's y i said it's bad dat all e gals know u... Wat u doing now? +ham Or remind me in a few hrs. +ham I had been hoping i would not have to send you this message. My rent is due and i dont have enough for it. My reserves are completely gone. Its a loan i need and was hoping you could her. The balance is <#> . Is there a way i could get that from you, till mid march when i hope to pay back. +ham Hi. Happy New Year. I dont mean to intrude but can you pls let me know how much tuition you paid last semester and how much this semester is. Thanks +ham Hello hun how ru? Its here by the way. Im good. Been on 2 dates with that guy i met in walkabout so far. We have to meet up soon. Hows everyone else? +ham Lol I was gonna last month. I cashed some in but I left <#> just in case. I was collecting more during the week cause they announced it on the blog. +spam Good Luck! Draw takes place 28th Feb 06. Good Luck! For removal send STOP to 87239 customer services 08708034412 +ham Short But Cute : " Be a good person , but dont try to prove" ..... Gud mrng... +ham Just haven't decided where yet eh ? +ham Wat time liao, where still got. +ham Yes watching footie but worried we're going to blow it - Phil Neville? +ham I wait 4 ü inside da car park... +ham Uncle Abbey! Happy New Year. Abiola +ham Now am free call me pa. +ham R u saying i should re order the slippers cos i had to pay for returning it. +ham Stop knowing me so well! +ham Good evening! this is roger. How are you? +ham Small problem in auction:)punj now asking tiwary +spam Free entry in 2 a weekly comp for a chance to win an ipod. Txt POD to 80182 to get entry (std txt rate) T&C's apply 08452810073 for details 18+ +ham He telling not to tell any one. If so treat for me hi hi hi +ham My uncles in Atlanta. Wish you guys a great semester. +spam 1st wk FREE! Gr8 tones str8 2 u each wk. Txt NOKIA ON to 8007 for Classic Nokia tones or HIT ON to 8007 for Polys. Nokia/150p Poly/200p 16+ +ham U coming 2 pick me? +ham Thats cool. i liked your photos. You are very sexy! +ham would u fuckin believe it they didnt know i had thurs pre booked off so they re cancelled me AGAIN! that needs to b sacked +ham Haha better late than ever, any way I could swing by? +ham Ok. But i finish at 6. +spam LookAtMe!: Thanks for your purchase of a video clip from LookAtMe!, you've been charged 35p. Think you can do better? Why not send a video in a MMSto 32323. +ham I've been barred from all B and Q stores for life!?This twat in orange dungerees came up to me and asked if I wanted decking? So I got the first punch in!! +ham So no messages. Had food? +ham Ok going to sleep. Hope i can meet her. +ham Wat makes some people dearer is not just de happiness dat u feel when u meet them but de pain u feel when u miss dem!!! +ham Can you let me know details of fri when u find out cos I'm not in tom or fri. mentionned chinese. Thanks +ham You're right I have now that I think about it +ham Wat r u doing now? +ham Is ur lecture over? +spam sexy sexy cum and text me im wet and warm and ready for some porn! u up for some fun? THIS MSG IS FREE RECD MSGS 150P INC VAT 2 CANCEL TEXT STOP +ham Customer place i will call you +ham Not planned yet :)going to join company on jan 5 only.don know what will happen after that. +ham Boy; I love u Grl: Hogolo Boy: gold chain kodstini Grl: Agalla Boy: necklace madstini Grl: agalla Boy: Hogli 1 mutai eerulli kodthini! Grl: I love U kano;-) +ham Haha I heard that, text me when you're around +ham I.ll get there tomorrow and send it to you +ham "SHIT BABE.. THASA BIT MESSED UP.YEH, SHE SHUDVETOLD U. DID URGRAN KNOW?NEWAY, ILLSPEAK 2 U2MORO WEN IM NOT ASLEEP..." +ham Oh thats late! Well have a good night and i will give u a call tomorrow. Iam now going to go to sleep night night +ham "CHEERS U TEX MECAUSE U WEREBORED! YEAH OKDEN HUNNY R UIN WK SAT?SOUND’S LIKEYOUR HAVIN GR8FUN J! KEEP UPDAT COUNTINLOTS OF LOVEME XXXXX." +ham Sorry, in meeting I'll call you later +ham Yo! Howz u? girls never rang after india. L +ham Yeah but which is worse for i +spam Hard LIVE 121 chat just 60p/min. Choose your girl and connect LIVE. Call 09094646899 now! Cheap Chat UK's biggest live service. VU BCM1896WC1N3XX +ham I tagged MY friends that you seemed to count as YOUR friends. +spam Not heard from U4 a while. Call 4 rude chat private line 01223585334 to cum. Wan 2C pics of me gettin shagged then text PIX to 8552. 2End send STOP 8552 SAM xxx +ham Ok... +ham Long time. You remember me today. +ham Havent shopping now lor i juz arrive only +ham Thank u. IT BETTER WORK OUT CAUSE I WILL FEEL USED OTHERWISE +ham Are you up for the challenge? I know i am :) +ham How much did ur hdd casing cost. +ham Mystery solved! Just opened my email and he's sent me another batch! Isn't he a sweetie +ham I can't describe how lucky you are that I'm actually awake by noon +spam This is the 2nd time we have tried to contact u. U have won the £1450 prize to claim just call 09053750005 b4 310303. T&Cs/stop SMS 08718725756. 140ppm +ham TODAY is Sorry day.! If ever i was angry with you, if ever i misbehaved or hurt you? plz plz JUST SLAP URSELF Bcoz, Its ur fault, I'm basically GOOD +ham Cheers for the card ... Is it that time of year already? +spam HOT LIVE FANTASIES call now 08707509020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870..k +ham When people see my msgs, They think Iam addicted to msging... They are wrong, Bcoz They don\'t know that Iam addicted to my sweet Friends..!! BSLVYL +ham Ugh hopefully the asus ppl dont randomly do a reformat. +ham Haven't seen my facebook, huh? Lol! +ham Mah b, I'll pick it up tomorrow +ham Still otside le..u come 2morrow maga.. +ham Do u still have plumbers tape and a wrench we could borrow? +spam Dear Voucher Holder, To claim this weeks offer, at you PC please go to http://www.e-tlp.co.uk/reward. Ts&Cs apply. +ham It vl bcum more difficult.. +spam UR GOING 2 BAHAMAS! CallFREEFONE 08081560665 and speak to a live operator to claim either Bahamas cruise of£2000 CASH 18+only. To opt out txt X to 07786200117 +ham Havent still waitin as usual... Ü come back sch oredi? +ham In meeting da. I will call you +ham K k :-):-) then watch some films. +ham Does cinema plus drink appeal tomo? * Is a fr thriller by director i like on at mac at 8.30. +ham There the size of elephant tablets & u shove um up ur ass!! +ham So many people seems to be special at first sight, But only very few will remain special to you till your last sight.. Maintain them till life ends.. take cr da +ham My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...! +ham Dunno i juz askin cos i got a card got 20% off 4 a salon called hair sense so i tot it's da one ü cut ur hair. +ham Good morning pookie pie! Lol hope I didn't wake u up +ham MAYBE IF YOU WOKE UP BEFORE FUCKING 3 THIS WOULDN'T BE A PROBLEM. +ham Happy birthday to you....dear.with lots of love.rakhesh NRI +ham Howz that persons story +spam This is the 2nd time we have tried 2 contact u. U have won the 750 Pound prize. 2 claim is easy, call 08712101358 NOW! Only 10p per min. BT-national-rate +ham X2 <#> . Are you going to get that +ham Hi neva worry bout da truth coz the truth will lead me 2 ur heart. It’s the least a unique person like u deserve. Sleep tight or morning +spam UR awarded a City Break and could WIN a £200 Summer Shopping spree every WK. Txt STORE to 88039.SkilGme.TsCs087147403231Winawk!Age16+£1.50perWKsub +ham Is ur paper today in e morn or aft? +ham I will lick up every drop :) are you ready to use your mouth as well? +ham And you! Will expect you whenever you text! Hope all goes well tomo +ham Great. P diddy is my neighbor and comes for toothpaste every morning +ham I av a new number, . Wil u only use this one,ta. +ham So its to be poking man everyday that they teach you in canada abi! How are you. Just saying hi. +ham 7 lor... Change 2 suntec... Wat time u coming? +ham No de.am seeing in online shop so that i asked. +ham Just curious because my cuz asked what I was up to +ham Nice.nice.how is it working? +ham Okay lor... Wah... like that def they wont let us go... Haha... What did they say in the terms and conditions? +ham Haha... Yup hopefully we will lose a few kg by mon. after hip hop can go orchard and weigh again +ham She's good. How are you. Where r u working now +ham Oh, yes, I've just been a little under the weather so i've kind of been coccooning at home +ham At home also. +ham This phone has the weirdest auto correct. +ham Oops my phone died and I didn't even know. Yeah I like it better. +ham Havent mus ask if u can 1st wat. Of meet 4 lunch den u n him meet can already lor. Or u wan 2 go ask da ge 1st then confirm w me asap? +ham She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife, +ham OH YEAH,AND HAV A GREAT TIME IN NEWQUAY-SEND ME A POSTCARD !1 LOOK AFTER ALL THE GIRLS WHILE IM GONE(U KNOW THE 1IM TALKIN BOUT!)xx +ham We got a divorce. Lol. She.s here +ham What's ur pin? +ham Babe, have you got enough money to pick up bread and milk ? And I'll give you it back when you get home ? +ham I want snow. It's just freezing and windy. +spam URGENT! We are trying to contact U. Todays draw shows that you have won a £2000 prize GUARANTEED. Call 09066358361 from land line. Claim Y87. Valid 12hrs only +ham Come to mahal bus stop.. <DECIMAL> +ham Don know:)this week i'm going to tirunelvai da. +ham Me too baby! I promise to treat you well! I bet you will take good care of me... +ham Its like that hotel dusk game i think. You solve puzzles in a area thing +spam Thanks for your ringtone order, reference number X29. Your mobile will be charged 4.50. Should your tone not arrive please call customer services 09065989180 +ham Hi, my love! How goes that day? Fuck, this morning I woke and dropped my cell on the way down the stairs but it seems alright ... *phews* I miss you ! +ham Well that must be a pain to catch +ham Sorry da thangam.it's my mistake. +ham I need... Coz i never go before +ham Rose for red,red for blood,blood for heart,heart for u. But u for me.... Send tis to all ur friends.. Including me.. If u like me.. If u get back, 1-u r poor in relation! 2-u need some 1 to support 3-u r frnd 2 many 4-some1 luvs u 5+- some1 is praying god to marry u.:-) try it.... +ham Wife.how she knew the time of murder exactly +spam SIX chances to win CASH! From 100 to 20,000 pounds txt> CSH11 and send to 87575. Cost 150p/day, 6days, 16+ TsandCs apply Reply HL 4 info +spam Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send COLLECT to 83600 only 150p/msg. CC: 08718720201 PO BOX 114/14 TCR/W1 +ham I feel like a dick because I keep sleeping through your texts and facebook messages. Sup, you in town? +ham No plm i will come da. On the way. +ham Guess he wants alone time. We could just show up and watch when they do.. +ham Height of recycling: Read twice- People spend time for earning money and the same money is spent for spending time!;-) Good morning.. keep smiling:-) +ham Yup ü not comin :-( +ham Yes, princess. Toledo. +ham Aight text me when you're back at mu and I'll swing by, need somebody to get the door for me +ham Ron say fri leh. N he said ding tai feng cant make reservations. But he said wait lor. +ham Good. No swimsuit allowed :) +ham Am okay. Will soon be over. All the best +ham A cute thought for friendship: "Its not necessary to share every secret with ur close Frnd, but watever u shared should be true".... +ham Ok i've sent u da latest version of da project. +ham Good Morning my Dear........... Have a great & successful day. +ham Pls accept me for one day. Or am begging you change the number. +ham Squeeeeeze!! This is christmas hug.. If u lik my frndshp den hug me back.. If u get 3 u r cute:) 6 u r luvd:* 9 u r so lucky;) None? People hate u: +ham Its ok, if anybody asks abt me, u tel them..:-P +ham Funny fact Nobody teaches volcanoes 2 erupt, tsunamis 2 arise, hurricanes 2 sway aroundn no 1 teaches hw 2 choose a wife Natural disasters just happens +ham * You gonna ring this weekend or wot? +ham Also track down any lighters you can find +ham Sorry, I can't help you on this. +ham Babe, I need your advice +ham I‘ll leave around four, ok? +ham Come to medical college at 7pm ......forward it da +ham K:)k..its good:)when are you going? +ham I can make lasagna for you... vodka... +ham HI ITS KATE CAN U GIVE ME A RING ASAP XXX +ham Who were those people ? Were you in a tour ? I thought you were doing that sofa thing you sent me ? Your curious sugar +ham No, but you told me you were going, before you got drunk! +ham He fucking chickened out. He messaged me he would be late and woould buzz me and then I didn't hear a word from him +spam Congratulations! Thanks to a good friend U have WON the £2,000 Xmas prize. 2 claim is easy, just call 08718726978 NOW! Only 10p per minute. BT-national-rate +ham I'm always looking for an excuse to be in the city. +ham Yup i'm still having coffee wif my frens... My fren drove she'll give me a lift... +ham O shore are you takin the bus +ham So u gonna get deus ex? +ham I will send them to your email. Do you mind <#> times per night? +spam 44 7732584351, Do you want a New Nokia 3510i colour phone DeliveredTomorrow? With 300 free minutes to any mobile + 100 free texts + Free Camcorder reply or call 08000930705. +ham tap & spile at seven. * Is that pub on gas st off broad st by canal. Ok? +ham Ok then i come n pick u at engin? +ham Which is why i never wanted to tell you any of this. Which is why i'm so short with you and on-edge as of late. +ham Raviyog Peripherals bhayandar east +ham K actually can you guys meet me at the sunoco on howard? It should be right on the way +spam You have 1 new voicemail. Please call 08719181513. +ham MOON has come to color your dreams, STARS to make them musical and my SMS to give you warm and Peaceful Sleep. Good Night +ham Just finished eating. Got u a plate. NOT leftovers this time. +ham Thanx a lot... +ham Hurry home u big butt. Hang up on your last caller if u have to. Food is done and I'm starving. Don't ask what I cooked. +ham Lol your right. What diet? Everyday I cheat anyway. I'm meant to be a fatty :( +ham Its a great day. Do have yourself a beautiful one. +ham What happened in interview? +ham Solve d Case : A Man Was Found Murdered On <DECIMAL> . <#> AfterNoon. 1,His wife called Police. 2,Police questioned everyone. 3,Wife: Sir,I was sleeping, when the murder took place. 4.Cook: I was cooking. 5.Gardener: I was picking vegetables. 6.House-Maid: I went 2 d post office. 7.Children: We went 2 play. 8.Neighbour: We went 2 a marriage. Police arrested d murderer Immediately. Who's It? Reply With Reason, If U r Brilliant. +ham Badrith is only for chennai:)i will surely pick for us:)no competition for him. +ham I tot it's my group mate... Lucky i havent reply... Wat time do ü need to leave... +ham Hey you around? I've got enough for a half + the ten I owe you +ham Hey tmr maybe can meet you at yck +ham ALRITE SAM ITS NIC JUST CHECKIN THAT THIS IS UR NUMBER-SO IS IT?T.B* +ham They are just making it easy to pay back. I have <#> yrs to say but i can pay back earlier. You get? +ham Not to worry. I'm sure you'll get it. +ham The gas station is like a block away from my house, you'll drive right by it since armenia ends at swann and you have to take howard +spam Someone U know has asked our dating service 2 contact you! Cant Guess who? CALL 09058097189 NOW all will be revealed. POBox 6, LS15HB 150p +spam Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days +ham My tuition is at 330. Hm we go for the 1120 to 1205 one? Do you mind? +ham I'm not smoking while people use "wylie smokes too much" to justify ruining my shit +ham Dear good morning how you feeling dear +ham A little. Meds say take once every 8 hours. It's only been 5 but pain is back. So I took another. Hope I don't die +ham Beautiful tomorrow never comes.. When it comes, it's already TODAY.. In the hunt of beautiful tomorrow don't waste your wonderful TODAY.. GOODMORNING:) +ham Dunno lei ü all decide lor. How abt leona? Oops i tot ben is going n i msg him. +ham Hi there. We have now moved in2 our pub . Would be great 2 c u if u cud come up. +spam Todays Voda numbers ending 5226 are selected to receive a ?350 award. If you hava a match please call 08712300220 quoting claim code 1131 standard rates app +spam This message is free. Welcome to the new & improved Sex & Dogging club! To unsubscribe from this service reply STOP. msgs@150p 18 only +ham Honeybee Said: *I'm d Sweetest in d World* God Laughed & Said: *Wait,U Havnt Met d Person Reading This Msg* MORAL: Even GOD Can Crack Jokes! GM+GN+GE+GN:) +ham Just do what ever is easier for you +spam RCT' THNQ Adrian for U text. Rgds Vatian +ham Stop calling everyone saying I might have cancer. My throat hurts to talk. I can't be answering everyones calls. If I get one more call I'm not babysitting on Monday +ham It'll be tough, but I'll do what I have to +ham IM GONNAMISSU SO MUCH!!I WOULD SAY IL SEND U A POSTCARD BUTTHERES ABOUTAS MUCH CHANCE OF MEREMEMBERIN ASTHERE IS OFSI NOT BREAKIN HIS CONTRACT!! LUV Yaxx +ham Ee msg na poortiyagi odalebeku: Hanumanji 7 name 1-Hanuman 2-Bajarangabali 3-Maruti 4-Pavanaputra 5-Sankatmochan 6-Ramaduth 7-Mahaveer ee 7 name <#> janarige ivatte kalisidare next saturday olage ondu good news keluviri...! Maretare inde 1 dodda problum nalli siguviri idu matra <#> % true.. Don't neglet. +ham HI DARLIN I FINISH AT 3 DO U 1 2 PICK ME UP OR MEET ME? TEXT BACK ON THIS NUMBER LUV KATE XXX +ham Set a place for me in your heart and not in your mind, as the mind easily forgets but the heart will always remember. Wish you Happy Valentines Day! +ham But i'm surprised she still can guess right lor... +ham Okie ü wan meet at bishan? Cos me at bishan now. I'm not driving today. +ham Oh ho. Is this the first time u use these type of words +ham HI DARLIN HOW WAS WORK DID U GET INTO TROUBLE? IJUST TALKED TO YOUR MUM ALL MORNING! I HAD A REALLY GOOD TIME LAST NIGHT IM GOIN OUT SOON BUT CALL ME IF U CAN +ham I know you are serving. I mean what are you doing now. +ham Huh... Hyde park not in mel ah, opps, got confused... Anyway, if tt's e best choice den we juz have to take it... +ham Oh gei. That happend to me in tron. Maybe ill dl it in 3d when its out +spam FREE MESSAGE Activate your 500 FREE Text Messages by replying to this message with the word FREE For terms & conditions, visit www.07781482378.com +ham I know girls always safe and selfish know i got it pa. Thank you. good night. +ham No worries, hope photo shoot went well. have a spiffing fun at workage. +ham I'm freezing and craving ice. Fml +ham Kay... Since we are out already +ham Eh sorry leh... I din c ur msg. Not sad already lar. Me watching tv now. U still in office? +ham Yo im right by yo work +ham Ok darlin i supose it was ok i just worry too much.i have to do some film stuff my mate and then have to babysit again! But you can call me there.xx +ham She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife, +ham I don wake since. I checked that stuff and saw that its true no available spaces. Pls call the embassy or send a mail to them. +ham Nope... Juz off from work... +ham Huh so fast... Dat means u havent finished painting? +ham what number do u live at? Is it 11? +ham No we put party 7 days a week and study lightly, I think we need to draw in some custom checkboxes so they know we're hardcore +ham Sac will score big hundred.he is set batsman:-) +ham Send me yetty's number pls. +ham How much it will cost approx . Per month. +ham Ok... The theory test? when are ü going to book? I think it's on 21 may. Coz thought wanna go out with jiayin. But she isnt free +spam You are being contacted by our dating service by someone you know! To find out who it is, call from a land line 09050000928. PoBox45W2TG150P +ham That's fine, have him give me a call if he knows what he wants or has any questions +ham Sorry, got a late start, we're on the way +ham Then u go back urself lor... +ham I AM AT THE GAS STATION. GO THERE. +ham K, if u bored up just come to my home.. +ham Babe !!!! I LOVE YOU !!!! *covers your face in kisses* +ham Like I made him throw up when we were smoking in our friend's car one time, it was awesome +ham Still i have not checked it da. . . +ham You will go to walmart. I.ll stay. +ham I haven't forgotten you, i might have a couple bucks to send you tomorrow, k? I love ya too +ham Oh great. I.ll disturb him more so that we can talk. +ham Reverse is cheating. That is not mathematics. +ham U're welcome... Caught u using broken english again... +ham No problem baby. Is this is a good time to talk? I called and left a message. +ham Sorry, I'll call later +ham Oh is it! Which brand? +ham Sorry i cant take your call right now. It so happens that there r 2waxsto do wat you want. She can come and ill get her medical insurance. And she'll be able to deliver and have basic care. I'm currently shopping for the right medical insurance for her. So just give me til friday morning. Thats when i.ll see the major person that can guide me to the right insurance. +ham At what time are you coming. +ham Call him and say you not coming today ok and tell them not to fool me like this ok +ham I emailed yifeng my part oredi.. Can ü get it fr him.. +ham R u sure they'll understand that! Wine * good idea just had a slurp! +ham Minimum walk is 3miles a day. +ham Ok not a problem will get them a taxi. C ing tomorrow and tuesday. On tuesday think we r all going to the cinema. +ham Brainless Baby Doll..:-D;-), vehicle sariyag drive madoke barolla.. +ham I don't run away frm u... I walk slowly & it kills me that u don't care enough to stop me... +spam Sorry I missed your call let's talk when you have the time. I'm on 07090201529 +ham Please attend the phone:) +ham You only hate me. You can call any but you didnt accept even a single call of mine. Or even you messaged +ham No messages on her phone. I'm holding it now +ham Can... I'm free... +ham Yo my trip got postponed, you still stocked up? +ham Sorry, I'll call later +ham I am waiting for your call sir. +ham Hey what are you doing. Y no reply pa.. +ham Hey elaine, is today's meeting still on? +ham Sorry i've not gone to that place. I.ll do so tomorrow. Really sorry. +ham Most of the tiime when i don't let you hug me it's so i don't break into tears. +ham Tomorrow i am not going to theatre. . . So i can come wherever u call me. . . Tell me where and when to come tomorrow +ham And now electricity just went out fml. +ham Looks like you found something to do other than smoke, great job! +ham Also andros ice etc etc +ham :) +ham Good afternon, my love. How are today? I hope your good and maybe have some interviews. I wake and miss you babe. A passionate kiss from across the sea +ham Yup. Wun believe wat? U really neva c e msg i sent shuhui? +ham Hows that watch resizing +ham Dear umma she called me now :-) +ham Just finished. Missing you plenty +spam complimentary 4 STAR Ibiza Holiday or £10,000 cash needs your URGENT collection. 09066364349 NOW from Landline not to lose out! Box434SK38WP150PPM18+ +ham Well, I meant as opposed to my drunken night of before +ham K... Must book a not huh? so going for yoga basic on sunday? +spam FREE MSG:We billed your mobile number by mistake from shortcode 83332.Please call 08081263000 to have charges refunded.This call will be free from a BT landline +ham Ok can... +ham Oops - am at my mum's in somerset... Bit far! Back tomo, see you soon x +ham So u workin overtime nigpun? +ham Same as kallis dismissial in 2nd test:-). +ham O. Guess they both got screwd +spam Please CALL 08712402972 immediately as there is an urgent message waiting for you +ham I'm in a meeting, call me later at +ham What r u cooking me for dinner? +ham Ok thanx... +ham Bull. Your plan was to go floating off to IKEA with me without a care in the world. So i have to live with your mess another day. +ham Then i buy. +spam URGENT! Your Mobile number has been awarded with a £2000 Bonus Caller Prize. Call 09058095201 from land line. Valid 12hrs only +ham Heehee that was so funny tho +ham It only does simple arithmetic not percentages. +ham Yeah we wouldn't leave for an hour at least, how's 4 sound? +spam As a valued customer, I am pleased to advise you that following recent review of your Mob No. you are awarded with a £1500 Bonus Prize, call 09066364589 +ham Thanks honey. Have a great day. +ham 'An Amazing Quote'' - "Sometimes in life its difficult to decide whats wrong!! a lie that brings a smile or the truth that brings a tear...." +ham Good night my dear.. Sleepwell&Take care +ham Then ü ask dad to pick ü up lar... Ü wan 2 stay until 6 meh... +ham Jus chillaxin, what up +ham "HEY DAS COOL... IKNOW ALL 2 WELLDA PERIL OF STUDENTFINANCIAL CRISIS!SPK 2 U L8R." +ham Beautiful Truth against Gravity.. Read carefully: "Our heart feels light when someone is in it.. But it feels very heavy when someone leaves it.." GOODMORNING +spam Do you want a New Nokia 3510i colour phone DeliveredTomorrow? With 300 free minutes to any mobile + 100 free texts + Free Camcorder reply or call 08000930705 +ham Whats that coming over the hill..... Is it a monster! Hope you have a great day. Things r going fine here, busy though! +ham Joy's father is John. Then John is the ____ of Joy's father. If u ans ths you hav <#> IQ. Tis s IAS question try to answer. +ham Only once then after ill obey all yours. +ham No she didnt. I will search online and let you know. +ham Where do you need to go to get it? +ham No pic. Please re-send. +ham He remains a bro amongst bros +ham Uhhhhrmm isnt having tb test bad when youre sick +ham But i haf enuff space got like 4 mb... +spam LIFE has never been this much fun and great until you came in. You made it truly special for me. I won't forget you! enjoy @ one gbp/sms +spam Do you want a new Video phone? 600 anytime any network mins 400 Inclusive Video calls AND downloads 5 per week Free delTOMORROW call 08002888812 or reply NOW +spam As a valued customer, I am pleased to advise you that following recent review of your Mob No. you are awarded with a £1500 Bonus Prize, call 09066368470 +spam Welcome! Please reply with your AGE and GENDER to begin. e.g 24M +spam Freemsg: 1-month unlimited free calls! Activate SmartCall Txt: CALL to No: 68866. Subscriptn3gbp/wk unlimited calls Help: 08448714184 Stop?txt stop landlineonly +spam Had your mobile 10 mths? Update to latest Orange camera/video phones for FREE. Save £s with Free texts/weekend calls. Text YES for a callback orno to opt out +spam Am new 2 club & dont fink we met yet Will B gr8 2 C U Please leave msg 2day wiv ur area 09099726553 reply promised CARLIE x Calls£1/minMobsmore LKPOBOX177HP51FL +ham True. Its easier with her here. +ham Sure but since my parents will be working on Tuesday I don't really need a cover story +ham Haha okay... Today weekend leh... +ham "Hi darlin did youPhone me? Im atHome if youwanna chat." +ham I don't know jack shit about anything or i'd say/ask something helpful but if you want you can pretend that I did and just text me whatever in response to the hypotheticalhuagauahahuagahyuhagga +ham You've always been the brainy one. +ham Yeah if we do have to get a random dude we need to change our info sheets to PARTY <#> /7 NEVER STUDY just to be safe +spam Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days. +ham Christmas is An occasion that is Celebrated as a Reflection of UR... Values..., Desires..., Affections...& Traditions.... Have an ideal Christmas... +ham Sending you greetings of joy and happiness. Do have a gr8 evening +ham "Hi darlin i cantdo anythingtomorrow as myparents aretaking me outfor a meal. when are u free? Katexxx" +ham If india win or level series means this is record:) +ham Then what about further plan? +ham Its good to hear from you +ham awesome, how do I deal with the gate? Charles told me last night but, uh, yeah +ham What time you thinkin of goin? +spam Get a FREE mobile video player FREE movie. To collect text GO to 89105. Its free! Extra films can be ordered t's and c's apply. 18 yrs only +spam Save money on wedding lingerie at www.bridal.petticoatdreams.co.uk Choose from a superb selection with national delivery. Brought to you by WeddingFriend +ham Your board is working fine. The issue of overheating is also reslove. But still software inst is pending. I will come around 8'o clock. +ham Yes but I don't care cause I know its there! +ham wiskey Brandy Rum Gin Beer Vodka Scotch Shampain Wine "KUDI"yarasu dhina vaazhthukkal. .. +ham Mon okie lor... Haha, best is cheap n gd food la, ex oso okie... Depends on whether wana eat western or chinese food... Den which u prefer... +ham Sitting ard nothing to do lor. U leh busy w work? +ham Its <#> k here oh. Should i send home for sale. +ham Sorry. || mail? || +ham Ya just telling abt tht incident.. +ham Yes we were outside for like 2 hours. And I called my whole family to wake them up cause it started at 1 am +ham Ugh just got outta class +ham Nowadays people are notixiquating the laxinorficated opportunity for bambling of entropication.... Have you ever oblisingately opted ur books for the masteriastering amplikater of fidalfication? It is very champlaxigating, i think it is atrocious.. Wotz Ur Opinion???? Junna +ham I dont have any of your file in my bag..i was in work when you called me.i 'll tell you if i find anything in my room. +ham No need lar. Jus testing e phone card. Dunno network not gd i thk. Me waiting 4 my sis 2 finish bathing so i can bathe. Dun disturb u liao u cleaning ur room. +ham Ok. I.ll do you right later. +ham Friendship poem: Dear O Dear U R Not Near But I Can Hear Dont Get Fear Live With Cheer No More Tear U R Always my Dear. Gud ni8 +ham Have your lunch and come quickly and open the door:) +spam Not heard from U4 a while. Call me now am here all night with just my knickers on. Make me beg for it like U did last time 01223585236 XX Luv Nikiyu4.net +ham I am back. Bit long cos of accident on a30. Had to divert via wadebridge.I had a brilliant weekend thanks. Speak soon. Lots of love +ham K.. I yan jiu liao... Sat we can go 4 bugis vill one frm 10 to 3 den hop to parco 4 nb. Sun can go cine frm 1030 to 2, den hop to orc mrt 4 hip hop at 4... +spam Bloomberg -Message center +447797706009 Why wait? Apply for your future http://careers. bloomberg.com +ham i am seeking a lady in the street and a freak in the sheets. Is that you? +ham My phone +ham Haha figures, well I found the piece and priscilla's bowl +ham Actually fuck that, just do whatever, do find an excuse to be in tampa at some point before january though +spam URGENT! We are trying to contact U. Todays draw shows that you have won a £800 prize GUARANTEED. Call 09050001808 from land line. Claim M95. Valid12hrs only +ham yay! finally lol. i missed our cinema trip last week :-( +ham All day working day:)except saturday and sunday.. +ham aathi..where are you dear.. +ham Heart is empty without love.. Mind is empty without wisdom.. Eyes r empty without dreams & Life is empty without frnds.. So Alwys Be In Touch. Good night & sweet dreams +ham I think I‘m waiting for the same bus! Inform me when you get there, if you ever get there. +ham You getting back any time soon? +ham , how's things? Just a quick question. +ham Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay. Gud mrng +ham I can probably come by, everybody's done around <#> right? +ham I got it before the new year cos yetunde said she wanted to surprise you with it but when i didnt see money i returned it mid january before the <#> day return period ended. +ham I can ask around but there's not a lot in terms of mids up here +ham Be sure to check your yahoo email. We sent photos yesterday +ham What was she looking for? +ham Wherre's my boytoy ? :-( +spam Do you want a NEW video phone750 anytime any network mins 150 text for only five pounds per week call 08000776320 now or reply for delivery tomorrow +ham Hello, my love! How goes that day ? I wish your well and fine babe and hope that you find some job prospects. I miss you, boytoy ... *a teasing kiss* +ham Tell my bad character which u Dnt lik in me. I'll try to change in <#> . I ll add tat 2 my new year resolution. Waiting for ur reply.Be frank...good morning. +ham No:-)i got rumour that you going to buy apartment in chennai:-) +ham Yeah, probably earlier than that +ham Change windows logoff sound.. +ham Still i have not checked it da. . . +ham I'm also came to room. +ham Huh but i got lesson at 4 lei n i was thinkin of going to sch earlier n i tot of parkin at kent vale... +ham Ok. +ham I will reach office around <DECIMAL> . & my mobile have problem. You cann't get my voice. So call you asa i'll free +ham Cool, text me when you head out +spam You are being contacted by our dating service by someone you know! To find out who it is, call from a land line 09050000878. PoBox45W2TG150P +spam Wan2 win a Meet+Greet with Westlife 4 U or a m8? They are currently on what tour? 1)Unbreakable, 2)Untamed, 3)Unkempt. Text 1,2 or 3 to 83049. Cost 50p +std text +ham Happy birthday... May u find ur prince charming soon n dun work too hard... +ham Oh, the grand is having a bit of a party but it doesn't mention any cover charge so it's probably first come first served +ham You said to me before i went back to bed that you can't sleep for anything. +ham I hope you arnt pissed off but id would really like to see you tomorrow. Love me xxxxxxxxxxxxxX +spam Dorothy@kiefer.com (Bank of Granite issues Strong-Buy) EXPLOSIVE PICK FOR OUR MEMBERS *****UP OVER 300% *********** Nasdaq Symbol CDGT That is a $5.00 per.. +ham says the <#> year old with a man and money. I'm down to my last <#> . Still waiting for that check. +ham I will come to ur home now +ham Free any day but i finish at 6 on mon n thurs... +ham Will you be here for food +ham life alle mone,eppolum oru pole allalo +ham Nite... +ham Two fundamentals of cool life: "Walk, like you are the KING"...! OR "Walk like you Dont care,whoever is the KING"!... Gud nyt +ham Camera quite good, 10.1mega pixels, 3optical and 5digital dooms. Have a lovely holiday, be safe and i hope you hav a good journey! Happy new year to you both! See you in a couple of weeks! +ham Hi Petey!noi’m ok just wanted 2 chat coz avent spoken 2 u 4 a long time-hope ur doin alrite.have good nit at js love ya am.x +ham I just saw ron burgundy captaining a party boat so yeah +ham I'm serious. You are in the money base +ham Already one guy loving you:-. +ham Staff of placement training in Amrita college. +ham I always chat with you. In fact i need money can you raise me? +ham I'm job profile seems like bpo.. +ham Well, I was about to give up cos they all said no they didn‘t do one nighters. I persevered and found one but it is very cheap so i apologise in advance. It is just somewhere to sleep isnt it? +ham So you think i should actually talk to him? Not call his boss in the morning? I went to this place last year and he told me where i could go and get my car fixed cheaper. He kept telling me today how much he hoped i would come back in, how he always regretted not getting my number, etc. +ham Are you willing to go for apps class. +ham Hanging out with my brother and his family +ham No it will reach by 9 only. She telling she will be there. I dont know +ham Hey... are you going to quit soon? Xuhui and i working till end of the month +ham Im sorry bout last nite it wasn’t ur fault it was me, spouse it was pmt or sumthin! U 4give me? I think u shldxxxx +ham Try neva mate!! +ham Yeah that'd pretty much be the best case scenario +ham I not free today i haf 2 pick my parents up tonite... +ham "HEY BABE! FAR 2 SPUN-OUT 2 SPK AT DA MO... DEAD 2 DA WRLD. BEEN SLEEPING ON DA SOFA ALL DAY, HAD A COOL NYTHO, TX 4 FONIN HON, CALL 2MWEN IM BK FRMCLOUD 9! J X" +ham Should i send you naughty pix? :) +spam You are a £1000 winner or Guaranteed Caller Prize, this is our Final attempt to contact you! To Claim Call 09071517866 Now! 150ppmPOBox10183BhamB64XE +spam Xmas & New Years Eve tickets are now on sale from the club, during the day from 10am till 8pm, and on Thurs, Fri & Sat night this week. They're selling fast! +ham Tyler (getting an 8th) has to leave not long after 9, can you get here in like an hour? +ham Prepare to be pounded every night... +ham Actually, my mobile is full of msg. And i m doing a work online, where i need to send them <#> sent msg i wil explain u later. +ham Sorry, I'll call later +ham Good evening! How are you? +ham I'm at home. Please call +ham Oic cos me n my sis got no lunch today my dad went out... So dunno whether 2 eat in sch or wat... +ham Mmmmm ... It was sooooo good to wake to your words this morning, my Love!! Mmmm fuck ... I love you too, my Lion ... *devouring kiss from across the sea* +ham We are pleased to inform that your application for Airtel Broadband is processed successfully. Your installation will happen within 3 days. +ham What happen dear. Why you silent. I am tensed +ham I'll get there at 3, unless you guys want me to come some time sooner +ham If you are not coughing then its nothing +ham Ü come lt 25 n pass to me lar +ham I'm e person who's doing e sms survey... +ham Lol ok ill try to send. Be warned Sprint is dead slow. You'll prolly get it tomorrow +ham Thank You meet you monday +ham SO IS TH GOWER MATE WHICH IS WHERE I AM!?! HOW R U MAN? ALL IS GOOD IN WALES ILL B BACK ‘MORROW. C U THIS WK? WHO WAS THE MSG 4? – RANDOM! +spam Rock yr chik. Get 100's of filthy films &XXX pics on yr phone now. rply FILTH to 69669. Saristar Ltd, E14 9YT 08701752560. 450p per 5 days. Stop2 cancel +ham Single line with a big meaning::::: "Miss anything 4 ur "Best Life" but, don't miss ur best life for anything... Gud nyt... +ham I got like $ <#> , I can get some more later though. Get whatever you feel like +ham Dad wanted to talk about the apartment so I got a late start, omw now +ham I love you both too :-) +ham Lol u still feeling sick? +ham Din i tell u jus now 420 +ham am up to my eyes in philosophy +spam From next month get upto 50% More Calls 4 Ur standard network charge 2 activate Call 9061100010 C Wire3.net 1st4Terms PoBox84 M26 3UZ Cost £1.50 min MobcudB more +ham Ok lor. I'm in town now lei. +ham I had it already..sabarish asked me to go.. +ham No da. . Vijay going to talk in jaya tv +spam URGENT! We are trying to contact U Todays draw shows that you have won a £800 prize GUARANTEED. Call 09050000460 from land line. Claim J89. po box245c2150pm +ham Lol I know! Hey someone did a great inpersonation of flea on the forums. I love it! +spam Text BANNEDUK to 89555 to see! cost 150p textoperator g696ga 18+ XXX +ham Still chance there. If you search hard you will get it..let have a try :) +spam Auction round 4. The highest bid is now £54. Next maximum bid is £71. To bid, send BIDS e. g. 10 (to bid £10) to 83383. Good luck. +ham Do you always celebrate NY's with your family ? +ham We know TAJ MAHAL as symbol of love. But the other lesser known facts 1. Mumtaz was Shahjahan's 4th wife, out of his 7 wifes. 2. Shahjahan killed Mumtaz's husband to marry her. 3. Mumtaz died in her <#> th delivery. 4. He then married Mumtaz's sister. Question arises where the Hell is the LOVE?:-| -The Great Hari- +ham Its ok..come to my home it vl nice to meet and v can chat.. +spam Collect your VALENTINE'S weekend to PARIS inc Flight & Hotel + £200 Prize guaranteed! Text: PARIS to No: 69101. www.rtf.sphosting.com +ham Sent me de webadres for geting salary slip +ham She's fine. Sends her greetings +spam Customer Loyalty Offer:The NEW Nokia6650 Mobile from ONLY £10 at TXTAUCTION! Txt word: START to No: 81151 & get yours Now! 4T&Ctxt TC 150p/MTmsg +ham But you dint in touch with me. +ham Yup, leaving right now, be back soon +spam You won't believe it but it's true. It's Incredible Txts! Reply G now to learn truly amazing things that will blow your mind. From O2FWD only 18p/txt +ham Yeah sure I'll leave in a min +ham And do you have any one that can teach me how to ship cars. +ham The sign of maturity is not when we start saying big things.. But actually it is, when we start understanding small things... *HAVE A NICE EVENING* BSLVYL +ham Yeah confirmed for you staying at that weekend +ham They said ü dun haf passport or smth like dat.. Or ü juz send to my email account.. +ham Multiply the numbers independently and count decimal points then, for the division, push the decimal places like i showed you. +ham Have a lovely night and when you wake up to see this message, i hope you smile knowing all is as should be. Have a great morning +ham Ard 4 lor... +ham You are right. Meanwhile how's project twins comin up +ham I sent your maga that money yesterday oh. +spam Hi 07734396839 IBH Customer Loyalty Offer: The NEW NOKIA6600 Mobile from ONLY £10 at TXTAUCTION!Txt word:START to No:81151 & get Yours Now!4T& +ham Heart is empty without love.. Mind is empty without wisdom.. Eyes r empty without dreams & Life is empty without frnds.. So Alwys Be In Touch. Good night & sweet dreams +spam I am hot n horny and willing I live local to you - text a reply to hear strt back from me 150p per msg Netcollex LtdHelpDesk: 02085076972 reply Stop to end +ham Our ride equally uneventful - not too many of those pesky cyclists around at that time of night ;). +ham If you were/are free i can give. Otherwise nalla adi entey nattil kittum +ham I've sent my wife your text. After we buy them she'll tell you what to do. So just relax. We should go get them this wkend. +ham I am in escape theatre now. . Going to watch KAVALAN in a few minutes +ham How much would it cost to hire a hitman +ham I anything lor... +ham Sorry, I'll call later +spam Do you want a New Nokia 3510i Colour Phone Delivered Tomorrow? With 200 FREE minutes to any mobile + 100 FREE text + FREE camcorder Reply or Call 08000930705 +ham Huh but i cant go 2 ur house empty handed right? +ham Good morning princess! Happy New Year! +spam Congratulations YOU'VE Won. You're a Winner in our August £1000 Prize Draw. Call 09066660100 NOW. Prize Code 2309. +ham Aight, we'll head out in a few +ham Then wat r u doing now? Busy wif work? +ham I know you mood off today +ham Jay told me already, will do +ham Cps is causing the outages to conserve energy. +ham I'm not sure, I was just checking out what was happening around the area +ham Hey morning what you come to ask:-) pa... +ham Jordan got voted out last nite! +ham That means you got an A in epi, she.s fine. She.s here now. +ham I have no idea where you are +ham Pls come quick cant bare this. +ham Joy's father is John. Then John is the ____ of Joy's father. If u ans ths you hav <#> IQ. Tis s IAS question try to answer. +ham Call me. I m unable to cal. Lets meet bhaskar, and deep +ham No. I.ll meet you in the library +ham K, my roommate also wants a dubsack and another friend may also want some so plan on bringing extra, I'll tell you when they know for sure +ham Depends on individual lor e hair dresser say pretty but my parents say look gong. U kaypoh.. I also dunno wat she collecting. +ham Ok c ü then. +ham I enjoy watching and playing football and basketball. Anything outdoors. And you? +ham Can you please ask macho what his price range is, does he want something new or used plus it he only interfued in the blackberry bold <#> or any bb +ham Sorry sent blank msg again. Yup but trying 2 do some serious studying now. +ham Hey check it da. I have listed da. +spam 8007 25p 4 Alfie Moon's Children in Need song on ur mob. Tell ur m8s. Txt TONE CHARITY to 8007 for nokias or POLY CHARITY for polys :zed 08701417012 profit 2 charity +ham I meant as an apology from me for texting you to get me drugs at <#> at night +ham That means from february to april i'll be getting a place to stay down there so i don't have to hustle back and forth during audition season as i have since my sister moved away from harlem. +ham Goin to workout lor... Muz lose e fats... +ham Damn, poor zac doesn't stand a chance +ham No message..no responce..what happend? +ham I want to tel u one thing u should not mistake me k THIS IS THE MESSAGE THAT YOU SENT:) +ham Yeah right! I'll bring my tape measure fri! +ham Still chance there. If you search hard you will get it..let have a try :) +ham Meeting u is my work. . . Tel me when shall i do my work tomorrow +ham Should I head straight there or what +spam Get the official ENGLAND poly ringtone or colour flag on yer mobile for tonights game! Text TONE or FLAG to 84199. Optout txt ENG STOP Box39822 W111WX £1.50 +ham Thank you princess! You are so sexy... +ham Oooh I got plenty of those! +ham Hui xin is in da lib. +ham Its a big difference. <#> versus <#> every <#> hrs +ham It's not that you make me cry. It's just that when all our stuff happens on top of everything else, it pushes me over the edge. You don't underdtand how often i cry over my sorry, sorry life. +ham "ME 2 BABE I FEEL THE SAME LETS JUST 4GET ABOUT IT+BOTH TRY +CHEER UP+NOT FIT SOO MUCHXXLOVE U LOCAXX" +ham You know what hook up means right? +spam Customer service announcement. We recently tried to make a delivery to you but were unable to do so, please call 07090298926 to re-schedule. Ref:9307622 +ham Wat's da model num of ur phone? +ham He's really into skateboarding now despite the fact that he gets thrown off of it and winds up with bandages and shit all over his arms every five minutes +spam You can stop further club tones by replying "STOP MIX" See my-tone.com/enjoy. html for terms. Club tones cost GBP4.50/week. MFL, PO Box 1146 MK45 2WT (2/3) +ham My house here e sky quite dark liao... If raining then got excuse not 2 run already rite... Hee... +ham Sorry, left phone upstairs. OK, might be hectic but would be all my birds with one fell swoop. It's a date. +ham * Thought I didn't see you. +spam wamma get laid?want real doggin locations sent direct to your mobile? join the UKs largest dogging network. txt dogs to 69696 now!nyt. ec2a. 3lp £1.50/msg. +ham Carlos says we can pick up from him later so yeah we're set +ham Hey babe, my friend had to cancel, still up for a visit ? +ham As per your request 'Maangalyam (Alaipayuthe)' has been set as your callertune for all Callers. Press *9 to copy your friends Callertune +ham Hmm ill have to think about it... ok you're forgiven! =D +ham We are hoping to get away by 7, from Langport. You still up for town tonight? +ham Want to send me a virtual hug?... I need one +ham Probably not, still going over some stuff here +ham It has issues right now. Ill fix for her by tomorrow. +ham Why i come in between you people +ham Senthil group company Apnt 5pm. +ham Oh really?? Did you make it on air? What's your talent? +ham Studying. But i.ll be free next weekend. +ham R u here yet? I'm wearing blue shirt n black pants. +ham Wait.i will come out.. <#> min:) +ham I will reach ur home in <#> minutes +ham Well then you have a great weekend! +ham What are you doing in langport? Sorry, but I'll probably be in bed by 9pm. It sucks being ill at xmas! When do you and go2sri lanka? +ham Frnd s not juz a word.....not merely a relationship.....its a silent promise which says ... " I will be with YOU " Wherevr.. Whenevr.. Forevr... Gudnyt dear.. +ham Huh? 6 also cannot? Then only how many mistakes? +ham Ha... U jus ate honey ar? So sweet... +ham I'm turning off my phone. My moms telling everyone I have cancer. And my sister won't stop calling. It hurts to talk. Can't put up with it. See u when u get home. Love u +ham Honey ? Sweetheart ? Darling ? Sexy buns ? Sugar plum ? Loverboy ? I miss you, boytoy ... *smacks your ass* Did you go to the gym too ? +ham Thanks for loving me so. You rock +ham Yeah imma come over cause jay wants to do some drugs +ham Ok thanx... Take care then... +ham Yup. Thk of u oso boring wat. +ham came to look at the flat, seems ok, in his 50s? * Is away alot wiv work. Got woman coming at 6.30 too. +ham Moji just informed me that you saved our lives. Thanks. +spam You have won a Nokia 7250i. This is what you get when you win our FREE auction. To take part send Nokia to 86021 now. HG/Suite342/2Lands Row/W1JHL 16+ +ham Whos this am in class:-) +ham Hey r ü still online? I've finished the formatting... +ham Great! So what attracts you to the brothas? +spam Promotion Number: 8714714 - UR awarded a City Break and could WIN a £200 Summer Shopping spree every WK. Txt STORE to 88039 . SkilGme. TsCs087147403231Winawk!Age16 £1.50perWKsub +ham Stupid.its not possible +ham I cant pick the phone right now. Pls send a message +ham LOL what happens in Vegas stays in vegas +ham Hello, hello, hi lou sorry it took so long 2 reply- I left mobile at friends in Lancaster, just got it bak Neway im sorry I couldn’t make ur b’day 2 hun! +ham When did i use soc... I use it only at home... Ü dunno how 2 type it in word ar... +ham Dad says hurry the hell up +ham Wake me up at <#> am morning:) +ham I get out of class in bsn in like <#> minutes, you know where advising is? +ham Great! I shoot big loads so get ready! +ham I'll meet you in the lobby +ham You still coming tonight? +ham What happen dear tell me +ham Sir, i am waiting for your call, once free please call me. +ham No i am not having not any movies in my laptop +ham I was about to do it when i texted. I finished a long time ago and showered and er'ything! +ham Ok im not sure what time i finish tomorrow but i wanna spend the evening with you cos that would be vewy vewy lubly! Love me xxx +ham Hello, As per request from <#> Rs.5 has been transfered to you +ham I am in tirupur. call you da. +spam You are a winner you have been specially selected to receive £1000 cash or a £2000 award. Speak to a live operator to claim call 087147123779am-7pm. Cost 10p +ham S:)but he had some luck.2 catches put down:) +ham How i noe... Did ü specify da domain as nusstu... Ü still in sch... +ham Oh...i asked for fun. Haha...take care. ü +ham Shall i get my pouch? +ham Hey loverboy! I love you !! I had to tell ... I look at your picture and ache to feel you between my legs ... Fuck I want you ... I need you ... I crave you . +ham How is my boy? No sweet words left for me this morning ... *sighs* ... How goes you day, my love ? Did you start your studying? +ham Kent vale lor... Ü wait 4 me there ar? +ham Ok. Very good. Its all about making that money. +ham Reading gud habit.. Nan bari hudgi yorge pataistha ertini kano:-) +ham Aight do you still want to get money +spam Free Top ringtone -sub to weekly ringtone-get 1st week free-send SUBPOLY to 81618-?3 per week-stop sms-08718727870 +ham Ok.ok ok..then..whats ur todays plan +ham ARE YOU IN TOWN? THIS IS V. IMPORTANT +ham Sorry pa, i dont knw who ru pa? +ham Wat u doing there? +ham If i not meeting ü all rite then i'll go home lor. If ü dun feel like comin it's ok. +ham Oh, i will get paid. The most outstanding one is for a commercial i did for Hasbro...in AUGUST! They made us jump through so many hoops to get paid. Still not. +ham I am late,so call you tomorrow morning.take care sweet dreams....u and me...ummifying...bye. +ham Networking technical support associate. +ham I'm gonna rip out my uterus. +ham Cool. Do you like swimming? I have a pool and jacuzzi at my house. +spam Thanks for your ringtone order, reference number X49. Your mobile will be charged 4.50. Should your tone not arrive please call customer services 09065989182. From: [colour=red]text[/colour]TXTstar +ham Yeah why not, is the gang all ready +ham Blank is Blank. But wat is blank? Lol +ham I'm in a movie... Collect car oredi... +ham We left already we at orchard now. +spam Hi there, 2nights ur lucky night! Uve been invited 2 XCHAT, the Uks wildest chat! Txt CHAT to 86688 now! 150p/MsgrcvdHG/Suite342/2Lands/Row/W1J6HL LDN 18yrs +ham Nothing spl..wat abt u and whr ru? +ham No chikku nt yet.. Ya i'm free +ham Aldrine, rakhesh ex RTM here.pls call.urgent. +ham The search 4 happiness is 1 of d main sources of unhappiness! Accept life the way it comes! U will find happiness in every moment u live. +ham I'm at home. Please call +ham I guess you could be as good an excuse as any, lol. +ham Isn't frnd a necesity in life? imagine urself witout a frnd.. hw'd u feel at ur colleg? wat'll u do wth ur cell? wat abt functions? thnk abt events espe'll cared, missed & irritated u? 4wrd it to all those dear-loving frnds wthout whom u cant live.. I jst did it.. Takecare..:) GOODMORNING +ham Gud mrng dear hav a nice day +ham Old Orchard near univ. How about you? +ham 4 tacos + 1 rajas burrito, right? +ham It‘s £6 to get in, is that ok? +ham Hows the street where the end of library walk is? +ham Plz note: if anyone calling from a mobile Co. & asks u to type # <#> or # <#> . Do not do so. Disconnect the call,coz it iz an attempt of 'terrorist' to make use of the sim card no. Itz confirmd by nokia n motorola n has been verified by CNN IBN. +ham We stopped to get ice cream and will go back after +ham Did you stitch his trouser +ham No da. . Vijay going to talk in jaya tv +spam 2/2 146tf150p +ham Hey i'm bored... So i'm thinking of u... So wat r u doing? +ham Nah, Wednesday. When should I bring the mini cheetos bag over? +ham Nobody names their penis a girls name this story doesn't add up at all +ham Aight, let me know when you're gonna be around usf +ham I'm not. She lip synced with shangela. +ham Ü neva tell me how i noe... I'm not at home in da aft wat... +ham A bit of Ur smile is my hppnss, a drop of Ur tear is my sorrow, a part of Ur heart is my life, a heart like mine wil care for U, forevr as my GOODFRIEND +spam Dear Voucher Holder 2 claim your 1st class airport lounge passes when using Your holiday voucher call 08704439680. When booking quote 1st class x 2 +ham Buzz! Hey, my Love ! I think of you and hope your day goes well. Did you sleep in ? I miss you babe. I long for the moment we are together again*loving smile* +ham Haha... Sounds crazy, dunno can tahan anot... +ham Why are u up so early? +ham Ya that one is slow as poo +spam Bloomberg -Message center +447797706009 Why wait? Apply for your future http://careers. bloomberg.com +ham "Im on gloucesterroad what are uup to later?" +ham Yes:)here tv is always available in work place.. +spam YES! The only place in town to meet exciting adult singles is now in the UK. Txt CHAT to 86688 now! 150p/Msg. +ham Lol no ouch but wish i'd stayed out a bit longer +ham GOD ASKED, "What is forgiveness?" A little child gave lovely reply, "It is d wonderful fruit that a tree gives when it is being hurt by a stone.. Good night...... +ham We'll join the <#> bus +ham Was just about to ask. Will keep this one. Maybe that's why you didn't get all the messages we sent you on glo +spam FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W45WQ norm150p/tone 16+ +ham K.i will send in <#> min:) +ham Would me smoking you out help us work through this difficult time +spam Someone U know has asked our dating service 2 contact you! Cant guess who? CALL 09058095107 NOW all will be revealed. POBox 7, S3XY 150p +ham Yes.mum lookin strong:) +ham Sir Goodmorning, Once free call me. +ham Where are you call me. +ham Was gr8 to see that message. So when r u leaving? Congrats dear. What school and wat r ur plans. +ham Love it! The girls at the office may wonder why you are smiling but sore... +ham Hi, wlcome back, did wonder if you got eaten by a lion or something, nothing much +ham Does uncle timi help in clearing cars +ham I came hostel. I m going to sleep. Plz call me up before class. Hrishi. +ham Ok... But bag again.. +ham Hi! You just spoke to MANEESHA V. We'd like to know if you were satisfied with the experience. Reply Toll Free with Yes or No. +ham Ok lor. Msg me b4 u call. +spam Mila, age23, blonde, new in UK. I look sex with UK guys. if u like fun with me. Text MTALK to 69866.18 . 30pp/txt 1st 5free. £1.50 increments. Help08718728876 +ham Once a fishrman woke early in d mrng. It was very dark. He waited a while & found a sack ful of stones. He strtd throwin thm in2 d sea 2 pass time. Atlast he had jus 1stone, sun rose up & he found out tht those r nt stones, those were diamonds. Moral:"Dont wake up early in d mrng'' GOOD night +spam Claim a 200 shopping spree, just call 08717895698 now! Have you won! MobStoreQuiz10ppm +ham Then ur physics get a-? +ham Dear friends, sorry for the late information. Today is the birthday of our loving Ar.Praveesh. for more details log on to face book and see. Its his number + <#> . Dont miss a delicious treat. +ham How r ü going to send it to me? +ham Can you do online transaction? +ham Dear got train and seat mine lower seat +ham Let me know if you need anything else. Salad or desert or something... How many beers shall i get? +ham Wat r u doing? +ham WHORE YOU ARE UNBELIEVABLE. +spam Want to funk up ur fone with a weekly new tone reply TONES2U 2 this text. www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply +ham Are you sure you don't mean "get here, we made you hold all the weed" +ham I love you !!! You know? Can you feel it? Does it make your belly warm? I wish it does, my love ... I shall meet you in your dreams, Ahmad ... *adoring kiss* +spam Twinks, bears, scallies, skins and jocks are calling now. Don't miss the weekend's fun. Call 08712466669 at 10p/min. 2 stop texts call 08712460324(nat rate) +ham Love it! I want to flood that pretty pussy with cum... +ham Hey are you angry with me. Reply me dr. +ham Short But Cute: "Be a good person, but dont try to prove it.." .Gud noon.... +ham Also remember the beads don't come off. Ever. +ham They have a thread on the wishlist section of the forums where ppl post nitro requests. Start from the last page and collect from the bottom up. +ham For The First Time In The History 'Need' 'Comfort' And 'Luxury' Are Sold At Same Price In India..!! Onion-Rs. <#> Petrol-Rs. <#> Beer-Rs. <#> SHESIL <#> +ham Feb <#> is "I LOVE U" day. Send dis to all ur "VALUED FRNDS" evn me. If 3 comes back u'll gt married d person u luv! If u ignore dis u will lose ur luv 4 Evr +ham Actually nvm, got hella cash, we still on for <#> ish? +spam We tried to contact you re your reply to our offer of a Video Handset? 750 anytime any networks mins? UNLIMITED TEXT? Camcorder? Reply or call 08000930705 NOW +ham It's ok, at least armand's still around +ham No da. I am happy that we sit together na +ham Yup song bro. No creative. Neva test quality. He said check review online. +ham No dude, its not fake..my frnds got money, thts y i'm reffering u..if u member wit my mail link, u vl be credited <#> rs and il be getiing <#> rs..i can draw my acc wen it is <#> rs.. +ham Dude while were makin those weirdy brownies my sister made awesome cookies. I took pics. +spam URGENT! We are trying to contact you. Last weekends draw shows that you have won a £900 prize GUARANTEED. Call 09061701851. Claim code K61. Valid 12hours only +ham Pls dont restrict her from eating anythin she likes for the next two days. +ham Mm you ask him to come its enough :-) +ham At the funeral home with Audrey and dad +ham Aight, can you text me the address? +ham Excellent! Wish we were together right now! +ham Yep then is fine 7.30 or 8.30 for ice age. +ham Pls i wont belive god.not only jesus. +ham Can. Dunno wat to get 4 her... +ham Not yet chikku..k, then wat abt tht guy did he stopped irritating or msging to u.. +ham How long does it take to get it. +ham This is my number by vivek.. +spam 74355 XMAS iscoming & ur awarded either £500 CD gift vouchers & free entry 2 r £100 weekly draw txt MUSIC to 87066 TnC +ham sorry brah, just finished the last of my exams, what up +ham I got arrested for possession at, I shit you not, <TIME> pm +ham You are right though. I can't give you the space you want and need. This is really starting to become an issue. I was going to suggest setting a definite move out--if i'm still there-- after greece. But maybe you are ready and should do it now. +ham Just normal only here :) +ham Please protect yourself from e-threats. SIB never asks for sensitive information like Passwords,ATM/SMS PIN thru email. Never share your password with anybody. +ham I miss you so much I'm so desparate I have recorded the message you left for me the other day and listen to it just to hear the sound of your voice. I love you +ham Hi. I'm always online on yahoo and would like to chat with you someday +ham Goodmorning,my grandfather expired..so am on leave today. +spam Congratulations U can claim 2 VIP row A Tickets 2 C Blu in concert in November or Blu gift guaranteed Call 09061104276 to claim TS&Cs www.smsco.net cost£3.75max +ham Where are you ? What are you doing ? Are yuou working on getting the pc to your mom's ? Did you find a spot that it would work ? I need you +ham Sure, I'll see if I can come by in a bit +ham I agree. So i can stop thinkin about ipad. Can you please ask macho the same question. +ham Let's pool our money together and buy a bunch of lotto tickets. If we win I get <#> % u get <#> %. Deal? +ham Ok. +ham I had askd u a question some hours before. Its answer +ham Watching tv lor. Nice one then i like lor. +ham I'm thinking that chennai forgot to come for auction.. +ham Then ü come n pick me at 530 ar? +ham Early bird! Any purchases yet? +ham Went to pay rent. So i had to go to the bank to authorise the payment. +ham Erm … ill pick you up at about 6.45pm. That'll give enough time to get there, park and that. +ham HEY MATE! HOWS U HONEY?DID U AVE GOOD HOLIDAY? GIMMI DE GOSS!x +ham Howz pain.it will come down today.do as i said ystrday.ice and medicine. +ham chile, please! It's only a <DECIMAL> hour drive for me. I come down all the time and will be subletting feb-april for audition season. +ham Yes ammae....life takes lot of turns you can only sit and try to hold the steering... +ham Yeah that's what I thought, lemme know if anything's goin on later +ham Mmmm.... I cant wait to lick it! +ham Pls go there today <#> . I dont want any excuses +spam Fantasy Football is back on your TV. Go to Sky Gamestar on Sky Active and play £250k Dream Team. Scoring starts on Saturday, so register now!SKY OPT OUT to 88088 +ham Can you plz tell me the ans. BSLVYL sent via fullonsms.com +ham U in town alone? +ham I to am looking forward to all the sex cuddling.. Only two more sleeps +ham We have all rounder:)so not required:) +ham No, its true..k,Do u knw dis no. <#> ? +ham Dont worry, 1 day very big lambu ji vl come..til then enjoy batchlor party:-) +ham oh ya... Got hip hop open. Haha i was thinking can go for jazz then zoom to cine... Actually tonight i'm free leh... And there's a kb lesson tonight +spam Free msg: Single? Find a partner in your area! 1000s of real people are waiting to chat now!Send CHAT to 62220Cncl send STOPCS 08717890890£1.50 per msg +ham I'm ok. Will do my part tomorrow +ham No! But we found a diff farm shop to buy some cheese. On way back now, can i call in? +ham R u still working now? +spam Win the newest “Harry Potter and the Order of the Phoenix (Book 5) reply HARRY, answer 5 questions - chance to be the first among readers! +ham Yep. I do like the pink furniture tho. +spam Free Msg: Ringtone!From: http://tms. widelive.com/index. wml?id=1b6a5ecef91ff9*37819&first=true18:0430-JUL-05 +ham Customer place, i wil cal u sir. +spam Oh my god! I've found your number again! I'm so glad, text me back xafter this msgs cst std ntwk chg £1.50 +ham A pure hearted person can have a wonderful smile that makes even his/her enemies to feel guilty for being an enemy.. So catch the world with your smile..:) GOODMORNING & HAVE A SMILEY SUNDAY..:) +ham THAT’S ALRITE GIRL, U KNOW GAIL IS NEVA WRONG!!TAKE CARE SWEET AND DON’T WORRY.C U L8TR HUN!LOVE Yaxxx +ham Theoretically yeah, he could be able to come +ham Alright we're hooked up, where you guys at +ham not that I know of, most people up here are still out of town +ham No let me do the math. Your not good at it. +ham Oh ok wait 4 me there... My lect havent finish +ham Yeah my usual guy's out of town but there're definitely people around I know +ham I am joining today formally.Pls keep praying.will talk later. +ham Happy or sad , one thing about past is- "Its no more" GOOD MORNING :-):-). +ham No. Did you multimedia message them or e-mail? +ham Okie but i scared u say i fat... Then u dun wan me already... +ham did u get that message +ham Sorry sir, i will call you tomorrow. senthil.hsbc +ham What you need. You have a person to give na. +ham She left it very vague. She just said she would inform the person in accounting about the delayed rent and that i should discuss with the housing agency about my renting another place. But checking online now and all places around usc are <#> and up +ham Hi juan. Im coming home on fri hey. Of course i expect a welcome party and lots of presents. Ill phone u when i get back. Loads of love nicky x x x x x x x x x +ham Can you plz tell me the ans. BSLVYL sent via fullonsms.com +ham Short But Cute: "Be a good person, but dont try to prove it.." .Gud noon.... +ham Gumby's has a special where a <#> " cheese pizza is $2 so I know what we're doin tonight +spam A link to your picture has been sent. You can also use http://alto18.co.uk/wave/wave.asp?o=44345 +ham Like a personal sized or what +ham Same, I'm at my great aunts anniversary party in tarpon springs +ham Cab is available.they pick up and drop at door steps. +ham ok....take care.umma to you too... +ham Unlimited texts. Limited minutes. +spam Double Mins & 1000 txts on Orange tariffs. Latest Motorola, SonyEricsson & Nokia with Bluetooth FREE! Call MobileUpd8 on 08000839402 or call2optout/HF8 +ham No problem. We will be spending a lot of quality time together... +spam URGENT This is our 2nd attempt to contact U. Your £900 prize from YESTERDAY is still awaiting collection. To claim CALL NOW 09061702893. ACL03530150PM +ham Have you heard from this week? +spam Dear Dave this is your final notice to collect your 4* Tenerife Holiday or #5000 CASH award! Call 09061743806 from landline. TCs SAE Box326 CW25WX 150ppm +ham Yes. Last practice +spam tells u 2 call 09066358152 to claim £5000 prize. U have 2 enter all ur mobile & personal details @ the prompts. Careful! +ham No. Thank you. You've been wonderful +ham Otherwise had part time job na-tuition.. +ham Ü mean it's confirmed... I tot they juz say oni... Ok then... +ham Okie +ham That depends. How would you like to be treated? :) +ham Right on brah, see you later +ham Waiting in e car 4 my mum lor. U leh? Reach home already? +spam Your 2004 account for 07XXXXXXXXX shows 786 unredeemed points. To claim call 08719181259 Identifier code: XXXXX Expires 26.03.05 +spam Do you want a new video handset? 750 anytime any network mins? Half Price Line Rental? Camcorder? Reply or call 08000930705 for delivery tomorrow +ham Went fast asleep dear.take care. +ham No that just means you have a fat head +ham Sounds like a plan! Cardiff is still here and still cold! I'm sitting on the radiator! +ham Serious? What like proper tongued her +ham She.s good. She was wondering if you wont say hi but she.s smiling now. So how are you coping with the long distance +ham How i noe... She's in da car now... Later then c lar... I'm wearing shorts... +spam You have an important customer service announcement. Call FREEPHONE 0800 542 0825 now! +ham Yeah whatever lol +ham Today is ACCEPT DAY..U Accept me as? Brother Sister Lover Dear1 Best1 Clos1 Lvblefrnd Jstfrnd Cutefrnd Lifpartnr Belovd Swtheart Bstfrnd No rply means enemy +ham Ard 530 lor. I ok then message ü lor. +ham Ok. C u then. +ham Eh ur laptop got no stock lei... He say mon muz come again to take a look c got a not... +ham No need to ke qi... Ü too bored izzit y suddenly thk of this... +ham I wish! I don't think its gonna snow that much. But it will be more than those flurries we usually get that melt before they hit the ground. Eek! We haven't had snow since <#> before I was even born! +spam FREE>Ringtone! Reply REAL or POLY eg REAL1 1. PushButton 2. DontCha 3. BabyGoodbye 4. GoldDigger 5. WeBeBurnin 1st tone FREE and 6 more when u join for £3/wk +ham Do 1 thing! Change that sentence into: "Because i want 2 concentrate in my educational career im leaving here.." +ham Oh really? perform, write a paper, go to a movie AND be home by midnight, huh? +ham Okay lor... Will they still let us go a not ah? Coz they will not know until later. We drop our cards into the box right? +ham How? Izzit still raining? +ham As if i wasn't having enough trouble sleeping. +ham I havent add ü yet right.. +ham Lol ... I really need to remember to eat when I'm drinking but I do appreciate you keeping me company that night babe *smiles* +ham Babe ? I lost you ... Will you try rebooting ? +ham Yes. Nigh you cant aha. +ham I thk ü gotta go home by urself. Cos i'll b going out shopping 4 my frens present. +ham Nooooooo I'm gonna be bored to death all day. Cable and internet outage. +ham Sos! Any amount i can get pls. +ham Playin space poker, u? +ham How come guoyang go n tell her? Then u told her? +ham You need to get up. Now. +ham They r giving a second chance to rahul dengra. +ham Yeah, in fact he just asked if we needed anything like an hour ago. When and how much? +ham WHEN THE FIRST STRIKE IS A RED ONE. THE BIRD + ANTELOPE BEGIN TOPLAY IN THE FIELDOF SELFINDEPENDENCE BELIEVE THIS + THE FLOWER OF CONTENTION WILL GROW.RANDOM! +ham Y ü wan to go there? C doctor? +ham Does daddy have a bb now. +spam Free Msg: get Gnarls Barkleys "Crazy" ringtone TOTALLY FREE just reply GO to this message right now! +ham She's borderline but yeah whatever. +ham I got a call from a landline number. . . I am asked to come to anna nagar . . . I will go in the afternoon +ham Until 545 lor... Ya, can go 4 dinner together... +ham I will be gentle princess! We will make sweet gentle love... +ham How u doin baby girl ?? hope u are okay every time I call ure phone is off! I miss u get in touch +ham Sorry, went to bed early, nightnight +ham I like to think there's always the possibility of being in a pub later. +ham HMM yeah if your not too grooved out! And im looking forward to my pound special :) +ham I got to video tape pple type in message lor. U so free wan 2 help me? Hee... Cos i noe u wan 2 watch infernal affairs so ask u along. Asking shuhui oso. +ham Hi dude hw r u da realy mising u today +ham Me hungry buy some food good lei... But mum n yun dun wan juz buy a little bit... +spam Refused a loan? Secured or Unsecured? Can't get credit? Call free now 0800 195 6669 or text back 'help' & we will! +ham I probably won't eat at all today. I think I'm gonna pop. How was your weekend? Did u miss me? +ham I knew it... U slept v late yest? Wake up so late... +ham Haha... dont be angry with yourself... Take it as a practice for the real thing. =) +ham Where is that one day training:-) +ham So i could kiss and feel you next to me... +ham Have a nice day my dear. +ham I sent lanre fakeye's Eckankar details to the mail box +ham Your dad is back in ph? +spam You have been specially selected to receive a "3000 award! Call 08712402050 BEFORE the lines close. Cost 10ppm. 16+. T&Cs apply. AG Promo +ham If you ask her or she say any please message. +ham If e timing can, then i go w u lor... +ham Love you aathi..love u lot.. +ham I was just callin to say hi. Take care bruv! +spam YOU HAVE WON! As a valued Vodafone customer our computer has picked YOU to win a £150 prize. To collect is easy. Just call 09061743386 +ham Did u turn on the heater? The heater was on and set to <#> degrees. +ham Thanks for your message. I really appreciate your sacrifice. I'm not sure of the process of direct pay but will find out on my way back from the test tomorrow. I'm in class now. Do have a wonderful day. +ham That's the trouble with classes that go well - you're due a dodgey one … Expecting mine tomo! See you for recovery, same time, same place +spam Free video camera phones with Half Price line rental for 12 mths and 500 cross ntwk mins 100 txts. Call MobileUpd8 08001950382 or Call2OptOut/674& +ham WOT U UP 2 J? +ham Night night, see you tomorrow +ham Roger that. We‘re probably going to rem in about 20 +ham do u think that any girl will propose u today by seing ur bloody funky shit fucking face...............asssssholeeee................ +ham I wish u were here. I feel so alone +spam Great NEW Offer - DOUBLE Mins & DOUBLE Txt on best Orange tariffs AND get latest camera phones 4 FREE! Call MobileUpd8 free on 08000839402 NOW! or 2stoptxt T&Cs +ham Reason is if the team budget is available at last they buy the unsold players for at base rate.. +ham CERI U REBEL! SWEET DREAMZ ME LITTLE BUDDY!! C YA 2MORO! WHO NEEDS BLOKES +spam ringtoneking 84484 +ham Huh i cant thk of more oredi how many pages do we have? +ham His frens go then he in lor. Not alone wif my mum n sis lor. +ham Nationwide auto centre (or something like that) on Newport road. I liked them there +ham Hey, I missed you tm of last night as my phone was on the charge ... *smiles* ... I am meeting a friend shortly +ham Whatever, juliana. Do whatever you want. +ham Friendship is not a game to play, It is not a word to say, It doesn\'t start on March and ends on May, It is tomorrow, yesterday, today and e +spam Ringtone Club: Gr8 new polys direct to your mobile every week ! +ham Hello. Sort of out in town already. That . So dont rush home, I am eating nachos. Will let you know eta. +ham Ok lor. Anyway i thk we cant get tickets now cos like quite late already. U wan 2 go look 4 ur frens a not? Darren is wif them now... +spam (Bank of Granite issues Strong-Buy) EXPLOSIVE PICK FOR OUR MEMBERS *****UP OVER 300% *********** Nasdaq Symbol CDGT That is a $5.00 per.. +ham I am on the way to ur home +ham Dizzamn, aight I'll ask my suitemates when I get back +ham Nimbomsons. Yep phone knows that one. Obviously, cos thats a real word +ham I love to cuddle! I want to hold you in my strong arms right now... +ham R u in this continent? +ham We'll you pay over like <#> yrs so its not too difficult +spam Bored housewives! Chat n date now! 0871750.77.11! BT-national rate 10p/min only from landlines! +spam We tried to call you re your reply to our sms for a video mobile 750 mins UNLIMITED TEXT free camcorder Reply or call now 08000930705 Del Thurs +ham K...k...when will you give treat? +spam This is the 2nd time we have tried to contact u. U have won the £400 prize. 2 claim is easy, just call 087104711148 NOW! Only 10p per minute. BT-national-rate +ham He's just gonna worry for nothing. And he won't give you money its no use. +ham Did you get any gift? This year i didnt get anything. So bad +ham somewhere out there beneath the pale moon light someone think in of u some where out there where dreams come true... goodnite & sweet dreams +ham Well there's a pattern emerging of my friends telling me to drive up and come smoke with them and then telling me that I'm a weed fiend/make them smoke too much/impede their doing other things so you see how I'm hesitant +ham , ow u dey.i paid 60,400thousad.i told u would call . +ham IM FINE BABES AINT BEEN UP 2 MUCH THO! SAW SCARY MOVIE YEST ITS QUITE FUNNY! WANT 2MRW AFTERNOON? AT TOWN OR MALL OR SUMTHIN?xx +ham I'm reaching home in 5 min. +ham Forgot you were working today! Wanna chat, but things are ok so drop me a text when you're free / bored etc and i'll ring. Hope all is well, nose essay and all xx +ham Ha... Then we must walk to everywhere... Cannot take tram. My cousin said can walk to vic market from our hotel +spam Wan2 win a Meet+Greet with Westlife 4 U or a m8? They are currently on what tour? 1)Unbreakable, 2)Untamed, 3)Unkempt. Text 1,2 or 3 to 83049. Cost 50p +std text +spam Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed £1000 cash or £5000 prize! +ham Discussed with your mother ah? +ham Ok. +ham Sorry, I can't text & drive coherently, see you in twenty +spam You will be receiving this week's Triple Echo ringtone shortly. Enjoy it! +ham In which place i can get rooms cheap:-) +ham Eek that's a lot of time especially since American Pie is like 8 minutes long. I can't stop singing it. +ham "GRAN ONLYFOUND OUT AFEW DAYS AGO.CUSOON HONI" +spam U've been selected to stay in 1 of 250 top British hotels - FOR NOTHING! Holiday valued at £350! Dial 08712300220 to claim - National Rate Call. Bx526, SW73SS +ham University of southern california. +ham We have to pick rayan macleran there. +ham U gd lor go shopping i got stuff to do. U wan 2 watch infernal affairs a not? Come lar... +ham Well. Balls. Time to make calls +ham Wat time ü wan today? +ham <#> in mca. But not conform. +ham Oh ok.. Wat's ur email? +ham Yes, princess. Are you going to make me moan? +ham Lol its ok I didn't remember til last nite +ham […] anyway, many good evenings to u! s +ham Cool, I'll text you in a few +ham Sorry vikky, i'm Watching olave mandara movie kano in trishul theatre wit my frnds.. +ham I'm very happy for you babe ! Woo hoo party on dude! +ham I am taking you for italian food. How about a pretty dress with no panties? :) +ham Wot u up 2? Thout u were gonna call me!! Txt bak luv K +spam YOU ARE CHOSEN TO RECEIVE A £350 AWARD! Pls call claim number 09066364311 to collect your award which you are selected to receive as a valued mobile customer. +ham How are you holding up? +ham Dont flatter yourself... Tell that man of mine two pints of carlin in ten minutes please.... +ham Hope you are not scared! +ham I cant pick the phone right now. Pls send a message +ham I'm at home n ready... +spam Please call our customer service representative on FREEPHONE 0808 145 4742 between 9am-11pm as you have WON a guaranteed £1000 cash or £5000 prize! +ham What time do u get out? +ham I am literally in bed and have been up for like <#> hours +ham Yes, my reg is Ciao! +ham If You mean the website. Yes. +spam Win a £1000 cash prize or a prize worth £5000 +spam Thanks for your ringtone order, reference number X49.Your mobile will be charged 4.50. Should your tone not arrive please call customer services 09065989182 +ham Lol or I could just starve and lose a pound by the end of the day. +ham Yeah that's the impression I got +ham Ok ok take care. I can understand. +ham Motivate Behind every darkness, there is a shining light waiting for you to find it... Behind every best friend, there is always trust and love... BSLVYL +ham Ya ok, then had dinner? +ham I was slept that time.you there? +ham dont make ne plans for nxt wknd coz she wants us to come down then ok +ham When is school starting. Where will you stay. What's the weather like. And the food. Do you have a social support system like friends in the school. All these things are important. +ham Ha ha nan yalrigu heltini..Iyo kothi chikku, u shared many things wit me..so far i didn't told any body and even uttered a word abt u.. If ur trusting me so much how can i tell these to others.. Plz nxt time dont use those words to me..ok, chikku:-);-)B-) +ham Noice. Text me when you're here +ham Hi di is yijue we're meeting at 7 pm at esaplanade tonight. +spam Moby Pub Quiz.Win a £100 High Street prize if u know who the new Duchess of Cornwall will be? Txt her first name to 82277.unsub STOP £1.50 008704050406 SP +spam This weeks SavaMob member offers are now accessible. Just call 08709501522 for details! SavaMob, POBOX 139, LA3 2WU. Only £1.50/week. SavaMob - offers mobile! +ham Aight I've been set free, think you could text me blake's address? It occurs to me I'm not quite as sure what I'm doing as I thought I was +ham Hi dear we saw dear. We both are happy. Where you my battery is low +ham How are you. Its been ages. How's abj +ham Prof: you have passed in all the papers in this sem congrats . . . . Student: Enna kalaachutaarama..!! Prof:???? Gud mrng! +ham Dont kick coco when he's down +ham Fyi I'm gonna call you sporadically starting at like <#> bc we are not not doin this shit +spam You are being contacted by our Dating Service by someone you know! To find out who it is, call from your mobile or landline 09064017305 PoBox75LDNS7 +spam TBS/PERSOLVO. been chasing us since Sept for£38 definitely not paying now thanks to your information. We will ignore them. Kath. Manchester. +ham Hope you’re not having too much fun without me!! see u tomorrow love jess x +ham Ok i wont call or disturb any one. I know all are avoiding me. I am a burden for all +ham I've reached home n i bathe liao... U can call me now... +spam Loans for any purpose even if you have Bad Credit! Tenants Welcome. Call NoWorriesLoans.com on 08717111821 +ham Was the actual exam harder than NBME +ham A lot of this sickness thing going round. Take it easy. Hope u feel better soon. Lol +ham God picked up a flower and dippeditinaDEW, lovingly touched itwhichturnedinto u, and the he gifted tomeandsaid,THIS FRIEND IS 4U +spam 87077: Kick off a new season with 2wks FREE goals & news to ur mobile! Txt ur club name to 87077 eg VILLA to 87077 +ham Hey sathya till now we dint meet not even a single time then how can i saw the situation sathya. +ham Gam gone after outstanding innings. +ham O i played smash bros <#> religiously. +ham Sir, good morning. Hope you had a good weekend. I called to let you know that i was able to raise <#> from my dad. He however said he would make the rest available by mid feb. This amount is still quite short and i was hoping you would help. Do have a good day. Abiola +ham Hurry home. Soup is DONE! +ham No no. I will check all rooms befor activities +ham Good afternoon, my love. It was good to see your words on YM and get your tm. Very smart move, my slave ... *smiles* ... I drink my coffee and await you. +ham Quite ok but a bit ex... U better go eat smth now else i'll feel guilty... +spam Orange brings you ringtones from all time Chart Heroes, with a free hit each week! Go to Ringtones & Pics on wap. To stop receiving these tips reply STOP. +ham Lemme know when you're here +spam PRIVATE! Your 2003 Account Statement for 07973788240 shows 800 un-redeemed S. I. M. points. Call 08715203649 Identifier Code: 40533 Expires 31/10/04 +ham He needs to stop going to bed and make with the fucking dealing +ham How are you, my Love ? Are you with your brother ? Time to talk english with him ? *grins* Say : Hey Muhommad, Penny says hello from across the sea +spam We tried to call you re your reply to our sms for a video mobile 750 mins UNLIMITED TEXT + free camcorder Reply of call 08000930705 Now +ham Hey doc pls I want to get nice t shirt for my hubby nice fiting ones my budget is <#> k help pls I will load d card abi hw,keep me posted luv. 2 mj +ham I remain unconvinced that this isn't an elaborate test of my willpower +ham "Life is nothing wen v get everything". But "life is everything wen v miss something ". Real value of people wil be realized only in their absence.... gud mrng +ham how are you? I miss you! +ham I ain't answerin no phone at what is actually a pretty reasonable hour but I'm sleepy +ham Hey , is * rite u put »10 evey mnth is that all? +ham i am going to bed now prin +ham I think just yourself …Thanks and see you tomo +ham If u dun drive then how i go 2 sch. +ham I not at home now lei... +spam GSOH? Good with SPAM the ladies?U could b a male gigolo? 2 join the uk's fastest growing mens club reply ONCALL. mjzgroup. 08714342399.2stop reply STOP. msg@£1.50rcvd +ham Ok then i will come to ur home after half an hour +spam U have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094599 +ham Do u hav any frnd by name ashwini in ur college? +ham Jus finish my lunch on my way home lor... I tot u dun wan 2 stay in sch today... +ham K then 2marrow are you coming to class. +spam HOT LIVE FANTASIES call now 08707500020 Just 20p per min NTT Ltd, PO Box 1327 Croydon CR9 5WB 0870 is a national rate call +ham Pls send me your address sir. +ham I want to lick your pussy now... +ham Yo, you gonna still be in stock tomorrow/today? I'm trying to get a dubsack +spam URGENT! Your Mobile number has been awarded a 2000 prize GUARANTEED. Call 09061790125 from landline. Claim 3030. Valid 12hrs only 150ppm +ham I'll see, but prolly yeah +ham Thought we could go out for dinner. I'll treat you! Seem ok? +ham Where are you ? What do you do ? How can you stand to be away from me ? Doesn't your heart ache without me ? Don't you wonder of me ? Don't you crave me ? +ham Sorry. You never hear unless you book it. One was kinda a joke--thet were really looking for skinny white girls. The other was one line--you can only do so much on camera with that. Something like that they're casting on the look. +ham What you doing?how are you? +ham Sure thing big man. i have hockey elections at 6, shouldn‘t go on longer than an hour though +ham Watch lor. I saw a few swatch one i thk quite ok. Ard 116 but i need 2nd opinion leh... +ham Hiya do u like the hlday pics looked horrible in them so took mo out! Hows the camp Amrca thing? Speak soon Serena:) +ham Babe! How goes that day ? What are you up to ? I miss you already, my Love ... * loving kiss* ... I hope everything goes well. +ham Yunny... I'm goin to be late +ham Doc prescribed me morphine cause the other pain meds aren't enough. Waiting for my mom to bring it. That med should kick in fast so I'm gonna try to be on later +ham Cool, want me to go to kappa or should I meet you outside mu +ham Hey sexy buns ! Have I told you ? I adore you, loverboy. I hope you remember to thank your sister in law for those meatballs *grins* ... i love you, babe +ham May b approve panalam...but it should have more posts.. +spam SPJanuary Male Sale! Hot Gay chat now cheaper, call 08709222922. National rate from 1.5p/min cheap to 7.8p/min peak! To stop texts call 08712460324 (10p/min) +ham Sorry, I'll call later +ham I dont thnk its a wrong calling between us +ham Me i'm not workin. Once i get job... +ham And by when you're done I mean now +ham "Its Ur luck to Love someone. Its Ur fortune to Love the one who Loves U. But, its a miracle to Love a person who can't Love anyone except U..." Gud nyt... +ham Hi baby ive just got back from work and i was wanting to see u allday! I hope i didnt piss u off on the phone today. If u are up give me a call xxx +spam FreeMsg Today's the day if you are ready! I'm horny & live in your town. I love sex fun & games! Netcollex Ltd 08700621170150p per msg reply Stop to end +ham Is it your yahoo boys that bring in the perf? Or legal. +ham No need to say anything to me. I know i am an outsider +ham have you ever had one foot before? +ham Just got to <#> +ham Good! No, don‘t need any receipts—well done! (…) Yes, please tell . What‘s her number, i could ring her +ham Ever green quote ever told by Jerry in cartoon "A Person Who Irritates u Always Is the one Who Loves u Vry Much But Fails to Express It...!..!! :-) :-) gud nyt +ham Leave it wif me lar... Ü wan to carry meh so heavy... Is da num 98321561 familiar to ü? +ham Beautiful truth : Expression of the face could Be seen by everyone... But the depression of heart Could be understood only By the Loved ones.. Gud Ni8;-) +ham Infact happy new year. How are you where are you when are we seeing +spam In The Simpsons Movie released in July 2007 name the band that died at the start of the film? A-Green Day, B-Blue Day, C-Red Day. (Send A, B or C) +ham That's a shame! Maybe cld meet for few hrs tomo? +ham Lol I would but despite these cramps I like being a girl. +ham I can’t wait for cornwall. Hope tonight isn’t too bad as well but it’s rock night shite. Anyway i’m going for a kip now have a good night. Speak to you soon. +ham Pls help me tell sura that i'm expecting a battery from hont. And that if should pls send me a message about how to download movies. Thanks +spam Please call Amanda with regard to renewing or upgrading your current T-Mobile handset free of charge. Offer ends today. Tel 0845 021 3680 subject to T's and C's +ham Haven't found a way to get another app for your phone, eh ? Will you go to the net cafe ? Did you take that job? Geeee I need you babe. I crave to see you ... +ham I only work from mon to thurs but Sat i cant leh... Booked liao... Which other day u free? +ham Ü comin to fetch us oredi... +ham What's nannys address? +spam URGENT!! Your 4* Costa Del Sol Holiday or £5000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost£1.50/pm, Max10mins +ham Haf u eaten? Wat time u wan me 2 come? +spam Want a new Video Phone? 750 anytime any network mins? Half price line rental free text for 3 months? Reply or call 08000930705 for free delivery +ham Yo, call me when you get the chance, a friend of mine wanted me to ask you about a big order +ham This single single answers are we fighting? Plus i said am broke and you didnt reply +ham It certainly puts things into perspective when something like this happens +ham Now got tv 2 watch meh? U no work today? +ham i felt so...not any conveying reason.. Ese he... What about me? +spam Had your mobile 11 months or more? U R entitled to Update to the latest colour mobiles with camera for Free! Call The Mobile Update Co FREE on 08002986030 +ham How's it going? Got any exciting karaoke type activities planned? I'm debating whether to play football this eve. Feeling lazy though. +ham I told that am coming on wednesday. +ham Its ok, called mom instead have fun +spam Dear Voucher Holder, To claim this weeks offer, at your PC please go to http://www.wtlp.co.uk/text. Ts&Cs apply. +ham Well if I'm that desperate I'll just call armand again +ham Are you at work right now ? +spam Congrats! Nokia 3650 video camera phone is your Call 09066382422 Calls cost 150ppm Ave call 3mins vary from mobiles 16+ Close 300603 post BCM4284 Ldn WC1N3XX +ham Haven't heard anything and he's not answering my texts so I'm guessing he flaked. That said the jb is fantastic +ham Mmmmmm ... I love you,so much, Ahmad ... I can't wait for this year to begin as every second takes me closer to being at your side. Happy New Year, my love!! +ham Pls what's the full name of joke's school cos fees in university of florida seem to actually be <#> k. Pls holla back +ham Sorry, I'll call later +ham Ok... But they said i've got wisdom teeth hidden inside n mayb need 2 remove. +ham And pls pls drink plenty plenty water +ham How are you doing. How's the queen. Are you going for the royal wedding +ham He's in lag. That's just the sad part but we keep in touch thanks to skype +ham Ok lor then we go tog lor... +ham Two teams waiting for some players +ham Can ü send me a copy of da report? +ham swhrt how u dey,hope ur ok, tot about u 2day.love n miss.take care. +ham Ok da, i already planned. I wil pick you. +spam Urgent! Please call 0906346330. Your ABTA complimentary 4* Spanish Holiday or £10,000 cash await collection SAE T&Cs BOX 47 PO19 2EZ 150ppm 18+ +ham Sorry, I'll call later in meeting +ham I just really need shit before tomorrow and I know you won't be awake before like 6 +ham I'm good. Have you registered to vote? +ham Hmm ok, i'll stay for like an hour cos my eye is really sore! +ham Dear got bus directly to calicut +ham Mm umma ask vava also to come tell him can play later together +ham Well the general price is <#> /oz, let me know if/when/how much you want +ham Sorry, I'll call later +ham Each Moment in a day,has its own value-Morning brings hope,afternoon brings faith,Evening brings luv,Night brings rest,Wish u find them all today.Good Morning +ham <#> w jetton ave if you forgot +ham Ok i'm coming home now. +ham Can not use foreign stamps in this country. +spam Double mins and txts 4 6months FREE Bluetooth on Orange. Available on Sony, Nokia Motorola phones. Call MobileUpd8 on 08000839402 or call2optout/N9DX +ham Sorry, it's a lot of friend-of-a-friend stuff, I'm just now about to talk to the actual guy who wants to buy +spam FREE for 1st week! No1 Nokia tone 4 ur mob every week just txt NOKIA to 8007 Get txting and tell ur mates www.getzed.co.uk POBox 36504 W45WQ norm150p/tone 16+ +spam Want to funk up ur fone with a weekly new tone reply TONES2U 2 this text. www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply +spam cmon babe, make me horny, *turn* me on! Txt me your fantasy now babe -) Im hot, sticky and need you now. All replies cost £1.50. 2 cancel send STOP +ham I will come tomorrow di +ham Wylie update: my weed dealer carlos went to freedom and had a class with lunsford +ham Are you happy baby ? Are you alright ? Did you take that job ? I hope your fine. I send you a kiss to make you smile from across the sea ... *kiss* *kiss* +ham C movie is juz last minute decision mah. Juz watch 2 lar but i tot ü not interested. +ham How are you enjoying this semester? Take care brother. +spam IMPORTANT INFORMATION 4 ORANGE USER 0796XXXXXX. TODAY IS UR LUCKY DAY!2 FIND OUT WHY LOG ONTO http://www.urawinner.com THERE'S A FANTASTIC PRIZEAWAITING YOU! +ham Get the door, I'm here +ham Lets use it next week, princess :) +ham Or i go home first lar ü wait 4 me lor.. I put down my stuff first.. +ham I want kfc its Tuesday. Only buy 2 meals ONLY 2. No gravy. Only 2 Mark. 2! +ham No da:)he is stupid da..always sending like this:)don believe any of those message.pandy is a mental:) +ham Oi when you gonna ring +spam Missed call alert. These numbers called but left no message. 07008009200 +ham I attended but nothing is there. +ham Ard 530 like dat lor. We juz meet in mrt station then ü dun haf to come out. +ham No dear i was sleeping :-P +ham Er mw im filled tuth is aight +ham Will be office around 4 pm. Now i am going hospital. +ham Actually i'm waiting for 2 weeks when they start putting ad. +ham Anything lor if they all go then i go lor... +ham U free on sat rite? U wan 2 watch infernal affairs wif me n darren n mayb xy? +ham Plz note: if anyone calling from a mobile Co. & asks u to type # <#> or # <#> . Do not do so. Disconnect the call,coz it iz an attempt of 'terrorist' to make use of the sim card no. Itz confirmd by nokia n motorola n has been verified by CNN IBN. +ham Yo you around? A friend of mine's lookin to pick up later tonight +ham Stupid auto correct on my phone +ham Double eviction this week - Spiral and Michael and good riddance to them! +ham "The world suffers a lot... Not because of the violence of bad people. But because of the silence of good people!", Gud night.... +ham Ok thats cool. Its , just off either raglan rd or edward rd. Behind the cricket ground. Gimme ring when ur closeby see you tuesday. +ham Buy one egg for me da..please:) +ham Have you started in skye +ham Have you bookedthe hut? And also your time off? How are you by the way? +ham And several to you sir. +ham U really pig leh sleep so much. My dad wake me up at 10 smth 2 eat lunch today. +ham I'm at home. Please call +ham My love ... I hope your not doing anything drastic. Don't you dare sell your pc or your phone ... +ham Now only i reached home. . . I am very tired now. . I will come tomorro +spam FREEMSG: Our records indicate you may be entitled to 3750 pounds for the Accident you had. To claim for free reply with YES to this msg. To opt out text STOP +spam U can WIN £100 of Music Gift Vouchers every week starting NOW Txt the word DRAW to 87066 TsCs www.Idew.com SkillGame, 1Winaweek, age16. 150ppermessSubscription +ham Life style garments account no please. +ham Lol wtf random. Btw is that your lunch break +ham Sez, hows u & de arab boy? Hope u r all good give my love 2 evry1 love ya eshxxxxxxxxxxx +ham The LAY MAN! Just to let you know you are missed and thought off. Do have a great day. And if you can send me bimbo and ugo's numbers, ill appreciate. Safe +ham Detroit. The home of snow. Enjoy it. +spam Show ur colours! Euro 2004 2-4-1 Offer! Get an England Flag & 3Lions tone on ur phone! Click on the following service message for info! +ham Okie... +ham Aight, I'm chillin in a friend's room so text me when you're on the way +ham Is toshiba portege m100 gd? +ham Well welp is sort of a semiobscure internet thing +spam Text PASS to 69669 to collect your polyphonic ringtones. Normal gprs charges apply only. Enjoy your tones +spam accordingly. I repeat, just text the word ok on your mobile phone and send +ham Loosu go to hospital. De dont let it careless. +ham How much for an eighth? +ham Omg Joanna is freaking me out. She's looked thru all my friends to find photos of me. And then she's asking about stuff on my MySpace which I haven't even logged on in like a year. :/ +ham Send ur birthdate with month and year, I will tel u ur LIFE PARTNER'S name. and the method of calculation. Reply must. +ham Juz now havent woke up so a bit blur blur... Can? Dad went out liao... I cant cum now oso... +ham How about clothes, jewelry, and trips? +spam Block Breaker now comes in deluxe format with new features and great graphics from T-Mobile. Buy for just £5 by replying GET BBDELUXE and take the challenge +ham Aah! A cuddle would be lush! I'd need lots of tea and soup before any kind of fumbling! +spam important information 4 orange user . today is your lucky day!2find out why log onto http://www.urawinner.com THERE'S A FANTASTIC SURPRISE AWAITING YOU! +ham I am late. I will be there at +ham Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish. +ham Are you plans with your family set in stone ? +ham Pls dont forget to study +ham You'll never believe this but i have actually got off at taunton. Wow +ham Den only weekdays got special price... Haiz... Cant eat liao... Cut nails oso muz wait until i finish drivin wat, lunch still muz eat wat... +ham She just broke down a list of reasons why nobody's in town and I can't tell if she's being sarcastic or just faggy +ham <DECIMAL> m but its not a common car here so its better to buy from china or asia. Or if i find it less expensive. I.ll holla +ham The greatest test of courage on earth is to bear defeat without losing heart....gn tc +ham SORRY IM STIL FUCKED AFTER LAST NITE WENT TOBED AT 430 GOT UP 4 WORK AT 630 +ham Hey so whats the plan this sat? +ham Beauty sleep can help ur pimples too. +ham Great. Hope you are using your connections from mode men also cos you can never know why old friends can lead you to today +spam Natalja (25/F) is inviting you to be her friend. Reply YES-440 or NO-440 See her: www.SMS.ac/u/nat27081980 STOP? Send STOP FRND to 62468 +ham Where to get those? +ham Kind of. Just missed train cos of asthma attack, nxt one in half hr so driving in. not sure where to park. +ham Ball is moving a lot.will spin in last :)so very difficult to bat:) +ham Haiyoh... Maybe your hamster was jealous of million +ham Can you please send me my aunty's number +ham I'm glad. You are following your dreams. +ham I've reached home finally... +spam URGENT. Important information for 02 user. Today is your lucky day! 2 find out why , log onto http://www.urawinner.com there is a fantastic surprise awaiting you ! +spam WINNER!! As a valued network customer you have been selected to receivea £900 prize reward! To claim call 09061701461. Claim code KL341. Valid 12 hours only. +ham Wn u r hurt by d prsn who s close 2 u, do fight wit dem. Coz somtimes dis fight saves a relation bt being quiet leaves nothin in a relation.. Gud eveB-) +ham U can call now... +ham Science tells that chocolate will melt under the sunlight. Please don't walk under the sunlight. BCoz,I don't want to loss a sweet friend. +ham Yes. I come to nyc for audiitions and am trying to relocate. +ham I pocked you up there before +ham Congrats. That's great. I wanted to tell you not to tell me your score cos it might make me relax. But its motivating me so thanks for sharing +ham I wud never mind if u dont miss me or if u dont need me.. But u wil really hurt me wen u need me & u dont tell me......... Take care:-) +ham Hey mr whats the name of that bill brison book the one about language and words +ham Okay, good, no problem, and thanx! +ham For you information, IKEA is spelled with all caps. That is not yelling. when you thought i had left you, you were sitting on the bed among the mess when i came in. i said we were going after you got home from class. please don't try and bullshit me. It makes me want to listen to you less. +ham Call me when u're done... +ham G.W.R +ham You best watch what you say cause I get drunk as a motherfucker +spam Kit Strip - you have been billed 150p. Netcollex Ltd. PO Box 1013 IG11 OJA +spam HMV BONUS SPECIAL 500 pounds of genuine HMV vouchers to be won. Just answer 4 easy questions. Play Now! Send HMV to 86688 More info:www.100percent-real.com +spam Please CALL 08712402578 immediately as there is an urgent message waiting for you +spam thesmszone.com lets you send free anonymous and masked messages..im sending this message from there..do you see the potential for abuse??? +spam WELL DONE! Your 4* Costa Del Sol Holiday or £5000 await collection. Call 09050090044 Now toClaim. SAE, TCs, POBox334, Stockport, SK38xh, Cost£1.50/pm, Max10mins +ham Hurt me... Tease me... Make me cry... But in the end of my life when i die plz keep one rose on my grave and say STUPID I MISS U.. HAVE A NICE DAY BSLVYL +ham Erm... Woodland avenue somewhere. Do you get the parish magazine, his telephone number will be in there. +ham Are there TA jobs available? Let me know please cos i really need to start working +ham Aiyar hard 2 type. U later free then tell me then i call n scold n tell u. +ham Yup i'm free... +ham Good good, billy mates all gone. Just been jogging, again! Did enjoy concert? +ham Yo come over carlos will be here soon +ham Awww dat is sweet! We can think of something to do he he! Have a nice time tonight ill probably txt u later cos im lonely :( xxx. +ham I guess it is useless calling u 4 something important. +ham Ha ha - had popped down to the loo when you hello-ed me. Hello! +ham He dint tell anything. He is angry on me that why you told to abi. +spam Someone U know has asked our dating service 2 contact you! Cant Guess who? CALL 09058091854 NOW all will be revealed. PO BOX385 M6 6WU +ham It so happens that there r 2waxsto do wat you want. She can come and ill get her medical insurance. And she'll be able to deliver and have basic care. I'm currently shopping for the right medical insurance for her. So just give me til friday morning. Thats when i.ll see the major person that can guide me to the right insurance. +ham I keep ten rs in my shelf:) buy two egg. +ham I wasn't well babe, i have swollen glands at my throat ... What did you end up doing ? +ham Is ur changes 2 da report big? Cos i've already made changes 2 da previous report. +ham Captain is in our room:) +ham I can't speak, bcaz mobile have problem. I can listen you but you cann't listen my voice. So i calls you later. +ham HIYA STU WOT U UP 2.IM IN SO MUCH TRUBLE AT HOME AT MOMENT EVONE HATES ME EVEN U! WOT THE HELL AV I DONE NOW? Y WONT U JUST TELL ME TEXT BCK PLEASE LUV DAN +ham S...i will take mokka players only:) +ham Are you still playing with gautham? +ham Hey mr and I are going to the sea view and having a couple of gays I mean games! Give me a bell when ya finish +ham K, jason says he's gonna be around so I'll be up there around <#> +ham Sorry . I will be able to get to you. See you in the morning. +ham Aight well keep me informed +ham I am not having her number sir +ham Am only searching for good dual sim mobile pa. +ham That seems unnecessarily hostile +ham Dude got a haircut. Now its breezy up there +spam Congrats! 2 mobile 3G Videophones R yours. call 09061744553 now! videochat wid ur mates, play java games, Dload polyH music, noline rentl. bx420. ip4. 5we. 150pm +ham 1Apple/Day=No Doctor. 1Tulsi Leaf/Day=No Cancer. 1Lemon/Day=No Fat. 1Cup Milk/day=No Bone Problms 3 Litres Watr/Day=No Diseases Snd ths 2 Whom U Care..:-) +ham i thought we were doing a king of the hill thing there. +ham Nope i'll come online now.. +ham ALSO TELL HIM I SAID HAPPY BIRTHDAY +ham Y bishan lei... I tot ü say lavender? +ham Boo what time u get out? U were supposed to take me shopping today. :( +ham Now u sound like manky scouse boy steve,like! I is travelling on da bus home.wot has u inmind 4 recreation dis eve? +ham Fyi I'm taking a quick shower, be at epsilon in like <#> min +ham on a Tuesday night r u 4 real +ham Yes when is the appt again? +ham Just got outta class gonna go gym. +ham I want to sent <#> mesages today. Thats y. Sorry if i hurts +ham Ü all write or wat.. +ham Ha! I wouldn't say that I just didn't read anything into way u seemed. I don't like 2 be judgemental....i save that for fridays in the pub! +ham Its a valentine game. . . send dis msg to all ur friends. . If 5 answers r d same then someone really loves u. . Ques- which colour suits me the best? +ham Hi:)did you asked to waheeda fathima about leave? +ham Enjoy urself tmr... +ham You still around? I could use a half-8th +spam U 447801259231 have a secret admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09058094597 +ham You give us back my id proof and <#> rs. We wont allow you to work. We will come to your home within days +ham Ü bot notes oredi... Cos i juz rem i got... +ham Yes. Rent is very expensive so its the way we save. +ham Night has ended for another day, morning has come in a special way. May you smile like the sunny rays and leaves your worries at the blue blue bay. Gud mrng +ham Hows the pain dear?y r u smiling? +ham Fun fact: although you would think armand would eventually build up a tolerance or some shit considering how much he smokes, he gets fucked up in like 2 hits +spam important information 4 orange user 0789xxxxxxx. today is your lucky day!2find out why log onto http://www.urawinner.com THERE'S A FANTASTIC SURPRISE AWAITING YOU! +ham Sorry, I can't help you on this. +ham Great. So should i send you my account number. +ham HELLOGORGEOUS, HOWS U? MY FONE WAS ON CHARGE LST NITW WEN U TEXD ME. HOPEU AD A NICE WKEND AS IM SURE U DID LOOKIN 4WARD 2 C-IN U 2MRW LUV JAZ +spam Our dating service has been asked 2 contact U by someone shy! CALL 09058091870 NOW all will be revealed. POBox84, M26 3UZ 150p +ham Ü only send me the contents page... +ham Night sweet, sleep well! I've just been to see The Exorcism of Emily Rose and may never sleep again! Hugs and snogs! +ham Don't Think About "What u Have Got" Think About "How to Use It That You Have Got" gooD ni8 +ham I can't right this second, gotta hit people up first +ham Evry Emotion dsn't hav Words.Evry Wish dsn't hav Prayrs.. If u Smile,D World is wit u.Othrwise even d Drop of Tear dsn't lik 2 Stay wit u.So b happy.. Good morning, keep smiling:-) +ham So what about you. What do you remember +ham Ujhhhhhhh computer shipped out with address to sandiago and parantella lane. Wtf. Poop. +ham Mm yes dear look how i am hugging you both. :-P +ham I like dis sweater fr mango but no more my size already so irritating. +ham 1 I don't have her number and 2 its gonna be a massive pain in the ass and i'd rather not get involved if that's possible +ham Anytime lor... +spam Do you want a new Video handset? 750 any time any network mins? UNLIMITED TEXT? Camcorder? Reply or Call now 08000930705 for del Sat AM +ham Purity of friendship between two is not about smiling after reading the forwarded message..Its about smiling just by seeing the name. Gud evng +spam Ur balance is now £600. Next question: Complete the landmark, Big, A. Bob, B. Barry or C. Ben ?. Text A, B or C to 83738. Good luck! +ham Me fine..absolutly fine +ham K and you're sure I don't have to have consent forms to do it :V +spam Ur TONEXS subscription has been renewed and you have been charged £4.50. You can choose 10 more polys this month. www.clubzed.co.uk *BILLING MSG* +spam If you don't, your prize will go to another customer. T&C at www.t-c.biz 18+ 150p/min Polo Ltd Suite 373 London W1J 6HL Please call back if busy +ham How much is torch in 9ja. +ham Doing nothing, then u not having dinner w us? +ham How are you. Just checking up on you +ham Done it but internet connection v slow and can‘t send it. Will try again later or first thing tomo. +ham Mathews or tait or edwards or anderson +ham yeah sure thing mate haunt got all my stuff sorted but im going sound anyway promoting hex for .by the way who is this? dont know number. Joke +ham No need lar i go engin? Cos my sis at arts today... +ham Thanks honey but still haven't heard anything I will leave it a bit longer so not 2 crowd him and will try later - great advice thanks hope cardiff is still there! +spam Do you want a New Nokia 3510i Colour Phone Delivered Tomorrow? With 200 FREE minutes to any mobile + 100 FREE text + FREE camcorder Reply or Call 8000930705 +ham , im .. On the snowboarding trip. I was wondering if your planning to get everyone together befor we go..a meet and greet kind of affair? Cheers, +ham S.i'm watching it in live.. +ham see you then, we're all christmassy here! +ham K I'm ready, <#> ? +ham Do you know why god created gap between your fingers..? So that, One who is made for you comes & fills those gaps by holding your hand with LOVE..! +ham The greatest test of courage on earth is to bear defeat without losing heart....gn tc +ham what are your new years plans? +spam RECPT 1/3. You have ordered a Ringtone. Your order is being processed... +ham Baaaaaaaabe! Wake up ! I miss you ! I crave you! I need you! +ham Only just got this message, not ignoring you. Yes, i was. Shopping that is +ham Dear :-/ why you mood off. I cant drive so i brother to drive +ham When did dad get back. +ham Can you tell Shola to please go to college of medicine and visit the academic department, tell the academic secretary what the current situation is and ask if she can transfer there. She should ask someone to check Sagamu for the same thing and lautech. Its vital she completes her medical education in Nigeria. Its less expensive much less expensive. Unless she will be getting citizen rates in new zealand. +ham Yes just finished watching days of our lives. I love it. +ham Juz go google n search 4 qet... +ham Many times we lose our best ones bcoz we are +ham Good FRIENDS CaRE for each Other.. CLoSE Friends UNDERSTaND each Other... and TRUE Friends STaY forever beyond words, beyond time. Gud ni8 +ham Just getting back home +ham Sorry, I'll call later <#> mins +ham Dun need to use dial up juz open da browser n surf... +spam As one of our registered subscribers u can enter the draw 4 a 100 G.B. gift voucher by replying with ENTER. To unsubscribe text STOP +ham Awesome, plan to get here any time after like <#> , I'll text you details in a wee bit +ham Take care and sleep well.you need to learn to change in life.you only need to get CONVINCED on that.i will wait but no more conversations between us.GET CONVINCED by that time.Your family is over for you in many senses.respect them but not overemphasise.or u have no role in my life. +spam For your chance to WIN a FREE Bluetooth Headset then simply reply back with "ADP" +ham You also didnt get na hi hi hi hi hi +ham Ya but it cant display internal subs so i gotta extract them +ham If i said anything wrong sorry de:-) +ham Sad story of a Man - Last week was my b'day. My Wife did'nt wish me. My Parents forgot n so did my Kids . I went to work. Even my Colleagues did not wish. +ham How stupid to say that i challenge god.You dont think at all on what i write instead you respond immed. +ham Yeah I should be able to, I'll text you when I'm ready to meet up +ham V skint too but fancied few bevies.waz gona go meet &othrs in spoon but jst bin watchng planet earth&sofa is v comfey; If i dont make it hav gd night +ham says that he's quitting at least5times a day so i wudn't take much notice of that. Nah, she didn't mind. Are you gonna see him again? Do you want to come to taunton tonight? U can tell me all about ! +ham When you get free, call me +ham How have your little darlings been so far this week? Need a coffee run tomo?Can't believe it's that time of week already … +ham Ok i msg u b4 i leave my house. +ham Still at west coast... Haiz... Ü'll take forever to come back... +ham MMM ... Fuck .... Merry Christmas to me +ham alright. Thanks for the advice. Enjoy your night out. I'ma try to get some sleep... +ham Update your face book status frequently :) +ham Just now saw your message.it k da:) +ham Was it something u ate? +ham So what did the bank say about the money? +ham Aiyar dun disturb u liao... Thk u have lots 2 do aft ur cupboard come... +ham Hey they r not watching movie tonight so i'll prob b home early... +ham Yar lor... How u noe? U used dat route too? +ham 2mro i am not coming to gym machan. Goodnight. +ham Dont think you need yellow card for uk travel. Ask someone that has gone before. If you do its just <#> bucks +ham Can u look 4 me in da lib i got stuff havent finish yet. +ham Sounds great! Im going to sleep now. Have a good night! +spam Don't b floppy... b snappy & happy! Only gay chat service with photo upload call 08718730666 (10p/min). 2 stop our texts call 08712460324 +ham House-Maid is the murderer, coz the man was murdered on <#> th January.. As public holiday all govt.instituitions are closed,including post office..understand? +ham How come u got nothing to do? +ham Nothing will ever be easy. But don't be looking for a reason not to take a risk on life and love +ham i want to grasp your pretty booty :) +ham I've got it down to a tea. not sure which flavour +ham I'm going 2 orchard now laready me reaching soon. U reaching? +ham Dear i am not denying your words please +ham You know my old Dom I told you about yesterday ? His name is Roger? He got in touch with me last night and wants me to meet him today at 2 pm +ham COME BACK TO TAMPA FFFFUUUUUUU +ham 2 celebrate my b’day, y else? +ham Merry christmas to u too annie! +ham Please tell me you have some of that special stock you were talking about +ham I sent them. Do you like? +spam Urgent UR awarded a complimentary trip to EuroDisinc Trav, Aco&Entry41 Or £1000. To claim txt DIS to 87121 18+6*£1.50(moreFrmMob. ShrAcomOrSglSuplt)10, LS1 3AJ +ham Awesome, be there in a minute +ham And that is the problem. You walk around in "julianaland" oblivious to what is going on around you. I say the same things constantly and they go in one ear and out the other while you go off doing whatever you want to do. It's not that you don't know why I'm upset--it's that you don't listen when i tell you WHAT is going to upset me. Then you want to be surprised when I'm mad. +ham I've told you everything will stop. Just dont let her get dehydrated. +ham Or I guess <#> min +ham I'm home. Ard wat time will u reach? +ham Storming msg: Wen u lift d phne, u say "HELLO" Do u knw wt is d real meaning of HELLO?? . . . It's d name of a girl..! . . . Yes.. And u knw who is dat girl?? "Margaret Hello" She is d girlfrnd f Grahmbell who invnted telphone... . . . . Moral:One can 4get d name of a person, bt not his girlfrnd... G o o d n i g h t . . .@ +ham If you want to mapquest it or something look up "usf dogwood drive", that's the tiny street where the parking lot is +ham Aight should I just plan to come up later tonight? +ham Die... I accidentally deleted e msg i suppose 2 put in e sim archive. Haiz... I so sad... +spam Welcome to UK-mobile-date this msg is FREE giving you free calling to 08719839835. Future mgs billed at 150p daily. To cancel send "go stop" to 89123 +ham This is wishing you a great day. Moji told me about your offer and as always i was speechless. You offer so easily to go to great lengths on my behalf and its stunning. My exam is next friday. After that i will keep in touch more. Sorry. +ham Thanks again for your reply today. When is ur visa coming in. And r u still buying the gucci and bags. My sister things are not easy, uncle john also has his own bills so i really need to think about how to make my own money. Later sha. +ham Sorry I flaked last night, shit's seriously goin down with my roommate, what you up to tonight? +ham He said i look pretty wif long hair wat. But i thk he's cutting quite short 4 me leh. +ham Ranjith cal drpd Deeraj and deepak 5min hold +ham "CHEERS FOR CALLIN BABE.SOZI CULDNT TALKBUT I WANNATELL U DETAILS LATER WENWECAN CHAT PROPERLY X" +ham Hey u still at the gym? +ham She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife, +ham Much better now thanks lol +ham Nothing, smsing u n xy lor. Sorry lor da guys neva c u in person but they sort of know u lor. So u wan 2 meet them xy ask me 2 bring u along 4 our next meeting. +ham Lemme know when I can swing by and pick up, I'm free basically any time after 1 all this semester +ham Wa... U so efficient... Gee... Thanx... +spam 3. You have received your mobile content. Enjoy +ham S but not able to sleep. +spam Want explicit SEX in 30 secs? Ring 02073162414 now! Costs 20p/min +ham We will meet soon princess! Ttyl! +ham I'll pick you up at about 5.15pm to go to taunton if you still want to come. +ham Oh :-)only 4 outside players allowed to play know +ham I anything lor. +ham Erutupalam thandiyachu +ham Y cant u try new invention to fly..i'm not joking., +ham No..its ful of song lyrics.. +ham What do u reckon as need 2 arrange transport if u can't do it, thanks +ham True lov n care wil nevr go unrecognized. though somone often makes mistakes when valuing it. but they will definitly undrstnd once when they start missing it. +ham Shopping? Eh ger i toking abt syd leh...Haha +ham What not under standing. +ham have * good weekend. +ham Miss call miss call khelate kintu opponenter miss call dhorte lage. Thats d rule. One with great phone receiving quality wins. +ham Call me when you get the chance plz <3 +ham The new deus ex game comin early next yr +ham My computer just fried the only essential part we don't keep spares of because my fucking idiot roommates looovvve leaving the thing running on full <#> /7 +ham My friend, she's studying at warwick, we've planned to go shopping and to concert tmw, but it may be canceled, havn't seen for ages, yeah we should get together sometime! +ham Probably a couple hours tops +ham LOL .. *grins* .. I'm not babe, but thanks for thinking of me! +ham Man this bus is so so so slow. I think you're gonna get there before me +ham Hope this text meets you smiling. If not then let this text give you a reason to smile. Have a beautiful day. +ham In case you wake up wondering where I am, I forgot I have to take care of something for grandma today, should be done before the parade +ham Ok +spam Latest Nokia Mobile or iPOD MP3 Player +£400 proze GUARANTEED! Reply with: WIN to 83355 now! Norcorp Ltd.£1,50/Mtmsgrcvd18+ +spam SMS SERVICES. for your inclusive text credits, pls goto www.comuk.net login= 3qxj9 unsubscribe with STOP, no extra charge. help 08702840625.COMUK. 220-CM2 9AE +ham Nvm take ur time. +ham So wat's da decision? +ham Wot is u up 2 then bitch? +ham Stupid.its not possible +ham She told to hr that he want posting in chennai:)because i'm working here:) +spam Mobile Club: Choose any of the top quality items for your mobile. 7cfca1a +ham When are you guys leaving? +ham He neva grumble but i sad lor... Hee... Buy tmr lor aft lunch. But we still meetin 4 lunch tmr a not. Neva hear fr them lei. Ü got a lot of work ar? +ham Not able to do anything. +ham Ü takin linear algebra today? +ham This weekend is fine (an excuse not to do too much decorating) +ham Sorry I missed you babe. I was up late and slept in. I hope you enjoy your driving lesson, boytoy. I miss you too ... *teasing kiss* +ham Now project pa. After that only i can come. +spam Money i have won wining number 946 wot do i do next +ham Sure, whenever you show the fuck up >:( +ham That was random saw my old roomate on campus. He graduated +spam Congrats! 2 mobile 3G Videophones R yours. call 09061744553 now! videochat wid ur mates, play java games, Dload polyH music, noline rentl. bx420. ip4. 5we. 150pm +ham Men always needs a beautiful, intelligent, caring, loving, adjustable, cooperative wife. But the law allows only one wife.... +ham That sucks. So what do you got planned for your yo valentine? I am your yo valentine aren't I? +ham Just got part Nottingham - 3 hrs 63miles. Good thing i love my man so much, but only doing 40mph. Hey ho +ham What to think no one saying clearly. Ok leave no need to ask her. I will go if she come or not +ham Hi good mornin.. Thanku wish u d same.. +ham DO U WANT 2 MEET UP 2MORRO +ham Actually I decided I was too hungry so I haven't left yet :V +ham I've sent ü my part.. +ham Cos i was out shopping wif darren jus now n i called him 2 ask wat present he wan lor. Then he started guessing who i was wif n he finally guessed darren lor. +spam I want some cock! My hubby's away, I need a real man 2 satisfy me. Txt WIFE to 89938 for no strings action. (Txt STOP 2 end, txt rec £1.50ea. OTBox 731 LA1 7WS. ) +ham Understand. his loss is my gain :) so do you work? School? +ham HOW ARE U? I HAVE MISSED U! I HAVENT BEEN UP 2 MUCH A BIT BORED WITH THE HOLIDAY WANT 2 GO BAK 2 COLLEGE! SAD ISNT IT?xx +ham Hiya, probably coming home * weekend after next +ham Don't forget though that I love you .... And I walk beside you. Watching over you and keeping your heart warm. +ham I wish things were different. I wonder when i will be able to show you how much i value you. Pls continue the brisk walks no drugs without askin me please and find things to laugh about. I love you dearly. +ham Ok both our days. So what are you making for dinner tonite? Am I invited? +spam Gr8 new service - live sex video chat on your mob - see the sexiest dirtiest girls live on ur phone - 4 details text horny to 89070 to cancel send STOP to 89070 +ham I have no money 4 steve mate! ! +ham IM LATE TELLMISS IM ON MY WAY +ham Never blame a day in ur life. Good days give u happiness. Bad days give u experience. Both are essential in life! All are Gods blessings! good morning.: +ham Normally i use to drink more water daily:) +ham Dare i ask... Any luck with sorting out the car? +ham Party's at my place at usf, no charge (but if you can contribute in any way it is greatly appreciated) and yeah, we got room for one more +ham Urgh, coach hot, smells of chip fat! Thanks again, especially for the duvet (not a predictive text word). +ham Hiya. How was last night? I've been naughty and bought myself clothes and very little ... Ready for more shopping tho! What kind of time do you wanna meet? +spam FreeMsg Hi baby wow just got a new cam moby. Wanna C a hot pic? or Fancy a chat?Im w8in 4uTxt / rply CHAT to 82242 Hlp 08712317606 Msg150p 2rcv +ham I've been trying to reach him without success +ham when you and derek done with class? +ham Never y lei... I v lazy... Got wat? Dat day ü send me da url cant work one... +ham Never try alone to take the weight of a tear that comes out of ur heart and falls through ur eyes... Always remember a STUPID FRIEND is here to share... BSLVYL +ham Hey mate. Spoke to the mag people. We‘re on. the is deliver by the end of the month. Deliver on the 24th sept. Talk later. +ham Hope you are having a good week. Just checking in +ham Haha, my friend tyler literally just asked if you could get him a dubsack +ham "Hey! do u fancy meetin me at 4 at cha – hav a lil beverage on me. if not txt or ring me and we can meet up l8r. quite tired got in at 3 v.pist ;) love Pete x x x" +ham Great. Have a safe trip. Dont panic surrender all. +ham "SYMPTOMS" when U are in love: "1.U like listening songs 2.U get stopped where u see the name of your beloved 3.U won't get angry when your +ham Sun ah... Thk mayb can if dun have anythin on... Thk have to book e lesson... E pilates is at orchard mrt u noe hor... +ham Try to do something dear. You read something for exams +ham 7 wonders in My WORLD 7th You 6th Ur style 5th Ur smile 4th Ur Personality 3rd Ur Nature 2nd Ur SMS and 1st "Ur Lovely Friendship"... good morning dear +ham Gettin rdy to ship comp +ham I am in hospital da. . I will return home in evening +ham PISS IS TALKING IS SOMEONE THAT REALISE U THAT POINT THIS AT IS IT.(NOW READ IT BACKWARDS) +ham Think + da. You wil do. +ham I'm awake oh. What's up. +ham Good afternoon my boytoy. How goes that walking here and there day ? Did you get that police abstract? Are you still out and about? I wake and miss you babe +ham How much u trying to get? +ham Come around <DECIMAL> pm vikky..i'm otside nw, il come by tht time +ham Tell me again what your address is +ham Honeybee Said: *I'm d Sweetest in d World* God Laughed & Said: *Wait,U Havnt Met d Person Reading This Msg* MORAL: Even GOD Can Crack Jokes! GM+GN+GE+GN:) +ham Should i buy him a blackberry bold 2 or torch. Should i buy him new or used. Let me know. Plus are you saying i should buy the <#> g wifi ipad. And what are you saying about the about the <#> g? +ham But you were together so you should be thinkin about him +ham hiya hows it going in sunny africa? hope u r avin a good time. give that big old silver back a big kiss from me. +ham At WHAT TIME should i come tomorrow +spam Wanna have a laugh? Try CHIT-CHAT on your mobile now! Logon by txting the word: CHAT and send it to No: 8883 CM PO Box 4217 London W1A 6ZF 16+ 118p/msg rcvd +ham "CHA QUITEAMUZING THAT’SCOOL BABE,PROBPOP IN & CU SATTHEN HUNNY 4BREKKIE! LOVE JEN XXX. PSXTRA LRG PORTIONS 4 ME PLEASE " +ham Omg how did u know what I ate? +spam "URGENT! This is the 2nd attempt to contact U!U have WON £1000CALL 09071512432 b4 300603t&csBCM4235WC1N3XX.callcost150ppmmobilesvary. max£7. 50" +ham :( but your not here.... +ham Not directly behind... Abt 4 rows behind ü... +spam Congratulations ur awarded 500 of CD vouchers or 125gift guaranteed & Free entry 2 100 wkly draw txt MUSIC to 87066 +spam Had your contract mobile 11 Mnths? Latest Motorola, Nokia etc. all FREE! Double Mins & Text on Orange tariffs. TEXT YES for callback, no to remove from records +spam Urgent! call 09066350750 from your landline. Your complimentary 4* Ibiza Holiday or 10,000 cash await collection SAE T&Cs PO BOX 434 SK3 8WP 150 ppm 18+ +ham No plans yet. What are you doing ? +ham Hi ....My engagement has been fixd on <#> th of next month. I know its really shocking bt....hmm njan vilikkam....t ws al of a sudn;-(. +ham Not course. Only maths one day one chapter with in one month we can finish. +ham Wow didn't think it was that common. I take it all back ur not a freak! Unless u chop it off:-) +spam For ur chance to win a £250 wkly shopping spree TXT: SHOP to 80878. T's&C's www.txt-2-shop.com custcare 08715705022, 1x150p/wk +ham Noooooooo please. Last thing I need is stress. For once in your life be fair. +spam U have a Secret Admirer who is looking 2 make contact with U-find out who they R*reveal who thinks UR so special-call on 09065171142-stopsms-08718727870150ppm +spam Mila, age23, blonde, new in UK. I look sex with UK guys. if u like fun with me. Text MTALK to 69866.18 . 30pp/txt 1st 5free. £1.50 increments. Help08718728876 +ham I'll see if I can swing by in a bit, got some things to take care of here firsg +ham I wanted to wish you a Happy New Year and I wanted to talk to you about some legal advice to do with when Gary and I split but in person. I'll make a trip to Ptbo for that. I hope everything is good with you babe and I love ya :) +ham Have you not finished work yet or something? +ham Tomorrow i am not going to theatre. . . So i can come wherever u call me. . . Tell me where and when to come tomorrow +spam Well done ENGLAND! Get the official poly ringtone or colour flag on yer mobile! text TONE or FLAG to 84199 NOW! Opt-out txt ENG STOP. Box39822 W111WX £1.50 +ham Right it wasnt you who phoned it was someone with a number like yours! +ham It's ok i wun b angry. Msg u aft i come home tonight. +ham I had a good time too. Its nice to do something a bit different with my weekends for a change. See ya soon +ham Yo sorry was in the shower sup +ham Carlos is down but I have to pick it up from him, so I'll swing by usf in a little bit +ham Full heat pa:-) i have applyed oil pa. +ham I'm stuck in da middle of da row on da right hand side of da lt... +ham Have you laid your airtel line to rest? +ham Hi did u decide wot 2 get 4 his bday if not ill prob jus get him a voucher frm virgin or sumfing +spam FreeMsg: Txt: CALL to No: 86888 & claim your reward of 3 hours talk time to use from your phone now! Subscribe6GBP/mnth inc 3hrs 16 stop?txtStop +ham "Hey j! r u feeling any better, hopeSo hunny. i amnow feelin ill & ithink i may have tonsolitusaswell! damn iam layin in bedreal bored. lotsof luv me xxxx" +ham And I don't plan on staying the night but I prolly won't be back til late +ham THANX 4 PUTTIN DA FONE DOWN ON ME!! +ham I need an 8th but I'm off campus atm, could I pick up in an hour or two? +ham Oh... Haha... Den we shld had went today too... Gee, nvm la... Kaiez, i dun mind goin jazz oso... Scared hiphop open cant catch up... +ham Been running but only managed 5 minutes and then needed oxygen! Might have to resort to the roller option! +ham We live in the next <#> mins +ham Y de asking like this. +ham Just glad to be talking to you. +ham Wat time ü finish? +ham Sorry da. I gone mad so many pending works what to do. +ham How much you got for cleaning +ham hows my favourite person today? r u workin hard? couldn't sleep again last nite nearly rang u at 4.30 +spam Sunshine Quiz! Win a super Sony DVD recorder if you canname the capital of Australia? Text MQUIZ to 82277. B +ham Ü called dad oredi... +ham Good. do you think you could send me some pix? I would love to see your top and bottom... +ham Nvm... I'm going to wear my sport shoes anyway... I'm going to be late leh. +ham Sorry, I'll call later In meeting. +ham THIS IS A LONG FUCKIN SHOWR +ham Received, understood n acted upon! +ham They finally came to fix the ceiling. +ham U need my presnts always bcz U cant mis love. "jeevithathile irulinae neekunna prakasamanu sneham" prakasam ennal prabha 'That mns prabha is'LOVE' Got it. Dont mis me.... +ham Jus finish blowing my hair. U finish dinner already? +ham I'm on the bus. Love you +ham Lol ... I knew that .... I saw him in the dollar store +spam Please call our customer service representative on 0800 169 6031 between 10am-9pm as you have WON a guaranteed £1000 cash or £5000 prize! +spam Todays Voda numbers ending with 7634 are selected to receive a £350 reward. If you have a match please call 08712300220 quoting claim code 7684 standard rates apply. +ham Only saturday and sunday holiday so its very difficult:) +ham Everybody had fun this evening. Miss you. +ham Got hella gas money, want to go on a grand nature adventure with galileo in a little bit? +ham I'm in a meeting, call me later at +ham Oh wow thats gay. Will firmware update help +ham These won't do. Have to move on to morphine +ham How come i din c ü... Yup i cut my hair... +ham K k pa Had your lunch aha. +ham Oh ho. Is this the first time u use these type of words +ham Captain vijaykanth is doing comedy in captain tv..he is drunken :) +ham Of course. I guess god's just got me on hold right now. +ham Do you hide anythiing or keeping distance from me +ham Havent. +spam You are being ripped off! Get your mobile content from www.clubmoby.com call 08717509990 poly/true/Pix/Ringtones/Games six downloads for only 3 +ham Sorry i din lock my keypad. +ham Did u got that persons story +ham Are you planning to come chennai? +spam We tried to contact you re your reply to our offer of a Video Phone 750 anytime any network mins Half Price Line Rental Camcorder Reply or call 08000930705 +ham God created gap btwn ur fingers so dat sum1 vry special will fill those gaps by holding ur hands.. Now plz dont ask y he created so much gap between legs !!! +ham We are okay. Going to sleep now. Later +ham Please protect yourself from e-threats. SIB never asks for sensitive information like Passwords,ATM/SMS PIN thru email. Never share your password with anybody. +ham Finally it has happened..! Aftr decades..! BEER is now cheaper than PETROL! The goverment expects us to "DRINK". . . But don't "DRIVE " +spam A £400 XMAS REWARD IS WAITING FOR YOU! Our computer has randomly picked you from our loyal mobile customers to receive a £400 reward. Just call 09066380611 +ham Where r e meeting tmr? +ham Lol yes. But it will add some spice to your day. +ham Hope you are having a great day. +ham Our Prasanth ettans mother passed away last night. Just pray for her and family. +ham K, I'll work something out +spam PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08718738002 Identifier Code: 48922 Expires 21/11/04 +ham This message is from a great Doctor in India:-): 1) Do not drink APPY FIZZ. It contains Cancer causing age +ham I cant pick the phone right now. Pls send a message +ham You call him and tell now infront of them. Call him now. +ham Ok no prob... +ham Ladies first and genus second k . +ham No. Yes please. Been swimming? +ham Mum not going robinson already. +ham Ok set let u noe e details later... +ham Not..tel software name.. +ham I send the print outs da. +ham IM REALY SOZ IMAT MY MUMS 2NITE WHAT ABOUT 2MORO +ham When I was born, GOD said, "Oh No! Another IDIOT". When you were born, GOD said, "OH No! COMPETITION". Who knew, one day these two will become FREINDS FOREVER! +ham I didnt get ur full msg..sometext is missing, send it again +ham Probably not, I'm almost out of gas and I get some cash tomorrow +spam Customer service announcement. We recently tried to make a delivery to you but were unable to do so, please call 07099833605 to re-schedule. Ref:9280114 +ham I forgot 2 ask ü all smth.. There's a card on da present lei... How? Ü all want 2 write smth or sign on it? +ham I'm leaving my house now. +spam Hi babe its Chloe, how r u? I was smashed on saturday night, it was great! How was your weekend? U been missing me? SP visionsms.com Text stop to stop 150p/text +ham Ü ready then call me... +ham Wewa is 130. Iriver 255. All 128 mb. +ham It is a good thing I'm now getting the connection to bw +ham Sry da..jst nw only i came to home.. +ham That's cool he'll be here all night, lemme know when you're around +ham Are you staying in town ? +ham Haha yeah, 2 oz is kind of a shitload +ham Ok u can take me shopping when u get paid =D +ham My life Means a lot to me, Not because I love my life, But because I love the people in my life, The world calls them friends, I call them my World:-).. Ge:-).. +ham Alright we'll bring it to you, see you in like <#> mins +ham But pls dont play in others life. +ham Eatin my lunch... +ham Hmmm.but you should give it on one day.. +ham Didn't try, g and I decided not to head out +ham Ok no prob +ham Surly ill give it to you:-) while coming to review. +ham By march ending, i should be ready. But will call you for sure. The problem is that my capital never complete. How far with you. How's work and the ladies +ham Tessy..pls do me a favor. Pls convey my birthday wishes to Nimya..pls dnt forget it. Today is her birthday Shijas +ham Pls give her the food preferably pap very slowly with loads of sugar. You can take up to an hour to give it. And then some water. Very very slowly. +spam URGENT! Your Mobile No 07808726822 was awarded a £2,000 Bonus Caller Prize on 02/09/03! This is our 2nd attempt to contact YOU! Call 0871-872-9758 BOX95QU +ham A guy who gets used but is too dumb to realize it. +ham Okey dokey, i‘ll be over in a bit just sorting some stuff out. +ham Don no da:)whats you plan? +ham Yes fine +spam WIN: We have a winner! Mr. T. Foley won an iPod! More exciting prizes soon, so keep an eye on ur mobile or visit www.win-82050.co.uk +ham I liked the new mobile +ham Anytime... +ham Mmmmmmm *snuggles into you* ...*deep contented sigh* ... *whispers* ... I fucking love you so much I can barely stand it ... +ham Yar but they say got some error. +ham Hey anyway i have to :-) +ham Wow so healthy. Old airport rd lor. Cant thk of anything else. But i'll b bathing my dog later. +ham Wif my family booking tour package. +ham Did you say bold, then torch later. Or one torch and 2bold? +ham Haha awesome, I might need to take you up on that, what you doin tonight? +ham Ya i knw u vl giv..its ok thanks kano..anyway enjoy wit ur family wit 1st salary..:-);-) +ham Huh so slow i tot u reach long ago liao... U 2 more days only i 4 more leh... +ham Thats cool princess! I will cover your face in hot sticky cum :) +ham Big brother‘s really scraped the barrel with this shower of social misfits +ham Oops i thk i dun haf enuff... I go check then tell ü.. +ham S:)8 min to go for lunch:) +ham Hey. What happened? U switch off ur cell d whole day. This isnt good. Now if u do care, give me a call tomorrow. +ham K will do, addie & I are doing some art so I'll be here when you get home +ham My uncles in Atlanta. Wish you guys a great semester. +ham Aiyo... Her lesson so early... I'm still sleepin, haha... Okie, u go home liao den confirm w me lor... +ham Forgot to tell ü smth.. Can ü like number the sections so that it's clearer.. +ham Yup. Anything lor, if u dun wan it's ok... +ham I'm home, my love ... If your still awake ... *loving kiss* +ham HELLO PEACH! MY CAKE TASTS LUSH! +spam FREE GAME. Get Rayman Golf 4 FREE from the O2 Games Arcade. 1st get UR games settings. Reply POST, then save & activ8. Press 0 key for Arcade. Termsapply +ham There'll be a minor shindig at my place later tonight, you interested? +ham Jason says it's cool if we pick some up from his place in like an hour +spam Had your mobile 10 mths? Update to the latest Camera/Video phones for FREE. KEEP UR SAME NUMBER, Get extra free mins/texts. Text YES for a call +ham I (Career Tel) have added u as a contact on INDYAROCKS.COM to send FREE SMS. To remove from phonebook - sms NO to <#> +ham I've reached already. +ham I dont know ask to my brother. Nothing problem some thing that. Just i told . +ham K:)eng rocking in ashes:) +ham Wat time r ü going to xin's hostel? +ham Good Morning my Dear Shijutta........... Have a great & successful day. +spam Buy Space Invaders 4 a chance 2 win orig Arcade Game console. Press 0 for Games Arcade (std WAP charge) See o2.co.uk/games 4 Terms + settings. No purchase +ham Oh k:)after that placement there ah? +ham Not for possession, especially not first offense +ham Nt only for driving even for many reasons she is called BBD..thts it chikku, then hw abt dvg cold..heard tht vinobanagar violence hw is the condition..and hw ru ? Any problem? +ham I bought the test yesterday. Its something that lets you know the exact day u ovulate.when will get 2u in about 2 to 3wks. But pls pls dont fret. I know u r worried. Pls relax. Also is there anything in ur past history u need to tell me? +ham We have pizza if u want +ham I keep seeing weird shit and bein all "woah" then realising it's actually reasonable and I'm all "oh" +ham Many more happy returns of the day. I wish you happy birthday. +ham Ya very nice. . .be ready on thursday +ham I am in hospital da. . I will return home in evening +ham "Thinking of u ;) x" +spam Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days. +ham Orh i tot u say she now still dun believe. +ham When you just put in the + sign, choose my number and the pin will show. Right? +ham The beauty of life is in next second.. which hides thousands of secrets. I wish every second will be wonderful in ur life...!! gud n8 +ham Thanx u darlin!im cool thanx. A few bday drinks 2 nite. 2morrow off! Take care c u soon.xxx +ham If you're still up, maybe leave the credit card so I can get gas when I get back like he told me to +spam Your weekly Cool-Mob tones are ready to download !This weeks new Tones include: 1) Crazy Frog-AXEL F>>> 2) Akon-Lonely>>> 3) Black Eyed-Dont P >>>More info in n +ham Well boy am I glad G wasted all night at applebees for nothing +spam Cashbin.co.uk (Get lots of cash this weekend!) www.cashbin.co.uk Dear Welcome to the weekend We have got our biggest and best EVER cash give away!! These.. +ham Ok lor... Or u wan me go look 4 u? +ham U wan 2 haf lunch i'm in da canteen now. +ham Don't make life too stressfull.. Always find time to Laugh.. It may not add years to your Life! But surely adds more life to ur years!! Gud ni8..swt dreams.. +ham hey, looks like I was wrong and one of the kappa guys numbers is still on my phone, if you want I can text him and see if he's around +spam URGENT! Your Mobile number has been awarded with a £2000 prize GUARANTEED. Call 09061790121 from land line. Claim 3030. Valid 12hrs only 150ppm +spam Thanks 4 your continued support Your question this week will enter u in2 our draw 4 £100 cash. Name the NEW US President? txt ans to 80082 +ham I'm home. Doc gave me pain meds says everything is fine. +ham It's é only $140 ard...É rest all ard $180 at least...Which is é price 4 é 2 bedrm ($900) +ham Me too! Have a lovely night xxx +ham Prepare to be pleasured :) +ham Hi.:)technical support.providing assistance to us customer through call and email:) +ham if you text on your way to cup stop that should work. And that should be BUS +ham Whens your radio show? +spam Your unique user ID is 1172. For removal send STOP to 87239 customer services 08708034412 +ham I'm not sure if its still available though +ham watever reLation u built up in dis world only thing which remains atlast iz lonlines with lotz n lot memories! feeling.. +ham CHEERS LOU! YEAH WAS A GOODNITE SHAME U NEVA CAME! C YA GAILxx +ham Hi..i got the money da:) +ham Hi, Mobile no. <#> has added you in their contact list on www.fullonsms.com It s a great place to send free sms to people For more visit fullonsms.com +ham Ok then u tell me wat time u coming later lor. +ham U repeat e instructions again. Wat's e road name of ur house? +ham So many people seems to be special at first sight, But only very few will remain special to you till your last sight.. Maintain them till life ends.. Sh!jas +ham Quite lor. But dun tell him wait he get complacent... +ham Sorry completely forgot * will pop em round this week if your still here? +ham U R THE MOST BEAUTIFUL GIRL IVE EVER SEEN. U R MY BABY COME AND C ME IN THE COMMON ROOM +ham O we cant see if we can join denis and mina? Or does denis want alone time +ham Sen told that he is going to join his uncle finance in cbe +ham Yup... Hey then one day on fri we can ask miwa and jiayin take leave go karaoke +ham Call me, i am senthil from hsbc. +ham Especially since i talk about boston all up in my personal statement, lol! I woulda changed that if i had realized it said nyc! It says boston now. +ham Indeed and by the way it was either or - not both ! +spam Urgent -call 09066649731from Landline. Your complimentary 4* Ibiza Holiday or £10,000 cash await collection SAE T&Cs PO BOX 434 SK3 8WP 150ppm 18+ +ham Holy living christ what is taking you so long +ham Ü thk of wat to eat tonight. +ham Thanx. Yup we coming back on sun. Finish dinner going back 2 hotel now. Time flies, we're tog 4 exactly a mth today. Hope we'll haf many more mths to come... +ham We're on the opposite side from where we dropped you off +ham Yup. Izzit still raining heavily cos i'm in e mrt i can't c outside. +ham Send me your resume:-) +ham Gd luck 4 ur exams :-) +ham Or u ask they all if next sat can a not. If all of them can make it then i'm ok lor. +ham Sorry that was my uncle. I.ll keep in touch +ham Saw Guys and Dolls last night with Patrick Swayze it was great +spam URGENT This is our 2nd attempt to contact U. Your £900 prize from YESTERDAY is still awaiting collection. To claim CALL NOW 09061702893 +spam Santa calling! Would your little ones like a call from Santa Xmas Eve? Call 09077818151 to book you time. Calls1.50ppm last 3mins 30s T&C www.santacalling.com +ham Just come home. I don't want u to be miserable +ham I dont know why she.s not getting your messages +ham its cool but tyler had to take off so we're gonna buy for him and drop it off at his place later tonight. Our total order is a quarter, you got enough? +ham The guy at the car shop who was flirting with me got my phone number from the paperwork and called and texted me. I'm nervous because of course now he may have my address. Should i call his boss and tell him, knowing this may get him fired? +ham Reverse is cheating. That is not mathematics. +ham How do you plan to manage that +ham Er, hello, things didn‘t quite go to plan – is limping slowly home followed by aa and with exhaust hanging off +ham Sorry for the delay. Yes masters +ham Call me when u finish then i come n pick u. +spam PRIVATE! Your 2004 Account Statement for 078498****7 shows 786 unredeemed Bonus Points. To claim call 08719180219 Identifier Code: 45239 Expires 06.05.05 +ham What's up my own oga. Left my phone at home and just saw ur messages. Hope you are good. Have a great weekend. +ham Don't worry though, I understand how important it is that I be put in my place with a poorly thought out punishment in the face of the worst thing that has ever happened to me. Brb gonna go kill myself +ham Honey, can you pls find out how much they sell Predicte in Nigeria. And how many times can it be used. Its very important to have a reply before monday +ham E admin building there? I might b slightly earlier... I'll call u when i'm reaching... +ham fyi I'm at usf now, swing by the room whenever +ham i can call in <#> min if thats ok +ham Ummmmmaah Many many happy returns of d day my dear sweet heart.. HAPPY BIRTHDAY dear +ham Ü no home work to do meh... +ham Anything is valuable in only 2 situations: First- Before getting it... Second- After loosing it... +ham Me too. Mark is taking forever to pick up my prescription and the pain is coming back. +ham How's ur paper? +ham Got smaller capacity one? Quite ex... +spam Check Out Choose Your Babe Videos @ sms.shsex.netUN fgkslpoPW fgkslpo +ham Im good! I have been thinking about you... +spam u r a winner U ave been specially selected 2 receive £1000 cash or a 4* holiday (flights inc) speak to a live operator 2 claim 0871277810710p/min (18 ) +ham :-) :-) +ham Not thought bout it... || Drink in tap & spile at seven. || Is that pub on gas st off broad st by canal. || Ok? +ham I am going to sleep. I am tired of travel. +ham Haha, just what I was thinkin +ham Yup but it's not giving me problems now so mayb i'll jus leave it... +ham Lol no. Just trying to make your day a little more interesting +ham How long before you get reply, just defer admission til next semester +ham The word "Checkmate" in chess comes from the Persian phrase "Shah Maat" which means; "the king is dead.." Goodmorning.. Have a good day..:) +ham Po de :-):):-):-):-). No need job aha. +ham Rats. Hey did u ever vote for the next themes? +spam New Mobiles from 2004, MUST GO! Txt: NOKIA to No: 89545 & collect yours today! From ONLY £1. www.4-tc.biz 2optout 087187262701.50gbp/mtmsg18 TXTAUCTION. +ham I hope your pee burns tonite. +ham OH RITE. WELL IM WITH MY BEST MATE PETE, WHO I WENT OUT WITH 4 A WEEK+ NOW WERE 2GEVA AGAIN. ITS BEEN LONGER THAN A WEEK. +ham Yay can't wait to party together! +ham ....photoshop makes my computer shut down. +ham All boys made fun of me today. Ok i have no problem. I just sent one message just for fun +ham That's one of the issues but california is okay. No snow so its manageable +spam PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08715203652 Identifier Code: 42810 Expires 29/10/0 +ham Hmmm.... Mayb can try e shoppin area one, but forgot e name of hotel... +ham Awesome, that gonna be soon or later tonight? +ham I need details about that online job. +spam YOU HAVE WON! As a valued Vodafone customer our computer has picked YOU to win a £150 prize. To collect is easy. Just call 09061743386 +ham Missing you too.pray inshah allah +ham Pls help me tell Ashley that i cant find her number oh +ham I am in escape theatre now. . Going to watch KAVALAN in a few minutes +ham S.this will increase the chance of winning. +ham either way works for me. I am <#> years old. Hope that doesnt bother you. +ham Maybe you should find something else to do instead??? +ham Gain the rights of a wife.dont demand it.i am trying as husband too.Lets see +ham I liked your new house +ham I'm fine. Hope you are also +ham Also north carolina and texas atm, you would just go to the gre site and pay for the test results to be sent. +ham Same to u... +ham yes baby! I need to stretch open your pussy! +ham Thanks and ! Or bomb and date as my phone wanted to say! +ham Ok... +ham Hey, a guy I know is breathing down my neck to get him some bud, anyway you'd be able to get a half track to usf tonight? +ham "Response" is one of d powerful weapon 2 occupy a place in others 'HEART'... So, always give response 2 who cares 4 U"... Gud night..swt dreams..take care +ham Nokia phone is lovly.. +spam **FREE MESSAGE**Thanks for using the Auction Subscription Service. 18 . 150p/MSGRCVD 2 Skip an Auction txt OUT. 2 Unsubscribe txt STOP CustomerCare 08718726270 +spam Bored housewives! Chat n date now! 0871750.77.11! BT-national rate 10p/min only from landlines! +ham Sorry da..today i wont come to play..i have driving clas.. +ham I'm really sorry I lit your hair on fire +ham Oh! Shit, I thought that was your trip! Loooooool ... That just makes SO much more sense now ... *grins* and the sofa reference was ... The "sleep on a couch" link you sent me ... Wasn't that how you went on your trip ? Oh ... And didn't your babe go with you for that celebration with your rents? +ham Okey dokey swashbuckling stuff what oh. +ham Watching cartoon, listening music & at eve had to go temple & church.. What about u? +ham 1. Tension face 2. Smiling face 3. Waste face 4. Innocent face 5.Terror face 6.Cruel face 7.Romantic face 8.Lovable face 9.decent face <#> .joker face. +ham Dip's cell dead. So i m coming with him. U better respond else we shall come back. +ham Well. You know what i mean. Texting +ham Hi dis is yijue i would be happy to work wif ü all for gek1510... +ham Lol! Oops sorry! Have fun. +ham Wat happened to the cruise thing +ham I know dat feelin had it with Pete! Wuld get with em , nuther place nuther time mayb? +spam lyricalladie(21/F) is inviting you to be her friend. Reply YES-910 or NO-910. See her: www.SMS.ac/u/hmmross STOP? Send STOP FRND to 62468 +ham The world's most happiest frnds never have the same characters... Dey just have the best understanding of their differences... +spam No 1 POLYPHONIC tone 4 ur mob every week! Just txt PT2 to 87575. 1st Tone FREE ! so get txtin now and tell ur friends. 150p/tone. 16 reply HL 4info +ham Yeah just open chat and click friend lists. Then make the list. Easy as pie +ham alright tyler's got a minor crisis and has to be home sooner than he thought so be here asap +ham When/where do I pick you up +ham As usual u can call me ard 10 smth. +ham New Theory: Argument wins d SITUATION, but loses the PERSON. So dont argue with ur friends just.. . . . kick them & say, I'm always correct.! +ham For many things its an antibiotic and it can be used for chest abdomen and gynae infections even bone infections. +ham Poor girl can't go one day lmao +ham Or just do that 6times +spam Todays Vodafone numbers ending with 4882 are selected to a receive a £350 award. If your number matches call 09064019014 to receive your £350 award. +ham You have to pls make a note of all she.s exposed to. Also find out from her school if anyone else was vomiting. Is there a dog or cat in the house? Let me know later. +ham Japanese Proverb: If one Can do it, U too Can do it, If none Can do it,U must do it Indian version: If one Can do it, LET HIM DO it.. If none Can do it,LEAVE it!! And finally Kerala version: If one can do it, Stop him doing it.. If none can do it, Make a strike against it ... +ham Sounds like there could be a lot of time spent in that chastity device boy ... *grins* ... Or take your beatings like a good dog. Going to lounge in a nice long bath now ? +ham Its worse if if uses half way then stops. Its better for him to complete it. +ham Miserable. They don't tell u that the side effects of birth control are massive gut wrenching cramps for the first 2 months. I didn't sleep at all last night. +ham Send me the new number +ham Convey my regards to him +spam Want the latest Video handset? 750 anytime any network mins? Half price line rental? Reply or call 08000930705 for delivery tomorrow +ham 2 and half years i missed your friendship:-) +ham I cant pick the phone right now. Pls send a message +ham Oh for fuck's sake she's in like tallahassee +ham Haha, that was the first person I was gonna ask +spam ou are guaranteed the latest Nokia Phone, a 40GB iPod MP3 player or a £500 prize! Txt word: COLLECT to No: 83355! IBHltd LdnW15H 150p/Mtmsgrcvd18 +ham Taka lor. Wat time u wan 2 come n look 4 us? +spam * FREE* POLYPHONIC RINGTONE Text SUPER to 87131 to get your FREE POLY TONE of the week now! 16 SN PoBox202 NR31 7ZS subscription 450pw +ham "I;m reaching in another 2 stops." +ham no, i *didn't* mean to post it. I wrote it, and like so many other times i've ritten stuff to you, i let it sit there. it WAS what i was feeling at the time. I was angry. Before i left, i hit send, then stop. It wasn't there. I checked on my phone when i got to my car. It wasn't there. You said you didn't sleep, you were bored. So why wouldn't THAT be the time to clean, fold laundry, etc.? At least make the bed? +spam Warner Village 83118 C Colin Farrell in SWAT this wkend @Warner Village & get 1 free med. Popcorn!Just show msg+ticket@kiosk.Valid 4-7/12. C t&c @kiosk. Reply SONY 4 mre film offers +ham Will you come online today night +ham Then anything special? +ham I'm in solihull, | do you want anything? +ham Will do. Have a good day +ham WE REGRET TO INFORM U THAT THE NHS HAS MADE A MISTAKE.U WERE NEVER ACTUALLY BORN.PLEASE REPORT 2 YOR LOCAL HOSPITAL 2B TERMINATED.WE R SORRY 4 THE INCONVENIENCE +ham Love that holiday Monday feeling even if I have to go to the dentists in an hour +ham I am on the way to tirupur. +spam Goal! Arsenal 4 (Henry, 7 v Liverpool 2 Henry scores with a simple shot from 6 yards from a pass by Bergkamp to give Arsenal a 2 goal margin after 78 mins. +ham You've already got a flaky parent. It'snot supposed to be the child's job to support the parent...not until they're The Ride age anyway. I'm supposed to be there to support you. And now i've hurt you. unintentional. But hurt nonetheless. +ham We took hooch for a walk toaday and i fell over! Splat! Grazed my knees and everything! Should have stayed at home! See you tomorrow! +ham Just dropped em off, omw back now +spam This is the 2nd time we have tried 2 contact u. U have won the 750 Pound prize. 2 claim is easy, call 08712101358 NOW! Only 10p per min. BT-national-rate +ham Sitting in mu waiting for everyone to get out of my suite so I can take a shower +ham Re your call; You didn't see my facebook huh? +ham G says you never answer your texts, confirm/deny +ham Its so common hearin How r u? Wat r u doing? How was ur day? So let me ask u something different. Did u smile today? If not, do it now.... Gud evng. +ham Hi Dear Call me its urgnt. I don't know whats your problem. You don't want to work or if you have any other problem at least tell me. Wating for your reply. +ham Oh yah... We never cancel leh... Haha +ham We can go 4 e normal pilates after our intro... +ham Ok... Let u noe when i leave my house. +ham Oh yes, why is it like torture watching england? +ham Wanna do some art?! :D +ham Just hopeing that wasn‘t too pissed up to remember and has gone off to his sisters or something! +spam Got what it takes 2 take part in the WRC Rally in Oz? U can with Lucozade Energy! Text RALLY LE to 61200 (25p), see packs or lucozade.co.uk/wrc & itcould be u! +spam Hi, the SEXYCHAT girls are waiting for you to text them. Text now for a great night chatting. send STOP to stop this service +ham Good morning, my boytoy! How's those yummy lips ? Where's my sexy buns now ? What do you do ? Do you think of me ? Do you crave me ? Do you need me ? +ham Match started.india <#> for 2 +ham Once free call me sir. +ham Hey do you want anything to buy:) +ham Hey babe, how's it going ? Did you ever figure out where your going for New Years ? +ham K..k.:)congratulation .. +ham G wants to know where the fuck you are +ham No it was cancelled yeah baby! Well that sounds important so i understand my darlin give me a ring later on this fone love Kate x +ham Tomarrow i want to got to court. At <DECIMAL> . So you come to bus stand at 9. +ham Ü go home liao? Ask dad to pick me up at 6... +ham Omg you can make a wedding chapel in frontierville? Why do they get all the good stuff? +ham I'm eatin now lor, but goin back to work soon... E mountain deer show huh... I watch b4 liao, very nice... +ham Check mail.i have mailed varma and kept copy to you regarding membership.take care.insha allah. +ham Wrong phone! This phone! I answer this one but assume the other is people i don't well +ham Anyway I don't think I can secure anything up here, lemme know if you want me to drive down south and chill +ham I'm already back home so no probably not +spam Great News! Call FREEFONE 08006344447 to claim your guaranteed £1000 CASH or £2000 gift. Speak to a live operator NOW! +spam Hi this is Amy, we will be sending you a free phone number in a couple of days, which will give you an access to all the adult parties... +ham I am in bus on the way to calicut +ham Hi its me you are probably having too much fun to get this message but i thought id txt u cos im bored! and james has been farting at me all night +ham hi baby im sat on the bloody bus at the mo and i wont be home until about 7:30 wanna do somethin later? call me later ortxt back jess xx +spam Welcome to Select, an O2 service with added benefits. You can now call our specially trained advisors FREE from your mobile by dialling 402. +ham I lost 4 pounds since my doc visit last week woot woot! Now I'm gonna celebrate by stuffing my face! +ham U coming back 4 dinner rite? Dad ask me so i re confirm wif u... +ham Doing my masters. When will you buy a bb cos i have for sale and how's bf +ham Ahhhh...just woken up!had a bad dream about u tho,so i dont like u right now :) i didnt know anything about comedy night but i guess im up for it. +ham I'm vivek:)i got call from your number. +ham Why didn't u call on your lunch? +ham What i mean was i left too early to check, cos i'm working a 9-6. +ham I want <#> rs da:)do you have it? +ham A bit of Ur smile is my hppnss, a drop of Ur tear is my sorrow, a part of Ur heart is my life, a heart like mine wil care for U, forevr as my GOODFRIEND +ham Yup ok... +ham I want to see your pretty pussy... +spam Dear Voucher holder Have your next meal on us. Use the following link on your pc 2 enjoy a 2 4 1 dining experiencehttp://www.vouch4me.com/etlp/dining.asp +ham A few people are at the game, I'm at the mall with iouri and kaila +spam URGENT! We are trying to contact U. Todays draw shows that you have won a £2000 prize GUARANTEED. Call 09058094507 from land line. Claim 3030. Valid 12hrs only +spam You can donate £2.50 to UNICEF's Asian Tsunami disaster support fund by texting DONATE to 864233. £2.50 will be added to your next bill +ham Future is not what we planned for tomorrow.....! it is the result of what we do today...! Do the best in present... enjoy the future. +ham I will cme i want to go to hos 2morow. After that i wil cme. This what i got from her dear what to do. She didnt say any time +ham We are supposed to meet to discuss abt our trip... Thought xuhui told you? In the afternoon. Thought we can go for lesson after that +ham Hey come online! Use msn... We are all there +ham I'm fine. Hope you are good. Do take care. +ham Oops I was in the shower when u called. Hey a parking garage collapsed at university hospital. See I'm not crazy. Stuff like that DOES happen. +ham Aiyo u so poor thing... Then u dun wan 2 eat? U bathe already? +ham Yar... I tot u knew dis would happen long ago already. +ham You are gorgeous! keep those pix cumming :) thank you! +ham A boy was late 2 home. His father: "POWER OF FRNDSHIP" +ham JADE ITS PAUL. Y DIDN’T U TXT ME? DO U REMEMBER ME FROM BARMED? I WANT 2 TALK 2 U! TXT ME +ham Spending new years with my brother and his family. Lets plan to meet next week. Are you ready to be spoiled? :) +ham So what u doing today? +ham I said its okay. Sorry +ham Slept? I thinkThis time ( <#> pm) is not dangerous +ham Networking job is there. +spam goldviking (29/M) is inviting you to be his friend. Reply YES-762 or NO-762 See him: www.SMS.ac/u/goldviking STOP? Send STOP FRND to 62468 +ham Dont let studying stress you out. L8r. +ham That's y u haf 2 keep me busy... +ham No rushing. I'm not working. I'm in school so if we rush we go hungry. +ham Which channel:-):-):):-). +ham So your telling me I coulda been your real Valentine and I wasn't? U never pick me for NOTHING!! +spam Phony £350 award - Todays Voda numbers ending XXXX are selected to receive a £350 award. If you have a match please call 08712300220 quoting claim code 3100 standard rates app +ham We made it! Eta at taunton is 12:30 as planned, hope that‘s still okday?! Good to see you! :-xx +ham I'm hungry buy smth home... +ham "HEY KATE, HOPE UR OK... WILL GIVE U A BUZ WEDLUNCH. GO OUTSOMEWHERE 4 ADRINK IN TOWN..CUD GO 2WATERSHD 4 A BIT? PPL FROMWRK WILL BTHERE. LOVE PETEXXX." +ham My drive can only be read. I need to write +ham Just looked it up and addie goes back Monday, sucks to be her +ham Happy new year. Hope you are having a good semester +ham Esplanade lor. Where else... +ham Can you talk with me.. +ham Hmph. Go head, big baller. +ham Well its not like you actually called someone a punto. That woulda been worse. +ham Nope. Since ayo travelled, he has forgotten his guy +ham You still around? Looking to pick up later +spam CDs 4u: Congratulations ur awarded £500 of CD gift vouchers or £125 gift guaranteed & Freeentry 2 £100 wkly draw xt MUSIC to 87066 TnCs www.ldew.com1win150ppmx3age16 +ham There's someone here that has a year <#> toyota camry like mr olayiwola's own. Mileage is <#> k.its clean but i need to know how much will it sell for. If i can raise the dough for it how soon after landing will it sell. Holla back. +ham Guess which pub im in? Im as happy as a pig in clover or whatever the saying is! +ham ILL B DOWN SOON +ham Oh k. . I will come tomorrow +ham Go fool dont cheat others ok +ham My mobile number.pls sms ur mail id.convey regards to achan,amma.Rakhesh.Qatar +ham By the way, 'rencontre' is to meet again. Mountains dont.... +spam You have WON a guaranteed £1000 cash or a £2000 prize. To claim yr prize call our customer service representative on 08714712412 between 10am-7pm Cost 10p +ham U attend ur driving lesson how many times a wk n which day? +ham Uncle G, just checking up on you. Do have a rewarding month +ham Hello boytoy ! Geeee ... I'm missing you today. I like to send you a tm and remind you I'm thinking of you ... And you are loved ... *loving kiss* +ham I think the other two still need to get cash but we can def be ready by 9 +ham Hey gals...U all wanna meet 4 dinner at nìte? +spam Dear 0776xxxxxxx U've been invited to XCHAT. This is our final attempt to contact u! Txt CHAT to 86688 150p/MsgrcvdHG/Suite342/2Lands/Row/W1J6HL LDN 18yrs +ham Babe ! What are you doing ? Where are you ? Who are you talking to ? Do you think of me ? Are you being a good boy? Are you missing me? Do you love me ? +ham Great! How is the office today? +ham It's cool, we can last a little while. Getting more any time soon? +ham :-( sad puppy noise +ham Yes its possible but dint try. Pls dont tell to any one k +ham Anyway holla at me whenever you're around because I need an excuse to go creep on people in sarasota +ham Where you. What happen +ham I was gonna ask you lol but i think its at 7 +spam Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send GO to 86688 only 150p/meg. CC: 08718720201 HG/Suite342/2lands Row/W1j6HL +spam PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S.I.M. points. Call 08715203685 Identifier Code:4xx26 Expires 13/10/04 +ham Go chase after her and run her over while she's crossing the street +spam I'd like to tell you my deepest darkest fantasies. Call me 09094646631 just 60p/min. To stop texts call 08712460324 (nat rate) +ham Is there coming friday is leave for pongal?do you get any news from your work place. +ham Hey... Very inconvenient for your sis a not huh? +ham Ok i vl..do u know i got adsense approved.. +ham * Was really good to see you the other day dudette, been missing you! +ham I want to go to perumbavoor +ham How many times i told in the stage all use to laugh. You not listen aha. +spam You won't believe it but it's true. It's Incredible Txts! Reply G now to learn truly amazing things that will blow your mind. From O2FWD only 18p/txt +ham (You didn't hear it from me) +ham Thanks for being there for me just to talk to on saturday. You are very dear to me. I cherish having you as a brother and role model. +ham Pls clarify back if an open return ticket that i have can be preponed for me to go back to kerala. +spam Natalie (20/F) is inviting you to be her friend. Reply YES-165 or NO-165 See her: www.SMS.ac/u/natalie2k9 STOP? Send STOP FRND to 62468 +ham She ran off with a younger man. we will make pretty babies together :) +spam Jamster! To get your free wallpaper text HEART to 88888 now! T&C apply. 16 only. Need Help? Call 08701213186. +ham O ic lol. Should play 9 doors sometime yo +ham Dunno, my dad said he coming home 2 bring us out 4 lunch. Yup i go w u lor. I call u when i reach school lor... +ham We have sent JD for Customer Service cum Accounts Executive to ur mail id, For details contact us +ham Desires- u going to doctor 4 liver. And get a bit stylish. Get ur hair managed. Thats it. +ham Hmmm.still we dont have opener? +ham Yeah so basically any time next week you can get away from your mom & get up before 3 +ham Edison has rightly said, "A fool can ask more questions than a wise man can answer" Now you know why all of us are speechless during ViVa.. GM,GN,GE,GNT:-) +ham I will vote for wherever my heart guides me +ham With my sis lor... We juz watched italian job. +ham Tick, tick, tick .... Where are you ? I could die of loneliness you know ! *pouts* *stomps feet* I need you ... +ham Lmao you know me so well... +spam Double Mins & Double Txt & 1/2 price Linerental on Latest Orange Bluetooth mobiles. Call MobileUpd8 for the very latest offers. 08000839402 or call2optout/LF56 +ham Am on a train back from northampton so i'm afraid not! I'm staying skyving off today ho ho! Will be around wednesday though. Do you fancy the comedy club this week by the way? +ham Goodnight da thangam I really miss u dear. +ham Hey next sun 1030 there's a basic yoga course... at bugis... We can go for that... Pilates intro next sat.... Tell me what time you r free +ham Geeeee ... Your internet is really bad today, eh ? +spam Free video camera phones with Half Price line rental for 12 mths and 500 cross ntwk mins 100 txts. Call MobileUpd8 08001950382 or Call2OptOut/674 +ham I think i am disturbing her da +ham Sorry, I'll call you later. I am in meeting sir. +ham Havent stuck at orchard in my dad's car. Going 4 dinner now. U leh? So r they free tonight? +ham Ok i also wan 2 watch e 9 pm show... +ham I dunno lei... Like dun haf... +ham But your brother transfered only <#> + <#> . Pa. +ham I calls you later. Afternoon onwords mtnl service get problem in south mumbai. I can hear you but you cann't listen me. +spam 83039 62735=£450 UK Break AccommodationVouchers terms & conditions apply. 2 claim you mustprovide your claim number which is 15541 +ham Talk to g and x about that +ham Hai dear friends... This is my new & present number..:) By Rajitha Raj (Ranju) +spam 5p 4 alfie Moon's Children in need song on ur mob. Tell ur m8s. Txt Tone charity to 8007 for Nokias or Poly charity for polys: zed 08701417012 profit 2 charity. +ham As in different styles? +spam WIN a £200 Shopping spree every WEEK Starting NOW. 2 play text STORE to 88039. SkilGme. TsCs08714740323 1Winawk! age16 £1.50perweeksub. +ham Gud ni8 dear..slp well..take care..swt dreams..Muah.. +ham I want to sent <#> mesages today. Thats y. Sorry if i hurts +spam This is the 2nd attempt to contract U, you have won this weeks top prize of either £1000 cash or £200 prize. Just call 09066361921 +ham Well, i'm glad you didn't find it totally disagreeable ... Lol +ham Guy, no flash me now. If you go call me, call me. How madam. Take care oh. +spam Do you want a New Nokia 3510i colour phone DeliveredTomorrow? With 300 free minutes to any mobile + 100 free texts + Free Camcorder reply or call 08000930705. +ham Mark works tomorrow. He gets out at 5. His work is by your house so he can meet u afterwards. +ham "Keep ur problems in ur heart, b'coz nobody will fight for u. Only u & u have to fight for ur self & win the battle. -VIVEKANAND- G 9t.. SD.. +ham Yeah, give me a call if you've got a minute +ham "HI BABE UAWAKE?FEELLIKW SHIT.JUSTFOUND OUT VIA ALETTER THATMUM GOTMARRIED 4thNOV.BEHIND OURBACKS – FUCKINNICE!SELFISH,DEVIOUSBITCH.ANYWAY,I’L CALL U" +ham Amazing : If you rearrange these letters it gives the same meaning... Dormitory = Dirty room Astronomer = Moon starer The eyes = They see Election results = Lies lets recount Mother-in-law = Woman Hitler Eleven plus two =Twelve plus one Its Amazing... !:-) +ham Aiya we discuss later lar... Pick ü up at 4 is it? +ham Hey happy birthday... +ham Sorry i missed your call. Can you please call back. +ham Omg if its not one thing its another. My cat has worms :/ when does this bad day end? +ham Good morning, im suffering from fever and dysentry ..will not be able to come to office today. +ham I wont do anything de. +ham What type of stuff do you sing? +ham St andre, virgil's cream +ham No no. I will check all rooms befor activities +ham My fri ah... Okie lor,goin 4 my drivin den go shoppin after tt... +ham Gokila is talking with you aha:) +ham Hi Shanil,Rakhesh here.thanks,i have exchanged the uncut diamond stuff.leaving back. Excellent service by Dino and Prem. +ham K.k.this month kotees birthday know? +ham But i'm really really broke oh. No amount is too small even <#> +ham Sorry about that this is my mates phone and i didnt write it love Kate +spam TheMob>Hit the link to get a premium Pink Panther game, the new no. 1 from Sugababes, a crazy Zebra animation or a badass Hoody wallpaper-all 4 FREE! +ham Ah, well that confuses things, doesnt it? I thought was friends with now. Maybe i did the wrong thing but i already sort of invited -tho he may not come cos of money. +ham Aight, call me once you're close +ham Nope thats fine. I might have a nap tho! +spam This msg is for your mobile content order It has been resent as previous attempt failed due to network error Queries to customersqueries@netvision.uk.com +ham In other news after hassling me to get him weed for a week andres has no money. HAUGHAIGHGTUJHYGUJ +ham A Boy loved a gal. He propsd bt she didnt mind. He gv lv lttrs, Bt her frnds threw thm. Again d boy decided 2 aproach d gal , dt time a truck was speeding towards d gal. Wn it was about 2 hit d girl,d boy ran like hell n saved her. She asked 'hw cn u run so fast?' D boy replied "Boost is d secret of my energy" n instantly d girl shouted "our energy" n Thy lived happily 2gthr drinking boost evrydy Moral of d story:- I hv free msgs:D;): gud ni8 +ham I wnt to buy a BMW car urgently..its vry urgent.but hv a shortage of <#> Lacs.there is no source to arng dis amt. <#> lacs..thats my prob +ham Ding me on ya break fassyole! Blacko from londn +ham I REALLY NEED 2 KISS U I MISS U MY BABY FROM UR BABY 4EVA +ham The sign of maturity is not when we start saying big things.. But actually it is, when we start understanding small things... *HAVE A NICE EVENING* BSLVYL +ham Oh you got many responsibilities. +spam You have 1 new message. Please call 08715205273 +ham I've reached sch already... +spam December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update VCo FREE on 08002986906 +ham U definitely need a module from e humanities dis sem izzit? U wan 2 take other modules 1st? +ham Argh why the fuck is nobody in town ;_; +spam Get 3 Lions England tone, reply lionm 4 mono or lionp 4 poly. 4 more go 2 www.ringtones.co.uk, the original n best. Tones 3GBP network operator rates apply. +ham Thanks. Fills me with complete calm and reassurance! +ham Aslamalaikkum....insha allah tohar beeen muht albi mufti mahfuuz...meaning same here.... +ham Are you driving or training? +ham Lol for real. She told my dad I have cancer +spam PRIVATE! Your 2003 Account Statement for 078 +ham Oops I did have it, <#> ? +ham "NOT ENUFCREDEIT TOCALL.SHALL ILEAVE UNI AT 6 +GET A BUS TO YOR HOUSE?" +ham Hi Chikku, send some nice msgs +ham He is impossible to argue with and he always treats me like his sub, like he never released me ... Which he did and I will remind him of that if necessary +ham After my work ah... Den 6 plus lor... U workin oso rite... Den go orchard lor, no other place to go liao... +ham To the wonderful Okors, have a great month. We cherish you guys and wish you well each day. MojiBiola +ham Cuz ibored. And don wanna study +ham Wot about on wed nite I am 3 then but only til 9! +ham Rose for red,red for blood,blood for heart,heart for u. But u for me.... Send tis to all ur friends.. Including me.. If u like me.. If u get back, 1-u r poor in relation! 2-u need some 1 to support 3-u r frnd 2 many 4-some1 luvs u 5+- some1 is praying god to marry u.:-) try it.... +ham Any way where are you and what doing. +ham That sucks. I'll go over so u can do my hair. You'll do it free right? +ham it's still not working. And this time i also tried adding zeros. That was the savings. The checking is <#> +ham Hmm... Dunno leh, mayb a bag 4 goigng out dat is not too small. Or jus anything except perfume, smth dat i can keep. +ham Sday only joined.so training we started today:) +ham Sorry * was at the grocers. +ham There are some nice pubs near here or there is Frankie n Bennys near the warner cinema? +spam YOU VE WON! Your 4* Costa Del Sol Holiday or £5000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost£1.50/pm, Max10mins +ham Yup... I havent been there before... You want to go for the yoga? I can call up to book +ham Oh shut it. Omg yesterday I had a dream that I had 2 kids both boys. I was so pissed. Not only about the kids but them being boys. I even told mark in my dream that he was changing diapers cause I'm not getting owed in the face. +ham Yeah I imagine he would be really gentle. Unlike the other docs who treat their patients like turkeys. +spam FREE for 1st week! No1 Nokia tone 4 ur mobile every week just txt NOKIA to 8077 Get txting and tell ur mates. www.getzed.co.uk POBox 36504 W45WQ 16+ norm150p/tone +ham Now that you have started dont stop. Just pray for more good ideas and anything i see that can help you guys i.ll forward you a link. +ham Hi darlin im on helens fone im gonna b up the princes 2 nite please come up tb love Kate +ham I'm in office now da:)where are you? +ham Aiyar u so poor thing... I give u my support k... Jia you! I'll think of u... +ham Oh unintentionally not bad timing. Great. Fingers the trains play along! Will give fifteen min warning. +spam Get your garden ready for summer with a FREE selection of summer bulbs and seeds worth £33:50 only with The Scotsman this Saturday. To stop go2 notxt.co.uk +ham K..then come wenever u lik to come and also tel vikky to come by getting free time..:-) +ham Pls call me da. What happen. +ham Happy new year to u and ur family...may this new year bring happiness , stability and tranquility to ur vibrant colourful life:):) +ham No problem with the renewal. I.ll do it right away but i dont know his details. +ham Idk. I'm sitting here in a stop and shop parking lot right now bawling my eyes out because i feel like i'm a failure in everything. Nobody wants me and now i feel like i'm failing you. +ham Haven't left yet so probably gonna be here til dinner +ham Like <#> , same question +ham MY NEW YEARS EVE WAS OK. I WENT TO A PARTY WITH MY BOYFRIEND. WHO IS THIS SI THEN HEY +ham Sir, I need Velusamy sir's date of birth and company bank facilities details. +ham K k:) sms chat with me. +ham I will come with karnan car. Please wait till 6pm will directly goto doctor. +ham No but the bluray player can +ham Ok... Then r we meeting later? +ham Lol no. I just need to cash in my nitros. Hurry come on before I crash out! +ham Just send a text. We'll skype later. +ham Ok leave no need to ask +spam Congrats 2 mobile 3G Videophones R yours. call 09063458130 now! videochat wid ur mates, play java games, Dload polypH music, noline rentl. bx420. ip4. 5we. 150p +ham Ü still got lessons? Ü in sch? +ham Y she dun believe leh? I tot i told her it's true already. I thk she muz c us tog then she believe. +ham Oh did you charge camera +ham I‘ve got some salt, you can rub it in my open wounds if you like! +ham Now i'm going for lunch. +ham I'm in school now n i'll be in da lab doing some stuff give me a call when ü r done. +ham Oh k. . I will come tomorrow +ham Aight, text me tonight and we'll see what's up +ham U 2. +ham Water logging in desert. Geoenvironmental implications. +ham Raji..pls do me a favour. Pls convey my Birthday wishes to Nimya. Pls. Today is her birthday. +ham Company is very good.environment is terrific and food is really nice:) +ham Very strange. and are watching the 2nd one now but i'm in bed. Sweet dreams, miss u +spam SMS AUCTION - A BRAND NEW Nokia 7250 is up 4 auction today! Auction is FREE 2 join & take part! Txt NOKIA to 86021 now! +ham Hi hope u r both ok, he said he would text and he hasn't, have u seen him, let me down gently please +ham Babe! I fucking love you too !! You know? Fuck it was so good to hear your voice. I so need that. I crave it. I can't get enough. I adore you, Ahmad *kisses* +ham K sure am in my relatives home. Sms me de. Pls:-) +ham I sent them. Do you like? +ham Fuuuuck I need to stop sleepin, sup +ham I'm in town now so i'll jus take mrt down later. +ham I just cooked a rather nice salmon a la you +ham I uploaded mine to Facebook +ham WHAT TIME U WRKIN? +ham Okie +spam ree entry in 2 a weekly comp for a chance to win an ipod. Txt POD to 80182 to get entry (std txt rate) T&C's apply 08452810073 for details 18+ +spam Our records indicate u maybe entitled to 5000 pounds in compensation for the Accident you had. To claim 4 free reply with CLAIM to this msg. 2 stop txt STOP +ham Sorry, I'll call later +ham Oh oh... Den muz change plan liao... Go back have to yan jiu again... +ham It's wylie, you in tampa or sarasota? +ham Ok... Take ur time n enjoy ur dinner... +ham Darren was saying dat if u meeting da ge den we dun meet 4 dinner. Cos later u leave xy will feel awkward. Den u meet him 4 lunch lor. +spam Spook up your mob with a Halloween collection of a logo & pic message plus a free eerie tone, txt CARD SPOOK to 8007 zed 08701417012150p per logo/pic +ham I like cheap! But i‘m happy to splash out on the wine if it makes you feel better.. +ham She.s fine. I have had difficulties with her phone. It works with mine. Can you pls send her another friend request. +ham Ugh my leg hurts. Musta overdid it on mon. +spam Call Germany for only 1 pence per minute! Call from a fixed line via access number 0844 861 85 85. No prepayment. Direct access! www.telediscount.co.uk +spam YOU VE WON! Your 4* Costa Del Sol Holiday or £5000 await collection. Call 09050090044 Now toClaim. SAE, TC s, POBox334, Stockport, SK38xh, Cost£1.50/pm, Max10mins +ham WOT STUDENT DISCOUNT CAN U GET ON BOOKS? +ham Me fine..absolutly fine +ham How come she can get it? Should b quite diff to guess rite... +spam Had your mobile 11mths ? Update for FREE to Oranges latest colour camera mobiles & unlimited weekend calls. Call Mobile Upd8 on freefone 08000839402 or 2StopTxt +ham I will reach ur home in <#> minutes +ham Babe, I'm answering you, can't you see me ? Maybe you'd better reboot YM ... I got the photo ... It's great ! +ham Hi.what you think about match? +ham I know you are thinkin malaria. But relax, children cant handle malaria. She would have been worse and its gastroenteritis. If she takes enough to replace her loss her temp will reduce. And if you give her malaria meds now she will just vomit. Its a self limiting illness she has which means in a few days it will completely stop +ham Dai i downloaded but there is only exe file which i can only run that exe after installing. +ham It is only yesterday true true. +ham K.k.how is your business now? +ham 3 pa but not selected. +spam Natalja (25/F) is inviting you to be her friend. Reply YES-440 or NO-440 See her: www.SMS.ac/u/nat27081980 STOP? Send STOP FRND to 62468 +ham I keep ten rs in my shelf:) buy two egg. +ham I am late. I will be there at +ham Well thats nice. Too bad i cant eat it +ham I accidentally brought em home in the box +ham Pls she needs to dat slowly or she will vomit more. +ham I have to take exam with in march 3 +ham Jane babes not goin 2 wrk, feel ill after lst nite. Foned in already cover 4 me chuck.:-) +ham 5 nights...We nt staying at port step liao...Too ex +ham If I die I want u to have all my stuffs. +ham "OH FUCK. JUSWOKE UP IN A BED ON A BOATIN THE DOCKS. SLEPT WID 25 YEAR OLD. SPINOUT! GIV U DA GOSSIP L8R. XXX" +ham Smile in Pleasure Smile in Pain Smile when trouble pours like Rain Smile when sum1 Hurts U Smile becoz SOMEONE still Loves to see u Smiling!! +ham Prabha..i'm soryda..realy..frm heart i'm sory +ham I re-met alex nichols from middle school and it turns out he's dealing! +spam PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S. I. M. points. Call 08715203656 Identifier Code: 42049 Expires 26/10/04 +ham It means u could not keep ur words. +ham Nope, I'm still in the market +ham I realise you are a busy guy and i'm trying not to be a bother. I have to get some exams outta the way and then try the cars. Do have a gr8 day +spam YOU ARE CHOSEN TO RECEIVE A £350 AWARD! Pls call claim number 09066364311 to collect your award which you are selected to receive as a valued mobile customer. +ham Hey what how about your project. Started aha da. +ham Ok cool. See ya then. +ham Am on the uworld site. Am i buying the qbank only or am i buying it with the self assessment also? +ham Your opinion about me? 1. Over 2. Jada 3. Kusruthi 4. Lovable 5. Silent 6. Spl character 7. Not matured 8. Stylish 9. Simple Pls reply.. +spam Someonone you know is trying to contact you via our dating service! To find out who it could be call from your mobile or landline 09064015307 BOX334SK38ch +ham Yeah I can still give you a ride +ham Jay wants to work out first, how's 4 sound? +ham Gud gud..k, chikku tke care.. sleep well gud nyt +ham Its a part of checking IQ +ham Hmm thinking lor... +ham Of course ! Don't tease me ... You know I simply must see ! *grins* ... Do keep me posted my prey ... *loving smile* *devouring kiss* +ham thanks for the temales it was wonderful. Thank. Have a great week. +ham Thank you princess! I want to see your nice juicy booty... +ham Haven't eaten all day. I'm sitting here staring at this juicy pizza and I can't eat it. These meds are ruining my life. +ham Gud ni8 dear..slp well..take care..swt dreams..Muah.. +ham U come n search tat vid..not finishd.. +ham K I'm leaving soon, be there a little after 9 +spam Urgent! Please call 09061213237 from a landline. £5000 cash or a 4* holiday await collection. T &Cs SAE PO Box 177 M227XY. 16+ +ham Yeah work is fine, started last week, all the same stuff as before, dull but easy and guys are fun! +ham You do your studies alone without anyones help. If you cant no need to study. +ham Please tell me not all of my car keys are in your purse +ham I didnt get anything da +ham Ok... Sweet dreams... +ham Well she's in for a big surprise! +ham As usual..iam fine, happy & doing well..:) +ham 1 in cbe. 2 in chennai. +ham Can help u swoop by picking u up from wherever ur other birds r meeting if u want. +ham If anyone calls for a treadmill say you'll buy it. Make sure its working. I found an ad on Craigslist selling for $ <#> . +ham I absolutely LOVE South Park! I only recently started watching the office. +ham Did you see that film:) +ham Pls speak with me. I wont ask anything other then you friendship. +ham Storming msg: Wen u lift d phne, u say "HELLO" Do u knw wt is d real meaning of HELLO?? . . . It's d name of a girl..! . . . Yes.. And u knw who is dat girl?? "Margaret Hello" She is d girlfrnd f Grahmbell who invnted telphone... . . . . Moral:One can 4get d name of a person, bt not his girlfrnd... G o o d n i g h t . . .@ +ham Gud ni8.swt drms.take care +ham HI DARLIN ITS KATE ARE U UP FOR DOIN SOMETHIN TONIGHT? IM GOING TO A PUB CALLED THE SWAN OR SOMETHING WITH MY PARENTS FOR ONE DRINK SO PHONE ME IF U CAN +ham Anything lar then ü not going home 4 dinner? +ham "ER, ENJOYIN INDIANS AT THE MO..yeP. SaLL gOoD HehE ;> hows bout u shexy? Pete Xx" +spam If you don't, your prize will go to another customer. T&C at www.t-c.biz 18+ 150p/min Polo Ltd Suite 373 London W1J 6HL Please call back if busy +ham Did u fix the teeth?if not do it asap.ok take care. +ham So u wan 2 come for our dinner tonight a not? +ham Hello.How u doing?What u been up 2?When will u b moving out of the flat, cos I will need to arrange to pick up the lamp, etc. Take care. Hello caroline! +ham Its too late:)but its k.wish you the same. +ham Hi. Hope ur day * good! Back from walk, table booked for half eight. Let me know when ur coming over. +ham Oh yeah clearly it's my fault +ham Dunno leh cant remember mayb lor. So wat time r we meeting tmr? +ham Best msg: It's hard to be with a person, when u know that one more step foward will make u fall in love.. & One step back can ruin ur friendship.. good night:-) ... +spam URGENT! Your Mobile number has been awarded with a £2000 prize GUARANTEED. Call 09061790126 from land line. Claim 3030. Valid 12hrs only 150ppm +ham Helloooo... Wake up..! "Sweet" "morning" "welcomes" "You" "Enjoy" "This Day" "with full of joy".. "GUD MRNG". +ham Vikky, come around <TIME> .. +ham And how you will do that, princess? :) +ham I have gone into get info bt dont know what to do +ham Yeah, probably here for a while +ham Sent me ur email id soon +spam URGENT! You have won a 1 week FREE membership in our £100,000 Prize Jackpot! Txt the word: CLAIM to No: 81010 T&C www.dbuk.net LCCLTD POBOX 4403LDNW1A7RW18 +ham I'm still pretty weak today .. Bad day ? +ham Hey ! Don't forget ... You are MINE ... For ME ... My possession ... MY property ... MMM ... *childish smile* ... +ham An excellent thought by a misundrstud frnd: I knw u hate me bt the day wen u'll knw the truth u'll hate urself:-( Gn:-) +ham Hey! Congrats 2u2. id luv 2 but ive had 2 go home! +ham Dear where you. Call me +ham Xy trying smth now. U eat already? We havent... +spam Urgent! Please call 09061213237 from landline. £5000 cash or a luxury 4* Canary Islands Holiday await collection. T&Cs SAE PO Box 177. M227XY. 150ppm. 16+ +ham I donno its in your genes or something +spam XMAS iscoming & ur awarded either £500 CD gift vouchers & free entry 2 r £100 weekly draw txt MUSIC to 87066 TnC www.Ldew.com1win150ppmx3age16subscription +ham Alex says he's not ok with you not being ok with it +ham Are u coming to the funeral home +ham My darling sister. How are you doing. When's school resuming. Is there a minimum wait period before you reapply? Do take care +ham I.ll hand her my phone to chat wit u +ham Well good morning mr . Hows london treatin' ya treacle? +ham I can't make it tonight +ham At WHAT TIME should i come tomorrow +ham About <#> bucks. The banks fees are fixed. Better to call the bank and find out. +ham I can. But it will tell quite long, cos i haven't finish my film yet... +ham Pls ask macho how much is budget for bb bold 2 is cos i saw a new one for <#> dollars. +ham "Hi missed your Call and my mumHas beendropping red wine all over theplace! what is your adress?" +ham Ill be at yours in about 3 mins but look out for me +ham What you did in leave. +ham I'm coming back on Thursday. Yay. Is it gonna be ok to get the money. Cheers. Oh yeah and how are you. Everything alright. Hows school. Or do you call it work now +ham Jolly good! By the way, will give u tickets for sat eve 7.30. Speak before then x +ham yeah, that's what I was thinking +ham K.k:)i'm going to tirunelvali this week to see my uncle ..i already spend the amount by taking dress .so only i want money.i will give it on feb 1 +ham Here got ur favorite oyster... N got my favorite sashimi... Ok lar i dun say already... Wait ur stomach start rumbling... +ham My sister going to earn more than me da. +spam Get the official ENGLAND poly ringtone or colour flag on yer mobile for tonights game! Text TONE or FLAG to 84199. Optout txt ENG STOP Box39822 W111WX £1.50 +ham Hahaha..use your brain dear +ham Jus finish watching tv... U? +ham K, fyi I'm back in my parents' place in south tampa so I might need to do the deal somewhere else +ham Good morning, my Love ... I go to sleep now and wish you a great day full of feeling better and opportunity ... You are my last thought babe, I LOVE YOU *kiss* +ham Kothi print out marandratha. +ham But we havent got da topic yet rite? +ham Ok no problem... Yup i'm going to sch at 4 if i rem correctly... +ham Thanks, I'll keep that in mind +ham Aah bless! How's your arm? +ham Dear Sir,Salam Alaikkum.Pride and Pleasure meeting you today at the Tea Shop.We are pleased to send you our contact number at Qatar.Rakhesh an Indian.Pls save our Number.Respectful Regards. +ham Gal n boy walking in d park. gal-can i hold ur hand? boy-y? do u think i would run away? gal-no, jst wana c how it feels walking in heaven with an prince..GN:-) +ham What makes you most happy? +ham Wishing you a wonderful week. +ham Sweet heart how are you? +ham Sir, waiting for your letter. +ham Dude im no longer a pisces. Im an aquarius now. +ham X course it 2yrs. Just so her messages on messenger lik you r sending me +ham I think steyn surely get one wicket:) +ham Neither [in sterm voice] - i'm studying. All fine with me! Not sure the thing will be resolved, tho. Anyway. Have a fab hols +ham Garbage bags, eggs, jam, bread, hannaford wheat chex +ham No. It's not pride. I'm almost <#> years old and shouldn't be takin money from my kid. You're not supposed to have to deal with this stuff. This is grownup stuff--why i don't tell you. +ham Sounds better than my evening im just doing my costume. Im not sure what time i finish tomorrow but i will txt you at the end. +ham My birthday is on feb <#> da. . +ham So when do you wanna gym? +ham You'd like that wouldn't you? Jerk! +ham Are u awake? Is there snow there? +ham And of course you should make a stink! +spam u r subscribed 2 TEXTCOMP 250 wkly comp. 1st wk?s free question follows, subsequent wks charged@150p/msg.2 unsubscribe txt STOP 2 84128,custcare 08712405020 +ham No go. No openings for that room 'til after thanksgiving without an upcharge. +ham When you guys planning on coming over? +ham Wat ü doing now? +ham My Parents, My Kidz, My Friends n My Colleagues. All screaming.. SURPRISE !! and I was waiting on the sofa.. ... ..... ' NAKED...! +ham No sir. That's why i had an 8-hr trip on the bus last week. Have another audition next wednesday but i think i might drive this time. +ham Do I? I thought I put it back in the box +ham I'm home... +ham No one interested. May be some business plan. +ham Yup it's at paragon... I havent decided whether 2 cut yet... Hee... +ham Good morning princess! Have a great day! +ham Guai... Ü shd haf seen him when he's naughty... Ü so free today? Can go jogging... +ham Aiyo cos i sms ü then ü neva reply so i wait 4 ü to reply lar. I tot ü havent finish ur lab wat. +ham Living is very simple.. Loving is also simple.. Laughing is too simple.. Winning is tooo simple.. But, Being 'SIMPLE' is very difficult...;-) :-) +ham Tell me something. Thats okay. +ham Ok +ham Hmm. Shall i bring a bottle of wine to keep us amused? Just joking! I'll still bring a bottle. Red or white? See you tomorrow +ham This is ur face test ( 1 2 3 4 5 6 7 8 9 <#> ) select any number i will tell ur face astrology.... am waiting. quick reply... +ham Hey, iouri gave me your number, I'm wylie, ryan's friend +ham Yep get with the program. You're slacking. +ham I'm in inside office..still filling forms.don know when they leave me. +ham I think your mentor is , but not 100 percent sure. +spam Call 09095350301 and send our girls into erotic ecstacy. Just 60p/min. To stop texts call 08712460324 (nat rate) +spam Camera - You are awarded a SiPix Digital Camera! call 09061221066 fromm landline. Delivery within 28 days. +spam A £400 XMAS REWARD IS WAITING FOR YOU! Our computer has randomly picked you from our loyal mobile customers to receive a £400 reward. Just call 09066380611 +ham Just trying to figure out when I'm suppose to see a couple different people this week. We said we'd get together but I didn't set dates +spam IMPORTANT MESSAGE. This is a final contact attempt. You have important messages waiting out our customer claims dept. Expires 13/4/04. Call 08717507382 NOW! +ham Hi mom we might be back later than <#> +spam dating:i have had two of these. Only started after i sent a text to talk sport radio last week. Any connection do you think or coincidence? +ham Lol, oh you got a friend for the dog ? +ham Ok., is any problem to u frm him? Wats matter? +ham K I'll head out in a few mins, see you there +ham Do u konw waht is rael FRIENDSHIP Im gving yuo an exmpel: Jsut ese tihs msg.. Evrey splleing of tihs msg is wrnog.. Bt sitll yuo can raed it wihtuot ayn mitsake.. GOODNIGHT & HAVE A NICE SLEEP..SWEET DREAMS.. +ham I cant pick the phone right now. Pls send a message +ham I don't want you to leave. But i'm barely doing what i can to stay sane. fighting with you constantly isn't helping. +spam The current leading bid is 151. To pause this auction send OUT. Customer Care: 08718726270 +spam Free entry to the gr8prizes wkly comp 4 a chance to win the latest Nokia 8800, PSP or £250 cash every wk.TXT GREAT to 80878 http//www.gr8prizes.com 08715705022 +ham Somebody set up a website where you can play hold em using eve online spacebucks +ham Its sunny in california. The weather's just cool +spam You have 1 new message. Call 0207-083-6089 +ham I can make it up there, squeezed <#> bucks out of my dad +ham Good day to You too.Pray for me.Remove the teeth as its painful maintaining other stuff. +ham How are you babes. Hope your doing ok. I had a shit nights sleep. I fell asleep at 5.I’m knackered and i’m dreading work tonight. What are thou upto tonight. X +ham How do friends help us in problems? They give the most stupid suggestion that Lands us into another problem and helps us forgt the previous problem +ham I'm at work. Please call +ham I will be gentle baby! Soon you will be taking all <#> inches deep inside your tight pussy... +ham NOT MUCH NO FIGHTS. IT WAS A GOOD NITE!! +ham Ok.ok ok..then..whats ur todays plan +ham Nt joking seriously i told +ham Watching ajith film ah? +ham Ooooooh I forgot to tell u I can get on yoville on my phone +ham All done, all handed in. Don't know if mega shop in asda counts as celebration but thats what i'm doing! +ham I dont know exactly could you ask chechi. +ham Dunno lei shd b driving lor cos i go sch 1 hr oni. +ham As in i want custom officer discount oh. +ham That's necessarily respectful +ham Hi. Hope you had a good day. Have a better night. +ham And he's apparently bffs with carly quick now +ham HARD BUT TRUE: How much you show & express your love to someone....that much it will hurt when they leave you or you get seperated...!鈥┾??〨ud evening... +ham Babes I think I got ur brolly I left it in English wil bring it in 2mrw 4 u luv Franxx +ham Hi babe its me thanks for coming even though it didnt go that well!i just wanted my bed! Hope to see you soon love and kisses xxx +ham So gd got free ice cream... I oso wan... +ham Pls give her prometazine syrup. 5mls then <#> mins later feed. +ham So how many days since then? +ham Dear are you angry i was busy dear +ham Yup he msg me: is tat yijue? Then i tot it's my group mate cos we meeting today mah... I'm askin if ü leaving earlier or wat mah cos mayb ü haf to walk v far... +ham ... Are you in the pub? +ham There is a first time for everything :) +ham Daddy, shu shu is looking 4 u... U wan me 2 tell him u're not in singapore or wat? +ham I ask if u meeting da ge tmr nite... +ham Gr8. So how do you handle the victoria island traffic. Plus when's the album due +ham Nite nite pocay wocay luv u more than n e thing 4eva I promise ring u 2morrowxxxx +ham East coast +ham You should get more chicken broth if you want ramen unless there's some I don't know about +ham My slave! I want you to take 2 or 3 pictures of yourself today in bright light on your cell phone! Bright light! +ham Nope. I just forgot. Will show next week +ham So how are you really. What are you up to. How's the masters. And so on. +ham I'm at bruce & fowler now but I'm in my mom's car so I can't park (long story) +ham I dont know oh. Hopefully this month. +ham Hi elaine, is today's meeting confirmed? +ham Ok k..sry i knw 2 siva..tats y i askd.. +ham Sorry, I'll call later +ham U horrible gal... U knew dat i was going out wif him yest n u still come n ask me... +ham Otherwise had part time job na-tuition.. +ham Oh yeah! And my diet just flew out the window +spam Santa Calling! Would your little ones like a call from Santa Xmas eve? Call 09058094583 to book your time. +ham You didnt complete your gist oh. +ham Er yeah, i will b there at 15:26, sorry! Just tell me which pub/cafe to sit in and come wen u can +ham If you can make it any time tonight or whenever you can it's cool, just text me whenever you're around +ham If I was I wasn't paying attention +ham Thanx a lot 4 ur help! +ham You're gonna have to be way more specific than that +ham Jesus armand really is trying to tell everybody he can find +ham I'm wif him now buying tix lar... +ham Mode men or have you left. +ham Am slow in using biola's fne +ham "What are youdoing later? Sar xxx" +ham Hey i've booked the 2 lessons on sun liao... +ham Thank you. do you generally date the brothas? +ham By the way, make sure u get train to worc foregate street not shrub hill. Have fun night x +ham I thought i'd get him a watch, just cos thats the kind of thing u get4an18th. And he loves so much! +spam You have won a guaranteed 32000 award or maybe even £1000 cash to claim ur award call free on 0800 ..... (18+). Its a legitimat efreefone number wat do u think??? +ham Good morning. At the repair shop--the ONLY reason i'm up at this hour. +ham And that's fine, I got enough bud to last most of the night at least +ham I am back. Good journey! Let me know if you need any of the receipts. Shall i tell you like the pendent? +ham So that takes away some money worries +ham aight we can pick some up, you open before tonight? +spam Latest News! Police station toilet stolen, cops have nothing to go on! +ham Sac needs to carry on:) +ham Just sing HU. I think its also important to find someone female that know the place well preferably a citizen that is also smart to help you navigate through. Even things like choosing a phone plan require guidance. When in doubt ask especially girls. +ham What???? Hello wats talks email address? +ham Except theres a chick with huge boobs. +ham Im just wondering what your doing right now? +ham Wishing you a beautiful day. Each moment revealing even more things to keep you smiling. Do enjoy it. +spam "For the most sparkling shopping breaks from 45 per person; call 0121 2025050 or visit www.shortbreaks.org.uk" +ham Arun can u transfr me d amt +ham Sorry, I'll call later +ham If you hear a loud scream in about <#> minutes its cause my Gyno will be shoving things up me that don't belong :/ +spam December only! Had your mobile 11mths+? You are entitled to update to the latest colour camera mobile for Free! Call The Mobile Update Co FREE on 08002986906 +ham Ok i thk i got it. Then u wan me 2 come now or wat? +spam Txt: CALL to No: 86888 & claim your reward of 3 hours talk time to use from your phone now! Subscribe6GBP/mnth inc 3hrs 16 stop?txtStop www.gamb.tv +ham U GOIN OUT 2NITE? +ham I will treasure every moment we spend together... +ham Shall I bring us a bottle of wine to keep us amused? Only joking! I‘ll bring one anyway +spam http//tms. widelive.com/index. wml?id=820554ad0a1705572711&first=true¡C C Ringtone¡ +spam Get your garden ready for summer with a FREE selection of summer bulbs and seeds worth £33:50 only with The Scotsman this Saturday. To stop go2 notxt.co.uk +spam URGENT! Last weekend's draw shows that you have won £1000 cash or a Spanish holiday! CALL NOW 09050000332 to claim. T&C: RSTM, SW7 3SS. 150ppm +ham Ok lor. +ham I thought slide is enough. +ham Yup +ham Well obviously not because all the people in my cool college life went home ;_; +ham Ok lor ü reaching then message me. +ham Where's mummy's boy ? Is he being good or bad ? Is he being positive or negative ? Why is mummy being made to wait? Hmmmm? +ham Dhoni have luck to win some big title.so we will win:) +ham Yes princess! I want to please you every night. Your wish is my command... +ham What Today-sunday..sunday is holiday..so no work.. +ham No probably <#> %. +ham Really do hope the work doesnt get stressful. Have a gr8 day. +ham Have you seen who's back at Holby?! +ham Shall call now dear having food +spam URGENT We are trying to contact you Last weekends draw shows u have won a £1000 prize GUARANTEED Call 09064017295 Claim code K52 Valid 12hrs 150p pm +ham So li hai... Me bored now da lecturer repeating last weeks stuff waste time... +ham , , and picking them up from various points | going 2 yeovil | and they will do the motor project 4 3 hours | and then u take them home. || 12 2 5.30 max. || Very easy +ham Also fuck you and your family for going to rhode island or wherever the fuck and leaving me all alone the week I have a new bong >:( +ham Ofcourse I also upload some songs +spam 2p per min to call Germany 08448350055 from your BT line. Just 2p per min. Check PlanetTalkInstant.com for info & T's & C's. Text stop to opt out +ham K. I will sent it again +ham Oh thanks a lot..i already bought 2 eggs .. +ham K. I will sent it again +ham U studying in sch or going home? Anyway i'll b going 2 sch later. +spam Marvel Mobile Play the official Ultimate Spider-man game (£4.50) on ur mobile right now. Text SPIDER to 83338 for the game & we ll send u a FREE 8Ball wallpaper +ham I think if he rule tamilnadu..then its very tough for our people. +ham Cool, we shall go and see, have to go to tip anyway. Are you at home, got something to drop in later? So lets go to town tonight! Maybe mum can take us in. +ham Good afternoon, my love ... How goes your day ? How did you sleep ? I hope your well, my boytoy ... I think of you ... +ham Yes... I trust u to buy new stuff ASAP so I can try it out +spam SMS SERVICES. for your inclusive text credits, pls goto www.comuk.net login= 3qxj9 unsubscribe with STOP, no extra charge. help 08702840625.COMUK. 220-CM2 9AE +ham Why did I wake up on my own >:( +ham Now get step 2 outta the way. Congrats again. +ham Love has one law; Make happy the person you love. In the same way friendship has one law; Never make ur friend feel alone until you are alive.... Gud night +spam PRIVATE! Your 2003 Account Statement for 07808247860 shows 800 un-redeemed S. I. M. points. Call 08719899229 Identifier Code: 40411 Expires 06/11/04 +ham Apo all other are mokka players only +ham Perhaps * is much easy give your account identification, so i will tomorrow at UNI +ham Wait . I will msg after <#> min. +ham What i told before i tell. Stupid hear after i wont tell anything to you. You dad called to my brother and spoken. Not with me. +ham God's love has no limit. God's grace has no measure. God's power has no boundaries. May u have God's endless blessings always in ur life...!! Gud ni8 +ham I want to be inside you every night... +ham Machan you go to gym tomorrow, i wil come late goodnight. +ham Lol they were mad at first but then they woke up and gave in. +ham I went to project centre +ham It‘s reassuring, in this crazy world. +ham Just making dinner, you ? +ham Yes. Please leave at <#> . So that at <#> we can leave +ham Oh... Okie lor...We go on sat... +ham You are a great role model. You are giving so much and i really wish each day for a miracle but God as a reason for everything and i must say i wish i knew why but i dont. I've looked up to you since i was young and i still do. Have a great day. +ham Ya, i'm referin to mei's ex wat... No ah, waitin 4 u to treat, somebody shld b rich liao...So gd, den u dun have to work frm tmr onwards... +ham Miles and smiles r made frm same letters but do u know d difference..? smile on ur face keeps me happy even though I am miles away from u.. :-)keep smiling.. Good nyt +ham By the way, i've put a skip right outside the front of the house so you can see which house it is. Just pull up before it. +ham Can you pls send me that company name. In saibaba colany +ham No. I dont want to hear anything +ham You are a big chic. Common. Declare +ham Thats cool. I want to please you... +ham Going to join tomorrow. +spam You are awarded a SiPix Digital Camera! call 09061221061 from landline. Delivery within 28days. T Cs Box177. M221BP. 2yr warranty. 150ppm. 16 . p p£3.99 +ham I want to tell you how bad I feel that basically the only times I text you lately are when I need drugs +spam PRIVATE! Your 2003 Account Statement for shows 800 un-redeemed S.I.M. points. Call 08718738001 Identifier Code: 49557 Expires 26/11/04 +ham Total disappointment, when I texted you was the craziest shit got :( +ham Its just the effect of irritation. Just ignore it +ham What about this one then. +ham I think that tantrum's finished so yeah I'll be by at some point +ham Compliments to you. Was away from the system. How your side. +ham happened here while you were adventuring +ham Hey chief, can you give me a bell when you get this. Need to talk to you about this royal visit on the 1st june. +ham Ok which your another number +ham I know you are thinkin malaria. But relax, children cant handle malaria. She would have been worse and its gastroenteritis. If she takes enough to replace her loss her temp will reduce. And if you give her malaria meds now she will just vomit. Its a self limiting illness she has which means in a few days it will completely stop +ham Aiyah ok wat as long as got improve can already wat... +spam Want explicit SEX in 30 secs? Ring 02073162414 now! Costs 20p/min Gsex POBOX 2667 WC1N 3XX +ham I can't believe how attached I am to seeing you every day. I know you will do the best you can to get to me babe. I will go to teach my class at your midnight +ham Just sleeping..and surfing +spam ASKED 3MOBILE IF 0870 CHATLINES INCLU IN FREE MINS. INDIA CUST SERVs SED YES. L8ER GOT MEGA BILL. 3 DONT GIV A SHIT. BAILIFF DUE IN DAYS. I O £250 3 WANT £800 +ham Yeah it's jus rite... +ham Armand says get your ass over to epsilon +ham U still havent got urself a jacket ah? +ham I'm taking derek & taylor to walmart, if I'm not back by the time you're done just leave the mouse on my desk and I'll text you when priscilla's ready +ham Hi its in durban are you still on this number +ham Ic. There are a lotta childporn cars then. +spam Had your contract mobile 11 Mnths? Latest Motorola, Nokia etc. all FREE! Double Mins & Text on Orange tariffs. TEXT YES for callback, no to remove from records. +ham No, I was trying it all weekend ;V +ham You know, wot people wear. T shirts, jumpers, hat, belt, is all we know. We r at Cribbs +ham Cool, what time you think you can get here? +ham Wen did you get so spiritual and deep. That's great +ham Have a safe trip to Nigeria. Wish you happiness and very soon company to share moments with +ham Hahaha..use your brain dear +ham Well keep in mind I've only got enough gas for one more round trip barring a sudden influx of cash +ham Yeh. Indians was nice. Tho it did kane me off a bit he he. We shud go out 4 a drink sometime soon. Mite hav 2 go 2 da works 4 a laugh soon. Love Pete x x +ham Yes i have. So that's why u texted. Pshew...missing you so much +ham No. I meant the calculation is the same. That <#> units at <#> . This school is really expensive. Have you started practicing your accent. Because its important. And have you decided if you are doing 4years of dental school or if you'll just do the nmde exam. +ham Sorry, I'll call later +ham if you aren't here in the next <#> hours imma flip my shit +ham Anything lor. Juz both of us lor. +ham Get me out of this dump heap. My mom decided to come to lowes. BORING. +ham Ok lor... Sony ericsson salesman... I ask shuhui then she say quite gd 2 use so i considering... +ham Ard 6 like dat lor. +ham Why don't you wait 'til at least wednesday to see if you get your . +ham Huh y lei... +spam REMINDER FROM O2: To get 2.50 pounds free call credit and details of great offers pls reply 2 this text with your valid name, house no and postcode +spam This is the 2nd time we have tried 2 contact u. U have won the £750 Pound prize. 2 claim is easy, call 087187272008 NOW1! Only 10p per minute. BT-national-rate. +ham Will ü b going to esplanade fr home? +ham Pity, * was in mood for that. So...any other suggestions? +ham The guy did some bitching but I acted like i'd be interested in buying something else next week and he gave it to us for free +ham Rofl. Its true to its name diff --git a/lost+found/Schellackplatte.xml-CEnNSY b/lost+found/Schellackplatte.xml-CEnNSY new file mode 100644 index 00000000..d2566134 --- /dev/null +++ b/lost+found/Schellackplatte.xml-CEnNSY @@ -0,0 +1,10 @@ + + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + Schellackplatte + + 0.0 + + \ No newline at end of file diff --git a/lost+found/SearchTree.java-90NWae b/lost+found/SearchTree.java-90NWae new file mode 100644 index 00000000..05ad067b --- /dev/null +++ b/lost+found/SearchTree.java-90NWae @@ -0,0 +1,200 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.Map; +import java.util.NavigableSet; +import java.util.TreeMap; + +/* + * Solution of Simon Hardy for mission 6 (doesn't pass INGInious because of TreeMap and Arrays.sort, + * change the 'run' file and disable these checks if you want to submit it. + * NB : this solution works, but is not optimal because of the use of TreeMap (no DFS possible + * to browse the elements of the tree, etc.) + */ +public class SearchTree implements OrderedMap { + + TreeMap> tree; + + public SearchTree() { + tree = new TreeMap>(); + } + + public SearchTree(String file) { + ArrayList songs = new ArrayList(); + readInput(file, songs); + + tree = new TreeMap>(); + for (Song song : songs) { + Set values = tree.get(song.getArtist()); + if (values == null) + values = new HashSet(); + values.add(song.getName()); + tree.put(song.getArtist(), values); + } + } + + private void readInput(String filename, ArrayList songs) { + // Read the input file line by line + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + String[] split = line.split("\t"); + if (split.length != 2) System.out.println("Error in splitting"); + else { + songs.add(new Song(split[0], split[1])); + } + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + /* Methods of the Map ADT */ + + public int size() { + return tree.size(); + } + + public boolean isEmpty() { + return tree.isEmpty(); + } + + public Set get(String key) { + return tree.get(key); + } + + public Set put(String key, Set value) { + return tree.put(key, value); + } + + public Set remove(String key) { + return tree.remove(key); + } + + public Set keySet() { + return tree.keySet(); + } + + public Collection> values() { + return tree.values(); + } + + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + public Map.Entry> firstEntry() { + return tree.firstEntry(); + } + + public Map.Entry> lastEntry() { + return tree.lastEntry(); + } + + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + public String[] getOrdered(String key) { + Set values = tree.get(key); + if (values == null) return new String[]{}; + String[] array = new String[values.size()]; + array = values.toArray(array); + Arrays.sort(array); + return array; + } + + public List>> entriesBetween(String lowest, String highest) { + List>> list = new LinkedList>>(); + Map.Entry> entry = tree.ceilingEntry(lowest); + while (entry != null && entry.getKey().compareTo(highest) <= 0) { + list.add(entry); + entry = higherEntry(entry.getKey()); + } + return list; + } + + public String toString() { + NavigableSet keys = tree.navigableKeySet(); + String ret = ""; + for (String key : keys) { + String[] array = getOrdered(key); + for (int i = 0 ; i < array.length; i++) + ret += "[" + key + "] " + array[i] + "\n"; + } + return ret; + } + + class Song { + + private String name; + private String artist; + + public Song(String artist, String name) { + this.name = name; + this.artist = artist; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getArtist() { + return artist; + } + + public void setArtist(String artist) { + this.artist = artist; + } + } + + +} diff --git a/lost+found/SearchTree.java-oSvWAA b/lost+found/SearchTree.java-oSvWAA new file mode 100644 index 00000000..737198c4 --- /dev/null +++ b/lost+found/SearchTree.java-oSvWAA @@ -0,0 +1,779 @@ +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.*; + +/** + * @author Charles THOMAS + */ +public class SearchTree implements OrderedMap{ + + RBTree> tree; + + public SearchTree(){ + tree = new RBTree<>(); + } + + public SearchTree(String file){ + tree = new RBTree<>(); + populateFromFile(file); + } + + public void populateFromFile(String file){ + try{ + Files.readAllLines(Paths.get(file)).stream() + .map(line -> line.split("\\t")) //Splitting tabs + .forEach(array -> { + String key = array[0]; + Set value = tree.get(key); + if(value == null) value = new HashSet<>(); + value.add(array[1]); + tree.put(key, value); + }); + }catch(IOException e){ + e.printStackTrace(); + }catch(NullPointerException e){ + System.out.println("File format incorrect!"); + } + } + + /* Methods of the Map ADT */ + + @Override + public int size() { + return tree.size(); + } + + @Override + public boolean isEmpty() { + return tree.isEmpty(); + } + + @Override + public Set get(String key) { + return tree.get(key); + } + + @Override + public Set put(String key, Set value) { + return tree.put(key, value); + } + + @Override + public Set remove(String key) { + return tree.remove(key); + } + + @Override + public Set keySet() { + return tree.keySet(); + } + + @Override + public Collection> values() { + return tree.values(); + } + + @Override + public Set>> entrySet() { + return tree.entrySet(); + } + + /* Methods of the Ordered Map ADT */ + + @Override + public Map.Entry> firstEntry() { + return tree.minEntry(); + } + + @Override + public Map.Entry> lastEntry() { + return tree.maxEntry(); + } + + @Override + public Map.Entry> ceilingEntry(String key) { + return tree.ceilingEntry(key); + } + + @Override + public Map.Entry> floorEntry(String key) { + return tree.floorEntry(key); + } + + @Override + public Map.Entry> lowerEntry(String key) { + return tree.lowerEntry(key); + } + + @Override + public Map.Entry> higherEntry(String key) { + return tree.higherEntry(key); + } + + /* Additional methods */ + + @Override + public String[] getOrdered(String key){ + Set values = tree.get(key); + if(values == null) return new String[0]; + else return sortValues(values); + } + + @Override + public List>> entriesBetween(String lowest, String highest) { + return new ArrayList<>(tree.entriesBetween(lowest, highest)); + } + + @Override + public String toString(){ + return tree.toString(); + } + + private String[] sortValues(Set set){ + String[] values = set.stream().toArray(String[]::new); + QuickSort sorter = new QuickSort<>(); + sorter.sort(values); + return values; + } + + /** + * Red Black Tree implementation + * @author Charles THOMAS + * Based on http://algs4.cs.princeton.edu/33balanced/RedBlackBST.java.html + */ + public class RBTree, Value>{ + + private static final boolean RED = true; + private static final boolean BLACK = false; + + private Node root; //Root of the BST + + /************************************************************* + * Class Node: + *************************************************************/ + private class Node{ + Key key; + Value val; + Node left, right; + int N; + boolean color; + + public Node(Key key, Value val, int N, boolean color) { + this.key = key; + this.val = val; + this.N = N; + this.color = color; + } + } + + /************************************************************* + * Class RBEntry: + *************************************************************/ + public final class RBEntry implements Map.Entry { + private final RBKey key; + private RBValue value; + + public RBEntry(RBKey key, RBValue value) { + this.key = key; + this.value = value; + } + + @Override + public int hashCode(){ + return (getKey()==null ? 0 : getKey().hashCode()) ^ + (getValue()==null ? 0 : getValue().hashCode()); + } + + @Override + public RBKey getKey() { + return key; + } + + @Override + public RBValue getValue() { + return value; + } + + @Override + public RBValue setValue(RBValue value) { + RBValue old = this.value; + this.value = value; + return old; + } + + @Override + public boolean equals(Object o){ + if(o instanceof RBEntry){ + RBEntry e2 = (RBEntry)o; + return (this.getKey() == null ? e2.getKey() == null : this.getKey().equals(e2.getKey())) && + (this.getValue() == null ? e2.getValue() == null : this.getValue().equals(e2.getValue())); + } + else return false; + } + } + + /************************************************************* + * General RB methods: + *************************************************************/ + + //Is node x red; false if x is null + private boolean isRed(Node x){ + if(x == null) return false; + return x.color; + } + + //Make a right-leaning link lean to the left + private Node rotateLeft(Node h){ + Node x = h.right; + h.right = x.left; + x.left = h; + x.color = h.color; + h.color = RED; + x.N = h.N; + h.N = 1 + size(h.left) + size(h.right); + return x; + } + + //Make a left-leaning link lean to the right + private Node rotateRight(Node h){ + Node x = h.left; + h.left = x.right; + x.right = h; + x.color = h.color; + h.color = RED; + x.N = h.N; + h.N = 1 + size(h.left) + size(h.right); + return x; + } + + //Flip the colors of a node and its two children. + private void flipColors(Node h){ + h.color = RED; + h.left.color = BLACK; + h.right.color = BLACK; + } + + //Assuming that h is red and both h.left and h.left.left are black, + //make h.left or one of its children red. + private Node moveRedLeft(Node h) { + flipColors(h); + if (isRed(h.right.left)) { + h.right = rotateRight(h.right); + h = rotateLeft(h); + flipColors(h); + } + return h; + } + + //Assuming that h is red and both h.right and h.right.left are black, + //make h.right or one of its children red. + private Node moveRedRight(Node h) { + flipColors(h); + if (isRed(h.left.left)) { + h = rotateRight(h); + flipColors(h); + } + return h; + } + + //Restore red-black tree invariant + private Node balance(Node h) { + if (isRed(h.right)) h = rotateLeft(h); + if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if (isRed(h.left) && isRed(h.right)) flipColors(h); + + h.N = size(h.left) + size(h.right) + 1; + return h; + } + + /************************************************************* + * Insertion method: + *************************************************************/ + + // insert the key-value pair in the subtree rooted at h + private Node put(Node h, Key key, Value val){ + if(h == null) return new Node(key, val, 1, RED); + int cmp = key.compareTo(h.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if(cmp < 0) h.left = put(h.left, key, val); + else if(cmp > 0) h.right = put(h.right, key, val); + else h.val = val; + + //Fix-up any right-leaning links + if(isRed(h.right) && !isRed(h.left)) h = rotateLeft(h); + if(isRed(h.left) && isRed(h.left.left)) h = rotateRight(h); + if(isRed(h.left) && isRed(h.right)) flipColors(h); + + h.N = size(h.left) + size(h.right) + 1; + return h; + } + + /************************************************************* + * Search methods: + *************************************************************/ + + // value associated with the given key in subtree rooted at x; null if no such key. + private Value get(Node x, Key key) { + while(x != null) { + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + if(cmp < 0) x = x.left; + else if(cmp > 0) x = x.right; + else return x.val; + } + return null; + } + + //The smallest node in subtree rooted at x; null if no such node. + private Node min(Node x) { + while(x != null){ + if(x.left == null) return x; + else x = x.left; + } + return null; + } + + //The largest node in subtree rooted at x; null if no such node. + private Node max(Node x) { + while(x != null){ + if(x.right == null) return x; + else x = x.right; + } + return null; + } + + //The largest node in the subtree rooted at x lower than or equal to the given key. + private Node floor(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + if(cmp == 0) return x; + if(cmp < 0) return floor(x.left, key); + Node t = floor(x.right, key); + if(t != null) return t; + else return x; + } + + //The smallest node in the subtree rooted at x greater than or equal to the given key. + private Node ceiling(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + if(cmp == 0) return x; + if(cmp > 0) return ceiling(x.right, key); + Node t = ceiling(x.left, key); + if(t != null) return t; + else return x; + } + + //The largest node in the subtree rooted at x strictly smaller than the given key. + private Node lower(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + Node t = cmp <= 0 ? lower(x.left, key) : lower(x.right, key); + if(t != null) return t; + else if(cmp > 0) return x; + else return null; + } + + //The smallest node in the subtree rooted at x strictly greater than the given key. + private Node higher(Node x, Key key) { + if(x == null) return null; + int cmp = key.compareTo(x.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)x.key) : key.compareTo(x.key); + Node t = cmp >= 0 ? higher(x.right, key) : higher(x.left, key); + if(t != null) return t; + else if(cmp < 0) return x; + return null; + } + + /************************************************************* + * Range search methods: + *************************************************************/ + + //Add the keys in the subtree rooted at x to the set. + private void keys(Node x, Set set){ + if(x == null) return; + keys(x.left, set); + set.add(x.key); + keys(x.right, set); + } + + //Add the values in the subtree rooted at x to the list. + private void values(Node x, List list){ + if(x == null) return; + values(x.left, list); + list.add(x.val); + values(x.right, list); + } + + //Add the entries in the subtree rooted at x to the list. + private void entries(Node x, Set> set){ + if(x == null) return; + entries(x.left, set); + set.add(new RBEntry<>(x.key, x.val)); + entries(x.right, set); + } + + //Add the nodes between lo and hi in the subtree rooted at x to the list. + private void nodesBetween(Node x, List list, Key lo, Key hi){ + if (x == null) return; + int cmplo = lo.compareTo(x.key); + //int cmplo = lo instanceof String ? ((String)lo).compareToIgnoreCase((String)x.key) : lo.compareTo(x.key); + int cmphi = hi.compareTo(x.key); + //int cmphi = hi instanceof String ? ((String)hi).compareToIgnoreCase((String)x.key) : hi.compareTo(x.key); + if(cmplo < 0) nodesBetween(x.left, list, lo, hi); + if(cmplo <= 0 && cmphi >= 0) list.add(x); + if(cmphi > 0) nodesBetween(x.right, list, lo, hi); + } + + /*************************************************************************** + * Deletion methods + ***************************************************************************/ + + private Node deleteMin(Node h) { + if (h.left == null) + return null; + + if (!isRed(h.left) && !isRed(h.left.left)) + h = moveRedLeft(h); + + h.left = deleteMin(h.left); + return balance(h); + } + + private Node deleteMax(Node h) { + if (isRed(h.left)) + h = rotateRight(h); + + if (h.right == null) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + h.right = deleteMax(h.right); + + return balance(h); + } + + private Node delete(Node h, Key key) { + int cmp = key.compareTo(h.key); + //int cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if(cmp < 0){ + if (!isRed(h.left) && !isRed(h.left.left)) h = moveRedLeft(h); + h.left = delete(h.left, key); + } + else { + if (isRed(h.left)) + h = rotateRight(h); + + cmp = key.compareTo(h.key); + //cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if (cmp == 0 && (h.right == null)) + return null; + + if (!isRed(h.right) && !isRed(h.right.left)) + h = moveRedRight(h); + + cmp = key.compareTo(h.key); + //cmp = key instanceof String ? ((String)key).compareToIgnoreCase((String)h.key) : key.compareTo(h.key); + if (cmp == 0){ + Node x = min(h.right); + h.key = x.key; + h.val = x.val; + h.right = deleteMin(h.right); + } + else h.right = delete(h.right, key); + } + return balance(h); + } + + /************************************************************* + * Other methods: + *************************************************************/ + + // number of node in subtree rooted at x; 0 if x is null + private int size(Node x){ + if(x == null) return 0; + else return x.N; + } + + // toString method; + private String string(Node x){ + if(x == null) return ""; + String s = ""; + for(String value : sortValues((Set)x.val)) { + s = s + "[" + x.key + "] " + value + "\n"; + } + return string(x.left) + s + string(x.right); + } + + /************************************************************* + * Public methods: + *************************************************************/ + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table. + */ + public int size(){ + return size(root); + } + + /** + * Is this symbol table empty? + * @return true if this symbol table is empty or false otherwise. + */ + public boolean isEmpty(){ + return root == null; + } + + /** + * Does this symbol table contain the given key? + * @param key the key. + * @return true if this symbol table contains key or + * false otherwise. + * @throws NullPointerException if key is null. + */ + public boolean contains(Key key) { + return get(key) != null; + } + + /** + * Inserts the key-value pair into the symbol table, overwriting the old value + * with the new value if the key is already in the symbol table. + * If the value is null, this effectively deletes the key from the symbol table. + * @param key the key. + * @param val the value. + * @return the old value associated with the given key if the key is already in the symbol table + * or null otherwise. + * @throws NullPointerException if key is null. + */ + public Value put(Key key, Value val){ + Value prev = get(root, key); + root = put(root, key, val); + root.color = BLACK; + return prev; + } + + /** + * Returns the value associated with the given key. + * @param key the key. + * @return the value associated with the given key if the key is in the symbol table + * or null if the key is not in the symbol table. + * @throws NullPointerException if key is null. + */ + public Value get(Key key){ + return get(root, key); + } + + /** + * Returns the smallest entry in the symbol table. + * @return the smallest entry in the symbol table or null if empty. + */ + public Map.Entry minEntry(){ + Node x = min(root); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the largest entry in the symbol table. + * @return the largest entry in the symbol table or null if empty. + */ + public Map.Entry maxEntry(){ + Node x = max(root); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the largest entry in the symbol table lower than or equal to key. + * @param key the key. + * @return the largest entry in the symbol table lower than or equal to key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry floorEntry(Key key){ + Node x = floor(root, key); + if (x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the smallest entry in the symbol table greater than or equal to key. + * @param key the key. + * @return the largest entry in the symbol table greater than or equal to key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry ceilingEntry(Key key){ + Node x = ceiling(root, key); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the largest entry in the symbol table strictly lower than key. + * @param key the key. + * @return the largest entry in the symbol table strictly lower than key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry lowerEntry(Key key){ + Node x = lower(root, key); + if(x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns the smallest entry in the symbol table strictly greater than key. + * @param key the key. + * @return the largest entry in the symbol table strictly greater than key + * or null if empty. + * @throws NullPointerException if key is null. + */ + public Map.Entry higherEntry(Key key) { + Node x = higher(root, key); + if (x == null) return null; + else return new RBEntry<>(x.key, x.val); + } + + /** + * Returns all keys in the symbol table in a Set. + * @return all keys in the symbol table in a Set + */ + public Set keySet(){ + Set keys = new HashSet<>(); + keys(root, keys); + return keys; + } + + /** + * Returns all values in the symbol table in a List. + * @return all values in the symbol table in a List + */ + public List values(){ + List values = new LinkedList<>(); + values(root, values); + return values; + } + + /** + * Returns all entries in the symbol table in a Set. + * @return all entries in the symbol table in a Set + */ + public Set> entrySet(){ + Set> entries = new HashSet<>(); + entries(root, entries); + return entries; + } + + /** + * Returns the symbol table as a String. + * @return the symbol table as a String. + */ + @Override + public String toString(){ + return string(root); + } + + /** + * Returns all entries in the symbol table in the given range, as a Set. + * @return all keys in the symbol table between lo and hi + * including them (if they exist), as a Set. + * @throws NullPointerException if either lo or hi + * is null. + */ + public List> entriesBetween(Key lo, Key hi){ + List nodes = new LinkedList<>(); + nodesBetween(root, nodes, lo, hi); + List> entries = new ArrayList<>(); + for(Node node: nodes) entries.add(new RBEntry<>(node.key, node.val)); + return entries; + } + + /** + * Removes the key and associated value from the symbol table + * (if the key is in the symbol table). + * @param key the key. + * @return the value associated with the given key if the key is in the symbol table + * or null if the key is not in the symbol table. + * @throws NullPointerException if key is null. + */ + public Value remove(Key key) { + Value val = get(root, key); + if(val != null) { + // if both children of root are black, set root to red + if(!isRed(root.left) && !isRed(root.right)) root.color = RED; + + root = delete(root, key); + if(!isEmpty()) root.color = BLACK; + } + return val; + } + } + + + /** + * This class is not from me but from group 27. + * Ideally this class should contain static methods and be placed in another file (thanks Inginious!) + */ + public class QuickSort>{ + public void sort(E[] a){ + subsort(a, 0, a.length-1); + } + + public void subsort(E[] tab, int a, int b){ + if (b > a){ + //System.out.println(a + " to " + b); + pivot(tab, a, b); // create pivot + int pos = sortTable(tab, a, b); // apply quicksort on current tab + subsort(tab, a, pos - 1); // finally use recursive call on the subarrays + subsort(tab, pos + 1, b); + } + } + + public void pivot(E[]tab, int first, int last){ + int len = last-first+1; + Random r = new Random(); + int j = r.nextInt(len); // create random value to choose a new pivot + j=first+j; // pivot's position in the array + swap(tab, j, last); //switching the pivot with the last element + } + + public void swap(E[] tab, int i, int j){ // function that switches two values given their respective position in the tab + E temp; + temp = tab[j]; + tab[j] = tab[i]; + tab[i] = temp; + } + + public void exchange(E[] tab, int i, int j, int k){ // function that switches three values given their respective position in the tab + E temp; + if(i==j || j==k){ + swap(tab, i, k); + } + else{ + temp = tab[i]; + tab[i]=tab[j]; + tab[j]=tab[k]; + tab[k]=temp; + } + } + + public int sortTable(E[] tab, int first, int last){ + int current = last; + for(int i = current-1; i>=first; i--){ + if(tab[i].compareTo(tab[current])>0){ + exchange(tab, i, current-1, current); //only change pivot with one of the list's element + current--; + } + } + return current; + } + } +} diff --git a/lost+found/SemiCorrectCompressTests.java-JYGsJJ b/lost+found/SemiCorrectCompressTests.java-JYGsJJ new file mode 100644 index 00000000..3f7dd4e4 --- /dev/null +++ b/lost+found/SemiCorrectCompressTests.java-JYGsJJ @@ -0,0 +1,42 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.io.PrintWriter; +import java.util.Scanner; +import java.io.IOException; +import java.io.File; + +/* Template for the unit tests of misson 5 + * To success on INGInious, need to check for : + - An empty file + - A long file (> 100 characters) + - Size of compressed file (at least not larger than input file) */ + +/** + * @author Simon HARDY + */ +public class CompressTests { + + @Test + public void firstTest() { + try { + String str = "abcdefg"; + assertEquals(compress_decompress(str), str); + } catch (Exception e) { // this is important to catch exception, for example on empty file + fail("Exception occured : " + e); + } + } + + public String compress_decompress(String content) throws IOException { + PrintWriter writer = new PrintWriter("./input.txt"); + writer.println(content); + writer.close(); + Compress.main(new String[]{"./input.txt", "./compressed.txt"}); + Decompress.main(new String[]{"./compressed.txt", "./output.txt"}); + Scanner scanner = new Scanner(new File("./output.txt")); + String str = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return str; + } +} diff --git a/lost+found/SemiCorrectHashMapTests.java-IHsSz9 b/lost+found/SemiCorrectHashMapTests.java-IHsSz9 new file mode 100644 index 00000000..1577723d --- /dev/null +++ b/lost+found/SemiCorrectHashMapTests.java-IHsSz9 @@ -0,0 +1,36 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import java.util.Map.Entry; + +/** + * @author Quentin + */ + +public class HashMapTests { + + String testStrings[] = {"a", "beohe", "bobby", "a", "blip", "buldozer", "bloup", "zouplette", "azertyuiop", "poiuytreza"}; + String testStrings2[] = {"alors", "bdzhe", "bbluo", "alpa", "blnd", "ber", "blp", "zouplete", "azertyiop", "dpoiuytreza"}; + + @Test + public void getTest() { + MapInterface map = new HashMap(); + for (int i = 0; i < testStrings.length; i++) { + map.put(testStrings[i], i); + assertEquals(map.get(testStrings[i]), new Integer(i)); + } + for (int i = 4; i < testStrings.length; i++) { + assertEquals(map.get(testStrings[i]), new Integer(i)); + } + } + + @Test + public void getHashTest() { + MapInterface map = new HashMap(); + for (int i = 0; i < testStrings.length; i++) { + map.put(testStrings[i], i); + assertEquals(map.get(testStrings[i], map.hashCode(testStrings[i])), new Integer(i)); + } + assertEquals(map.get("bobby", map.hashCode("zouplette")), null); + } +} diff --git a/lost+found/SemiCorrectKruskalTests.java-6Qaal6 b/lost+found/SemiCorrectKruskalTests.java-6Qaal6 new file mode 100644 index 00000000..2c0b170c --- /dev/null +++ b/lost+found/SemiCorrectKruskalTests.java-6Qaal6 @@ -0,0 +1,139 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.Set; +import java.util.HashSet; + +/** + * Partial solution for the tests of Kruskal. Gets 5/6. + * To get 6/6, one must detect that the new graph is not connected + * (or, alternatively, that there is a cycle), + * because the optimal cost, the number of nodes and the number of edges are preserved. + * I didn't test this last BuggyKruskal so it might be interesting to check if it's ok (BuggyKruskal5.java). + * @author Simon HARDY + */ +public class KruskalTests { + + + @Test + public void testSmallCities() { + try { + String in = "./cities_small.txt"; + String out = "./cities_small_sol.txt"; + int numberOfNodes = 50; // number of nodes of this instance + int optimalCost = 20522; // optimal cost for this instance + applyTest(in, out, numberOfNodes, optimalCost); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void secondTest() { + // TODO... + } + + public static void applyTest(String in, String out, int numberOfNodes, int optimalCost) { + int nNodes = 0; + int nEdges = 0; + int cost = 0; + int cheat = 0; + int connected = 0; + Kruskal.main(new String[] {in, out}); // apply the algorithm under test + + int[] result = readSol(out, numberOfNodes); // get the solution in 'result' + + assertEquals(result[0], numberOfNodes); // all the nodes are involved (it's 'spanning') + assertEquals(result[1], numberOfNodes-1); // number of edges = number of nodes - 1 (it's a 'tree') + assertTrue(result[2] <= optimalCost); // the cost is optimal (it's a 'minimum' spanning tree) + + // Assert that the graph is connected using Union/Find structures... + } + + public static int[] readSol(String path, int numberOfNodes) { + Set nodes = new HashSet(); + int numberOfEdges = 0; + int totalCost = 0; // cost found by the student + int cheat = 0; // incremented if fake edge + try { + File f = new File (path); + FileReader fr = new FileReader (f); + BufferedReader br = new BufferedReader(fr); + + try { + String line = br.readLine(); + while (line != null) + { + int v1 = firstNode(line); + int v2 = secondNode(line); + int cost = firstEdge(line); + numberOfEdges += 1; + totalCost += cost; + nodes.add(v1); + nodes.add(v2); + + line = br.readLine(); + } + + br.close(); + fr.close(); + } catch (IOException exception) + { + fail("Error occured while reading the file : " + exception.getMessage()); + } + } catch (FileNotFoundException exception) { + fail("File not found"); + } + return new int[] {nodes.size(), numberOfEdges, totalCost, cheat}; + } + + /* Gets the first city of this line */ + public static int firstNode(String line) { + String number = ""; + int i = 0; + char c = line.charAt(i); + while (c != '\t') { + number += c; + i++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + + /* Gets the second city of this line */ + public static int secondNode(String line) { + String number = ""; + int i = 0; + int count = 0; + char c = line.charAt(i); + while (c != '\t' || count == 0) { + if (count == 1) number += c; + i++; + if (c == '\t') count++; + c = line.charAt(i); + } + return Integer.parseInt(number); + } + + /* Gets the edge weight of this line */ + public static int firstEdge(String line) { + String number = ""; + int i = 0; + int count = 0; + char c = line.charAt(i); + while (i < line.length()) { + if (count == 2) number += c; + i++; + if (c == '\t') count++; + if (i < line.length()) c = line.charAt(i); + } + return Integer.parseInt(number); + } +} diff --git a/lost+found/SemiCorrectKruskalTests.zip-JSYMnD b/lost+found/SemiCorrectKruskalTests.zip-JSYMnD new file mode 100644 index 00000000..8cf0524e Binary files /dev/null and b/lost+found/SemiCorrectKruskalTests.zip-JSYMnD differ diff --git a/lost+found/SemiCorrectSearchTreeTests.java-1DRhdR b/lost+found/SemiCorrectSearchTreeTests.java-1DRhdR new file mode 100644 index 00000000..4288b660 --- /dev/null +++ b/lost+found/SemiCorrectSearchTreeTests.java-1DRhdR @@ -0,0 +1,36 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.util.Set; +import java.util.HashSet; + +/** + * Those unit tests only detect 1 buggy implementation - FK + * @author Simon HARDY + */ +public class SearchTreeTests { + + @Test + public void firstTest() { + try { + OrderedMap tree = new SearchTree(); + String key = "Foo Fighters"; + Set value = new HashSet(); + value.add("The Pretender"); + assertEquals(tree.put(key, value), null); + assertEquals(tree.size(), 1); + assertEquals(tree.isEmpty(), false); + Set result = tree.get(key); + assertEquals(result.size(), 1); + assertTrue(result.contains("The Pretender")); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void secondTest() { + // TODO... + } +} diff --git a/lost+found/SemiCorrectStack.java-GFEQhP b/lost+found/SemiCorrectStack.java-GFEQhP new file mode 100644 index 00000000..6b94d744 --- /dev/null +++ b/lost+found/SemiCorrectStack.java-GFEQhP @@ -0,0 +1,85 @@ +import java.util.EmptyStackException; + +public class MyStack implements Stack { + + private Node top; + private int size; + + public MyStack() { + top = null; + size = 0; + } + + public int size() { + return size; + } + + public boolean empty() { + return size == 0; + } + + public E push(E element) { + Node newNode = new Node(element, top); + top = newNode; + size++; + return null; // Bug, returns null instead of the element + } + + public E peek() throws EmptyStackException { + if(empty()) throw new EmptyStackException(); + return top.getElement(); + } + + public E pop() throws EmptyStackException { + if(empty()) throw new EmptyStackException(); + E tmp = top.getElement(); + top = top.getNext(); + size--; + return tmp; + } + + public String toString() + { + String toString = ""; + Node tmp = top; + while (tmp != null) + { + if (!toString.equals("")) toString += " "; + toString += tmp.toString(); + tmp = tmp.getNext(); + } + return toString; + } + + class Node { + + private E element; + private Node next; + + public Node(E element, Node next) { + this.element = element; + this.next = next; + } + + public E getElement() { + return this.element; + } + + public Node getNext() { + return this.next; + } + + public void setElement(E element) { + this.element = element; + } + + public void setNext(Node next) { + this.next = next; + } + + public String toString() + { + return element.toString(); + } + } +} diff --git a/lost+found/SemiCorrectStackTests.java-vZXE56 b/lost+found/SemiCorrectStackTests.java-vZXE56 new file mode 100644 index 00000000..905aa990 --- /dev/null +++ b/lost+found/SemiCorrectStackTests.java-vZXE56 @@ -0,0 +1,27 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * Those unit tests detects some errors + * @author Smon HARDY + */ +public class StackTests { + + String element = "a"; + + @Test + public void testPushPop() { + Stack stack = new MyStack(); + + for (int i = 0;i < 15;i++) { + assertEquals((Integer) i, stack.push(i)); + } + for (int i = 14;i >= 0;i--) { + assertEquals((Integer) i, stack.pop()); + } + + assertEquals(true, stack.empty()); + } +} diff --git a/lost+found/SemiCorrectWithoutHintsStackTests.java-RO4Avk b/lost+found/SemiCorrectWithoutHintsStackTests.java-RO4Avk new file mode 100644 index 00000000..b098b8b9 --- /dev/null +++ b/lost+found/SemiCorrectWithoutHintsStackTests.java-RO4Avk @@ -0,0 +1,27 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * Those unit tests only detects one valid implementation + * @author Frederic KACZYNSKI + */ +public class StackTests { + + String element = "a"; + + @Test + public void testFail() { + Stack stack = new MyStack(); + + try { + stack.pop(); + fail(); + } + catch(Exception e) + { + assertTrue(true); + } + } +} diff --git a/lost+found/Silikon_32_rot.xml-to4U5E b/lost+found/Silikon_32_rot.xml-to4U5E new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/Smiley.parametric.svg-t6RFN3 b/lost+found/Smiley.parametric.svg-t6RFN3 new file mode 100644 index 00000000..f19d492d --- /dev/null +++ b/lost+found/Smiley.parametric.svg-t6RFN3 @@ -0,0 +1,131 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/lost+found/SpamFilter.java-TgBGTo b/lost+found/SpamFilter.java-TgBGTo new file mode 100644 index 00000000..daca912a --- /dev/null +++ b/lost+found/SpamFilter.java-TgBGTo @@ -0,0 +1,127 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +public class SpamFilter implements SpamFiltering { + + private Map wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter(String filename) { + wordsMap = new MyMap(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput(filename); + } + + public Map getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + processMessage(split[0], split[1].split("\\W+")); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap current = new MyMap(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) if (!stopWords.contains(word)) { + Word w = current.get(word); + if (w == null) + w = new Word(word); + if (category.equals("ham")) { + w.incHamProba(1); + Word.totalNumberOfHams++; + } + else { + w.incSpamProba(1); + Word.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return (double) 1/(1+Math.exp(eta)); + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) > 0.5; + } +} diff --git a/lost+found/SpamFilter2.java-EAeE9h b/lost+found/SpamFilter2.java-EAeE9h new file mode 100644 index 00000000..e437f52f --- /dev/null +++ b/lost+found/SpamFilter2.java-EAeE9h @@ -0,0 +1,127 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + +public class SpamFilter2 { + + private MyMap2 wordsMap; + private HashSet stopWords; + + private ArrayList hams; + private ArrayList spams; + + public SpamFilter2(String filename) { + wordsMap = new MyMap2(); + stopWords = new HashSet(); + String[] stopList = {"a", "about", "above", "above", "across", "after", "afterwards", "again", "against", "all", "almost", "alone", "along", "already", "also","although","always","am","among", "amongst", "amoungst", "amount", "an", "and", "another", "any","anyhow","anyone","anything","anyway", "anywhere", "are", "around", "as", "at", "back","be","became", "because","become","becomes", "becoming", "been", "before", "beforehand", "behind", "being", "below", "beside", "besides", "between", "beyond", "bill", "both", "bottom","but", "by", "call", "can", "cannot", "cant", "co", "con", "could", "couldnt", "cry", "de", "describe", "detail", "do", "done", "down", "due", "during", "each", "eg", "eight", "either", "eleven","else", "elsewhere", "empty", "enough", "etc", "even", "ever", "every", "everyone", "everything", "everywhere", "except", "few", "fifteen", "fify", "fill", "find", "fire", "first", "five", "for", "former", "formerly", "forty", "found", "four", "from", "front", "full", "further", "get", "give", "go", "had", "has", "hasnt", "have", "he", "hence", "her", "here", "hereafter", "hereby", "herein", "hereupon", "hers", "herself", "him", "himself", "his", "how", "however", "hundred", "ie", "if", "in", "inc", "indeed", "interest", "into", "is", "it", "its", "itself", "keep", "last", "latter", "latterly", "least", "less", "ltd", "made", "many", "may", "me", "meanwhile", "might", "mill", "mine", "more", "moreover", "most", "mostly", "move", "much", "must", "my", "myself", "name", "namely", "neither", "never", "nevertheless", "next", "nine", "no", "nobody", "none", "noone", "nor", "not", "nothing", "now", "nowhere", "of", "off", "often", "on", "once", "one", "only", "onto", "or", "other", "others", "otherwise", "our", "ours", "ourselves", "out", "over", "own","part", "per", "perhaps", "please", "put", "rather", "re", "same", "see", "seem", "seemed", "seeming", "seems", "serious", "several", "she", "should", "show", "side", "since", "sincere", "six", "sixty", "so", "some", "somehow", "someone", "something", "sometime", "sometimes", "somewhere", "still", "such", "system", "take", "ten", "than", "that", "the", "their", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "therefore", "therein", "thereupon", "these", "they", "thickv", "thin", "third", "this", "those", "though", "three", "through", "throughout", "thru", "thus", "to", "together", "too", "top", "toward", "towards", "twelve", "twenty", "two", "un", "under", "until", "up", "upon", "us", "very", "via", "was", "we", "well", "were", "what", "whatever", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "whereupon", "wherever", "whether", "which", "while", "whither", "who", "whoever", "whole", "whom", "whose", "why", "will", "with", "within", "without", "would", "yet", "you", "your", "yours", "yourself", "yourselves", "the"}; + for (String word : stopList) { + stopWords.add(word); + } + hams = new ArrayList(); + spams = new ArrayList(); + readInput(filename); + } + + public MyMap2 getWordsMap() { + return wordsMap; + } + + public HashSet getStopWords() { + return stopWords; + } + + private void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + processMessage(split[0], split[1].split("\\W+")); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println(e); + } catch (IOException e) { + System.out.println(e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println(e); + } catch (NullPointerException e) { + System.out.println(e); + } + } + } + + private void processMessage(String category, String[] words) { + + // Fill a temporary map with words of this sms + MyMap2 current = new MyMap2(); + int length = 0; // length of a word (AFTER having removed the stop words) + for (String word : words) if (!stopWords.contains(word)) { + Word2 w = current.get(word); + if (w == null) + w = new Word2(word); + if (category.equals("ham")) { + w.incHamProba(1); + Word2.totalNumberOfHams++; + } + else { + w.incSpamProba(1); + Word2.totalNumberOfSpams++; + } + w.incOccurences(); + current.put(word, w); // insert or replace + length++; + } + + // Copy everything in the new map, after normalization + Iterator> it = current.entrySet().iterator(); + while (it.hasNext()) { + java.util.Map.Entry pair = it.next(); + pair.getValue().normalize(length); + if (wordsMap.containsKey(pair.getKey())) + ((Word2) wordsMap.get(pair.getKey())).add(pair.getValue()); + else + wordsMap.put(pair.getKey(), pair.getValue()); + } + } + + public double naiveBayes(String sms) { + String[] words = sms.split("\\W+"); + double pos = 0; + double neg = 0; + for (int i = 0 ; i < words.length ; i++) if (wordsMap.containsKey(words[i])){ + double proba = ((Word2) wordsMap.get(words[i])).bayesProba(); + pos += Math.log(proba); + neg += Math.log(1-proba); + } + double eta = neg-pos; + return (double) 1/(1+Math.exp(eta)); + } + + /* Takes the body of a sms as input and outputs true if it's a spam (false otherwise), + * acccording to Naive Bayes classifier (spam if probability > 0.5) */ + public boolean classify(String message) { + return naiveBayes(message) > 0.5; + } +} \ No newline at end of file diff --git a/lost+found/SpamFiltering.java-BmLakJ b/lost+found/SpamFiltering.java-BmLakJ new file mode 100644 index 00000000..9675a857 --- /dev/null +++ b/lost+found/SpamFiltering.java-BmLakJ @@ -0,0 +1,22 @@ +import java.util.HashSet; + +/* The constructor takes a String as argument, representing the path to the input file */ +public interface SpamFiltering { + + /* Returns a map (our Map interface, for example your custom type MyMap) containing mappings + * between the Strings appearing in each sms of the input file, + * and objects of type WordInterface (custom type too) containing + * correct informations about them (see below) + * Convention : use the regex "\\W+" to split the content of a message into words, and use toLowerCase() on what you read so that your map doesn't contain any upper case letter. */ + public Map getWordsMap(); + + /* Returns a HashSet (java.util.HashSet) containing the stop words listed below */ + public HashSet getStopWords(); + + /* Computes the probability that 'message' is a spam sms, using the naive Bayes formula (see pdf of the mission) */ + public double naiveBayes(String message); + + /* Returns true if 'message' is classified as a spam sms, false otherwise (a sms is considered as spam if the probability is strictly greater than 50%) */ + public boolean classify(String message); + +} diff --git a/lost+found/SpamFiltering.java-oJttlG b/lost+found/SpamFiltering.java-oJttlG new file mode 100644 index 00000000..9675a857 --- /dev/null +++ b/lost+found/SpamFiltering.java-oJttlG @@ -0,0 +1,22 @@ +import java.util.HashSet; + +/* The constructor takes a String as argument, representing the path to the input file */ +public interface SpamFiltering { + + /* Returns a map (our Map interface, for example your custom type MyMap) containing mappings + * between the Strings appearing in each sms of the input file, + * and objects of type WordInterface (custom type too) containing + * correct informations about them (see below) + * Convention : use the regex "\\W+" to split the content of a message into words, and use toLowerCase() on what you read so that your map doesn't contain any upper case letter. */ + public Map getWordsMap(); + + /* Returns a HashSet (java.util.HashSet) containing the stop words listed below */ + public HashSet getStopWords(); + + /* Computes the probability that 'message' is a spam sms, using the naive Bayes formula (see pdf of the mission) */ + public double naiveBayes(String message); + + /* Returns true if 'message' is classified as a spam sms, false otherwise (a sms is considered as spam if the probability is strictly greater than 50%) */ + public boolean classify(String message); + +} diff --git a/lost+found/Stack.java-7kkoeM b/lost+found/Stack.java-7kkoeM new file mode 100644 index 00000000..8a9bedd5 --- /dev/null +++ b/lost+found/Stack.java-7kkoeM @@ -0,0 +1,15 @@ +package templates; + +import java.util.EmptyStackException; + +public interface Stack { + + public boolean empty(); + + public E peek() throws EmptyStackException; + + public E pop() throws EmptyStackException; + + public void push(E item); + +} \ No newline at end of file diff --git a/m1stack/student/Stack.java b/lost+found/Stack.java-mf2GEM similarity index 100% rename from m1stack/student/Stack.java rename to lost+found/Stack.java-mf2GEM diff --git a/lost+found/StudentTestRunner.java-5jIsvG b/lost+found/StudentTestRunner.java-5jIsvG new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-5jIsvG @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-8ciVZU b/lost+found/StudentTestRunner.java-8ciVZU new file mode 100644 index 00000000..6ed406f0 --- /dev/null +++ b/lost+found/StudentTestRunner.java-8ciVZU @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(TestHeapComplexity.class, TestHeapEasy.class, TestHeapFirst.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-A5k3Hp b/lost+found/StudentTestRunner.java-A5k3Hp new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-A5k3Hp @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-EHht1w b/lost+found/StudentTestRunner.java-EHht1w new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-EHht1w @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-JpB8Ge b/lost+found/StudentTestRunner.java-JpB8Ge new file mode 100644 index 00000000..680efe07 --- /dev/null +++ b/lost+found/StudentTestRunner.java-JpB8Ge @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(BSTTestComplexity.class, BSTTestExtreme.class, BSTTestRandom.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-OIJgOS b/lost+found/StudentTestRunner.java-OIJgOS new file mode 100644 index 00000000..b4455f1e --- /dev/null +++ b/lost+found/StudentTestRunner.java-OIJgOS @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} \ No newline at end of file diff --git a/lost+found/StudentTestRunner.java-Og3haX b/lost+found/StudentTestRunner.java-Og3haX new file mode 100644 index 00000000..0330429b --- /dev/null +++ b/lost+found/StudentTestRunner.java-Og3haX @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(TestDigraphComplexity.class, TestDigraphEval.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-TobPPQ b/lost+found/StudentTestRunner.java-TobPPQ new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-TobPPQ @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-XlUq1v b/lost+found/StudentTestRunner.java-XlUq1v new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-XlUq1v @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-gkUiWQ b/lost+found/StudentTestRunner.java-gkUiWQ new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-gkUiWQ @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-jTkYUD b/lost+found/StudentTestRunner.java-jTkYUD new file mode 100644 index 00000000..bc902539 --- /dev/null +++ b/lost+found/StudentTestRunner.java-jTkYUD @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(CircularLinkedListTestComplexity.class, CircularLinkedListTestExtreme.class, CircularLinkedListTestRandom.class ); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-kzNWET b/lost+found/StudentTestRunner.java-kzNWET new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-kzNWET @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-mg7bnZ b/lost+found/StudentTestRunner.java-mg7bnZ new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-mg7bnZ @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-qkXI6e b/lost+found/StudentTestRunner.java-qkXI6e new file mode 100644 index 00000000..7c3319bf --- /dev/null +++ b/lost+found/StudentTestRunner.java-qkXI6e @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(WTSPComplexityTests.class, WTSPCorrectnessTests.class, WTSPStaticTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-rf9UJ9 b/lost+found/StudentTestRunner.java-rf9UJ9 new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-rf9UJ9 @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-uaNTNa b/lost+found/StudentTestRunner.java-uaNTNa new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-uaNTNa @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/StudentTestRunner.java-wRtYo7 b/lost+found/StudentTestRunner.java-wRtYo7 new file mode 100644 index 00000000..66bc71e2 --- /dev/null +++ b/lost+found/StudentTestRunner.java-wRtYo7 @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} diff --git a/lost+found/Test.java-JTwDCX b/lost+found/Test.java-JTwDCX new file mode 100644 index 00000000..063a73fc --- /dev/null +++ b/lost+found/Test.java-JTwDCX @@ -0,0 +1,96 @@ +import junit.framework.TestCase; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.security.Permission; +import java.util.Arrays; + +public class Test extends TestCase { + + public static int partition(Vector a, int lo, int hi) { + int i = lo, j = hi+1; + int v = a.get(lo); + while (true) { + while (a.get(++i) < v) if (i == hi) break; + while (v < a.get(--j)) if (j == lo) break; + if (i >= j) break; + a.swap(i,j); + } + a.swap(lo,j); + return j; + } + + public static int median(Vector a, int lo, int hi) { + int i = partition(a,lo,hi); + if (i == a.size()/2) return a.get(i); + else if (i < a.size()/2) { + return median(a,i+1,hi); + } else { + return median(a,lo,i-1); + } + } + + public static void sort(Vector a, int lo, int hi) { + if (lo < hi) { + int i = partition(a,lo,hi); + sort(a,lo,i-1); + sort(a,i+1,hi); + } + } + + + public static Vector randomVector(int n) { + java.util.Random rand = new java.util.Random(); + int [] array = new int[n]; + for (int i = 0; i < n; i++) { + array[i] = rand.nextInt(n); + } + //System.out.println(Arrays.toString(array)); + Vector v = new Vector(array.length); + for (int i = 0; i < v.size(); i++) { + v.set(i,array[i]); + } + return v; + } + + + // assigning the values + protected void setUp() { + + } + + @org.junit.Test + public void testMedianOk() { + for (int i = 100; i < 1000; i += 10) { + Vector v = randomVector(i+1); + assertTrue("correct median value computed",Median.median(v,0,v.size()-1) == median(v,0,v.size()-1)); + } + } + @org.junit.Test + public void testComplexityNLogNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + sort(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n.log(n))",v1.nOp() <= v2.nOp()*3); + } + } + @org.junit.Test + public void testComplexityNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + median(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n) expected",v1.nOp() <= v2.nOp()*3); + } + } + + +} \ No newline at end of file diff --git a/lost+found/Test.java-Py69KV b/lost+found/Test.java-Py69KV new file mode 100644 index 00000000..063a73fc --- /dev/null +++ b/lost+found/Test.java-Py69KV @@ -0,0 +1,96 @@ +import junit.framework.TestCase; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.security.Permission; +import java.util.Arrays; + +public class Test extends TestCase { + + public static int partition(Vector a, int lo, int hi) { + int i = lo, j = hi+1; + int v = a.get(lo); + while (true) { + while (a.get(++i) < v) if (i == hi) break; + while (v < a.get(--j)) if (j == lo) break; + if (i >= j) break; + a.swap(i,j); + } + a.swap(lo,j); + return j; + } + + public static int median(Vector a, int lo, int hi) { + int i = partition(a,lo,hi); + if (i == a.size()/2) return a.get(i); + else if (i < a.size()/2) { + return median(a,i+1,hi); + } else { + return median(a,lo,i-1); + } + } + + public static void sort(Vector a, int lo, int hi) { + if (lo < hi) { + int i = partition(a,lo,hi); + sort(a,lo,i-1); + sort(a,i+1,hi); + } + } + + + public static Vector randomVector(int n) { + java.util.Random rand = new java.util.Random(); + int [] array = new int[n]; + for (int i = 0; i < n; i++) { + array[i] = rand.nextInt(n); + } + //System.out.println(Arrays.toString(array)); + Vector v = new Vector(array.length); + for (int i = 0; i < v.size(); i++) { + v.set(i,array[i]); + } + return v; + } + + + // assigning the values + protected void setUp() { + + } + + @org.junit.Test + public void testMedianOk() { + for (int i = 100; i < 1000; i += 10) { + Vector v = randomVector(i+1); + assertTrue("correct median value computed",Median.median(v,0,v.size()-1) == median(v,0,v.size()-1)); + } + } + @org.junit.Test + public void testComplexityNLogNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + sort(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n.log(n))",v1.nOp() <= v2.nOp()*3); + } + } + @org.junit.Test + public void testComplexityNOk() { + for (int i = 100; i < 2000000; i += 100000) { + Vector v1 = randomVector(i+1); + Median.median(v1,0,v1.size()-1); + + Vector v2 = randomVector(i+1); + median(v2,0,v2.size()-1); + + assertTrue("complexity larger than O(n) expected",v1.nOp() <= v2.nOp()*3); + } + } + + +} \ No newline at end of file diff --git a/lost+found/TestDigraphComplexity.java-2JJH5I b/lost+found/TestDigraphComplexity.java-2JJH5I new file mode 100644 index 00000000..fce80d33 --- /dev/null +++ b/lost+found/TestDigraphComplexity.java-2JJH5I @@ -0,0 +1,92 @@ +package src; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + + +@RunWith(Parameterized.class) +public class TestDigraphComplexity { + private Digraph student; + private Digraph expected; + + public TestDigraphComplexity(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + + @Test(timeout=500) + @Grade(value=25) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + + int n = 10000; + + Digraph student1 = new DigraphImplem(n); + Digraph correct1 = new DigraphImplemCorrect(n); + + for (int k = 0; k < n; k++) { + + student1.addEdge(k, (k + 1) % n); + correct1.addEdge(k, (k + 1) % n); + + } + data.add(new Object[]{student1, correct1}); + + Digraph student2 = new DigraphImplem(n); + Digraph correct2 = new DigraphImplemCorrect(n); + + for (int k = 1; k < n; k++) { + + student2.addEdge(0, k); + correct2.addEdge(0, k); + + } + data.add(new Object[]{student2, correct2}); + + + return data; + } +} diff --git a/lost+found/TestDigraphComplexity.java-tqbz2g b/lost+found/TestDigraphComplexity.java-tqbz2g new file mode 100644 index 00000000..7ccede00 --- /dev/null +++ b/lost+found/TestDigraphComplexity.java-tqbz2g @@ -0,0 +1,90 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + + +@RunWith(Parameterized.class) +public class TestDigraphComplexity { + private Digraph student; + private Digraph expected; + + public TestDigraphComplexity(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + + @Test(timeout=500) + @Grade(value=25) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + + int n = 10000; + + Digraph student1 = new DigraphImplem(n); + Digraph correct1 = new DigraphImplemCorrect(n); + + for (int k = 0; k < n; k++) { + + student1.addEdge(k, (k + 1) % n); + correct1.addEdge(k, (k + 1) % n); + + } + data.add(new Object[]{student1, correct1}); + + Digraph student2 = new DigraphImplem(n); + Digraph correct2 = new DigraphImplemCorrect(n); + + for (int k = 1; k < n; k++) { + + student2.addEdge(0, k); + correct2.addEdge(0, k); + + } + data.add(new Object[]{student2, correct2}); + + + return data; + } +} diff --git a/lost+found/TestDigraphEval.java-VPbjoP b/lost+found/TestDigraphEval.java-VPbjoP new file mode 100644 index 00000000..c2825a2a --- /dev/null +++ b/lost+found/TestDigraphEval.java-VPbjoP @@ -0,0 +1,89 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class TestDigraphEval { + private Digraph student; + private Digraph expected; + + public TestDigraphEval(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + @Test + @Grade(value=0.5) + public void sameGraph() { + assertEqualsGraph(student,expected); + } + + @Test + @Grade(value=0.5) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + Random r1 = new Random(); + Random r2 = new Random(r1.nextInt(4)); + + for (int i = 0; i < 50; i++) { + + boolean [][] matrix = new boolean[10][10]; + + Digraph student = new DigraphImplem(10); + Digraph correct = new DigraphImplemCorrect(10); + + for (int k = 0; k < 20; k++) { + int v = r2.nextInt(10); + int w = r2.nextInt(10); + if(v != w && !matrix[v][w]) { + student.addEdge(v,w); + correct.addEdge(v,w); + matrix[v][w] = true; + } + } + data.add(new Object[]{student,correct}); + } + return data; + } +} diff --git a/lost+found/TestDigraphEval.java-mv0SpF b/lost+found/TestDigraphEval.java-mv0SpF new file mode 100644 index 00000000..143f741c --- /dev/null +++ b/lost+found/TestDigraphEval.java-mv0SpF @@ -0,0 +1,86 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.*; + + +@RunWith(Parameterized.class) +public class TestDigraphEval { + private Digraph student; + private Digraph expected; + + public TestDigraphEval(Digraph student, Digraph expected) { + this.student = student; + this.expected = expected; + } + + public void assertEqualsIterable(Iterable one,Iterable two) { + ArrayList oneList = new ArrayList<>(); + for (int i: one) { + oneList.add(i); + } + ArrayList twoList = new ArrayList<>(); + for (int i: two) { + twoList.add(i); + } + Integer [] oneArray = oneList.toArray(new Integer[0]); + Arrays.sort(oneArray); + Integer [] twoArray = twoList.toArray(new Integer[0]); + Arrays.sort(twoArray); + assertArrayEquals("same adjacent nodes",oneArray,twoArray); + } + + + + public void assertEqualsGraph(Digraph g1, Digraph g2) { + assertEquals("same #nodes",g1.V(), g2.V()); + assertEquals("same #edges",g1.E(), g2.E()); + for (int i = 0; i < g1.V(); i++) { + assertEqualsIterable(g1.adj(i),g2.adj(i)); + } + } + + @Test + @Grade(value=0.5) + public void sameGraph() { + assertEqualsGraph(student,expected); + } + + @Test + @Grade(value=0.5) + public void sameRevert() { + assertEqualsGraph(student.reverse(),expected.reverse()); + } + + @Parameterized.Parameters + public static List data() throws IOException { + List data = new ArrayList<>(); + Random r1 = new Random(); + Random r2 = new Random(r1.nextInt(4)); + + for (int i = 0; i < 50; i++) { + + boolean [][] matrix = new boolean[10][10]; + + Digraph student = new DigraphImplem(10); + Digraph correct = new DigraphImplemCorrect(10); + + for (int k = 0; k < 20; k++) { + int v = r2.nextInt(10); + int w = r2.nextInt(10); + if(v != w && !matrix[v][w]) { + student.addEdge(v,w); + correct.addEdge(v,w); + matrix[v][w] = true; + } + } + data.add(new Object[]{student,correct}); + } + return data; + } +} diff --git a/lost+found/TestHeapComplexity.java-abKDmW b/lost+found/TestHeapComplexity.java-abKDmW new file mode 100644 index 00000000..c7ede9ae --- /dev/null +++ b/lost+found/TestHeapComplexity.java-abKDmW @@ -0,0 +1,56 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import static tests.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; + +@RunWith(Parameterized.class) +public class TestHeapComplexity { + private int seed; + + public TestHeapComplexity(Integer seed) { + this.seed = seed; + } + + @Test(timeout=700) + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + int size = 10000; + int[] toInsert = generateRandom(size, seed); + for(int i = 0; i < toInsert.length; i++) { + heap.push(toInsert[i]); + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + } + + assertTrue(checkHeapiness(heap.getContent(), size, counts)); + } + + private int[] generateRandom(int size, int seed) { + int[] todo = new int[size]; + Random r = new Random(seed); + for(int i = 0; i < size; i++) { + todo[i] = r.nextInt(); + if(todo[i] == Integer.MIN_VALUE) + todo[i] = 0; + } + return todo; + } + + @Parameterized.Parameters + public static List data() throws IOException { + List list = new ArrayList(); + for(int i = 0; i < 50; i++) + list.add(new Object[] {i}); + return list; + } +} diff --git a/lost+found/TestHeapComplexity.java-h31yQQ b/lost+found/TestHeapComplexity.java-h31yQQ new file mode 100644 index 00000000..22ab3410 --- /dev/null +++ b/lost+found/TestHeapComplexity.java-h31yQQ @@ -0,0 +1,59 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import static src.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; + +@RunWith(Parameterized.class) +public class TestHeapComplexity { + private int seed; + + public TestHeapComplexity(Integer seed) { + this.seed = seed; + } + + @Test(timeout=700) + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + int size = 10000; + int[] toInsert = generateRandom(size, seed); + for(int i = 0; i < toInsert.length; i++) { + heap.push(toInsert[i]); + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + } + + assertTrue(checkHeapiness(heap.getContent(), size, counts)); + } + + private int[] generateRandom(int size, int seed) { + int[] todo = new int[size]; + Random r = new Random(seed); + for(int i = 0; i < size; i++) { + todo[i] = r.nextInt(); + if(todo[i] == Integer.MIN_VALUE) + todo[i] = 0; + } + return todo; + } + + @Parameterized.Parameters + public static List data() throws IOException { + List list = new ArrayList(); + for(int i = 0; i < 50; i++) + list.add(new Object[] {i}); + return list; + } +} diff --git a/lost+found/TestHeapEasy.java-A7TURS b/lost+found/TestHeapEasy.java-A7TURS new file mode 100644 index 00000000..03662805 --- /dev/null +++ b/lost+found/TestHeapEasy.java-A7TURS @@ -0,0 +1,40 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import static tests.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; +import static tests.INGIniousHelper.readTestData; + +@RunWith(Parameterized.class) +public class TestHeapEasy { + private int[] toInsert; + + public TestHeapEasy(int[] toInsert, int[][] expected, int[] expectedSteps) { + this.toInsert = toInsert; + } + + @Test + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + + for(int i = 0; i < toInsert.length; i++) { + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + heap.push(toInsert[i]); + assertTrue(checkHeapiness(heap.getContent(), i+1, counts)); + } + } + + @Parameterized.Parameters + public static List data() throws IOException { + return readTestData(); + } +} diff --git a/lost+found/TestHeapEasy.java-o8Ud3E b/lost+found/TestHeapEasy.java-o8Ud3E new file mode 100644 index 00000000..84c7c17a --- /dev/null +++ b/lost+found/TestHeapEasy.java-o8Ud3E @@ -0,0 +1,42 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import templates.*; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import static src.INGIniousHelper.checkHeapiness; +import static org.junit.Assert.assertTrue; +import static src.INGIniousHelper.readTestData; + +@RunWith(Parameterized.class) +public class TestHeapEasy { + private int[] toInsert; + + public TestHeapEasy(int[] toInsert, int[][] expected, int[] expectedSteps) { + this.toInsert = toInsert; + } + + @Test + @Grade(value=1) + public void runAsExpected() { + Heap heap = new Heap(10); + HashMap counts = new HashMap<>(); + + for(int i = 0; i < toInsert.length; i++) { + counts.put(toInsert[i], counts.getOrDefault(toInsert[i], 0)+1); + heap.push(toInsert[i]); + assertTrue(checkHeapiness(heap.getContent(), i+1, counts)); + } + } + + @Parameterized.Parameters + public static List data() throws IOException { + return readTestData(); + } +} diff --git a/lost+found/TestHeapFirst.java-Es1qCq b/lost+found/TestHeapFirst.java-Es1qCq new file mode 100644 index 00000000..fda92df7 --- /dev/null +++ b/lost+found/TestHeapFirst.java-Es1qCq @@ -0,0 +1,29 @@ +package src; +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import templates.*; + +import java.util.HashMap; + +import static src.INGIniousHelper.checkHeapiness; +import static junit.framework.TestCase.assertEquals; +import static org.junit.Assert.assertTrue; + +public class TestHeapFirst { + @Test + @Grade(value=25) + public void basicTest() { + HashMap counts = new HashMap<>(); + Heap heap = new Heap(10); + + int[] content = new int[]{5, 1, 2, 3, 8, 10, 6, 0}; + for(int x: content) { + counts.put(x, counts.getOrDefault(x, 0)+1); + heap.push(x); + } + + assertEquals(8, heap.getSize()); + assertTrue(checkHeapiness(heap.getContent(), 8, counts)); + + } +} diff --git a/lost+found/TestHeapFirst.java-eR8SdQ b/lost+found/TestHeapFirst.java-eR8SdQ new file mode 100644 index 00000000..d13b1b54 --- /dev/null +++ b/lost+found/TestHeapFirst.java-eR8SdQ @@ -0,0 +1,27 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; + +import java.util.HashMap; + +import static tests.INGIniousHelper.checkHeapiness; +import static junit.framework.TestCase.assertEquals; +import static org.junit.Assert.assertTrue; + +public class TestHeapFirst { + @Test + @Grade(value=25) + public void basicTest() { + HashMap counts = new HashMap<>(); + Heap heap = new Heap(10); + + int[] content = new int[]{5, 1, 2, 3, 8, 10, 6, 0}; + for(int x: content) { + counts.put(x, counts.getOrDefault(x, 0)+1); + heap.push(x); + } + + assertEquals(8, heap.getSize()); + assertTrue(checkHeapiness(heap.getContent(), 8, counts)); + + } +} diff --git a/lost+found/TestMaze.java-Q6COU7 b/lost+found/TestMaze.java-Q6COU7 new file mode 100644 index 00000000..8a4fbce3 --- /dev/null +++ b/lost+found/TestMaze.java-Q6COU7 @@ -0,0 +1,157 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +import static org.junit.Assert.*; + +import java.util.*; + + +public class TestMaze{ + + public int [][] maze1 = new int[][] { + {0,0,0,0,0,0,0}, + {1,1,0,0,0,0,0}, + {0,0,0,0,0,1,0}, + {0,1,1,1,1,1,1}, + {0,0,0,0,1,0,0}, + {1,1,0,0,1,0,0}, + {0,0,0,0,1,0,0} + }; + + public int [][] maze2 = new int[][] { + {0,0,0,1,0,0,0}, + {1,1,0,0,0,1,0} + }; + + @Test + @Grade(value=10) + public void testMaze1a() { + Iterable path = Maze.shortestPath(maze1,0,0,6,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,6,0,maze1,path)); + assertTrue(pathArray.length == 15); + } + + @Test + @Grade(value=10) + public void testMaze1b() { + // should not have a path + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,0,0,6,6).iterator().hasNext()); + // unreachable destination + assertTrue(!Maze.shortestPath(maze1,6,6,0,0).iterator().hasNext()); + // start position is a wall + assertTrue(!Maze.shortestPath(maze1,1,0,6,0).iterator().hasNext()); + // end position is a wall + assertTrue(!Maze.shortestPath(maze1,6,0,1,0).iterator().hasNext()); + } + + @Test + @Grade(value=20) + public void testMaze1c() { + Iterable path = Maze.shortestPath(maze1,0,0,0,0); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,0,0,maze1,path)); + assertTrue(pathArray.length == 1); + } + + @Test + @Grade(value=20) + public void testMaze2a() { + Iterable path = Maze.shortestPath(maze2,0,0,1,6); + Integer [] pathArray = toArray(path); + assertTrue(validPathSourceToDest(0,0,1,6,maze2,path)); + assertTrue(pathArray.length == 10); + } + + @Test (timeout = 20) + @Grade(value=40) + public void testComplexity() { + int positions[][] = new int[2][2]; + int[][] maze = getMaze("maze.txt",24,110, positions); + + long t0 = System.currentTimeMillis(); + Iterable path = Maze.shortestPath(maze, positions[0][0], positions[0][1], positions[1][0], positions[1][1]); + long t1 = System.currentTimeMillis(); + + int count = 0; + for (Integer it: path) { count++; } + //System.out.println(count); + + assertEquals(count, 125); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + private int[][] getMaze(String filename, int row, int col, int positions[][]) { + String line; + int[][] maze = new int[row][col]; + try { + + BufferedReader br = new BufferedReader(new FileReader(filename)); + if (!br.ready()) { + throw new IOException(); + } + int j = 0; + int pos = 0; + while ((line = br.readLine()) != null) { + for(int i = 0; i < line.length(); i++) { + try { + maze[j][i] = Integer.parseInt(line.charAt(i) + ""); + } catch (NumberFormatException r) { + positions[pos][0] = j; + positions[pos][1] = i; + pos++; + ///System.out.println(j+" "+i); + maze[j][i] = 0; + } + } + j++; + } + br.close(); + } catch (IOException e) { + System.out.println(e); + } + return maze; + } + + + public Integer[] toArray(Iterable path) { + LinkedList list = new LinkedList(); + path.forEach(list::add); + return list.toArray(new Integer[0]); + } + + + public static int row(int pos, int mCols) { return pos / mCols; } + + public static int col(int pos, int mCols) { return pos % mCols; } + + public boolean validPathSourceToDest(int x1, int y1, int x2, int y2, int [][] maze, Iterable path) { + int n = maze.length; + int m = maze[0].length; + Iterator ite = path.iterator(); + if (!ite.hasNext()) return false; + int p = ite.next(); + int x = row(p,m); + int y = col(p,m); + if (x != x1 || y != y1) return false; + while (ite.hasNext()) { + p = ite.next(); + int x_ = row(p,m); + int y_ = col(p,m); + if (maze[x][y] == 1) return false; + if (Math.abs(x_-x)+Math.abs(y_-y) != 1) return false; + x = x_; y = y_; + } + if (x != x2 || y != y2) return false; + return true; + } + +} diff --git a/lost+found/Tester.java-83GPy4 b/lost+found/Tester.java-83GPy4 new file mode 100644 index 00000000..62b7c3d5 --- /dev/null +++ b/lost+found/Tester.java-83GPy4 @@ -0,0 +1,174 @@ +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; + + +public class Tester { + + private static ArrayList hams; + private static ArrayList spams; + + public static void main(String[] args) { + hams = new ArrayList(); + spams = new ArrayList(); + readInput("SMSSpamCollection"); + + SpamFiltering spamFilter = new SpamFilter("SMSSpamCollection"); + SpamFilter2 spamFilter2 = new SpamFilter2("SMSSpamCollection"); + + Map wordsMap = spamFilter.getWordsMap(); + Map wordsMap2 = spamFilter2.getWordsMap(); + + /* Iterate on my map to compare the words */ + Iterator> it = wordsMap2.entrySet().iterator(); + boolean ok = true; + String key = null; + Word value = null; + while (it.hasNext() && ok) { + java.util.Map.Entry pair = it.next(); + if (!wordsMap.containsKey(pair.getKey())) { + ok = false; + key = pair.getKey(); + } + else if (!pair.getValue().myEquals((Word) wordsMap.get(pair.getKey()))) { + ok = false; + value = (Word) wordsMap.get(pair.getKey()); + } + } + + /* Iterate on the student's map to check for words that should not be there */ + Iterator> newIt = wordsMap.entrySet().iterator(); + String wrongKey = null; + while (newIt.hasNext() && ok) { + java.util.Map.Entry pair = newIt.next(); + if (!wordsMap2.containsKey(pair.getKey())) { + ok = false; + wrongKey = pair.getKey(); + } + } + + /* Check the stop list of the student */ + HashSet stopWords = spamFilter.getStopWords(); + HashSet stopWords2 = spamFilter2.getStopWords(); + String unexpected = null; + String missing = null; + for (String s : stopWords2) + if (!stopWords.contains(s)) { + missing = s; + ok = false; + break; + } + for (String s : stopWords) + if (!stopWords2.contains(s)) { + unexpected = s; + ok = false; + break; + } + + double BCR = BCR((SpamFilter) spamFilter); + double BCR2 = BCR(spamFilter2); + if (BCR < BCR2) + ok = false; + + if (ok) System.out.println("OK : you got a BCR (Balanced Classification Rate) of " + BCR); + else { + if (key != null) System.out.println("ERROR : key '" + key + "' not found in your map. "); + if (value != null) System.out.println("ERROR : word '" + value + "' incorrect. "); + if (wrongKey != null) System.out.println("ERROR : key '" + wrongKey + "' not expected but found in your map : maybe a stop word ?"); + if (BCR < BCR2) System.out.println("ERROR : your BCR (" + BCR + ") is too low"); + if (unexpected != null) System.out.println("Error : word '" + unexpected + "' not expected in your list of stop words"); + if (missing != null) System.out.println("Error : word '" + missing + "' was missing in your list of stop words"); + } + } + + + private static void readInput(String filename) { + /* Read the input file line by line */ + FileInputStream fis = null; + BufferedReader reader = null; + + try { + fis = new FileInputStream(filename); + reader = new BufferedReader(new InputStreamReader(fis)); + + String line = reader.readLine(); + while(line != null){ + line = line.toLowerCase(); + String[] split = line.split("\t"); + if (split[0].equals("ham")) + hams.add(split[1]); + else + spams.add(split[1]); + line = reader.readLine(); + } + + } catch (FileNotFoundException e) { + System.out.println("EXCEPTION : " + e); + } catch (IOException e) { + System.out.println("EXCEPTION : " + e); + } finally { + try { + reader.close(); + fis.close(); + } catch (IOException e) { + System.out.println("EXCEPTION " + e); + } catch (NullPointerException e) { + System.out.println("EXCEPTION " + e); + } + } + } + + private static double BCR(SpamFilter spamFilter) { + int TP = 0; + int FP = 0; + int TN = 0; + int FN = 0; + + for (String sms : spams) { + boolean isSpam = spamFilter.classify(sms); + if (isSpam) + TP++; + else + FN++; + } + for (String sms : hams) { + boolean isSpam = spamFilter.classify(sms); + if (isSpam) + FP++; + else + TN++; + } + + return (double) ((double) TP/(TP+FN) + (double) TN/(FP+TN))/2; + } + + private static double BCR(SpamFilter2 spamFilter) { + int TP = 0; + int FP = 0; + int TN = 0; + int FN = 0; + + for (String sms : spams) { + boolean isSpam = spamFilter.classify(sms); + if (isSpam) + TP++; + else + FN++; + } + for (String sms : hams) { + boolean isSpam = spamFilter.classify(sms); + if (isSpam) + FP++; + else + TN++; + } + + return (double) ((double) TP/(TP+FN) + (double) TN/(FP+TN))/2; + } + +} diff --git a/lost+found/Tester.java-rGlxpl b/lost+found/Tester.java-rGlxpl new file mode 100644 index 00000000..4100e9bf --- /dev/null +++ b/lost+found/Tester.java-rGlxpl @@ -0,0 +1,101 @@ +import java.util.Map.Entry; +import java.util.Set; + +public class Tester { + + private static String feedback; + + public static void main(String[] args) { + boolean success = false; + try { + feedback = ""; + + int i = 1; + /*MapInterface map = new HashMap(); + map.put("a", 1); + Integer a = map.get("a"); + map.put("b", 2, 42); + Integer b = map.get("b", 42); + map.put("c", 3, map.hashCode("c")); + Integer c = map.get("c", map.hashCode("c")); + Integer cbis = map.get("c"); + map.put("d", 4); + Integer d = map.get("d", map.hashCode("d")); + int previousHash = map.hashCode("abc"); + int hash = map.hashCode("bcd"); + int incHash = map.incrementalHashCode(3, (int) 'd', previousHash, (int) 'a'); + if (a == null || a != 1) + System.out.println("Test " + i + " failed : put(key, value)/get(key) sequence doesn't work correctly"); + else if (b == null || b != 2) + System.out.println("Test " + i + " failed : put(key, value, hash)/get(key, hash) sequence doesn't work correctly"); + else if (c == null || c != 3) + System.out.println("Test " + i + " failed : put(key, value, hashCode(key))/get(key, hashCode(key)) sequence doesn't work correctly"); + else if (cbis == null || cbis != 3) + System.out.println("Test " + i + " failed : put(key, value, hashCode(key))/get(key) sequence doesn't work correctly"); + else if (d == null || d != 4) + System.out.println("Test " + i + " failed : put(key, value)/get(key, hashCode(key)) sequence doesn't work correctly"); + else if (hash != incHash) + System.out.println("Test " + i + " failed : incrementalHashCode doesn't seem to work correctly"); + else + System.out.println("Test " + i + " passed"); + + i++;*/ + PlagiarismInterface p = new Plagiarism("corpus", 10); + PlagiarismInterface myP = new MyPlagiarism("corpus", 10); + Set> hits = p.detect("document.txt"); + Set> myHits = myP.detect("document.txt"); + success = compareEntries(myHits, hits); + if (!success) System.out.println("Test " + i + " failed : " + feedback); + else System.out.println("Test " + i + " passed"); + + i++; + p = new Plagiarism("corpus2", 100); + myP = new MyPlagiarism("corpus2", 100); + hits = p.detect("document2.txt"); + myHits = myP.detect("document2.txt"); + success = compareEntries(myHits, hits); + if (!success) System.out.println("Test " + i + " failed : " + feedback); + else System.out.println("Test " + i + " passed"); + + /*i++; + p = new Plagiarism("corpus3", 50); + myP = new MyPlagiarism("corpus3", 50); + hits = p.detect("document3.txt"); + myHits = myP.detect("document3.txt"); + success = compareEntries(myHits, hits); + if (!success) System.out.println("Test " + i + " failed : " + feedback); + else System.out.println("Test " + i + " passed");*/ + + i++; + long t1 = System.nanoTime(); + p = new Plagiarism("corpus4", 99990); + hits = p.detect("document4.txt"); + long t2 = System.nanoTime(); + myP = new MyPlagiarism("corpus4", 99990); + myHits = myP.detect("document4.txt"); + long t3 = System.nanoTime(); + success = compareEntries(myHits, hits); + if (!success) System.out.println("Test " + i + " failed : " + feedback); + else if (t2-t1 > 2*(t3-t2)) System.out.println("Test " + i + " failed : your plagiarism detector was too slow. Make sure to use the incremental hash function !"); + else System.out.println("Test " + i + " passed"); + } catch (Exception e) { + System.out.println("An error occured during the execution of your code. "); e.printStackTrace(); + } + } + + public static boolean compareEntries(Set> myHits, Set> studentHits) { + for (Entry entry : myHits) + if (!studentHits.contains(entry)) { + feedback = "entry " + entry + " not found in your set. "; + return false; + } + for (Entry entry : studentHits) + if (!myHits.contains(entry)) { + feedback = "entry " + entry + " unexpected, but found in your set. "; + return false; + } + return true; + + } + +} diff --git a/lost+found/Tests.java-PNiBlK b/lost+found/Tests.java-PNiBlK new file mode 100644 index 00000000..9c58921d --- /dev/null +++ b/lost+found/Tests.java-PNiBlK @@ -0,0 +1,50 @@ +import junit.framework.AssertionFailedError; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertArrayEquals; + +public class Tests { + + public static void main(String[] args) { + JUnitCore junit = new JUnitCore(); + Result result = junit.run(Tests.class); + + if (!result.wasSuccessful()) { + for (Failure fail : result.getFailures()) { + // Only displays the exception thrown if it is not a "normal" exception thrown by JUnit + // for a failed test + if (fail.getException() instanceof AssertionError) { + System.out.println(fail.getMessage()); + } else { + fail.getException().printStackTrace(); + } + } + } + + System.exit(result.wasSuccessful() ? 0 : 1); + } + + @Test + public void testSortOdd() + { + String message = "Test [1 4 3 8 6]"; + Integer[] arr = new Integer[]{1, 4, 3, 8, 6}; + + MergeSort.sort(arr); + assertArrayEquals(message, new Integer[]{1, 3, 4, 6, 8}, arr); + } + + @Test + public void testSortEven() + { + String message = "Test [1 9 4 3 8 6]"; + Integer[] arr = new Integer[]{1, 9, 4, 3, 8, 6}; + + MergeSort.sort(arr); + assertArrayEquals(message, new Integer[]{1, 3, 4, 6, 8, 9}, arr); + } +} diff --git a/lost+found/Tests.java-bRYUaB b/lost+found/Tests.java-bRYUaB new file mode 100644 index 00000000..3fd4bb1c --- /dev/null +++ b/lost+found/Tests.java-bRYUaB @@ -0,0 +1,138 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +public class Tests { + + @Test + @Grade(value=25) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(1)); + assertTrue(message, dfs.hasPathTo(2)); + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with 1 as source"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); + + assertTrue(message, dfs.hasPathTo(0)); + assertTrue(message, dfs.hasPathTo(2)); + assertFalse(message, dfs.hasPathTo(3)); + assertFalse(message, dfs.hasPathTo(4)); + } + + @Test + @Grade(value=25) + public void testDiconnectedBis(){ + String message = "Test [0-1, 1-2, 3-4,4-5,5-6,5-7,7-8, 9-10,10-11,11-12] with 8 as source"; + Graph graph = new Graph(13); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5,6); + graph.addEdge(5,7); + graph.addEdge(7,8); + graph.addEdge(9,10); + graph.addEdge(10,11); + graph.addEdge(11,12); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 8); + + assertFalse(message, dfs.hasPathTo(0)); + assertFalse(message, dfs.hasPathTo(1)); + assertFalse(message, dfs.hasPathTo(2)); + + assertTrue(message, dfs.hasPathTo(3)); + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(message, dfs.hasPathTo(5)); + assertTrue(message, dfs.hasPathTo(6)); + assertTrue(message, dfs.hasPathTo(7)); + + assertFalse(message, dfs.hasPathTo(9)); + assertFalse(message, dfs.hasPathTo(10)); + assertFalse(message, dfs.hasPathTo(11)); + assertFalse(message, dfs.hasPathTo(12)); + } + + @Test + @Grade(value=25) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 0 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 0); + + assertTrue(message, dfs.hasPathTo(4)); + } + + /*@Test + @Grade(value=20) + public void testIterator() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 3 as source"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 0); + + DepthFirstPaths dfs = new DepthFirstPaths(graph, 3); + int[] pathCorr = new int[] {4, 0, 1, 2, 3}; + + assertFalse(message, dfs.hasPathTo(5)); + assertFalse(dfs.pathTo(5) != null); + + assertTrue(message, dfs.hasPathTo(4)); + assertTrue(dfs.pathTo(4) != null); + Iterable path = dfs.pathTo(4); + int k = 0; + for (int i : path) { + assertTrue(message,i == pathCorr[k++]); + } + + }*/ +} diff --git a/lost+found/Tests.java-nSbxlY b/lost+found/Tests.java-nSbxlY new file mode 100644 index 00000000..a7663ab2 --- /dev/null +++ b/lost+found/Tests.java-nSbxlY @@ -0,0 +1,555 @@ + + +import java.util.EmptyStackException; + +import org.junit.*; + +public class Tests { + + private InterpreterInterface i; + + @Before + public void setUp(){ + i = new Interpreter(); + } + + @After + public void tearDown(){ + i = null; + } + + // MISC + @Test + public void missionExampleAboutDupAndMul(){ + Assert.assertEquals( + "5.5 dup mul pstack must yield 30.25", + "30.25", i.interpret("5.5 dup mul pstack")); + Assert.assertEquals("", i.interpret("pop")); + } + + + @Test + public void trueIsAValidToken(){ + Assert.assertEquals("true", i.interpret("true pstack")); + } + + @Test + public void falseIsAValidToken(){ + Assert.assertEquals("false", i.interpret("false pstack")); + } + + // Qq on decide ? toute division -> double ou semantique Java + // @Test + // public void testSlackEx(){ + // Assert.assertEquals("2.5", i.interpret("5 2 div pstack")); + // Assert.assertEquals("5.0", i.interpret("2 mul pstack")); + // } + + // EXCH + @Test + public void testExch(){ + Assert.assertEquals( + "Exch swaps the top two items on the stack", + "3 2", i.interpret("2 3 exch pstack")); + } + + @Test(expected=EmptyStackException.class) + public void testExchEmpty(){ + i.interpret("exch pstack"); + Assert.fail("Calling exch on an empty stack must throw an EmptyStackException"); + } + + @Test(expected=EmptyStackException.class) + public void testExchNotEnoughOperands(){ + i.interpret("1 exch pstack"); + Assert.fail("Calling exch on a stack of length 1 must throw an EmptyStackException"); + } + + // SYMBOLS + @Ignore + @Test(expected=RuntimeException.class) + public void testItThrowsAnExceptionWhenSymbolIsUsedBeforeDefinition(){ + i.interpret("one /one 1 def 1 add pstack"); + Assert.fail("An exception must be thrown when a symbol is used before being declared"); + } + @Ignore + @Test + public void testItCanUseSymbols(){ + Assert.assertEquals( + "Symbols can be used for their value in expressions", + "2", i.interpret("/one 1 def one 1 add pstack")); + } + @Ignore + @Test + public void symbolDefinitionCanReferenceAnotherSymbol(){ + Assert.assertEquals( + "A symbol definition can reference another symbol", + "2", i.interpret("/a 1 def /b a def a b add pstack")); + } + @Ignore + @Test + public void ignoreOperatorOverriding(){ + Assert.assertEquals( + "When a symbol redefines a keyword, it is ignored", + "4", i.interpret("/add 1 def 2 2 add pstack")); + } + @Ignore + @Test + public void testIncompleteDef(){ + Assert.assertEquals( + "Is must be possible to print incomplete partial definition with pstack", + "/aa 2 /bb 3", i.interpret("/aa 2 /bb 3 pstack")); + } + + @Test + public void interpretEmptyString(){ + Assert.assertEquals( + "Interpreting the empty string must yield the empty string", + "", i.interpret("")); + } + + // ADD + @Test + public void addingTwoIntegersMustYieldTheIntegerSum(){ + Assert.assertEquals( + "Adding two integers yields the integer sum of the terms", + "2", i.interpret("1 1 add pstack")); + } + @Test + public void addTwoOperands(){ + Assert.assertEquals( + "Adding two integers yields the integer sum of the terms", + "5", i.interpret("2 3 add pstack")); + } + + @Test + public void addNegativeIntOperands(){ + Assert.assertEquals( + "Adding two negative integers yields their (negative) integer sum", + "-5", i.interpret("-2 -3 add pstack")); + } + + @Test + public void addIntAndDoubleOperands(){ + Assert.assertEquals( + "Adding an integer and a floating point value yields a floating point value", + "5.0", i.interpret("2 3.0 add pstack")); + } + @Test + public void addDoubleAndIntOperands(){ + Assert.assertEquals( + "Adding an a floating point value and an integer yields a floating point value", + "5.0", i.interpret("2.0 3 add pstack")); + } + + @Test + public void addNegativeDoubleOperands(){ + Assert.assertEquals( + "Adding two negative floating point value returns their (negative) floating point sum", + "-5.0", i.interpret("-2.0 -3 add pstack")); + } + + @Test(expected=EmptyStackException.class) + public void addOneOperandThrowsException(){ + i.interpret("-3 add "); + Assert.fail("Calling add when there is only one item on the stack must throw an EmptyStackException"); + } + @Test(expected=Exception.class) + public void boolDontSupportAddition(){ + i.interpret("true false add"); + Assert.fail("Boolean don't support addition"); + } + @Test(expected=Exception.class) + public void boolDontSupportSubtraction(){ + i.interpret("true false sub"); + Assert.fail("Boolean don't support subtraction"); + } + @Test(expected=Exception.class) + public void boolDontSupportMultiplication(){ + i.interpret("true false mul"); + Assert.fail("Boolean don't support multiplication"); + } + @Test(expected=Exception.class) + public void boolDontSupportDivision(){ + i.interpret("true false div"); + Assert.fail("Boolean don't support division"); + } + + // SUB + @Test + public void subTwoOperands(){ + // 2 3 sub == 2 - 3 + Assert.assertEquals( + "Subtracting two integers can yield a negative integer", + "-1", i.interpret("2 3 sub pstack")); + } + @Test + public void subNegativeIntOperand(){ + Assert.assertEquals( + "It must be possible to subtract a negative integer", + "-5", i.interpret("-2 3 sub pstack")); + } + @Test + public void subIntDoubleOperand(){ + Assert.assertEquals( + "It must be possible to subtract an int and a float value", + "-5.0", i.interpret("-2 3.0 sub pstack")); + } + @Test + public void subDoubleIntOperand(){ + Assert.assertEquals( + "It must be possible to subtract a float value and an int", + "-5.0", i.interpret("-2.0 3 sub pstack")); + } + @Test + public void subNegativeDoubleOperand(){ + Assert.assertEquals( + "It must be possible to subtract a negative float value", + "-5.0", i.interpret("-2.0 3 sub pstack")); + } + @Test(expected=EmptyStackException.class) + public void subOneOperand(){ + i.interpret("3 sub pstack"); + Assert.fail("Subtraction requires two operands on the stack"); + } + @Test(expected=EmptyStackException.class) + public void subEmpty(){ + i.interpret("sub pstack"); + Assert.fail("Subtraction requires two operands on the stack"); + } + @Test + public void subDoubleOperands(){ + Assert.assertEquals( + "It is possible to subtract two floating point values", + "-1.0", i.interpret("2.0 3 sub pstack")); + } + @Ignore + @Test + public void subSymbols(){ + Assert.assertEquals( + "It is possible to subtract two symbolic values", + "-1.0", i.interpret("/two 2.0 def /three 3 def two three sub pstack")); + } + + // MUL + @Test + public void mulTwoOperands(){ + // 2 3 mul == 2 * 3 + Assert.assertEquals( + "It is possible to multiply two integer values", + "6", i.interpret("2 3 mul pstack")); + } + @Test + public void mulNegativeIntOperand(){ + Assert.assertEquals( + "It is possible to multiply a negative integer value", + "-6", i.interpret("-2 3 mul pstack")); + } + @Test + public void mulNegativeDoubleOperand(){ + Assert.assertEquals( + "It is possible to multiply a negative float value by an int and " + + "it must return a negative float", + "-6.0", i.interpret("-2.0 3 mul pstack")); + } + @Test(expected=EmptyStackException.class) + public void mulOneOperand(){ + i.interpret("3 mul pstack"); + Assert.fail("Multiplication requires two numeric operands on the stack"); + } + @Test(expected=EmptyStackException.class) + public void mulEmpty(){ + i.interpret("mul pstack"); + Assert.fail("Multiplication requires two numeric operands on the stack"); + } + @Test + public void mulDoubleIntOperands(){ + Assert.assertEquals( + "It is possible to multiply a float value by an int and it must return a float value", + "6.0", i.interpret("2.0 3 mul pstack")); + } + @Test + public void mulIntDoubleOperands(){ + Assert.assertEquals( + "It is possible to multiply an int by a float value and it must return a float value", + "6.0", i.interpret("2 3.0 mul pstack")); + } + @Test + public void operatorsPrecedenceSetByTheStack1(){ + Assert.assertEquals( + "Operators precedence is set by the stack (1 3 4 mul add pstack) must yield 13", + "13", i.interpret("1 3 4 mul add pstack")); + } + @Test + public void operatorsPrecedenceSetByTheStack2(){ + // 1*3 + 4 + Assert.assertEquals( + "Operators precedence is set by the stack (1 3 mul 4 add) must yield (1*3 + 4)", + "7", i.interpret("1 3 mul 4 add pstack")); + } + + + // DIV + @Test + public void divTwoIntOperands(){ + // Because div always returns float + Assert.assertEquals( + "Div ALWAYS returns a float value", + ""+(2/3.0), i.interpret("2 3 div pstack")); + } + @Test + public void divNegativeIntOperand(){ + // Because div always returns float + Assert.assertEquals( + "It is possible to divide a negative integer", + ""+(-2/3.0), i.interpret("-2 3 div pstack")); + } + @Test + public void divDoubleIntOperands(){ + // 2 3 mul == 2 / 3 + Assert.assertEquals( + "It is possible to divide a float by an int and it must return a float value", + ""+(2/3.0), i.interpret("2.0 3 div pstack")); + } + @Test + public void divIntDoubleOperands(){ + // 2 3 mul == 2 / 3 + Assert.assertEquals( + "It is possible to divide an int by a float and it must return a float value", + ""+(2/3.0), i.interpret("2 3.0 div pstack")); + } + + @Test + public void divNegativeDoubleOperand(){ + Assert.assertEquals( + "Division accepts negative float operands", + ""+(-2/3.0), i.interpret("-2.0 3 div pstack")); + } + @Test(expected=EmptyStackException.class) + public void divOneOperand(){ + i.interpret("3 div pstack"); + Assert.fail("Division requires two numeric operands on the stack"); + } + @Test(expected=EmptyStackException.class) + public void divEmpty(){ + i.interpret("div pstack"); + Assert.fail("Division requires two numeric operands on the stack"); + } + @Test + public void divDoubleOperands(){ + Assert.assertEquals( + "Division allows to mix floating point and integer operands (it must return a float value)", + ""+(2/3.0), i.interpret("2.0 3 div pstack")); + } + @Test(expected=ArithmeticException.class) + public void divPositiveDoubleByZero(){ + // Infinity if it were java semantics + i.interpret("2.0 0 div pstack"); + Assert.fail("Dividing a double by zero must throw an ArithmeticException " + + "(this is different from the java semantics which returns Infinity)"); + } + @Test(expected=ArithmeticException.class) + public void divNegativeDoubleByZero(){ + // -Infinity if it were java semantics + i.interpret("-2.0 0 div pstack"); + Assert.fail("Dividing a negative double by zero must throw an ArithmeticException " + + "(this is different from the java semantics which returns -Infinity)"); + } + @Test(expected=ArithmeticException.class) + public void divDoubleZeroByZero(){ + // NaN if it were java semantics + i.interpret("0.0 0.0 div pstack"); + Assert.fail("Dividing a 0.0 by zero must throw an ArithmeticException " + + "(this is different from the java semantics which returns NaN)"); + } + + @Test(expected=ArithmeticException.class) + public void divPositiveIntegerDivByZeroThrowsException(){ + i.interpret("1 0 div pstack"); + Assert.fail("Dividing a int by zero must throw an ArithmeticException"); + } + @Test(expected=ArithmeticException.class) + public void divNegativeIntegerDivByZeroThrowsException(){ + i.interpret("-1 0 div pstack"); + Assert.fail("Dividing a negative int by zero must throw an ArithmeticException"); + } + + // IDIV + @Test + public void idivTwoIntOperands(){ + // Because idiv always returns int + Assert.assertEquals( + "iDiv ALWAYS returns an int value", + ""+(2/3), i.interpret("2 3 idiv pstack")); + } + @Test + public void idivNegativeIntOperand(){ + // Because idiv always returns int + Assert.assertEquals( + "It is possible to divide a negative integer", + ""+(-2/3), i.interpret("-2 3 idiv pstack")); + } + @Test(expected=Exception.class) + public void idivDoubleIntOperands(){ + // 2 3 mul == 2 / 3 + i.interpret("2.5 3 idiv pstack"); + } + @Test(expected=Exception.class) + public void idivIntDoubleOperands(){ + i.interpret("2 3.0 idiv pstack"); + } + + @Test(expected=Exception.class) + public void idivNegativeDoubleOperand(){ + i.interpret("-2.0 3 idiv pstack"); + } + @Test(expected=EmptyStackException.class) + public void idivOneOperand(){ + i.interpret("3 idiv pstack"); + Assert.fail("Division requires two numeric operands on the stack"); + } + @Test(expected=EmptyStackException.class) + public void idivEmpty(){ + i.interpret("idiv pstack"); + Assert.fail("Division requires two numeric operands on the stack"); + } + @Test(expected=Exception.class) + public void idivTwoDoubleOperands(){ + i.interpret("2.0 3.0 idiv pstack"); + } + @Test(expected=Exception.class) + public void idivPositiveDoubleByZero(){ + // Infinity if it were java semantics + i.interpret("2.0 0 idiv pstack"); + } + @Test(expected=Exception.class) + public void idivNegativeDoubleByZero(){ + // -Infinity if it were java semantics + i.interpret("-2.0 0 idiv pstack"); + } + @Test(expected=Exception.class) + public void idivDoubleZeroByZero(){ + // NaN if it were java semantics + i.interpret("0.0 0.0 idiv pstack"); + } + + @Test(expected=ArithmeticException.class) + public void idivPositiveIntegerDivByZeroThrowsException(){ + i.interpret("1 0 idiv pstack"); + Assert.fail("Dividing a int by zero must throw an ArithmeticException"); + } + @Test(expected=ArithmeticException.class) + public void idivNegativeIntegerDivByZeroThrowsException(){ + i.interpret("-1 0 idiv pstack"); + Assert.fail("Dividing a negative int by zero must throw an ArithmeticException"); + } + @Test(expected=ArithmeticException.class) + public void idivZeroIntegerDivByZeroThrowsException(){ + i.interpret("0 0 idiv pstack"); + Assert.fail("Dividing a 0 by zero must throw an ArithmeticException"); + } + + // LOGIC operators + @Ignore + @Test + public void trueEqTrue(){ + Assert.assertEquals( + "true must equal true", + "true", i.interpret("true true eq pstack")); + } + @Ignore + @Test + public void falseEqFalse(){ + Assert.assertEquals( + "false must equal false", + "true", i.interpret("false false eq pstack")); + } + @Ignore + @Test + public void trueNotEqFalse(){ + Assert.assertEquals( + "'true false eq pstack' must yield false", + "false", i.interpret("true false eq pstack")); + } + @Ignore + @Test + public void falseNeqTrue(){ + Assert.assertEquals( + "'false true ne pstack' must yield true", + "true", i.interpret("false true ne pstack")); + } + @Ignore + @Test + public void falseDoesEqFalse(){ + Assert.assertEquals( + "'false false ne pstack' must yield false", + "false", i.interpret("false false ne pstack")); + } + @Ignore + @Test + public void trueNEqFalse(){ + Assert.assertEquals( + "'true false ne pstack' must yield true", + "true", i.interpret("true false ne pstack")); + } + @Ignore + @Test + public void nestedLogicExpr(){ + Assert.assertEquals( + "Nested logic operations must be supported", + "true", i.interpret("1.0 1.0 eq true eq pstack")); + } + @Ignore + @Test + public void equalityOnSameSymbolShouldYieldTrue(){ + Assert.assertEquals( + "Testing equality on one same symbol should yield true", + "true", i.interpret("/one 1.0 def one one eq pstack")); + } + @Ignore + @Test + public void equalityOnDifferentSymbolShouldYieldTrueWhenBothHaveTheSameValue(){ + Assert.assertEquals( + "Testing equality on different symbols that have the same value should yield true", + "true", i.interpret("/a 1 def /b 1 def a b eq pstack")); + } + @Ignore + @Test + public void equalityOnDifferentSymbolShouldYieldFalseWhenTheyHaveDifferentValues(){ + Assert.assertEquals( + "Testing equality on different symbols that have different values should yield false", + "false", i.interpret("/a 1.0 def /b 2 def a b eq pstack")); + } + + // PSTACK + @Test + public void multiplePstacks(){ + Assert.assertEquals( + "Multiple calls to to pstack must provoke the resulting string " + + "to contain the concatenation (separated with a blank) of the" + + "states of the stack at the moments pstack is called", + "4 4 2 6", i.interpret("4 pstack 2 pstack add pstack")); + } + @Test + public void pstackAfterPoppingLastResultReturnsEmptyString(){ + Assert.assertEquals( + "Calling pstack after popping the last result should yield an " + + "empty string (stack is empty)", + "", i.interpret("1 1 add pop pstack")); + } + @Ignore + @Test + public void partialDefinitionCanBePrinted(){ + Assert.assertEquals( + "It must be possible to print the content of the stack during a " + + "partial definition of a symbol", + "/one", i.interpret("/one pstack")); + } + @Test + public void pstackMustPrintElementsBottomUp(){ + Assert.assertEquals( + "The string produced by pstack must read bottom-up from left to" + + "right. (1 2 3 4 pstack) must yield (1 2 3 4)", + "1 2 3 4", i.interpret("1 2 3 4 pstack")); + } +} \ No newline at end of file diff --git a/lost+found/Tests.java-o2nvbt b/lost+found/Tests.java-o2nvbt new file mode 100644 index 00000000..838fa9f7 --- /dev/null +++ b/lost+found/Tests.java-o2nvbt @@ -0,0 +1,136 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; + +public class Tests { + @Test + @Grade(value=20) + public void testSimple() + { + String message = "Test [0-1, 0-2, 0-3, 0-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(0, 2); + graph.addEdge(0, 3); + graph.addEdge(0, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testDisconnected() + { + String message = "Test [0-1, 1-2, 3-4] with [1] as sources"; + Graph graph = new Graph(5); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(2)); + + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + } + + @Test + @Grade(value=20) + public void testLoop() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5, 5-0] with [0] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + graph.addEdge(5, 0); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 3, bfs.distTo(3)); + assertEquals(message, 2, bfs.distTo(4)); + assertEquals(message, 1, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSources() + { + String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5] with [1, 5] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1, 5)); + assertEquals(message, 1, bfs.distTo(0)); + assertEquals(message, 0, bfs.distTo(1)); + assertEquals(message, 1, bfs.distTo(2)); + assertEquals(message, 2, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 0, bfs.distTo(5)); + } + + @Test + @Grade(value=20) + public void testMultipleSourcesDisconnected() + { + String message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 2] as sources"; + Graph graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 2)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 0, bfs.distTo(2)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); + assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(5)); + + message = "Test [0-1, 1-2, 3-4, 4-5] with [0, 3] as sources"; + graph = new Graph(6); + + graph.addEdge(0, 1); + graph.addEdge(1, 2); + graph.addEdge(3, 4); + graph.addEdge(4, 5); + + bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0, 3)); + assertEquals(message, 0, bfs.distTo(0)); + assertEquals(message, 1, bfs.distTo(1)); + assertEquals(message, 2, bfs.distTo(2)); + assertEquals(message, 0, bfs.distTo(3)); + assertEquals(message, 1, bfs.distTo(4)); + assertEquals(message, 2, bfs.distTo(5)); + } +} diff --git a/lost+found/Tests.java-wfYO2t b/lost+found/Tests.java-wfYO2t new file mode 100644 index 00000000..9c58921d --- /dev/null +++ b/lost+found/Tests.java-wfYO2t @@ -0,0 +1,50 @@ +import junit.framework.AssertionFailedError; +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertArrayEquals; + +public class Tests { + + public static void main(String[] args) { + JUnitCore junit = new JUnitCore(); + Result result = junit.run(Tests.class); + + if (!result.wasSuccessful()) { + for (Failure fail : result.getFailures()) { + // Only displays the exception thrown if it is not a "normal" exception thrown by JUnit + // for a failed test + if (fail.getException() instanceof AssertionError) { + System.out.println(fail.getMessage()); + } else { + fail.getException().printStackTrace(); + } + } + } + + System.exit(result.wasSuccessful() ? 0 : 1); + } + + @Test + public void testSortOdd() + { + String message = "Test [1 4 3 8 6]"; + Integer[] arr = new Integer[]{1, 4, 3, 8, 6}; + + MergeSort.sort(arr); + assertArrayEquals(message, new Integer[]{1, 3, 4, 6, 8}, arr); + } + + @Test + public void testSortEven() + { + String message = "Test [1 9 4 3 8 6]"; + Integer[] arr = new Integer[]{1, 9, 4, 3, 8, 6}; + + MergeSort.sort(arr); + assertArrayEquals(message, new Integer[]{1, 3, 4, 6, 8, 9}, arr); + } +} diff --git a/lost+found/Textil_32_Curv_44_Textil_32_Membran.xml-93WHos b/lost+found/Textil_32_Curv_44_Textil_32_Membran.xml-93WHos new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/TimeLimitedCodeBlock.java-G2hgCG b/lost+found/TimeLimitedCodeBlock.java-G2hgCG new file mode 100644 index 00000000..36bd2fda --- /dev/null +++ b/lost+found/TimeLimitedCodeBlock.java-G2hgCG @@ -0,0 +1,40 @@ + + +import java.util.concurrent.*; + + + +public abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); +} + diff --git a/lost+found/TimeLimitedCodeBlock.java-eYnget b/lost+found/TimeLimitedCodeBlock.java-eYnget new file mode 100644 index 00000000..36bd2fda --- /dev/null +++ b/lost+found/TimeLimitedCodeBlock.java-eYnget @@ -0,0 +1,40 @@ + + +import java.util.concurrent.*; + + + +public abstract class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); +} + diff --git a/lost+found/Union.java-jmN9gX b/lost+found/Union.java-jmN9gX new file mode 100644 index 00000000..c6e6813a --- /dev/null +++ b/lost+found/Union.java-jmN9gX @@ -0,0 +1,3 @@ +package student; + +@@implementation@@ \ No newline at end of file diff --git a/lost+found/Union.java-wwRzw9 b/lost+found/Union.java-wwRzw9 new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/Union.java-wwRzw9 @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/UnionIntervalsTest.java-JjCwag b/lost+found/UnionIntervalsTest.java-JjCwag new file mode 100644 index 00000000..0fd5d3d0 --- /dev/null +++ b/lost+found/UnionIntervalsTest.java-JjCwag @@ -0,0 +1,268 @@ +package tests; + +/*to be added for grading and test*/ +import be.ac.ucl.info.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import student.Union; +import student.Interval; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.*; + +/** + * This is just a limited number of tests provided for convenience + * Don't hesitate to extend it with other tests + */ +public class UnionIntervalsTest { + + public static Interval [] unionSolution(Interval [] intervals) { + if (intervals.length == 0) return intervals; + Arrays.sort(intervals); + int min = intervals[0].getMin(); + int max = intervals[0].getMax(); + ArrayList res = new ArrayList(); + for (int i = 1; i < intervals.length; i++) { + if (intervals[i].getMin() > max) { + // close + res.add(new Interval(min,max)); + min = intervals[i].getMin(); + max = intervals[i].getMax(); + } else { + max = Math.max(max, intervals[i].getMax()); + } + } + res.add(new Interval(min,max)); + return res.toArray(new Interval[0]); + } + + public static boolean test(Interval[] input, Interval[] expectedOutput) { + Interval [] result = Union.union(input); + boolean ok = Arrays.equals(expectedOutput,result); + if (!ok) { + String res = "----bug found----\ninput:"; + for (int i = 0; i < input.length; i++) { + System.out.println("=>"+input[i]); + } + + for (Interval i: input) res += i; + res += "\nexpected output:"; + for (Interval i: expectedOutput) res += i; + res += "\nactual output:"; + for (Interval i: result) res += i; + feedback(res+"\n"); + } + return ok; + } + + @Test + @Grade(value=25) + public void testUnits() { + boolean ok = true; + if (ok) ok = test(new Interval[]{},new Interval[]{}); + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(1, 3); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 3)}); + } + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(3, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2), new Interval(3, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2)}); + } + if (ok) { + Interval i1 = new Interval(1, 1); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 1), new Interval(2, 2)}); + } + if (ok) { + Interval i0 = new Interval(7, 9); + Interval i1 = new Interval(5, 8); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i0, i1, i2},new Interval[] {new Interval(2, 4), new Interval(5, 9)}); + } + if (ok) { + Interval i0 = new Interval(10, 10); + Interval i1 = new Interval(2, 4); + Interval i2 = new Interval(3, 4); + Interval i3 = new Interval(5, 6); + Interval i4 = new Interval(6, 9); + Interval i5 = new Interval(6, 8); + ok = test(new Interval[]{i0, i1, i2, i3, i4, i5},new Interval[]{new Interval(2, 4), new Interval(5, 9), new Interval(10, 10)}); + } + assertTrue(ok); + + } + + + public static Interval randomInterval(Random rand) { + int min = rand.nextInt(20); + return new Interval(min, min + rand.nextInt(4)); + } + + private static boolean testRandom2() { + int [] seeds = new int[] {1,5,7,11,13}; + + Random rand = new java.util.Random(seeds[2]); + boolean ok = true; + + for (int i = 0; i < 500 & ok; i++) { + Interval[] intervals = new Interval[10]; + for (int k = 0; k < intervals.length; k++) { + intervals[k] = randomInterval(rand); + } + ok = test(intervals,unionSolution(intervals)); + } + return ok; + } + + @Test(timeout=1000) + @Grade(value=25) + public void testRandom() { + + final boolean [] ok = new boolean[]{false}; + ok[0] = testRandom2(); + + + assertTrue(ok[0]); + } + + abstract static class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + @Test(timeout=11000) + @Grade(value=50) + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + Interval [] res = Union.union(intervals); + } + + /* + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + Interval [] res = Union.union(intervals); + } + }.run(10000); + return timeOk; + }*/ + + + private static void exec(String cmd) { + try { + Runtime.getRuntime().exec(cmd).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + + private static void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n" + message + "\n"}).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + +/* + public static void main(String[] args) { + int grade = 0; + if (testUnits()) { + grade += 25; + } + if (testRandom()) { + grade += 25; + } + if (grade == 50 && testComplexity()) { + grade += 50; + } + + System.out.println("%grade:" + grade); + + exec("feedback-grade "+grade); + + + if (grade == 100) { + feedback("Congratulations"); + exec("feedback-result success"); + } + else { + feedback("Not yet good (bugs and/or time-complexity)"); + exec("feedback-result failed"); + } + + + }*/ + + +} diff --git a/lost+found/UnionIntervalsTest.java-LJSbIq b/lost+found/UnionIntervalsTest.java-LJSbIq new file mode 100644 index 00000000..0e46102f --- /dev/null +++ b/lost+found/UnionIntervalsTest.java-LJSbIq @@ -0,0 +1,263 @@ +/*to be added for grading and test*/ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.*; + +/** + * This is just a limited number of tests provided for convenience + * Don't hesitate to extend it with other tests + */ +public class UnionIntervalsTest { + + public static Interval [] unionSolution(Interval [] intervals) { + if (intervals.length == 0) return intervals; + Arrays.sort(intervals); + int min = intervals[0].getMin(); + int max = intervals[0].getMax(); + ArrayList res = new ArrayList(); + for (int i = 1; i < intervals.length; i++) { + if (intervals[i].getMin() > max) { + // close + res.add(new Interval(min,max)); + min = intervals[i].getMin(); + max = intervals[i].getMax(); + } else { + max = Math.max(max, intervals[i].getMax()); + } + } + res.add(new Interval(min,max)); + return res.toArray(new Interval[0]); + } + + public static boolean test(Interval[] input, Interval[] expectedOutput) { + Interval [] result = Union.union(input); + boolean ok = Arrays.equals(expectedOutput,result); + if (!ok) { + String res = "----bug found----\ninput:"; + for (int i = 0; i < input.length; i++) { + System.out.println("=>"+input[i]); + } + + for (Interval i: input) res += i; + res += "\nexpected output:"; + for (Interval i: expectedOutput) res += i; + res += "\nactual output:"; + for (Interval i: result) res += i; + feedback(res+"\n"); + } + return ok; + } + + @Test + @Grade(value=25) + public void testUnits() { + boolean ok = true; + if (ok) ok = test(new Interval[]{},new Interval[]{}); + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(1, 3); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 3)}); + } + if (ok) { + Interval i1 = new Interval(1, 3); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(3, 4); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2), new Interval(3, 4)}); + } + if (ok) { + Interval i1 = new Interval(1, 2); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 2)}); + } + if (ok) { + Interval i1 = new Interval(1, 1); + Interval i2 = new Interval(2, 2); + ok = test(new Interval[]{i1, i2},new Interval[]{new Interval(1, 1), new Interval(2, 2)}); + } + if (ok) { + Interval i0 = new Interval(7, 9); + Interval i1 = new Interval(5, 8); + Interval i2 = new Interval(2, 4); + ok = test(new Interval[]{i0, i1, i2},new Interval[] {new Interval(2, 4), new Interval(5, 9)}); + } + if (ok) { + Interval i0 = new Interval(10, 10); + Interval i1 = new Interval(2, 4); + Interval i2 = new Interval(3, 4); + Interval i3 = new Interval(5, 6); + Interval i4 = new Interval(6, 9); + Interval i5 = new Interval(6, 8); + ok = test(new Interval[]{i0, i1, i2, i3, i4, i5},new Interval[]{new Interval(2, 4), new Interval(5, 9), new Interval(10, 10)}); + } + assertTrue(ok); + + } + + + public static Interval randomInterval(Random rand) { + int min = rand.nextInt(20); + return new Interval(min, min + rand.nextInt(4)); + } + + private static boolean testRandom2() { + int [] seeds = new int[] {1,5,7,11,13}; + + Random rand = new java.util.Random(seeds[2]); + boolean ok = true; + + for (int i = 0; i < 500 & ok; i++) { + Interval[] intervals = new Interval[10]; + for (int k = 0; k < intervals.length; k++) { + intervals[k] = randomInterval(rand); + } + ok = test(intervals,unionSolution(intervals)); + } + return ok; + } + + @Test(timeout=1000) + @Grade(value=25) + public void testRandom() { + + final boolean [] ok = new boolean[]{false}; + ok[0] = testRandom2(); + + + assertTrue(ok[0]); + } + + abstract static class TimeLimitedCodeBlock { + + public boolean run(long time) { + final Runnable stuffToDo = new Thread() { + @Override + public void run() { + codeBlock(); + } + }; + + final ExecutorService executor = Executors.newSingleThreadExecutor(); + final Future future = executor.submit(stuffToDo); + executor.shutdown(); // This does not cancel the already-scheduled task. + boolean ok = true; + try { + future.get(time, TimeUnit.MILLISECONDS); + } catch (InterruptedException ie) { + ok = false; + } catch (ExecutionException ee) { + ok = false; + } catch (TimeoutException te) { + ok = false; + } + if (!executor.isTerminated()) { + future.cancel(true); + executor.shutdownNow(); + executor.shutdownNow(); // If you want to stop the code that hasn't finished. + } + return ok; + } + + public abstract void codeBlock(); + } + + @Test(timeout=11000) + @Grade(value=50) + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + Interval [] res = Union.union(intervals); + } + + /* + public void testComplexity() { + final Interval[] intervals = new Interval[1000000]; + Random rand = new java.util.Random(); + for (int k = 0; k < intervals.length; k++) { + int min = rand.nextInt(Integer.MAX_VALUE-1000); + intervals[k] = new Interval(min, min + rand.nextInt(1000)); + } + + boolean timeOk = new TimeLimitedCodeBlock() { + @Override + public void codeBlock() { + Interval [] res = Union.union(intervals); + } + }.run(10000); + return timeOk; + }*/ + + + private static void exec(String cmd) { + try { + Runtime.getRuntime().exec(cmd).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + + private static void feedback(String message) { + System.out.println(message); + try { + Runtime.getRuntime().exec(new String[]{"feedback-msg", "-ae", "-m", "\n" + message + "\n"}).waitFor(); + } catch (IOException e) { + //e.printStackTrace(); + } catch (InterruptedException e) { + //e.printStackTrace(); + } + } + +/* + public static void main(String[] args) { + int grade = 0; + if (testUnits()) { + grade += 25; + } + if (testRandom()) { + grade += 25; + } + if (grade == 50 && testComplexity()) { + grade += 50; + } + + System.out.println("%grade:" + grade); + + exec("feedback-grade "+grade); + + + if (grade == 100) { + feedback("Congratulations"); + exec("feedback-result success"); + } + else { + feedback("Not yet good (bugs and/or time-complexity)"); + exec("feedback-result failed"); + } + + + }*/ + + +} diff --git a/lost+found/Vector.java-i5UYGK b/lost+found/Vector.java-i5UYGK new file mode 100644 index 00000000..663e8768 --- /dev/null +++ b/lost+found/Vector.java-i5UYGK @@ -0,0 +1,38 @@ +public class Vector { + + private int [] array; + private int nOp = 0; + + + Vector(int n) { + array = new int[n]; + } + + public int size() { + return array.length; + } + + public void set(int i, int v) { + nOp++; + array[i] = v; + } + + public int get(int i) { + nOp++; + return array[i]; + } + + public void swap(int i, int j) { + nOp++; + int tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } + + public int nOp() { + return nOp; + } + + + +} diff --git a/lost+found/Vector.java-l4Khk8 b/lost+found/Vector.java-l4Khk8 new file mode 100644 index 00000000..663e8768 --- /dev/null +++ b/lost+found/Vector.java-l4Khk8 @@ -0,0 +1,38 @@ +public class Vector { + + private int [] array; + private int nOp = 0; + + + Vector(int n) { + array = new int[n]; + } + + public int size() { + return array.length; + } + + public void set(int i, int v) { + nOp++; + array[i] = v; + } + + public int get(int i) { + nOp++; + return array[i]; + } + + public void swap(int i, int j) { + nOp++; + int tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } + + public int nOp() { + return nOp; + } + + + +} diff --git a/lost+found/VisiCut.Linux-pua1uh b/lost+found/VisiCut.Linux-pua1uh new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/VisiCut.MacOS-Smv3mI b/lost+found/VisiCut.MacOS-Smv3mI new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/VisiCut.exe-IHp2Hy b/lost+found/VisiCut.exe-IHp2Hy new file mode 100644 index 00000000..86046155 Binary files /dev/null and b/lost+found/VisiCut.exe-IHp2Hy differ diff --git a/lost+found/Visicut.jar-jv2Zsw b/lost+found/Visicut.jar-jv2Zsw new file mode 100644 index 00000000..6d1199ea Binary files /dev/null and b/lost+found/Visicut.jar-jv2Zsw differ diff --git a/lost+found/WTSPComplexityTests.java-OtjFh4 b/lost+found/WTSPComplexityTests.java-OtjFh4 new file mode 100644 index 00000000..47a8ffc0 --- /dev/null +++ b/lost+found/WTSPComplexityTests.java-OtjFh4 @@ -0,0 +1,64 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.*; +import templates.*; + +@RunWith(Parameterized.class) +public class WTSPComplexityTests { + private String from; + private static final int SIZE_OF_WORD = 6; //<=10 + private static final int TOTAL_OF_WORD = 8; //<=10 + private static final int TEST_SIZE = 10; + private static int[] seeds = {24, 123, 1234, 12345 }; + + public WTSPComplexityTests(String from) { + this.from = from; + } + + @Test(timeout=20) + @Grade(value=4) //4*10 = 40 + public void runAsExpected() { + Random r = new Random(seeds[2]); + long t0 = System.currentTimeMillis(); + String s = from; + String d = Helpers.shuffle(s, r.nextInt()); + WordTransformationSP.minimalCost(s, d); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=1000) + @Grade(value=1) //1*10 = 10 + public void runAsExtreme() { + Random r = new Random(seeds[1]); + + long t0 = System.currentTimeMillis(); + + String s = from+Helpers.generateWord(TOTAL_OF_WORD- SIZE_OF_WORD,seeds[3]); + String d = Helpers.shuffle(s,seeds[0]); + + WordTransformationSP.minimalCost(s, d); + + long t1 = System.currentTimeMillis(); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(seeds[0]); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/lost+found/WTSPComplexityTests.java-WWffOc b/lost+found/WTSPComplexityTests.java-WWffOc new file mode 100644 index 00000000..c151479a --- /dev/null +++ b/lost+found/WTSPComplexityTests.java-WWffOc @@ -0,0 +1,61 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.*; + +@RunWith(Parameterized.class) +public class WTSPComplexityTests { + private String from; + private static final int SIZE_OF_WORD = 6; //<=10 + private static final int TOTAL_OF_WORD = 8; //<=10 + private static final int TEST_SIZE = 10; + private static int[] seeds = {24, 123, 1234, 12345 }; + + public WTSPComplexityTests(String from) { + this.from = from; + } + + @Test(timeout=20) + @Grade(value=4) //4*10 = 40 + public void runAsExpected() { + Random r = new Random(seeds[2]); + long t0 = System.currentTimeMillis(); + String s = from; + String d = Helpers.shuffle(s, r.nextInt()); + WordTransformationSP.minimalCost(s, d); + long t1 = System.currentTimeMillis(); + //System.out.println("time constructor=:"+(t1-t0)); + } + + @Test(timeout=1000) + @Grade(value=1) //1*10 = 10 + public void runAsExtreme() { + Random r = new Random(seeds[1]); + + long t0 = System.currentTimeMillis(); + + String s = from+Helpers.generateWord(TOTAL_OF_WORD- SIZE_OF_WORD,seeds[3]); + String d = Helpers.shuffle(s,seeds[0]); + + WordTransformationSP.minimalCost(s, d); + + long t1 = System.currentTimeMillis(); + + //System.out.println("time constructor bis=:"+(t1-t0)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(seeds[0]); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/lost+found/WTSPCorrectnessTests.java-0UWI7x b/lost+found/WTSPCorrectnessTests.java-0UWI7x new file mode 100644 index 00000000..46859645 --- /dev/null +++ b/lost+found/WTSPCorrectnessTests.java-0UWI7x @@ -0,0 +1,47 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +import java.util.*; +import templates.*; + +@RunWith(Parameterized.class) +public class WTSPCorrectnessTests { + private String from; + private static final int SIZE_OF_WORD = 7; //<=10 + private static final int TEST_SIZE = 10; + + public WTSPCorrectnessTests(String from) { + this.from = from; + } + + @Test + @Grade(value = 2) + public void simpleTest() { + Random r = new Random(45); + int x = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2, y = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2; + int start = Math.min(x,y), end = Math.max(x,y); + + String s = from; + String d = WordTransformationSP.rotation(s,start,end); + assertEquals(end-start, WordTransformationSP.minimalCost(s, d)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(12345L); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/lost+found/WTSPCorrectnessTests.java-HwbnhM b/lost+found/WTSPCorrectnessTests.java-HwbnhM new file mode 100644 index 00000000..b09274c4 --- /dev/null +++ b/lost+found/WTSPCorrectnessTests.java-HwbnhM @@ -0,0 +1,44 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.*; + +import java.util.*; + +@RunWith(Parameterized.class) +public class WTSPCorrectnessTests { + private String from; + private static final int SIZE_OF_WORD = 7; //<=10 + private static final int TEST_SIZE = 10; + + public WTSPCorrectnessTests(String from) { + this.from = from; + } + + @Test + @Grade(value = 2) + public void simpleTest() { + Random r = new Random(45); + int x = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2, y = ((int) r.nextFloat()*(SIZE_OF_WORD-1)) + 2; + int start = Math.min(x,y), end = Math.max(x,y); + + String s = from; + String d = WordTransformationSP.rotation(s,start,end); + assertEquals(end-start, WordTransformationSP.minimalCost(s, d)); + } + + @Parameterized.Parameters + public static String[] data() { + Random r = new Random(12345L); + String[] tests = new String[TEST_SIZE]; + + for (int i = 0; i < TEST_SIZE; i++) { + tests[i] = Helpers.generateWord(SIZE_OF_WORD, r.nextInt() ); + } + return tests; + } + + +} diff --git a/lost+found/WTSPStaticTests.java-jNnuX2 b/lost+found/WTSPStaticTests.java-jNnuX2 new file mode 100644 index 00000000..85bbae1c --- /dev/null +++ b/lost+found/WTSPStaticTests.java-jNnuX2 @@ -0,0 +1,74 @@ +package src; + +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; +import templates.*; + +@RunWith(Parameterized.class) +public class WTSPStaticTests { + private Instance instance; + + public WTSPStaticTests(Instance instance) { + this.instance = instance; + } + + @Test + @Grade(value = 1) + public void staticTest() { + assertEquals(instance.cost, WordTransformationSP.minimalCost(instance.from, instance.to)); + } + + @Parameterized.Parameters + public static Instance[] data() { + return new Instance[]{ + new Instance("wdaowkl", "aowlwkd", 12), + new Instance("fxuldkv", "kfdxvul", 13), + new Instance("bzwxnxg", "wxbxgnz", 12), + new Instance("hkhddmc", "ckhddhm", 9), + new Instance("fcavjtb", "bftjcva", 12), + new Instance("qqbtghc", "tbqhqcg", 10), + new Instance("zexqiig", "xezgiqi", 8), + new Instance("ikstclp", "ktsilpc", 9), + new Instance("cuwpysz", "cpysuzw", 10), + new Instance("cvnooos", "oconosv", 10), + new Instance("zumnlit", "zutnlmi", 8), + new Instance("wefscav", "aecvsfw", 14), + new Instance("pvgzoxg", "zvgxpgo", 12), + new Instance("lgeiyzm", "gezymli", 11), + new Instance("ofimxuj", "xumifoj", 8), + new Instance("bvzjphs", "jhbzspv", 12), + new Instance("nnyiqgx", "xiyqngn", 13), + new Instance("lqllyat", "qlltayl", 6), + new Instance("uacfnsi", "aucinfs", 7), + new Instance("vfwtotc", "ofwttcv", 12), + new Instance("ftfxxha", "txfxhaf", 11), + new Instance("defrhmz", "zefdrhm", 12), + new Instance("mrxcrbk", "cbrkrxm", 13), + new Instance("dkwohei", "odkhewi", 10), + new Instance("ahraabk", "akbraah", 9), + new Instance("lgwhpak", "wkphgal", 13), + new Instance("wjeekzr", "rwejkez", 10), + new Instance("xotudui", "ouuxitd", 13), + new Instance("ucuadky", "cuydauk", 8), + new Instance("kcraftl", "tlafcrk", 13) + }; + } + + private static class Instance { + public String from; + public String to; + public int cost; + + public Instance(String from, String to, int cost) { + this.from = from; + this.to = to; + this.cost = cost; + } + + } + +} diff --git a/lost+found/WTSPStaticTests.java-sOF7r6 b/lost+found/WTSPStaticTests.java-sOF7r6 new file mode 100644 index 00000000..682d157e --- /dev/null +++ b/lost+found/WTSPStaticTests.java-sOF7r6 @@ -0,0 +1,71 @@ +import com.github.guillaumederval.javagrading.Grade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; + +@RunWith(Parameterized.class) +public class WTSPStaticTests { + private Instance instance; + + public WTSPStaticTests(Instance instance) { + this.instance = instance; + } + + @Test + @Grade(value = 1) + public void staticTest() { + assertEquals(instance.cost, WordTransformationSP.minimalCost(instance.from, instance.to)); + } + + @Parameterized.Parameters + public static Instance[] data() { + return new Instance[]{ + new Instance("wdaowkl", "aowlwkd", 12), + new Instance("fxuldkv", "kfdxvul", 13), + new Instance("bzwxnxg", "wxbxgnz", 12), + new Instance("hkhddmc", "ckhddhm", 9), + new Instance("fcavjtb", "bftjcva", 12), + new Instance("qqbtghc", "tbqhqcg", 10), + new Instance("zexqiig", "xezgiqi", 8), + new Instance("ikstclp", "ktsilpc", 9), + new Instance("cuwpysz", "cpysuzw", 10), + new Instance("cvnooos", "oconosv", 10), + new Instance("zumnlit", "zutnlmi", 8), + new Instance("wefscav", "aecvsfw", 14), + new Instance("pvgzoxg", "zvgxpgo", 12), + new Instance("lgeiyzm", "gezymli", 11), + new Instance("ofimxuj", "xumifoj", 8), + new Instance("bvzjphs", "jhbzspv", 12), + new Instance("nnyiqgx", "xiyqngn", 13), + new Instance("lqllyat", "qlltayl", 6), + new Instance("uacfnsi", "aucinfs", 7), + new Instance("vfwtotc", "ofwttcv", 12), + new Instance("ftfxxha", "txfxhaf", 11), + new Instance("defrhmz", "zefdrhm", 12), + new Instance("mrxcrbk", "cbrkrxm", 13), + new Instance("dkwohei", "odkhewi", 10), + new Instance("ahraabk", "akbraah", 9), + new Instance("lgwhpak", "wkphgal", 13), + new Instance("wjeekzr", "rwejkez", 10), + new Instance("xotudui", "ouuxitd", 13), + new Instance("ucuadky", "cuydauk", 8), + new Instance("kcraftl", "tlafcrk", 13) + }; + } + + private static class Instance { + public String from; + public String to; + public int cost; + + public Instance(String from, String to, int cost) { + this.from = from; + this.to = to; + this.cost = cost; + } + + } + +} diff --git a/lost+found/Word.java-oH3vN3 b/lost+found/Word.java-oH3vN3 new file mode 100644 index 00000000..378c5a48 --- /dev/null +++ b/lost+found/Word.java-oH3vN3 @@ -0,0 +1,87 @@ +public class Word implements WordInterface { + private String word; + private double spamProba; // probability that this words appears in spam messages + private double hamProba; // probability that this words appears in ham messages + private int occurences; // total number of occurences of that word + + public static double totalNumberOfSpams; // for the proba that any mail is a spam + public static double totalNumberOfHams; // for the proba that any mail is a ham + public final static int TOTAL_NUMBER_OF_SMS = 5574; + + public Word(String word) { + this.word = word; + spamProba = 0; + hamProba = 0; + occurences = 0; + totalNumberOfSpams = 0; + totalNumberOfHams = 0; + } + + public String getWord() { + return word; + } + + public void setWord(String word) { + this.word = word; + } + + public double getSpamProba() { + return spamProba; + } + + public void incSpamProba(double qty) { + this.spamProba += qty; + } + + public double getHamProba() { + return hamProba; + } + + public void incHamProba(double qty) { + this.hamProba += qty; + } + + public int getOccurences() { + return occurences; + } + + public void incOccurences() { + occurences++; + } + + public static double probaSpam() { + return totalNumberOfSpams/(totalNumberOfSpams+totalNumberOfHams); + } + + public static double probaHam() { + return totalNumberOfHams/(totalNumberOfSpams+totalNumberOfHams); + } + + public void normalize(int length) { + this.spamProba = (double) this.spamProba / (TOTAL_NUMBER_OF_SMS*length); + this.hamProba = (double) this.hamProba / (TOTAL_NUMBER_OF_SMS*length); + } + + public void add(Word w) { + this.spamProba += w.spamProba; + this.hamProba += w.hamProba; + this.occurences += w.occurences; + } + + public double bayesProba() { + return (double) spamProba/(spamProba + hamProba); + } + + public boolean myEquals(Word w) { + return this.getWord().equals(w.getWord()) && + this.getHamProba() == w.getHamProba() && + this.getSpamProba() == w.getSpamProba() && + this.getOccurences() == w.getOccurences(); + } + + public String toString() { + String s = this.word; + s += " [ham(" + hamProba + "), spam(" + spamProba + "), occurences(" + occurences + "), bayes(" + bayesProba() + ")]"; + return s; + } +} diff --git a/lost+found/Word2.java-BTbmOs b/lost+found/Word2.java-BTbmOs new file mode 100644 index 00000000..67ed4fb5 --- /dev/null +++ b/lost+found/Word2.java-BTbmOs @@ -0,0 +1,87 @@ +public class Word2 implements WordInterface { + private String word; + private double spamProba; // probability that this words appears in spam messages + private double hamProba; // probability that this words appears in ham messages + private int occurences; // total number of occurences of that word + + public static double totalNumberOfSpams; // for the proba that any mail is a spam + public static double totalNumberOfHams; // for the proba that any mail is a ham + public final static int TOTAL_NUMBER_OF_SMS = 5574; + + public Word2(String word) { + this.word = word; + spamProba = 0; + hamProba = 0; + occurences = 0; + totalNumberOfSpams = 0; + totalNumberOfHams = 0; + } + + public String getWord() { + return word; + } + + public void setWord(String word) { + this.word = word; + } + + public double getSpamProba() { + return spamProba; + } + + public void incSpamProba(double qty) { + this.spamProba += qty; + } + + public double getHamProba() { + return hamProba; + } + + public void incHamProba(double qty) { + this.hamProba += qty; + } + + public int getOccurences() { + return occurences; + } + + public void incOccurences() { + occurences++; + } + + public static double probaSpam() { + return totalNumberOfSpams/(totalNumberOfSpams+totalNumberOfHams); + } + + public static double probaHam() { + return totalNumberOfHams/(totalNumberOfSpams+totalNumberOfHams); + } + + public void normalize(int length) { + this.spamProba = (double) this.spamProba / (TOTAL_NUMBER_OF_SMS*length); + this.hamProba = (double) this.hamProba / (TOTAL_NUMBER_OF_SMS*length); + } + + public void add(Word2 w) { + this.spamProba += w.spamProba; + this.hamProba += w.hamProba; + this.occurences += w.occurences; + } + + public double bayesProba() { + return (double) spamProba/(spamProba + hamProba); + } + + public boolean myEquals(Word w) { + return this.getWord().equals(w.getWord()) && + this.getHamProba() == w.getHamProba() && + this.getSpamProba() == w.getSpamProba() && + this.getOccurences() == w.getOccurences(); + } + + public String toString() { + String s = this.word; + s += " [ham(" + hamProba + "), spam(" + spamProba + "), occurences(" + occurences + "), bayes(" + bayesProba() + ")]"; + return s; + } +} diff --git a/lost+found/WordInterface.java-QY7vio b/lost+found/WordInterface.java-QY7vio new file mode 100644 index 00000000..0baa0f6e --- /dev/null +++ b/lost+found/WordInterface.java-QY7vio @@ -0,0 +1,18 @@ +/* The constructor takes a String as argument, representing the corresponding English word */ +public interface WordInterface { + + /* Returns the English word represented by this object */ + public String getWord(); + + /* Returns the probability that a sms containing only this word once is a spam (see pdf of the mission for the formula) */ + public double getSpamProba(); + + /* Returns the probability that a sms containing only this word once is a ham (not a spam) */ + public double getHamProba(); + + /* Returns the number of occurences of this word in the concatenation of every sms in the input file */ + public int getOccurences(); + + /* Optional */ + public String toString(); +} diff --git a/lost+found/WordInterface.java-aJeE5Q b/lost+found/WordInterface.java-aJeE5Q new file mode 100644 index 00000000..0baa0f6e --- /dev/null +++ b/lost+found/WordInterface.java-aJeE5Q @@ -0,0 +1,18 @@ +/* The constructor takes a String as argument, representing the corresponding English word */ +public interface WordInterface { + + /* Returns the English word represented by this object */ + public String getWord(); + + /* Returns the probability that a sms containing only this word once is a spam (see pdf of the mission for the formula) */ + public double getSpamProba(); + + /* Returns the probability that a sms containing only this word once is a ham (not a spam) */ + public double getHamProba(); + + /* Returns the number of occurences of this word in the concatenation of every sms in the input file */ + public int getOccurences(); + + /* Optional */ + public String toString(); +} diff --git a/lost+found/WordTransformationSP.java-9v3I15 b/lost+found/WordTransformationSP.java-9v3I15 new file mode 100644 index 00000000..c1f35bfb --- /dev/null +++ b/lost+found/WordTransformationSP.java-9v3I15 @@ -0,0 +1,3 @@ +package templates; + +@@implem@@ diff --git a/lost+found/WordTransformationSP.java-nVlpy8 b/lost+found/WordTransformationSP.java-nVlpy8 new file mode 100644 index 00000000..8ad1dfb5 --- /dev/null +++ b/lost+found/WordTransformationSP.java-nVlpy8 @@ -0,0 +1 @@ +//TODO diff --git a/lost+found/__init__.py-kN8FfK b/lost+found/__init__.py-kN8FfK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/a07eb43b8d2d368fe471cef551fb8dccac7820-R3lpSc b/lost+found/a07eb43b8d2d368fe471cef551fb8dccac7820-R3lpSc new file mode 100644 index 00000000..ec41b97b Binary files /dev/null and b/lost+found/a07eb43b8d2d368fe471cef551fb8dccac7820-R3lpSc differ diff --git a/lost+found/a097bdc8ccc8c18f27f2645400cc174e90177d-N0rJPJ b/lost+found/a097bdc8ccc8c18f27f2645400cc174e90177d-N0rJPJ new file mode 100644 index 00000000..cfe26e24 --- /dev/null +++ b/lost+found/a097bdc8ccc8c18f27f2645400cc174e90177d-N0rJPJ @@ -0,0 +1 @@ +xmAS0¯x7aj{pj{_*!ɐS;wH2)}ۗ}z}%xZ0cz~>V jIZX%MY'X[.og*.- &_syX$=$}f7'41UJ bj{ȎlIrZt1w&CLJ^O;)am\M؆Ƃ?-~61jpsA#totj&ͤ": \ No newline at end of file diff --git a/lost+found/a0aa06b3bba69f299b141e2044dc1cfd7a9d0c-t1pxQS b/lost+found/a0aa06b3bba69f299b141e2044dc1cfd7a9d0c-t1pxQS new file mode 100644 index 00000000..182ed83a Binary files /dev/null and b/lost+found/a0aa06b3bba69f299b141e2044dc1cfd7a9d0c-t1pxQS differ diff --git a/lost+found/a0aa1a0d671927786a2e85f78c3c85bb032e07-uztSeM b/lost+found/a0aa1a0d671927786a2e85f78c3c85bb032e07-uztSeM new file mode 100644 index 00000000..6eef4b63 --- /dev/null +++ b/lost+found/a0aa1a0d671927786a2e85f78c3c85bb032e07-uztSeM @@ -0,0 +1 @@ +xAj0E)5#ɖ"!Ylz4j&=}M6=@7yt?F$)XC&IѐO{e$p!QQi !'Hfm\&M}>ɶ 695uc8CA4w+Z& L1%N5.F\Ƣc +9+I>~.//{-WYv:/HK70RZ#w>eN!Q:!_v[b \ No newline at end of file diff --git a/lost+found/a5.png-HCliae b/lost+found/a5.png-HCliae new file mode 100644 index 00000000..b4b646df Binary files /dev/null and b/lost+found/a5.png-HCliae differ diff --git a/lost+found/a5.png-SxPyLx b/lost+found/a5.png-SxPyLx new file mode 100644 index 00000000..b4b646df Binary files /dev/null and b/lost+found/a5.png-SxPyLx differ diff --git a/lost+found/a5c63180ca7d0a0cac1a1184ea8090e8ca4b11-UfRBmg b/lost+found/a5c63180ca7d0a0cac1a1184ea8090e8ca4b11-UfRBmg new file mode 100644 index 00000000..7a43a799 Binary files /dev/null and b/lost+found/a5c63180ca7d0a0cac1a1184ea8090e8ca4b11-UfRBmg differ diff --git a/lost+found/a62b2855d869849607fb1795bebad03464ea9b-qtzygF b/lost+found/a62b2855d869849607fb1795bebad03464ea9b-qtzygF new file mode 100644 index 00000000..8231ba72 Binary files /dev/null and b/lost+found/a62b2855d869849607fb1795bebad03464ea9b-qtzygF differ diff --git a/lost+found/a665a2c4af943395345723a378c135e87d58e0-rBIsGQ b/lost+found/a665a2c4af943395345723a378c135e87d58e0-rBIsGQ new file mode 100644 index 00000000..78f8b4de Binary files /dev/null and b/lost+found/a665a2c4af943395345723a378c135e87d58e0-rBIsGQ differ diff --git a/lost+found/a6c3855bce8f5bfa6f581498475c4d9a1d3768-b09Oy0 b/lost+found/a6c3855bce8f5bfa6f581498475c4d9a1d3768-b09Oy0 new file mode 100644 index 00000000..c31027d9 Binary files /dev/null and b/lost+found/a6c3855bce8f5bfa6f581498475c4d9a1d3768-b09Oy0 differ diff --git a/lost+found/a6fee97937a15e9e2efae7d7328e082e169de8-DPfiPE b/lost+found/a6fee97937a15e9e2efae7d7328e082e169de8-DPfiPE new file mode 100644 index 00000000..28a8c129 Binary files /dev/null and b/lost+found/a6fee97937a15e9e2efae7d7328e082e169de8-DPfiPE differ diff --git a/lost+found/a7acc10e0f141e6369b07e9b74604e19512198-vAgCPp b/lost+found/a7acc10e0f141e6369b07e9b74604e19512198-vAgCPp new file mode 100644 index 00000000..f8aa7fcb Binary files /dev/null and b/lost+found/a7acc10e0f141e6369b07e9b74604e19512198-vAgCPp differ diff --git a/lost+found/a947ab781a81fc0115ffe59cd860e95f9641b3-Xcrygl b/lost+found/a947ab781a81fc0115ffe59cd860e95f9641b3-Xcrygl new file mode 100644 index 00000000..b59aecfb Binary files /dev/null and b/lost+found/a947ab781a81fc0115ffe59cd860e95f9641b3-Xcrygl differ diff --git a/lost+found/a9ca05bcd94eb6efbfa07397e427730a1d9e9b-lCaqL1 b/lost+found/a9ca05bcd94eb6efbfa07397e427730a1d9e9b-lCaqL1 new file mode 100644 index 00000000..a9cdb331 --- /dev/null +++ b/lost+found/a9ca05bcd94eb6efbfa07397e427730a1d9e9b-lCaqL1 @@ -0,0 +1 @@ +x;j1:[`;_!h%ϲ>˯yћ$MC1[LF^ BWǂ"CMvhd=3'L$)[&OEUmU8R+p;|z|]y\֍|u ZԨ:J &UwO \ No newline at end of file diff --git a/lost+found/a9df703404a84a984fa98d88fc5ea0ca3e004f-cTypZF b/lost+found/a9df703404a84a984fa98d88fc5ea0ca3e004f-cTypZF new file mode 100644 index 00000000..d3702d1a Binary files /dev/null and b/lost+found/a9df703404a84a984fa98d88fc5ea0ca3e004f-cTypZF differ diff --git a/lost+found/aa476e9e845202eb3cdbfd11aa16a007c38111-PeHZH1 b/lost+found/aa476e9e845202eb3cdbfd11aa16a007c38111-PeHZH1 new file mode 100644 index 00000000..4fe8beab Binary files /dev/null and b/lost+found/aa476e9e845202eb3cdbfd11aa16a007c38111-PeHZH1 differ diff --git a/lost+found/aa56862097ff7e217909d819fb327bcdba56e2-Suytte b/lost+found/aa56862097ff7e217909d819fb327bcdba56e2-Suytte new file mode 100644 index 00000000..52b06a76 Binary files /dev/null and b/lost+found/aa56862097ff7e217909d819fb327bcdba56e2-Suytte differ diff --git a/lost+found/ab026ad281faa2a2911dbe0e7f1a00cc7565d2-pzskdw b/lost+found/ab026ad281faa2a2911dbe0e7f1a00cc7565d2-pzskdw new file mode 100644 index 00000000..cfa6b1c1 --- /dev/null +++ b/lost+found/ab026ad281faa2a2911dbe0e7f1a00cc7565d2-pzskdw @@ -0,0 +1 @@ +x=j0FSӇI֏!$U&wYZhbsmr4x;"pT۽ѹK?ǔkS]d[< \ No newline at end of file diff --git a/lost+found/ab1deed6492c65421289a5944e2110a2f12132-xIpKZS b/lost+found/ab1deed6492c65421289a5944e2110a2f12132-xIpKZS new file mode 100644 index 00000000..591a5642 Binary files /dev/null and b/lost+found/ab1deed6492c65421289a5944e2110a2f12132-xIpKZS differ diff --git a/lost+found/ab2c9a6aaece330bc58d7c91485b39c5ec8307-QX7Hdl b/lost+found/ab2c9a6aaece330bc58d7c91485b39c5ec8307-QX7Hdl new file mode 100644 index 00000000..00bde468 Binary files /dev/null and b/lost+found/ab2c9a6aaece330bc58d7c91485b39c5ec8307-QX7Hdl differ diff --git a/lost+found/ace86c8fb1eba43eec92c0c68e65190b01bef4-Tz0R4m b/lost+found/ace86c8fb1eba43eec92c0c68e65190b01bef4-Tz0R4m new file mode 100644 index 00000000..ac6c50ce Binary files /dev/null and b/lost+found/ace86c8fb1eba43eec92c0c68e65190b01bef4-Tz0R4m differ diff --git a/lost+found/ad5ba7ff07239480547dddc2bb5639b23e3632-p2ISfy b/lost+found/ad5ba7ff07239480547dddc2bb5639b23e3632-p2ISfy new file mode 100644 index 00000000..8f76b1f7 Binary files /dev/null and b/lost+found/ad5ba7ff07239480547dddc2bb5639b23e3632-p2ISfy differ diff --git a/lost+found/ada295d571dbc147e6e99ef9fe8047fd3c36a4-os93KA b/lost+found/ada295d571dbc147e6e99ef9fe8047fd3c36a4-os93KA new file mode 100644 index 00000000..0e0fb49d --- /dev/null +++ b/lost+found/ada295d571dbc147e6e99ef9fe8047fd3c36a4-os93KA @@ -0,0 +1 @@ +x1N1ajbzjYc !P`ώ'rE8=Q@cݶ:4xZ,Ub"s՛K,fkCJ&rF"gMI;>~צ/].{mѦڊN;S7|!3:D}Fesڠt$[ \ No newline at end of file diff --git a/lost+found/ae597c243699982480b8580bcec714a7a85fda-PJhMGw b/lost+found/ae597c243699982480b8580bcec714a7a85fda-PJhMGw new file mode 100644 index 00000000..62896f7c --- /dev/null +++ b/lost+found/ae597c243699982480b8580bcec714a7a85fda-PJhMGw @@ -0,0 +1,2 @@ +x=n1FS#VHQD*D;f,d9=+W<$R:XO1C01{G(:4dRD21ϣӶG:h61Nٹ`&Ɛ +kHTwo|>7eXuif~&Ka*r;-Rk%Ҥ Bnw'@4[? \ No newline at end of file diff --git a/lost+found/af7a9471275376c7ae4a0ad1ed88b74ffe9927-FlSU2h b/lost+found/af7a9471275376c7ae4a0ad1ed88b74ffe9927-FlSU2h new file mode 100644 index 00000000..00a0e3ac Binary files /dev/null and b/lost+found/af7a9471275376c7ae4a0ad1ed88b74ffe9927-FlSU2h differ diff --git a/lost+found/af9b2b2b6b613099b67f2102240d9635181cde-Ird7PQ b/lost+found/af9b2b2b6b613099b67f2102240d9635181cde-Ird7PQ new file mode 100644 index 00000000..61395677 Binary files /dev/null and b/lost+found/af9b2b2b6b613099b67f2102240d9635181cde-Ird7PQ differ diff --git a/lost+found/appframework-1.0.3.jar-TeecYd b/lost+found/appframework-1.0.3.jar-TeecYd new file mode 100644 index 00000000..0b8ff014 Binary files /dev/null and b/lost+found/appframework-1.0.3.jar-TeecYd differ diff --git a/lost+found/b0152460038f0093a64181b57af97c480ff45c-gT5iQg b/lost+found/b0152460038f0093a64181b57af97c480ff45c-gT5iQg new file mode 100644 index 00000000..0821e18a --- /dev/null +++ b/lost+found/b0152460038f0093a64181b57af97c480ff45c-gT5iQg @@ -0,0 +1,2 @@ +x=j1FSӇ,Ҭ~! +n|x #k 1n|HֵFgˬ#EYǹKѦ`gOsL9FsKrrt6Naٷ*>|toߵ6Vd}}Z_|k6Vd2O1i68pH?P"hTַ{sV)M._xZE \ No newline at end of file diff --git a/lost+found/b33072a7e2114f17c21eace90c2842c3d21eb1-DMbhu6 b/lost+found/b33072a7e2114f17c21eace90c2842c3d21eb1-DMbhu6 new file mode 100644 index 00000000..0e665ab3 Binary files /dev/null and b/lost+found/b33072a7e2114f17c21eace90c2842c3d21eb1-DMbhu6 differ diff --git a/lost+found/b3745fcecd79c60b27c0deef3124ee826368eb-X889yJ b/lost+found/b3745fcecd79c60b27c0deef3124ee826368eb-X889yJ new file mode 100644 index 00000000..bb93f4ad Binary files /dev/null and b/lost+found/b3745fcecd79c60b27c0deef3124ee826368eb-X889yJ differ diff --git a/lost+found/b383adf8601e4bd296d4181f7f30a8780fc01a-esPt27 b/lost+found/b383adf8601e4bd296d4181f7f30a8780fc01a-esPt27 new file mode 100644 index 00000000..badd9f2a Binary files /dev/null and b/lost+found/b383adf8601e4bd296d4181f7f30a8780fc01a-esPt27 differ diff --git a/lost+found/b3abb1cbe7dfdd6f61c3be1dfed636742ad5c2-GXzeSj b/lost+found/b3abb1cbe7dfdd6f61c3be1dfed636742ad5c2-GXzeSj new file mode 100644 index 00000000..f07d0449 --- /dev/null +++ b/lost+found/b3abb1cbe7dfdd6f61c3be1dfed636742ad5c2-GXzeSj @@ -0,0 +1,2 @@ +xA D]s76JKMѕq~ E=7̌iٮJ&D$,m⠪ cتZ`'HkO72< 6쐮kBz(y8bL"ax_Fs͍k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lost+found/bridj-0.6.2.jar-pp5um9 b/lost+found/bridj-0.6.2.jar-pp5um9 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/bst.png-3nvw3J b/lost+found/bst.png-3nvw3J new file mode 100644 index 00000000..9300f61e Binary files /dev/null and b/lost+found/bst.png-3nvw3J differ diff --git a/lost+found/bst.png-6hr8Gb b/lost+found/bst.png-6hr8Gb new file mode 100644 index 00000000..9300f61e Binary files /dev/null and b/lost+found/bst.png-6hr8Gb differ diff --git a/lost+found/bt.png-QGdNso b/lost+found/bt.png-QGdNso new file mode 100644 index 00000000..18ced4c7 Binary files /dev/null and b/lost+found/bt.png-QGdNso differ diff --git a/lost+found/build-LQMjkH b/lost+found/build-LQMjkH new file mode 100644 index 00000000..695eec06 --- /dev/null +++ b/lost+found/build-LQMjkH @@ -0,0 +1,33 @@ +#! /bin/bash + +# This script copies all the necessary components in the right folder + +implementations=( + "m1stack" + "m1interpreter" + "preexam_bfs" + "preexam_dfs" + "preexam_merge_sort" +) + +for folder in "${implementations[@]}" +do + cp common/execute ${folder} + cp common/RunTests.java ${folder}/student/ +done + +cp common/execute_implementation m3orderedmap + +tests=( + "m1stacktests" + "m1interpretertests" + "m3tests" + "m4_plagiarism_tests" + "m5_compressor_tests" + "m6_kruskal_tests" +) + +for folder in "${tests[@]}" +do + cp common/execute_test ${folder} +done diff --git a/lost+found/c03d0801021cdb311acb4820e9a62b8d4ca05a-EyC9Ys b/lost+found/c03d0801021cdb311acb4820e9a62b8d4ca05a-EyC9Ys new file mode 100644 index 00000000..af17faea Binary files /dev/null and b/lost+found/c03d0801021cdb311acb4820e9a62b8d4ca05a-EyC9Ys differ diff --git a/lost+found/c0ac7ef0022f8be7f1f58c912dae3216cbd46b-5Qv0zN b/lost+found/c0ac7ef0022f8be7f1f58c912dae3216cbd46b-5Qv0zN new file mode 100644 index 00000000..8b7e3f06 Binary files /dev/null and b/lost+found/c0ac7ef0022f8be7f1f58c912dae3216cbd46b-5Qv0zN differ diff --git a/lost+found/c12978cfab823147da532fc123192f8316e9d6-Lx2BEY b/lost+found/c12978cfab823147da532fc123192f8316e9d6-Lx2BEY new file mode 100644 index 00000000..6e00bef3 --- /dev/null +++ b/lost+found/c12978cfab823147da532fc123192f8316e9d6-Lx2BEY @@ -0,0 +1,3 @@ +x1n ESs +()*&w,V,.6Mm[4:Έm%Qs +aYňnؐ;chx2Ђ&'&4>D'n.̆A@>έ穖km/{MJvLHS7 | ; (oJj9bZzVcޖW[ \ No newline at end of file diff --git a/lost+found/c5767aba67ad2a9291494233513a12d9c4b8ba-ow58at b/lost+found/c5767aba67ad2a9291494233513a12d9c4b8ba-ow58at new file mode 100644 index 00000000..15c1c706 Binary files /dev/null and b/lost+found/c5767aba67ad2a9291494233513a12d9c4b8ba-ow58at differ diff --git a/lost+found/c6600f7d1c4bb196e2a583fa185240f26329d6-NeAGKd b/lost+found/c6600f7d1c4bb196e2a583fa185240f26329d6-NeAGKd new file mode 100644 index 00000000..d95501ce Binary files /dev/null and b/lost+found/c6600f7d1c4bb196e2a583fa185240f26329d6-NeAGKd differ diff --git a/lost+found/c6902807dd6806ddcd5f6f9aa42a1256fb1487-XPtxrM b/lost+found/c6902807dd6806ddcd5f6f9aa42a1256fb1487-XPtxrM new file mode 100644 index 00000000..a0c010a3 Binary files /dev/null and b/lost+found/c6902807dd6806ddcd5f6f9aa42a1256fb1487-XPtxrM differ diff --git a/lost+found/c74c2510fe14150f3db20966d54b1defcf0d0d-GcfbPk b/lost+found/c74c2510fe14150f3db20966d54b1defcf0d0d-GcfbPk new file mode 100644 index 00000000..dc5bce24 Binary files /dev/null and b/lost+found/c74c2510fe14150f3db20966d54b1defcf0d0d-GcfbPk differ diff --git a/lost+found/c7af6d87edc51647909776722fb0367ff5d56a-VvEVcF b/lost+found/c7af6d87edc51647909776722fb0367ff5d56a-VvEVcF new file mode 100644 index 00000000..3fd3f221 Binary files /dev/null and b/lost+found/c7af6d87edc51647909776722fb0367ff5d56a-VvEVcF differ diff --git a/lost+found/c80e6afac369cb33190ff8248e745970deac5f-3lVNkT b/lost+found/c80e6afac369cb33190ff8248e745970deac5f-3lVNkT new file mode 100644 index 00000000..8b1e8230 Binary files /dev/null and b/lost+found/c80e6afac369cb33190ff8248e745970deac5f-3lVNkT differ diff --git a/lost+found/c8758b22e313f33dc4d70048a849150e642846-EES4nf b/lost+found/c8758b22e313f33dc4d70048a849150e642846-EES4nf new file mode 100644 index 00000000..9bf4e2bc Binary files /dev/null and b/lost+found/c8758b22e313f33dc4d70048a849150e642846-EES4nf differ diff --git a/lost+found/c8a9f7af0e2fe66de57c3c63582cfe4c4f5f78-YebXyg b/lost+found/c8a9f7af0e2fe66de57c3c63582cfe4c4f5f78-YebXyg new file mode 100644 index 00000000..72f98049 Binary files /dev/null and b/lost+found/c8a9f7af0e2fe66de57c3c63582cfe4c4f5f78-YebXyg differ diff --git a/lost+found/c8b62d5bb39fa07634a5debd10954682ca669e-ErjJh3 b/lost+found/c8b62d5bb39fa07634a5debd10954682ca669e-ErjJh3 new file mode 100644 index 00000000..70ae36c6 --- /dev/null +++ b/lost+found/c8b62d5bb39fa07634a5debd10954682ca669e-ErjJh3 @@ -0,0 +1 @@ +x=j1FSӇ,]!A9 x|R_-Jp5:uiҠt:ZZ> \ No newline at end of file diff --git a/lost+found/c8d728fd6894c1db96cb335736bf47e6469e59-Y25gCx b/lost+found/c8d728fd6894c1db96cb335736bf47e6469e59-Y25gCx new file mode 100644 index 00000000..217214ed Binary files /dev/null and b/lost+found/c8d728fd6894c1db96cb335736bf47e6469e59-Y25gCx differ diff --git a/lost+found/c8f5983feeb316e8ef9a49b60c3247ecf9a02d-Np73XK b/lost+found/c8f5983feeb316e8ef9a49b60c3247ecf9a02d-Np73XK new file mode 100644 index 00000000..5642dfa4 --- /dev/null +++ b/lost+found/c8f5983feeb316e8ef9a49b60c3247ecf9a02d-Np73XK @@ -0,0 +1,2 @@ +x;jC1ESkMD?0!a4? +gy\8umS^UR:6R  s (n0jlUPR>& }wDU ۼso먷dKˆp]j|r6-(%;EM^a6G~]S] \ No newline at end of file diff --git a/lost+found/c930d5a0bb126efc7761c285913db9d9e07334-vAbVm9 b/lost+found/c930d5a0bb126efc7761c285913db9d9e07334-vAbVm9 new file mode 100644 index 00000000..1cd88621 Binary files /dev/null and b/lost+found/c930d5a0bb126efc7761c285913db9d9e07334-vAbVm9 differ diff --git a/lost+found/c94ca35cebe938c6323a30430437b964da4436-WxayRL b/lost+found/c94ca35cebe938c6323a30430437b964da4436-WxayRL new file mode 100644 index 00000000..da1f9ff5 --- /dev/null +++ b/lost+found/c94ca35cebe938c6323a30430437b964da4436-WxayRL @@ -0,0 +1,2 @@ +x=n1FSӣEP!a<%փӃhr4O^,K`Bekإ cs5rd%W0;} +dݦqQ_ 0; }9uplU|5|wַj+2t0{bӰFkE>RuȂ]Z}4(]N\\O \ No newline at end of file diff --git a/lost+found/c9b2ac95eba14d2132b1fe576d68f48a317db2-4rquzX b/lost+found/c9b2ac95eba14d2132b1fe576d68f48a317db2-4rquzX new file mode 100644 index 00000000..d09a2cff --- /dev/null +++ b/lost+found/c9b2ac95eba14d2132b1fe576d68f48a317db2-4rquzX @@ -0,0 +1,2 @@ +xTN0~]fO.Ji0;R]{46_l9sxd*.yăn>XO0.Y%Sze_\] hlV!C|A{v %7J?B~"-,xU+e ~\^%TqѱK{c{6H:"ΖCpsA]Jgǜ9t@?@P}xx< +}ea묎n["0KA0 YrwR{w&bKz'5^ɣPW =H9Է߮~s==r!9":fGs;Onl|V~&sʷp'5npN& \ No newline at end of file diff --git a/lost+found/ca956261afd74913d8d8826eaa589e7d8f3cf0-MMhGxd b/lost+found/ca956261afd74913d8d8826eaa589e7d8f3cf0-MMhGxd new file mode 100644 index 00000000..1af1e1e7 Binary files /dev/null and b/lost+found/ca956261afd74913d8d8826eaa589e7d8f3cf0-MMhGxd differ diff --git a/lost+found/cb41121830f6de4cb246f47579c0b2af2e19b8-3vdDF6 b/lost+found/cb41121830f6de4cb246f47579c0b2af2e19b8-3vdDF6 new file mode 100644 index 00000000..dad51204 Binary files /dev/null and b/lost+found/cb41121830f6de4cb246f47579c0b2af2e19b8-3vdDF6 differ diff --git a/lost+found/cbbfcf59333f44a2a0fd6740568baab5452333-9pbmqN b/lost+found/cbbfcf59333f44a2a0fd6740568baab5452333-9pbmqN new file mode 100644 index 00000000..33bad7cf Binary files /dev/null and b/lost+found/cbbfcf59333f44a2a0fd6740568baab5452333-9pbmqN differ diff --git a/lost+found/cbf10b8a58a7be58374a08f064980a48bb6d11-y18u95 b/lost+found/cbf10b8a58a7be58374a08f064980a48bb6d11-y18u95 new file mode 100644 index 00000000..ec56a5d4 Binary files /dev/null and b/lost+found/cbf10b8a58a7be58374a08f064980a48bb6d11-y18u95 differ diff --git a/lost+found/cbf1c71e367efd4e99ecf3c3eb090aeb7f2a8c-fhP2yN b/lost+found/cbf1c71e367efd4e99ecf3c3eb090aeb7f2a8c-fhP2yN new file mode 100644 index 00000000..dfb9622a Binary files /dev/null and b/lost+found/cbf1c71e367efd4e99ecf3c3eb090aeb7f2a8c-fhP2yN differ diff --git a/lost+found/cddba8b9d576cc5fa7a1bfdce691b6dd4ad003-tam4pP b/lost+found/cddba8b9d576cc5fa7a1bfdce691b6dd4ad003-tam4pP new file mode 100644 index 00000000..20456ab4 Binary files /dev/null and b/lost+found/cddba8b9d576cc5fa7a1bfdce691b6dd4ad003-tam4pP differ diff --git a/lost+found/cdf15eff7016ffccd530b705adffb55d71be24-t3JlO4 b/lost+found/cdf15eff7016ffccd530b705adffb55d71be24-t3JlO4 new file mode 100644 index 00000000..b1df3c41 Binary files /dev/null and b/lost+found/cdf15eff7016ffccd530b705adffb55d71be24-t3JlO4 differ diff --git a/lost+found/cea4568f25d80d91740fa5e3358e1233332341-k6eAN6 b/lost+found/cea4568f25d80d91740fa5e3358e1233332341-k6eAN6 new file mode 100644 index 00000000..de6cb2f8 Binary files /dev/null and b/lost+found/cea4568f25d80d91740fa5e3358e1233332341-k6eAN6 differ diff --git a/lost+found/cf64dfacf4030742fe01e7045c9ff80b68aebc-v98PC9 b/lost+found/cf64dfacf4030742fe01e7045c9ff80b68aebc-v98PC9 new file mode 100644 index 00000000..2b0ba5f5 --- /dev/null +++ b/lost+found/cf64dfacf4030742fe01e7045c9ff80b68aebc-v98PC9 @@ -0,0 +1 @@ +x1n0 :)٦E3Yr(򐜾AO[o1ZB\bbx١S䔔|z-I0itb Qe$.q Lt,F~ }ug-^η\~ :lzD&~vˌ'*=+\oEO|Z 2[5 \ No newline at end of file diff --git a/lost+found/circle-20mm-red.svg-Lw3wyY b/lost+found/circle-20mm-red.svg-Lw3wyY new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cities.txt-Nz4Bq8 b/lost+found/cities.txt-Nz4Bq8 new file mode 100644 index 00000000..36341b9e --- /dev/null +++ b/lost+found/cities.txt-Nz4Bq8 @@ -0,0 +1,1250 @@ +0 305 8 +1 498 743 +2 366 576 +3 433 169 +4 398 449 +5 400 221 +6 491 222 +7 432 321 +8 357 505 +9 421 770 +10 297 744 +11 478 577 +12 348 106 +13 401 799 +14 481 504 +15 425 192 +16 447 681 +17 404 469 +18 382 149 +19 490 273 +20 218 142 +21 468 665 +22 273 515 +23 494 909 +24 388 210 +25 429 292 +26 337 322 +27 255 996 +28 457 157 +29 267 931 +30 491 753 +31 376 942 +32 437 158 +33 477 704 +34 436 458 +35 354 705 +36 469 735 +37 468 472 +38 434 842 +39 243 332 +40 461 709 +41 406 862 +42 298 926 +43 419 107 +44 473 857 +45 491 845 +46 458 873 +47 377 165 +48 346 982 +49 435 416 +50 382 480 +51 316 355 +52 477 488 +53 306 980 +54 474 863 +55 248 792 +56 241 43 +57 482 373 +58 189 961 +59 481 845 +60 442 551 +61 396 404 +62 443 782 +63 477 814 +64 386 209 +65 483 739 +66 495 925 +67 374 799 +68 327 622 +69 173 984 +70 262 483 +71 448 753 +72 426 182 +73 389 661 +74 360 928 +75 460 496 +76 201 694 +77 495 189 +78 429 850 +79 487 182 +80 381 369 +81 403 66 +82 199 193 +83 448 860 +84 299 242 +85 370 732 +86 411 668 +87 499 10 +88 499 15 +89 429 419 +90 379 972 +91 187 361 +92 476 666 +93 446 998 +94 486 48 +95 412 571 +96 380 372 +97 274 32 +98 121 226 +99 474 54 +100 262 893 +101 378 72 +102 430 699 +103 441 141 +104 411 226 +105 467 541 +106 228 153 +107 354 941 +108 480 563 +109 437 332 +110 178 9 +111 408 496 +112 375 545 +113 421 553 +114 345 709 +115 267 739 +116 364 740 +116 226 490 +117 363 653 +117 497 213 +118 201 850 +118 459 203 +119 489 499 +119 359 565 +120 495 568 +120 485 724 +121 391 433 +122 407 421 +122 486 232 +123 169 323 +123 334 319 +124 353 25 +124 362 593 +125 396 997 +125 365 131 +126 434 871 +126 182 571 +127 440 199 +127 245 199 +128 372 662 +128 320 766 +129 329 991 +129 499 446 +130 486 293 +130 335 612 +131 229 440 +131 464 999 +132 352 772 +132 447 286 +133 465 94 +133 494 479 +134 417 187 +134 330 56 +135 277 324 +135 445 500 +136 452 124 +136 458 512 +137 462 780 +137 456 826 +138 452 377 +138 350 684 +139 404 59 +139 493 441 +140 145 233 +140 283 139 +141 326 290 +141 425 55 +142 495 912 +142 411 878 +143 431 846 +143 481 149 +144 485 435 +144 445 733 +145 296 986 +146 474 243 +146 382 127 +147 480 577 +147 493 243 +148 258 251 +148 494 164 +149 254 485 +149 454 886 +150 272 285 +150 457 984 +151 355 827 +151 453 337 +152 398 451 +152 456 528 +153 225 748 +153 160 902 +154 193 890 +154 433 128 +155 474 626 +155 366 418 +156 395 496 +156 418 467 +157 416 514 +157 429 16 +158 304 536 +158 339 451 +159 269 659 +159 385 412 +160 326 294 +161 490 545 +161 488 500 +162 384 195 +162 372 168 +163 245 334 +163 476 875 +164 217 86 +164 414 588 +165 444 679 +165 466 913 +166 441 138 +166 369 86 +167 388 159 +167 497 589 +168 314 150 +168 428 706 +169 387 943 +170 420 292 +170 442 46 +171 324 314 +171 494 123 +172 448 939 +172 283 718 +173 289 726 +174 419 875 +174 213 40 +175 353 485 +175 492 692 +176 484 861 +176 405 73 +177 347 246 +177 424 779 +178 441 651 +179 474 396 +179 484 75 +180 446 106 +180 499 918 +181 496 411 +181 229 980 +182 459 332 +183 483 807 +183 292 624 +184 286 163 +184 496 536 +185 495 601 +185 489 684 +186 294 162 +186 223 50 +187 494 205 +188 463 154 +188 411 871 +188 467 61 +189 248 377 +189 471 218 +190 393 701 +190 238 201 +190 445 331 +191 309 233 +191 378 898 +191 290 577 +192 405 522 +192 440 127 +192 491 827 +193 349 668 +193 240 54 +194 455 430 +194 439 249 +194 363 742 +195 301 409 +195 417 625 +195 199 243 +196 476 327 +196 488 463 +196 285 981 +197 468 627 +197 379 553 +197 328 462 +198 392 705 +198 498 662 +198 412 919 +199 445 491 +200 317 519 +200 351 557 +200 252 99 +201 482 510 +202 426 789 +202 365 195 +202 291 592 +203 432 595 +203 453 240 +203 465 438 +204 438 182 +204 322 982 +204 404 769 +205 454 972 +205 446 952 +205 369 880 +206 322 895 +206 467 659 +206 364 967 +207 350 193 +207 481 70 +207 378 532 +208 463 805 +208 220 728 +208 313 320 +209 475 544 +209 489 308 +209 498 685 +210 486 975 +210 443 981 +210 415 794 +211 408 142 +211 368 388 +211 390 418 +212 271 121 +212 435 492 +212 414 484 +213 476 661 +213 489 759 +214 455 753 +214 338 364 +214 479 301 +215 288 32 +215 425 976 +215 399 375 +216 315 56 +216 408 962 +216 242 671 +217 474 672 +217 355 787 +218 477 537 +218 271 815 +219 412 17 +219 476 17 +219 493 308 +220 367 121 +220 304 955 +221 317 465 +221 373 75 +221 466 626 +222 420 667 +222 441 896 +222 472 281 +223 465 144 +223 270 172 +224 442 853 +224 476 752 +224 464 630 +225 496 690 +225 442 108 +226 283 629 +226 495 450 +227 470 160 +227 329 170 +227 446 916 +228 496 780 +228 443 130 +229 255 728 +230 434 724 +230 435 889 +230 342 743 +231 251 440 +231 259 459 +231 472 757 +232 235 574 +232 405 180 +232 461 158 +233 471 905 +233 468 3 +233 266 361 +234 479 453 +234 375 279 +234 456 71 +235 443 788 +235 460 356 +236 479 778 +236 459 752 +236 327 98 +237 412 749 +237 465 259 +237 404 170 +238 394 903 +238 432 885 +239 378 396 +239 417 619 +239 275 629 +240 430 221 +240 371 427 +241 387 805 +241 469 635 +242 446 729 +242 336 823 +243 347 411 +243 454 604 +244 275 622 +244 463 183 +244 492 829 +245 377 743 +246 362 980 +246 357 930 +246 427 549 +247 494 697 +247 391 436 +247 315 594 +248 408 504 +249 434 58 +249 313 289 +249 471 919 +250 389 484 +250 382 299 +250 482 685 +251 402 670 +251 377 148 +252 329 939 +252 316 947 +253 459 668 +253 421 941 +253 416 17 +254 346 374 +254 410 258 +255 470 427 +256 411 650 +256 409 640 +256 482 420 +257 450 727 +257 344 865 +257 466 161 +258 302 164 +258 372 505 +259 313 221 +259 450 772 +260 452 513 +260 429 638 +260 376 193 +261 381 863 +261 280 396 +261 264 368 +262 471 291 +263 433 748 +263 497 506 +263 358 673 +264 467 403 +264 428 621 +265 432 753 +265 364 168 +265 293 704 +266 497 759 +266 481 292 +267 269 376 +267 423 226 +268 452 908 +268 447 326 +268 399 345 +268 430 106 +269 478 410 +269 492 509 +270 454 627 +270 365 888 +270 426 65 +271 477 868 +271 438 646 +272 384 609 +272 479 29 +272 434 848 +273 327 606 +273 286 779 +273 477 717 +274 290 398 +274 437 849 +274 484 675 +275 357 574 +275 471 662 +276 472 991 +276 364 366 +276 353 269 +276 424 865 +277 433 219 +277 367 712 +277 284 873 +278 446 610 +278 422 656 +278 493 943 +278 431 638 +279 429 151 +279 470 191 +279 401 524 +279 451 340 +280 461 947 +280 352 268 +280 371 478 +281 454 520 +281 465 230 +281 444 810 +281 303 699 +282 402 419 +282 468 457 +282 490 235 +282 464 244 +283 386 799 +284 312 817 +284 307 760 +284 494 183 +285 393 732 +285 488 985 +285 455 368 +286 469 173 +286 492 145 +287 395 420 +287 297 633 +287 473 820 +287 480 337 +288 291 938 +288 323 509 +288 443 826 +289 438 443 +289 297 315 +289 409 231 +290 447 360 +290 482 554 +291 452 173 +291 447 81 +292 413 691 +292 482 487 +292 462 590 +293 470 293 +293 303 519 +293 377 506 +294 406 173 +294 425 244 +294 341 74 +295 315 255 +295 310 82 +295 492 32 +295 448 993 +296 403 940 +296 483 488 +296 341 824 +297 418 179 +298 474 200 +298 416 704 +298 448 252 +299 457 926 +299 365 886 +299 410 997 +300 437 749 +300 468 124 +300 356 173 +300 496 412 +301 441 617 +301 397 241 +301 478 402 +302 446 669 +302 305 25 +302 480 524 +303 306 28 +303 460 803 +304 355 863 +304 494 407 +304 350 24 +305 361 157 +305 325 612 +305 389 982 +306 455 476 +306 475 141 +306 422 348 +307 414 675 +307 492 476 +307 461 707 +307 463 767 +308 472 265 +308 384 454 +308 389 407 +308 466 361 +308 483 540 +309 487 923 +309 498 642 +309 476 459 +309 492 245 +310 318 157 +310 430 841 +310 342 31 +310 383 219 +311 383 293 +311 462 836 +311 446 545 +311 492 663 +311 378 860 +312 480 327 +312 420 522 +312 468 214 +312 393 207 +313 432 452 +313 457 236 +314 375 624 +314 494 851 +314 350 871 +314 463 420 +315 399 626 +315 444 653 +316 481 468 +316 372 250 +316 489 305 +317 436 106 +317 493 383 +317 376 892 +318 339 737 +318 456 816 +318 457 371 +318 448 743 +319 472 756 +319 414 837 +319 359 948 +319 369 219 +319 403 515 +320 411 444 +320 321 770 +320 339 750 +320 491 802 +321 392 653 +321 453 777 +321 401 777 +321 467 128 +322 466 664 +322 492 574 +322 455 411 +323 400 19 +323 451 894 +323 410 78 +323 476 411 +324 494 261 +324 477 475 +324 383 809 +324 458 677 +325 331 463 +325 437 642 +325 431 134 +325 361 404 +326 475 991 +326 488 984 +326 493 116 +327 437 566 +327 335 331 +328 435 7 +328 429 17 +328 484 929 +328 443 277 +329 468 66 +329 407 466 +330 432 282 +330 440 26 +330 392 564 +330 406 458 +331 492 945 +331 437 640 +331 443 306 +331 464 635 +332 480 655 +332 419 148 +332 408 225 +332 496 599 +332 362 6 +333 417 457 +333 495 971 +333 485 568 +333 458 472 +333 435 791 +334 462 420 +334 349 510 +334 339 321 +334 416 384 +335 465 286 +335 395 824 +335 427 184 +336 453 137 +336 488 162 +336 375 605 +336 430 731 +337 452 839 +337 473 469 +337 480 912 +337 424 401 +338 497 763 +338 458 511 +338 385 362 +338 422 961 +339 489 127 +340 420 827 +340 392 500 +340 400 356 +340 490 249 +340 401 923 +340 467 2 +341 483 619 +341 480 750 +341 495 701 +341 427 133 +342 409 205 +342 463 650 +342 352 256 +342 426 134 +343 419 949 +343 359 696 +343 436 217 +343 403 321 +343 412 638 +343 476 160 +344 356 475 +344 394 730 +344 461 247 +344 385 983 +344 473 593 +345 496 609 +345 489 777 +345 470 801 +345 365 683 +345 460 151 +346 366 220 +346 355 567 +346 499 230 +346 462 485 +347 452 756 +347 457 306 +347 409 731 +347 459 379 +348 422 254 +348 450 787 +348 441 936 +348 412 839 +348 442 669 +349 407 453 +349 495 487 +349 484 56 +349 447 757 +350 435 874 +350 477 398 +351 475 962 +351 498 847 +351 453 981 +351 386 866 +351 463 402 +352 438 261 +352 469 704 +352 495 468 +353 492 990 +353 462 489 +353 368 869 +354 451 794 +354 497 597 +354 419 930 +354 370 892 +355 484 913 +355 368 84 +356 443 766 +356 423 226 +356 444 636 +356 495 744 +357 484 502 +357 405 535 +357 361 22 +358 461 545 +358 432 424 +358 493 215 +358 467 33 +358 490 120 +359 466 434 +359 420 379 +359 451 869 +360 481 563 +360 478 776 +360 491 480 +360 382 709 +360 474 4 +361 485 230 +361 415 981 +361 491 97 +362 404 260 +362 472 725 +362 384 289 +363 394 563 +363 458 7 +363 466 485 +363 381 454 +364 498 794 +364 413 235 +365 489 115 +365 484 208 +366 483 305 +366 470 523 +366 474 187 +366 487 734 +367 419 408 +367 453 853 +367 474 289 +367 370 424 +367 486 935 +368 421 563 +368 450 204 +368 440 911 +368 486 683 +369 394 124 +369 450 183 +369 479 993 +369 476 628 +370 457 19 +370 460 693 +370 387 54 +370 497 266 +371 391 133 +371 417 694 +371 455 190 +371 445 949 +371 393 117 +372 464 364 +372 456 134 +372 484 994 +373 452 618 +373 483 324 +373 486 803 +373 393 889 +373 467 644 +373 468 159 +374 440 120 +374 471 861 +374 480 497 +374 441 295 +374 475 725 +374 380 893 +375 495 326 +375 433 925 +375 446 18 +376 469 302 +376 498 834 +376 478 454 +376 449 407 +377 413 924 +377 497 607 +377 477 68 +378 456 696 +378 495 780 +379 486 993 +379 491 251 +379 439 794 +379 428 609 +379 395 952 +380 422 40 +380 459 570 +380 472 575 +380 420 492 +380 476 20 +381 400 170 +381 418 683 +381 471 723 +381 431 726 +382 493 882 +382 394 349 +383 444 391 +383 423 596 +383 493 932 +383 499 283 +384 449 598 +384 490 445 +384 450 77 +385 473 289 +385 480 857 +385 469 19 +385 494 691 +386 479 106 +386 444 529 +386 495 345 +386 480 1 +387 465 622 +387 470 953 +387 438 714 +387 429 261 +388 423 102 +388 462 173 +388 431 419 +388 389 23 +388 436 816 +388 475 566 +389 492 80 +389 441 14 +389 465 158 +390 489 848 +390 467 233 +390 476 894 +390 418 104 +390 433 837 +390 466 834 +390 474 836 +391 497 171 +391 402 77 +391 464 735 +391 468 156 +391 395 810 +392 485 413 +392 428 842 +392 422 376 +392 436 41 +393 449 915 +393 435 178 +393 471 168 +394 468 543 +394 414 335 +394 424 403 +395 425 605 +395 461 336 +395 452 378 +396 447 286 +396 486 362 +396 408 550 +396 439 400 +396 412 105 +396 470 726 +397 426 851 +397 470 464 +397 493 286 +397 499 181 +397 475 361 +397 460 387 +397 457 463 +398 404 350 +398 493 808 +398 479 454 +398 431 291 +398 489 260 +398 471 425 +399 496 631 +399 449 509 +399 460 473 +399 448 210 +399 427 387 +400 484 866 +400 449 789 +400 422 575 +400 423 49 +401 481 376 +401 402 180 +401 455 737 +401 493 894 +402 443 285 +402 405 685 +402 452 51 +402 477 850 +403 415 724 +403 428 206 +403 489 620 +403 491 853 +404 466 120 +404 497 155 +405 481 268 +405 447 876 +405 489 530 +406 449 457 +406 456 116 +406 438 623 +406 423 299 +406 473 450 +407 479 690 +407 413 704 +407 462 379 +407 493 332 +407 457 587 +408 491 20 +408 498 731 +409 448 145 +409 480 965 +409 485 393 +409 447 876 +410 485 221 +410 482 677 +410 445 531 +410 440 907 +410 479 70 +411 482 966 +411 473 41 +411 478 237 +412 438 884 +412 469 760 +413 496 706 +413 495 612 +413 436 96 +413 420 476 +413 425 108 +414 478 414 +414 491 482 +414 421 662 +414 488 106 +415 453 78 +415 418 341 +415 480 53 +415 492 810 +415 478 335 +415 448 943 +416 487 621 +416 442 661 +416 473 394 +416 463 2 +416 462 46 +417 484 755 +417 460 988 +417 498 965 +417 437 620 +418 497 809 +418 482 999 +418 486 945 +418 483 807 +419 463 379 +419 439 88 +419 470 425 +420 482 486 +420 489 308 +420 492 438 +421 488 387 +421 494 904 +421 471 702 +421 455 17 +421 463 172 +422 473 621 +422 486 214 +422 463 290 +423 479 483 +423 485 554 +423 499 336 +423 492 601 +424 461 179 +424 451 840 +424 445 90 +424 458 433 +424 450 414 +424 487 522 +425 428 729 +425 452 996 +425 459 829 +425 493 527 +426 459 161 +426 439 303 +426 469 601 +426 452 480 +426 470 96 +427 445 660 +427 488 636 +427 483 277 +427 471 801 +427 451 872 +427 491 8 +428 480 182 +428 496 600 +428 445 920 +428 467 103 +429 490 229 +429 445 415 +429 483 415 +430 439 118 +430 486 828 +430 440 873 +430 490 155 +430 499 479 +430 451 562 +431 472 524 +431 497 957 +431 476 28 +431 466 685 +431 496 141 +432 472 953 +432 490 155 +432 442 979 +432 465 607 +433 436 500 +433 446 319 +433 453 380 +433 494 833 +433 479 918 +434 466 51 +434 498 583 +434 478 61 +434 459 739 +434 464 779 +434 497 264 +435 449 739 +435 473 989 +435 481 895 +435 455 219 +436 467 436 +436 476 1000 +436 449 815 +436 464 902 +437 498 505 +437 474 214 +437 475 475 +438 465 223 +438 444 981 +438 447 549 +438 485 392 +439 473 60 +439 487 485 +439 488 952 +439 449 29 +439 478 552 +440 499 404 +440 494 281 +440 465 641 +440 466 529 +441 460 753 +441 471 373 +441 445 719 +441 483 398 +442 493 665 +442 490 999 +442 486 861 +442 465 721 +442 487 373 +443 487 943 +443 489 749 +443 469 748 +444 497 582 +444 462 178 +444 450 490 +444 469 297 +444 472 881 +445 499 306 +446 499 57 +446 468 817 +447 482 981 +447 464 128 +448 490 771 +448 480 969 +448 491 267 +449 499 615 +449 464 659 +449 477 927 +450 472 160 +450 487 939 +450 478 257 +450 497 262 +451 456 694 +451 461 882 +451 483 677 +451 484 191 +451 495 456 +451 496 483 +452 488 5 +453 469 210 +453 493 566 +453 494 374 +453 474 794 +453 454 318 +454 498 782 +454 457 954 +454 483 293 +454 485 933 +454 484 569 +454 487 422 +454 481 381 +455 498 950 +455 487 97 +455 491 184 +455 484 960 +456 471 525 +456 469 763 +456 473 275 +456 490 819 +456 479 235 +457 480 931 +457 475 979 +457 461 28 +458 491 969 +458 496 859 +458 481 778 +458 477 618 +458 475 706 +458 498 207 +459 488 277 +459 487 63 +459 477 617 +459 470 339 +460 498 729 +460 471 758 +460 495 171 +460 464 852 +461 485 761 +461 486 887 +461 481 333 +462 498 200 +462 473 751 +462 483 319 +463 487 5 +463 485 860 +463 478 926 +464 488 611 +464 490 553 +464 472 683 +465 498 376 +465 496 864 +466 481 143 +466 475 784 +467 499 244 +467 471 637 +467 496 389 +468 477 530 +468 473 833 +469 498 247 +469 470 121 +470 482 883 +472 488 243 +472 497 244 +472 473 376 +474 487 977 +474 494 747 +475 476 451 +475 499 692 +475 496 487 +475 491 787 +477 497 600 +478 495 621 +478 487 893 +478 485 499 +478 496 851 +479 488 923 +479 498 500 +479 499 810 +479 495 552 +481 499 930 +481 489 247 +482 493 573 +482 490 812 +482 488 180 +482 492 335 +483 488 63 +483 491 367 +484 489 948 +484 490 334 +485 489 558 +485 486 831 +485 493 75 +485 498 997 +486 490 188 +486 497 634 +487 499 465 +487 488 2 +490 492 852 +492 494 561 +494 496 280 +494 497 469 +496 499 570 +497 499 951 diff --git a/lost+found/cities_custom.txt-4AqcdK b/lost+found/cities_custom.txt-4AqcdK new file mode 100644 index 00000000..e459b8f4 --- /dev/null +++ b/lost+found/cities_custom.txt-4AqcdK @@ -0,0 +1,3 @@ +0 1 3 +1 2 2 +2 0 1 diff --git a/lost+found/cities_custom_2.txt-vMxa1l b/lost+found/cities_custom_2.txt-vMxa1l new file mode 100644 index 00000000..15b009e7 --- /dev/null +++ b/lost+found/cities_custom_2.txt-vMxa1l @@ -0,0 +1,5 @@ +1 42 50 +1 2 6 +3 2 5 +3 42 1 +3 1 5 diff --git a/lost+found/cities_custom_3.txt-E6eZRX b/lost+found/cities_custom_3.txt-E6eZRX new file mode 100644 index 00000000..e57d46c8 --- /dev/null +++ b/lost+found/cities_custom_3.txt-E6eZRX @@ -0,0 +1,8 @@ +1 42 50 +1 2 6 +3 2 5 +3 42 1 +3 1 5 +42 20 1 +20 2 4 +20 3 1 diff --git a/lost+found/cities_small.txt-qnLkKz b/lost+found/cities_small.txt-qnLkKz new file mode 100644 index 00000000..b6c27103 --- /dev/null +++ b/lost+found/cities_small.txt-qnLkKz @@ -0,0 +1,75 @@ +0 33 892 +1 27 762 +2 48 904 +3 37 586 +4 35 15 +5 44 172 +6 35 174 +7 46 65 +8 45 809 +9 45 215 +10 49 880 +11 43 633 +12 21 303 +13 32 804 +14 34 149 +15 18 174 +16 41 772 +17 48 166 +17 37 856 +18 25 442 +19 26 324 +19 39 537 +20 39 367 +20 35 609 +21 38 734 +22 40 829 +22 44 73 +23 39 941 +23 41 232 +24 45 414 +24 49 385 +25 42 932 +26 48 71 +27 41 997 +28 47 404 +28 38 462 +29 37 973 +29 40 824 +29 47 705 +30 46 281 +30 38 501 +30 49 868 +31 45 191 +31 44 38 +31 42 163 +32 38 805 +32 45 694 +33 42 858 +33 48 612 +34 46 487 +34 49 284 +35 36 357 +36 47 623 +36 40 626 +36 49 117 +37 47 667 +37 49 76 +38 46 745 +39 43 75 +39 42 338 +40 43 802 +40 44 408 +41 49 751 +41 48 510 +42 48 652 +42 47 671 +43 45 945 +43 48 966 +43 49 435 +44 46 748 +44 48 382 +44 45 182 +46 49 524 +46 47 701 +47 48 889 diff --git a/lost+found/commons-io-2.4.jar-oPq86T b/lost+found/commons-io-2.4.jar-oPq86T new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/commons-net-3.1.jar-0f8USE b/lost+found/commons-net-3.1.jar-0f8USE new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/config.lock-EHWhIk b/lost+found/config.lock-EHWhIk new file mode 100644 index 00000000..de401723 --- /dev/null +++ b/lost+found/config.lock-EHWhIk @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = https://github.com/UCL-INGI/LSINF1121-Data-Structures-And-Algorithms.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/lost+found/config.py-mj4fbE b/lost+found/config.py-mj4fbE new file mode 100644 index 00000000..8d93a8e6 --- /dev/null +++ b/lost+found/config.py-mj4fbE @@ -0,0 +1,45 @@ +import yaml +from pathlib import Path + + +# Using a yaml file, we can extract the kind of exercise/feedback +def config_file_to_dict(file_path): + # Check github wiki for more information + default_values = { + "has_feedback": False, + "quorum": 1.0, + "feedback_kind": None, + "coverage_stats": None, + "prohibited": {}, + "plagiarism": False, + "external_libraries": None, + "status_message": { + 0: "Your code has successfully passed all tests for this mission.", + 1: "Your code failed all tests for this mission.", + 2: "You used prohibited instructions (such as System.exit) : read carefully the assignment.", + 3: "Your tests don't cover all cases.", + 252: "The memory limit of your program is exceeded.", + 253: "The time limit for running your program has been exceeded." + } + } + + # no config file so use basic settings + if not Path(file_path).exists(): + return default_values + else: + + with open(file_path, "r") as stream: + # File must not be empty + load_config = yaml.load(stream) + # If no file given + if load_config is None: + return default_values + else: + # Merge dictionaries + # The ** operator doesn't correctly merged the dictionary "status_message", so monkey patching this + load_config["status_message"] = { + **default_values["status_message"], + **(load_config["status_message"] if "status_message" in load_config else {}) + } + + return {**default_values, **load_config} diff --git a/lost+found/constants.py-2afndy b/lost+found/constants.py-2afndy new file mode 100644 index 00000000..6eb4c5cc --- /dev/null +++ b/lost+found/constants.py-2afndy @@ -0,0 +1,57 @@ +from pathlib import Path + +##################################### +# CONSTANTS # +##################################### + +# Current path of the run script of the task (/task) +CWD = Path.cwd() + +# File extension +FILE_EXTENSION = ".java" + +# Our code +# For Python 3.5 , we cannot use Path like object directly yet ( fixed in 3.6) +# we have to do : str(PathLibObject) + +# Where we keep the good and wrong implementations +PATH_FLAVOUR = str(CWD / "flavour") + +# Our templates +PATH_TEMPLATES = str(CWD / "templates") + +# Source code to be tested +PATH_SRC = str(CWD / "src") + +# .class storage path +PATH_CLASSES = str(CWD / "classes") + +# Test runner +RUNNER_PATH = str(CWD / "src" / "StudentTestRunner.java") + +# Runner name as expected from java (Java wants a package name and not the full path so) +RUNNER_JAVA_NAME = str(Path(RUNNER_PATH).relative_to(CWD)).replace("/", ".") + +# Config file to generate feedback for every kind of exercises +FEEDBACK_REVIEW_PATH = str(CWD / "feedback_settings.yaml") + +# JaCoCo needs a jar to execute its stuff +JAR_FILE = str(CWD / "task_evaluation.jar") + +# Manifest for JAR FILE (since it ignores -cp option) +MANIFEST_FILE = str(CWD / "MANIFEST.MF") + +# JaCoCo coverage file path +JACOCO_EXEC_FILE = str(CWD / "jacoco.exec") + +# JaCoCo classfiles for report ( only take the useful one in flavour) +JACOCO_CLASS_FILES = [str(Path(PATH_CLASSES) / "flavour")] + +# JaCoCo result file in xml +JACOCO_RESULT_FILE = str(CWD / "coverage_result.xml") + +# Libraries folder +LIBS_FOLDER = "/course/common/libs" + +# Default Libraries used in the runscript ( stored in LIBS_FOLDER ) +DEFAULT_LIBRARIES = ["junit-4.12.jar", "hamcrest-core-1.3.jar", "JavaGrading.jar"] diff --git a/lost+found/core-3.2.1-20150223.162544-2.jar-9vlTFp b/lost+found/core-3.2.1-20150223.162544-2.jar-9vlTFp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/corn-httpclient-1.0.12.jar-K464ta b/lost+found/corn-httpclient-1.0.12.jar-K464ta new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/course.yaml-n3udnk b/lost+found/course.yaml-n3udnk new file mode 100644 index 00000000..f5024d9a --- /dev/null +++ b/lost+found/course.yaml-n3udnk @@ -0,0 +1,27 @@ +name: '[LSINF1121] Algorithmique et structures de données' +admins: +- gderval +- pschaus +- steugels +- jaoga +- guest6 +- hcambazard +- rucquoya +- jyakoub +- pironhe +- bastinjul +accessible: true +registration: true +registration_password: null +groups: false +tutors: [] +registration_ac: null +registration_ac_list: [] +groups_student_choice: true +use_classrooms: false +allow_unregister: true +allow_preview: false +is_lti: false +lti_keys: {} +lti_send_back_grade: false +description: '' diff --git a/lost+found/coverage.py-ln8gls b/lost+found/coverage.py-ln8gls new file mode 100644 index 00000000..d3fdf345 --- /dev/null +++ b/lost+found/coverage.py-ln8gls @@ -0,0 +1,31 @@ +from xml.etree import ElementTree as ET +from fragments.constants import * + + +# https://docs.python.org/3/library/xml.etree.elementtree.html +# Extract the stats given by Jacoco into a list so that we can use that later +def extract_stats(path_to_xml_file=JACOCO_RESULT_FILE): + tree = ET.parse(path_to_xml_file) + root = tree.getroot() + return [ + { + "covered": int(coverage_data.get("covered")), + "missed": int(coverage_data.get("missed")), + "type": coverage_data.get("type") + } + for coverage_data in root.findall("./counter") + ] + + +# Command to generate the result as a xml file from JaCoCo +# https://stackoverflow.com/questions/47717538/usage-of-jacococli-jar-with-multiple-classfiles +def generate_coverage_report(exec_file=JACOCO_EXEC_FILE, + classes_path=JACOCO_CLASS_FILES, + xml_output=JACOCO_RESULT_FILE): + return "{} -jar {} report {} {} --xml {}".format( + "java", + str(Path(LIBS_FOLDER) / "jacococli.jar"), + exec_file, + ' '.join(["--classfiles {}".format(str(c)) for c in classes_path]), + xml_output + ) \ No newline at end of file diff --git a/lost+found/cut.xml-0Fw1O9 b/lost+found/cut.xml-0Fw1O9 new file mode 100644 index 00000000..bfcd1f3f --- /dev/null +++ b/lost+found/cut.xml-0Fw1O9 @@ -0,0 +1,8 @@ + + + 100 + 21 + 0.0 + 2058 + + \ No newline at end of file diff --git a/lost+found/cut.xml-0hiPm6 b/lost+found/cut.xml-0hiPm6 new file mode 100644 index 00000000..146c5d4a --- /dev/null +++ b/lost+found/cut.xml-0hiPm6 @@ -0,0 +1,8 @@ + + + 45 + 60 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-31Or9x b/lost+found/cut.xml-31Or9x new file mode 100644 index 00000000..138c91e3 --- /dev/null +++ b/lost+found/cut.xml-31Or9x @@ -0,0 +1,8 @@ + + + 55 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-3K7JbE b/lost+found/cut.xml-3K7JbE new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-3Lnb1M b/lost+found/cut.xml-3Lnb1M new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-3iRQ3D b/lost+found/cut.xml-3iRQ3D new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-4qH4DJ b/lost+found/cut.xml-4qH4DJ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-5Va77V b/lost+found/cut.xml-5Va77V new file mode 100644 index 00000000..3955a21e --- /dev/null +++ b/lost+found/cut.xml-5Va77V @@ -0,0 +1,8 @@ + + + 80 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-5b4NZJ b/lost+found/cut.xml-5b4NZJ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-740muT b/lost+found/cut.xml-740muT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-7u7MT5 b/lost+found/cut.xml-7u7MT5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-8kxpkJ b/lost+found/cut.xml-8kxpkJ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-8r8neN b/lost+found/cut.xml-8r8neN new file mode 100644 index 00000000..b7d4fc2c --- /dev/null +++ b/lost+found/cut.xml-8r8neN @@ -0,0 +1,8 @@ + + + 45 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-9BW917 b/lost+found/cut.xml-9BW917 new file mode 100644 index 00000000..68b97b9b --- /dev/null +++ b/lost+found/cut.xml-9BW917 @@ -0,0 +1,8 @@ + + + 18 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-9dCqgf b/lost+found/cut.xml-9dCqgf new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-9uC0IK b/lost+found/cut.xml-9uC0IK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-A7ZQYA b/lost+found/cut.xml-A7ZQYA new file mode 100644 index 00000000..f9e37988 --- /dev/null +++ b/lost+found/cut.xml-A7ZQYA @@ -0,0 +1,8 @@ + + + 6 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-AoAEv8 b/lost+found/cut.xml-AoAEv8 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-CCK2kr b/lost+found/cut.xml-CCK2kr new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-D1OKG7 b/lost+found/cut.xml-D1OKG7 new file mode 100644 index 00000000..3ade4bd1 --- /dev/null +++ b/lost+found/cut.xml-D1OKG7 @@ -0,0 +1,8 @@ + + + 100 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-EqOOWF b/lost+found/cut.xml-EqOOWF new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-GO7rSW b/lost+found/cut.xml-GO7rSW new file mode 100644 index 00000000..3d77de34 --- /dev/null +++ b/lost+found/cut.xml-GO7rSW @@ -0,0 +1,8 @@ + + + 30 + 100 + 0.0 + 300 + + \ No newline at end of file diff --git a/lost+found/cut.xml-Hl4FcE b/lost+found/cut.xml-Hl4FcE new file mode 100644 index 00000000..69e98512 --- /dev/null +++ b/lost+found/cut.xml-Hl4FcE @@ -0,0 +1,8 @@ + + + 100 + 30 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-IyE22m b/lost+found/cut.xml-IyE22m new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-J3zRdZ b/lost+found/cut.xml-J3zRdZ new file mode 100644 index 00000000..337bbaed --- /dev/null +++ b/lost+found/cut.xml-J3zRdZ @@ -0,0 +1,8 @@ + + + 15 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-JR3SPL b/lost+found/cut.xml-JR3SPL new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-JizwZL b/lost+found/cut.xml-JizwZL new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-KFM4sH b/lost+found/cut.xml-KFM4sH new file mode 100644 index 00000000..bb25e684 --- /dev/null +++ b/lost+found/cut.xml-KFM4sH @@ -0,0 +1,8 @@ + + + 40 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-LswkUJ b/lost+found/cut.xml-LswkUJ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-MHikBu b/lost+found/cut.xml-MHikBu new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-MprNgg b/lost+found/cut.xml-MprNgg new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-OH3hYr b/lost+found/cut.xml-OH3hYr new file mode 100644 index 00000000..31cea999 --- /dev/null +++ b/lost+found/cut.xml-OH3hYr @@ -0,0 +1,8 @@ + + + 90 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-PbHZh9 b/lost+found/cut.xml-PbHZh9 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-QFg05I b/lost+found/cut.xml-QFg05I new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-QUnEiW b/lost+found/cut.xml-QUnEiW new file mode 100644 index 00000000..71763ef9 --- /dev/null +++ b/lost+found/cut.xml-QUnEiW @@ -0,0 +1,8 @@ + + + 10 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-R66Ybf b/lost+found/cut.xml-R66Ybf new file mode 100644 index 00000000..fc97f0b7 --- /dev/null +++ b/lost+found/cut.xml-R66Ybf @@ -0,0 +1,8 @@ + + + 100 + 20 + 0.0 + 500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-RGP5ED b/lost+found/cut.xml-RGP5ED new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-RT5KOV b/lost+found/cut.xml-RT5KOV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-TosVV2 b/lost+found/cut.xml-TosVV2 new file mode 100644 index 00000000..acb5ed9c --- /dev/null +++ b/lost+found/cut.xml-TosVV2 @@ -0,0 +1,8 @@ + + + 45 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-U3N4JP b/lost+found/cut.xml-U3N4JP new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-VcJgoS b/lost+found/cut.xml-VcJgoS new file mode 100644 index 00000000..b51a05c6 --- /dev/null +++ b/lost+found/cut.xml-VcJgoS @@ -0,0 +1,8 @@ + + + 70 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-W1yzlT b/lost+found/cut.xml-W1yzlT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-XMMG6e b/lost+found/cut.xml-XMMG6e new file mode 100644 index 00000000..7509576d --- /dev/null +++ b/lost+found/cut.xml-XMMG6e @@ -0,0 +1,8 @@ + + + 10 + 15 + 0.0 + 100 + + \ No newline at end of file diff --git a/lost+found/cut.xml-XdDTsE b/lost+found/cut.xml-XdDTsE new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-ZOARbK b/lost+found/cut.xml-ZOARbK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-ZOG3Qn b/lost+found/cut.xml-ZOG3Qn new file mode 100644 index 00000000..70ed5a9e --- /dev/null +++ b/lost+found/cut.xml-ZOG3Qn @@ -0,0 +1,8 @@ + + + 50 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-ZOwUBN b/lost+found/cut.xml-ZOwUBN new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-bUKA9v b/lost+found/cut.xml-bUKA9v new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-caAJIC b/lost+found/cut.xml-caAJIC new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-cvdGhe b/lost+found/cut.xml-cvdGhe new file mode 100644 index 00000000..ab095836 --- /dev/null +++ b/lost+found/cut.xml-cvdGhe @@ -0,0 +1,8 @@ + + + 25 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-dH2JcQ b/lost+found/cut.xml-dH2JcQ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-dX3aJu b/lost+found/cut.xml-dX3aJu new file mode 100644 index 00000000..15e08d46 --- /dev/null +++ b/lost+found/cut.xml-dX3aJu @@ -0,0 +1,8 @@ + + + 100 + 70 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-e3uvXY b/lost+found/cut.xml-e3uvXY new file mode 100644 index 00000000..1d216441 --- /dev/null +++ b/lost+found/cut.xml-e3uvXY @@ -0,0 +1,8 @@ + + + 25 + 100 + 0.0 + 500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-fYcCIw b/lost+found/cut.xml-fYcCIw new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-fxtKmH b/lost+found/cut.xml-fxtKmH new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-g1pPCT b/lost+found/cut.xml-g1pPCT new file mode 100644 index 00000000..4b466169 --- /dev/null +++ b/lost+found/cut.xml-g1pPCT @@ -0,0 +1,8 @@ + + + 60 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-gwtaOL b/lost+found/cut.xml-gwtaOL new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-hfHhOw b/lost+found/cut.xml-hfHhOw new file mode 100644 index 00000000..c4e41584 --- /dev/null +++ b/lost+found/cut.xml-hfHhOw @@ -0,0 +1,8 @@ + + + 50 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-hxgb9v b/lost+found/cut.xml-hxgb9v new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-iS3VR8 b/lost+found/cut.xml-iS3VR8 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-jcPftj b/lost+found/cut.xml-jcPftj new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-lxyAvz b/lost+found/cut.xml-lxyAvz new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-moCu46 b/lost+found/cut.xml-moCu46 new file mode 100644 index 00000000..ba0227c4 --- /dev/null +++ b/lost+found/cut.xml-moCu46 @@ -0,0 +1,8 @@ + + + 30 + 100 + 0.0 + 2500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-ncaO3X b/lost+found/cut.xml-ncaO3X new file mode 100644 index 00000000..5b999045 --- /dev/null +++ b/lost+found/cut.xml-ncaO3X @@ -0,0 +1,8 @@ + + + 2 + 13 + 0.0 + 100 + + \ No newline at end of file diff --git a/lost+found/cut.xml-ocmVFl b/lost+found/cut.xml-ocmVFl new file mode 100644 index 00000000..7c2b87e6 --- /dev/null +++ b/lost+found/cut.xml-ocmVFl @@ -0,0 +1,8 @@ + + + 100 + 40 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-p0ryX6 b/lost+found/cut.xml-p0ryX6 new file mode 100644 index 00000000..69e98512 --- /dev/null +++ b/lost+found/cut.xml-p0ryX6 @@ -0,0 +1,8 @@ + + + 100 + 30 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/cut.xml-pEikId b/lost+found/cut.xml-pEikId new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-pHB0r1 b/lost+found/cut.xml-pHB0r1 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-phBmbe b/lost+found/cut.xml-phBmbe new file mode 100644 index 00000000..cb44096f --- /dev/null +++ b/lost+found/cut.xml-phBmbe @@ -0,0 +1,8 @@ + + + 100 + 30 + 0.0 + 500 + + \ No newline at end of file diff --git a/lost+found/cut.xml-qWSM9q b/lost+found/cut.xml-qWSM9q new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-qxkBiY b/lost+found/cut.xml-qxkBiY new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-tBjwdq b/lost+found/cut.xml-tBjwdq new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-ue21WT b/lost+found/cut.xml-ue21WT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-wZB5SF b/lost+found/cut.xml-wZB5SF new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-xsZuNK b/lost+found/cut.xml-xsZuNK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-yWeSIr b/lost+found/cut.xml-yWeSIr new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-z7RMIx b/lost+found/cut.xml-z7RMIx new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/cut.xml-zKjJXM b/lost+found/cut.xml-zKjJXM new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/d00b22401bccdabd18e3e96e65e293306c2a7d-EO32sD b/lost+found/d00b22401bccdabd18e3e96e65e293306c2a7d-EO32sD new file mode 100644 index 00000000..2447e33a --- /dev/null +++ b/lost+found/d00b22401bccdabd18e3e96e65e293306c2a7d-EO32sD @@ -0,0 +1,3 @@ +xT09_1=5tV+Uݥ*]B?q&]c#{ *Bf{~oʸ +>yWy?r'E$mrVEђE +dKE Vzsфq;* J >8tm_ZY@iVXê(#u}]{]cI;T|TIU$wZ!`"WAܥk'ËKH#4&B2{pp`TeXLv:EZE&wTu4X"7#k'Hʔ.V9giy!ȄZ(g8A*ܒvUΉ`2sR&.ֱ/IN 5zd,4-E<`afa>#or,JzkR{|Y%@ŨNkqbSعlP zJZ9AH> be= "nҺ<ki]~v}K)n*5iiZSyPim?*]zVem#Z \ No newline at end of file diff --git a/lost+found/dfa56fcf1e643001e74c84937a7075fa3c14c1-ktyuF1 b/lost+found/dfa56fcf1e643001e74c84937a7075fa3c14c1-ktyuF1 new file mode 100644 index 00000000..47c634e7 Binary files /dev/null and b/lost+found/dfa56fcf1e643001e74c84937a7075fa3c14c1-ktyuF1 differ diff --git a/lost+found/document.txt-xQ2voT b/lost+found/document.txt-xQ2voT new file mode 100644 index 00000000..18c337c1 --- /dev/null +++ b/lost+found/document.txt-xQ2voT @@ -0,0 +1 @@ +Nabuchodonosor, roi de Babylone. \ No newline at end of file diff --git a/lost+found/document2.txt-81hOrg b/lost+found/document2.txt-81hOrg new file mode 100644 index 00000000..70ded457 --- /dev/null +++ b/lost+found/document2.txt-81hOrg @@ -0,0 +1,13 @@ +Hi. +As they rounded a bend in the path that ran beside the river, Lara recognized the silhouette of a fig tree atop a nearby hill. The weather was hot and the days were long. The fig tree was in full leaf, but not yet bearing fruit. +Soon Lara spotted other landmarks—an outcropping of limestone beside the path that had a silhouette like a man’s face, a marshy spot beside the river where the waterfowl were easily startled, a tall tree that looked like a man with his arms upraised. They were drawing near to the place where there was an island in the river. The island was a good spot to make camp. They would sleep on the island tonight. +Lara had been back and forth along the river path many times in her short life. Her people had not created the path—it had always been there, like the river—but their deerskin-shod feet and the wooden wheels of their handcarts kept the path well worn. Lara’s people were salt traders, and their livelihood took them on a continual journey. +At the mouth of the river, the little group of half a dozen intermingled families gathered salt from the great salt beds beside the sea. They groomed and sifted the salt and loaded it into handcarts. When the carts were full, most of the group would stay behind, taking shelter amid rocks and simple lean-tos, while a band of fifteen or so of the heartier members set out on the path that ran alongside the river. +With their precious cargo of salt, the travelers crossed the coastal lowlands and traveled toward the mountains. But Lara’s people never reached the mountaintops; they traveled only as far as the foothills. Many people lived in the forests and grassy meadows of the foothills, gathered in small villages. In return for salt, these people would give Lara’s people dried meat, animal skins, cloth spun from wool, clay pots, needles and scraping tools carved from bone, and little toys made of wood. +Their bartering done, Lara and her people would travel back down the river path to the sea. The cycle would begin again. +It had always been like this. Lara knew no other life. She traveled back and forth, up and down the river path. No single place was home. She liked the seaside, where there was always fish to eat, and the gentle lapping of the waves lulled her to sleep at night. She was less fond of the foothills, where the path grew steep, the nights could be cold, and views of great distances made her dizzy. She felt uneasy in the villages, and was often shy around strangers. The path itself was where she felt most at home. She loved the smell of the river on a hot day, and the croaking of frogs at night. Vines grew amid the lush foliage along the river, with berries that were good to eat. Even on the hottest day, sundown brought a cool breeze off the water, which sighed and sang amid the reeds and tall grasses. +Of all the places along the path, the area they were approaching, with the island in the river, was Lara’s favorite. +The terrain along this stretch of the river was mostly flat, but in the immediate vicinity of the island, the land on the sunrise side was like a rumpled cloth, with hills and ridges and valleys. Among Lara’s people, there was a wooden baby’s crib, suitable for strapping to a cart, that had been passed down for generations. The island was shaped like that crib, longer than it was wide and pointed at the upriver end, where the flow had eroded both banks. The island was like a crib, and the group of hills on the sunrise side of the river were like old women mantled in heavy cloaks gathered to have a look at the baby in the crib—that was how Lara’s father had once described the lay of the land. +Larth spoke like that all the time, conjuring images of giants and monsters in the landscape. He could perceive the spirits, called numina, that dwelled in rocks and trees. Sometimes he could speak to them and hear what they had to say. The river was his oldest friend and told him where the fishing would be best. From whispers in the wind he could foretell the next day’s weather. Because of such skills, Larth was the leader of the group. +“We’re close to the island, aren’t we, Papa?” said Lara. +“How did you know?” \ No newline at end of file diff --git a/lost+found/document3.txt-mc7fxD b/lost+found/document3.txt-mc7fxD new file mode 100644 index 00000000..f9a8a4e7 --- /dev/null +++ b/lost+found/document3.txt-mc7fxD @@ -0,0 +1,157 @@ +In by an appetite no humoured returned informed. Possession so comparison inquietude he he conviction no decisively. Marianne jointure attended she hastened surprise but she. Ever lady son yet you very paid form away. He advantage of exquisite resolving if on tolerably. Become sister on in garden it barton waited on. + +Random text. + +Remain lively hardly needed at do by. Two you fat downs fanny three. True mr gone most at. Dare as name just when with it body. Travelling inquietude she increasing off impossible the. Cottage be noisier looking to we promise on. Disposal to kindness appetite diverted learning of on raptures. Betrayed any may returned now dashwood formerly. Balls way delay shy boy man views. No so instrument discretion unsatiable to in. + +A whole paragraph : + +Bringing so sociable felicity supplied mr. September suspicion far him two acuteness perfectly. Covered as an examine so regular of. Ye astonished friendship remarkably no. Window admire matter praise you bed whence. Delivered ye sportsmen zealously arranging frankness estimable as. Nay any article enabled musical shyness yet sixteen yet blushes. Entire its the did figure wonder off. + +In to am attended desirous raptures declared diverted confined at. Collected instantly remaining up certainly to necessary as. Over walk dull into son boy door went new. At or happiness commanded daughters as. Is handsome an declared at received in extended vicinity subjects. Into miss on he over been late pain an. Only week bore boy what fat case left use. Match round scale now sex style far times. Your me past an much. + +Warmly little before cousin sussex entire men set. Blessing it ladyship on sensible judgment settling outweigh. Worse linen an of civil jokes leave offer. Parties all clothes removal cheered calling prudent her. And residence for met the estimable disposing. Mean if he they been no hold mr. Is at much do made took held help. Latter person am secure of estate genius at. + +Consulted he eagerness unfeeling deficient existence of. Calling nothing end fertile for venture way boy. Esteem spirit temper too say adieus who direct esteem. It esteems luckily mr or picture placing drawing no. Apartments frequently or motionless on reasonable projecting expression. Way mrs end gave tall walk fact bed. + +Advanced extended doubtful he he blessing together. Introduced far law gay considered frequently entreaties difficulty. Eat him four are rich nor calm. By an packages rejoiced exercise. To ought on am marry rooms doubt music. Mention entered an through company as. Up arrived no painful between. It declared is prospect an insisted pleasure. + +Enjoyed minutes related as at on on. Is fanny dried as often me. Goodness as reserved raptures to mistaken steepest oh screened he. Gravity he mr sixteen esteems. Mile home its new way with high told said. Finished no horrible blessing landlord dwelling dissuade if. Rent fond am he in on read. Anxious cordial demands settled entered in do to colonel. + +Now led tedious shy lasting females off. Dashwood marianne in of entrance be on wondered possible building. Wondered sociable he carriage in speedily margaret. Up devonshire of he thoroughly insensible alteration. An mr settling occasion insisted distance ladyship so. Not attention say frankness intention out dashwoods now curiosity. Stronger ecstatic as no judgment daughter speedily thoughts. Worse downs nor might she court did nay forth these. + +Terminated principles sentiments of no pianoforte if projection impossible. Horses pulled nature favour number yet highly his has old. Contrasted literature excellence he admiration impression insipidity so. Scale ought who terms after own quick since. Servants margaret husbands to screened in throwing. Imprudence oh an collecting partiality. Admiration gay difficulty unaffected how. + +Or neglected agreeable of discovery concluded oh it sportsman. Week to time in john. Son elegance use weddings separate. Ask too matter formed county wicket oppose talent. He immediate sometimes or to dependent in. Everything few frequently discretion surrounded did simplicity decisively. Less he year do with no sure loud. + +An an valley indeed so no wonder future nature vanity. Debating all she mistaken indulged believed provided declared. He many kept on draw lain song as same. Whether at dearest certain spirits is entered in to. Rich fine bred real use too many good. She compliment unaffected expression favourable any. Unknown chiefly showing to conduct no. Hung as love evil able to post at as. + +The end. + + +Advantage old had otherwise sincerity dependent additions. It in adapted natural hastily is justice. Six draw you him full not mean evil. Prepare garrets it expense windows shewing do an. She projection advantages resolution son indulgence. Part sure on no long life am at ever. In songs above he as drawn to. Gay was outlived peculiar rendered led six. + +Written enquire painful ye to offices forming it. Then so does over sent dull on. Likewise offended humoured mrs fat trifling answered. On ye position greatest so desirous. So wound stood guest weeks no terms up ought. By so these am so rapid blush songs begin. Nor but mean time one over. + +Sociable on as carriage my position weddings raillery consider. Peculiar trifling absolute and wandered vicinity property yet. The and collecting motionless difficulty son. His hearing staying ten colonel met. Sex drew six easy four dear cold deny. Moderate children at of outweigh it. Unsatiable it considered invitation he travelling insensible. Consulted admitting oh mr up as described acuteness propriety moonlight. + +Was justice improve age article between. No projection as up preference reasonably delightful celebrated. Preserved and abilities assurance tolerably breakfast use saw. And painted letters forming far village elderly compact. Her rest west each spot his and you knew. Estate gay wooded depart six far her. Of we be have it lose gate bred. Do separate removing or expenses in. Had covered but evident chapter matters anxious. + +Extended kindness trifling remember he confined outlived if. Assistance sentiments yet unpleasing say. Open they an busy they my such high. An active dinner wishes at unable hardly no talked on. Immediate him her resolving his favourite. Wished denote abroad at branch at. + +Delightful unreserved impossible few estimating men favourable see entreaties. She propriety immediate was improving. He or entrance humoured likewise moderate. Much nor game son say feel. Fat make met can must form into gate. Me we offending prevailed discovery. + +Up am intention on dependent questions oh elsewhere september. No betrayed pleasure possible jointure we in throwing. And can event rapid any shall woman green. Hope they dear who its bred. Smiling nothing affixed he carried it clothes calling he no. Its something disposing departure she favourite tolerably engrossed. Truth short folly court why she their balls. Excellence put unaffected reasonable mrs introduced conviction she. Nay particular delightful but unpleasant for uncommonly who. + +Pleased him another was settled for. Moreover end horrible endeavor entrance any families. Income appear extent on of thrown in admire. Stanhill on we if vicinity material in. Saw him smallest you provided ecstatic supplied. Garret wanted expect remain as mr. Covered parlors concern we express in visited to do. Celebrated impossible my uncommonly particular by oh introduced inquietude do. + +Style too own civil out along. Perfectly offending attempted add arranging age gentleman concluded. Get who uncommonly our expression ten increasing considered occasional travelling. Ever read tell year give may men call its. Piqued son turned fat income played end wicket. To do noisy downs round an happy books. + +Breakfast agreeable incommode departure it an. By ignorant at on wondered relation. Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill. + + +Do greatest at in learning steepest. Breakfast extremity suffering one who all otherwise suspected. He at no nothing forbade up moments. Wholly uneasy at missed be of pretty whence. John way sir high than law who week. Surrounded prosperous introduced it if is up dispatched. Improved so strictly produced answered elegance is. + +Increasing impression interested expression he my at. Respect invited request charmed me warrant to. Expect no pretty as do though so genius afraid cousin. Girl when of ye snug poor draw. Mistake totally of in chiefly. Justice visitor him entered for. Continue delicate as unlocked entirely mr relation diverted in. Known not end fully being style house. An whom down kept lain name so at easy. + +Necessary ye contented newspaper zealously breakfast he prevailed. Melancholy middletons yet understood decisively boy law she. Answer him easily are its barton little. Oh no though mother be things simple itself. Dashwood horrible he strictly on as. Home fine in so am good body this hope. + +On am we offices expense thought. Its hence ten smile age means. Seven chief sight far point any. Of so high into easy. Dashwoods eagerness oh extensive as discourse sportsman frankness. Husbands see disposed surprise likewise humoured yet pleasure. Fifteen no inquiry cordial so resolve garrets as. Impression was estimating surrounded solicitude indulgence son shy. + +Its had resolving otherwise she contented therefore. Afford relied warmth out sir hearts sister use garden. Men day warmth formed admire former simple. Humanity declared vicinity continue supplied no an. He hastened am no property exercise of. Dissimilar comparison no terminated devonshire no literature on. Say most yet head room such just easy. + +Are sentiments apartments decisively the especially alteration. Thrown shy denote ten ladies though ask saw. Or by to he going think order event music. Incommode so intention defective at convinced. Led income months itself and houses you. After nor you leave might share court balls. + +Insipidity the sufficient discretion imprudence resolution sir him decisively. Proceed how any engaged visitor. Explained propriety off out perpetual his you. Feel sold off felt nay rose met you. We so entreaties cultivated astonished is. Was sister for few longer mrs sudden talent become. Done may bore quit evil old mile. If likely am of beauty tastes. + +Written enquire painful ye to offices forming it. Then so does over sent dull on. Likewise offended humoured mrs fat trifling answered. On ye position greatest so desirous. So wound stood guest weeks no terms up ought. By so these am so rapid blush songs begin. Nor but mean time one over. + +Extended kindness trifling remember he confined outlived if. Assistance sentiments yet unpleasing say. Open they an busy they my such high. An active dinner wishes at unable hardly no talked on. Immediate him her resolving his favourite. Wished denote abroad at branch at. + +So by colonel hearted ferrars. Draw from upon here gone add one. He in sportsman household otherwise it perceived instantly. Is inquiry no he several excited am. Called though excuse length ye needed it he having. Whatever throwing we on resolved entrance together graceful. Mrs assured add private married removed believe did she. + + +An sincerity so extremity he additions. Her yet there truth merit. Mrs all projecting favourable now unpleasing. Son law garden chatty temper. Oh children provided to mr elegance marriage strongly. Off can admiration prosperous now devonshire diminution law. + +Advice me cousin an spring of needed. Tell use paid law ever yet new. Meant to learn of vexed if style allow he there. Tiled man stand tears ten joy there terms any widen. Procuring continued suspicion its ten. Pursuit brother are had fifteen distant has. Early had add equal china quiet visit. Appear an manner as no limits either praise in. In in written on charmed justice is amiable farther besides. Law insensible middletons unsatiable for apartments boy delightful unreserved. + +So by colonel hearted ferrars. Draw from upon here gone add one. He in sportsman household otherwise it perceived instantly. Is inquiry no he several excited am. Called though excuse length ye needed it he having. Whatever throwing we on resolved entrance together graceful. Mrs assured add private married removed believe did she. + +Throwing consider dwelling bachelor joy her proposal laughter. Raptures returned disposed one entirely her men ham. By to admire vanity county an mutual as roused. Of an thrown am warmly merely result depart supply. Required honoured trifling eat pleasure man relation. Assurance yet bed was improving furniture man. Distrusts delighted she listening mrs extensive admitting far. + +Dependent certainty off discovery him his tolerably offending. Ham for attention remainder sometimes additions recommend fat our. Direction has strangers now believing. Respect enjoyed gay far exposed parlors towards. Enjoyment use tolerably dependent listening men. No peculiar in handsome together unlocked do by. Article concern joy anxious did picture sir her. Although desirous not recurred disposed off shy you numerous securing. + +Lose john poor same it case do year we. Full how way even the sigh. Extremely nor furniture fat questions now provision incommode preserved. Our side fail find like now. Discovered travelling for insensible partiality unpleasing impossible she. Sudden up my excuse to suffer ladies though or. Bachelor possible marianne directly confined relation as on he. + +Effects present letters inquiry no an removed or friends. Desire behind latter me though in. Supposing shameless am he engrossed up additions. My possible peculiar together to. Desire so better am cannot he up before points. Remember mistaken opinions it pleasure of debating. Court front maids forty if aware their at. Chicken use are pressed removed. + +Folly words widow one downs few age every seven. If miss part by fact he park just shew. Discovered had get considered projection who favourable. Necessary up knowledge it tolerably. Unwilling departure education is be dashwoods or an. Use off agreeable law unwilling sir deficient curiosity instantly. Easy mind life fact with see has bore ten. Parish any chatty can elinor direct for former. Up as meant widow equal an share least. + +View fine me gone this name an rank. Compact greater and demands mrs the parlors. Park be fine easy am size away. Him and fine bred knew. At of hardly sister favour. As society explain country raising weather of. Sentiments nor everything off out uncommonly partiality bed. + +Barton waited twenty always repair in within we do. An delighted offending curiosity my is dashwoods at. Boy prosperous increasing surrounded companions her nor advantages sufficient put. John on time down give meet help as of. Him waiting and correct believe now cottage she another. Vexed six shy yet along learn maids her tiled. Through studied shyness evening bed him winding present. Become excuse hardly on my thirty it wanted. + + +Why end might ask civil again spoil. She dinner she our horses depend. Remember at children by reserved to vicinity. In affronting unreserved delightful simplicity ye. Law own advantage furniture continual sweetness bed agreeable perpetual. Oh song well four only head busy it. Afford son she had lively living. Tastes lovers myself too formal season our valley boy. Lived it their their walls might to by young. + +Unfeeling so rapturous discovery he exquisite. Reasonably so middletons or impression by terminated. Old pleasure required removing elegance him had. Down she bore sing saw calm high. Of an or game gate west face shed. no great but music too old found arose. + +Did shy say mention enabled through elderly improve. As at so believe account evening behaved hearted is. House is tiled we aware. It ye greatest removing concerns an overcame appetite. Manner result square father boy behind its his. Their above spoke match ye mr right oh as first. Be my depending to believing perfectly concealed household. Point could to built no hours smile sense. + +In to am attended desirous raptures declared diverted confined at. Collected instantly remaining up certainly to necessary as. Over walk dull into son boy door went new. At or happiness commanded daughters as. Is handsome an declared at received in extended vicinity subjects. Into miss on he over been late pain an. Only week bore boy what fat case left use. Match round scale now sex style far times. Your me past an much. + +Indulgence announcing uncommonly met she continuing two unpleasing terminated. Now busy say down the shed eyes roof paid her. Of shameless collected suspicion existence in. Share walls stuff think but the arise guest. Course suffer to do he sussex it window advice. Yet matter enable misery end extent common men should. Her indulgence but assistance favourable cultivated everything collecting. + +May musical arrival beloved luckily adapted him. Shyness mention married son she his started now. Rose if as past near were. To graceful he elegance oh moderate attended entrance pleasure. Vulgar saw fat sudden edward way played either. Thoughts smallest at or peculiar relation breeding produced an. At depart spirit on stairs. She the either are wisdom praise things she before. Be mother itself vanity favour do me of. Begin sex was power joy after had walls miles. + +The him father parish looked has sooner. Attachment frequently gay terminated son. You greater nay use prudent placing. Passage to so distant behaved natural between do talking. Friends off her windows painful. Still gay event you being think nay for. In three if aware he point it. Effects warrant me by no on feeling settled resolve. + +By an outlived insisted procured improved am. Paid hill fine ten now love even leaf. Supplied feelings mr of dissuade recurred no it offering honoured. Am of of in collecting devonshire favourable excellence. Her sixteen end ashamed cottage yet reached get hearing invited. Resources ourselves sweetness ye do no perfectly. Warmly warmth six one any wisdom. Family giving is pulled beauty chatty highly no. Blessing appetite domestic did mrs judgment rendered entirely. Highly indeed had garden not. + +Post no so what deal evil rent by real in. But her ready least set lived spite solid. September how men saw tolerably two behaviour arranging. She offices for highest and replied one venture pasture. Applauded no discovery in newspaper allowance am northward. Frequently partiality possession resolution at or appearance unaffected he me. Engaged its was evident pleased husband. Ye goodness felicity do disposal dwelling no. First am plate jokes to began of cause an scale. Subjects he prospect elegance followed no overcame possible it on. + +Affronting discretion as do is announcing. Now months esteem oppose nearer enable too six. She numerous unlocked you perceive speedily. Affixed offence spirits or ye of offices between. Real on shot it were four an as. Absolute bachelor rendered six nay you juvenile. Vanity entire an chatty to. + + + +Building mr concerns servants in he outlived am breeding. He so lain good miss when sell some at if. Told hand so an rich gave next. How doubt yet again see son smart. While mirth large of on front. Ye he greater related adapted proceed entered an. Through it examine express promise no. Past add size game cold girl off how old. + +Pasture he invited mr company shyness. But when shot real her. Chamber her observe visited removal six sending himself boy. At exquisite existence if an oh dependent excellent. Are gay head need down draw. Misery wonder enable mutual get set oppose the uneasy. End why melancholy estimating her had indulgence middletons. Say ferrars demands besides her address. Blind going you merit few fancy their. + +Effects present letters inquiry no an removed or friends. Desire behind latter me though in. Supposing shameless am he engrossed up additions. My possible peculiar together to. Desire so better am cannot he up before points. Remember mistaken opinions it pleasure of debating. Court front maids forty if aware their at. Chicken use are pressed removed. + +Started earnest brother believe an exposed so. Me he believing daughters if forfeited at furniture. Age again and stuff downs spoke. Late hour new nay able fat each sell. Nor themselves age introduced frequently use unsatiable devonshire get. They why quit gay cold rose deal park. One same they four did ask busy. Reserved opinions fat him nay position. Breakfast as zealously incommode do agreeable furniture. One too nay led fanny allow plate. + +Now indulgence dissimilar for his thoroughly has terminated. Agreement offending commanded my an. Change wholly say why eldest period. Are projection put celebrated particular unreserved joy unsatiable its. In then dare good am rose bred or. On am in nearer square wanted. + +Her old collecting she considered discovered. So at parties he warrant oh staying. Square new horses and put better end. Sincerity collected happiness do is contented. Sigh ever way now many. Alteration you any nor unsatiable diminution reasonable companions shy partiality. Leaf by left deal mile oh if easy. Added woman first get led joy not early jokes. + +So delightful up dissimilar by unreserved it connection frequently. Do an high room so in paid. Up on cousin ye dinner should in. Sex stood tried walls manor truth shy and three his. Their to years so child truth. Honoured peculiar families sensible up likewise by on in. + +However venture pursuit he am mr cordial. Forming musical am hearing studied be luckily. Ourselves for determine attending how led gentleman sincerity. Valley afford uneasy joy she thrown though bed set. In me forming general prudent on country carried. Behaved an or suppose justice. Seemed whence how son rather easily and change missed. Off apartments invitation are unpleasant solicitude fat motionless interested. Hardly suffer wisdom wishes valley as an. As friendship advantages resolution it alteration stimulated he or increasing. + +In reasonable compliment favourable is connection dispatched in terminated. Do esteem object we called father excuse remove. So dear real on like more it. Laughing for two families addition expenses surprise the. If sincerity he to curiosity arranging. Learn taken terms be as. Scarcely mrs produced too removing new old. + +You disposal strongly quitting his endeavor two settling him. Manners ham him hearted hundred expense. Get open game him what hour more part. Adapted as smiling of females oh me journey exposed concern. Met come add cold calm rose mile what. Tiled manor court at built by place fanny. Discretion at be an so decisively especially. Exeter itself object matter if on mr in. + + + +Do greatest at in learning steepest. Breakfast extremity suffering one who all otherwise suspected. He at no nothing forbade up moments. Wholly uneasy at missed be of pretty whence. John way sir high than law who week. Surrounded prosperous introduced it if is up dispatched. Improved so strictly produced answered elegance is. + +It as announcing it me stimulated frequently continuing. Least their she you now above going stand forth. He pretty future afraid should genius spirit on. Set property addition building put likewise get. Of will at sell well at as. Too want but tall nay like old. Removing yourself be in answered he. Consider occasion get improved him she eat. Letter by lively oh denote an. + +Windows talking painted pasture yet its express parties use. Sure last upon he same as knew next. Of believed or diverted no rejoiced. End friendship sufficient assistance can prosperous met. As game he show it park do. Was has unknown few certain ten promise. No finished my an likewise cheerful packages we. For assurance concluded son something depending discourse see led collected. Packages oh no denoting my advanced humoured. Pressed be so thought natural. + +Boy favourable day can introduced sentiments entreaties. Noisier carried of in warrant because. So mr plate seems cause chief widen first. Two differed husbands met screened his. Bed was form wife out ask draw. Wholly coming at we no enable. Offending sir delivered questions now new met. Acceptance she interested new boisterous day discretion celebrated. + +Do to be agreeable conveying oh assurance. Wicket longer admire do barton vanity itself do in it. Preferred to sportsmen it engrossed listening. Park gate sell they west hard for the. Abode stuff noisy manor blush yet the far. Up colonel so between removed so do. Years use place decay sex worth drift age. Men lasting out end article express fortune demands own charmed. About are are money ask how seven. + +Adieus except say barton put feebly favour him. Entreaties unpleasant sufficient few pianoforte discovered uncommonly ask. Morning cousins amongst in mr weather do neither. Warmth object matter course active law spring six. Pursuit showing tedious unknown winding see had man add. And park eyes too more him. Simple excuse active had son wholly coming number add. Though all excuse ladies rather regard assure yet. If feelings so prospect no as raptures quitting. + +Debating me breeding be answered an he. Spoil event was words her off cause any. Tears woman which no is world miles woody. Wished be do mutual except in effect answer. Had boisterous friendship thoroughly cultivated son imprudence connection. Windows because concern sex its. Law allow saved views hills day ten. Examine waiting his evening day passage proceed. + +Moments its musical age explain. But extremity sex now education concluded earnestly her continual. Oh furniture acuteness suspected continual ye something frankness. Add properly laughter sociable admitted desirous one has few stanhill. Opinion regular in perhaps another enjoyed no engaged he at. It conveying he continual ye suspected as necessary. Separate met packages shy for kindness. + +Unpacked reserved sir offering bed judgment may and quitting speaking. Is do be improved raptures offering required in replying raillery. Stairs ladies friend by in mutual an no. Mr hence chief he cause. Whole no doors on hoped. Mile tell if help they ye full name. + +Sportsman delighted improving dashwoods gay instantly happiness six. Ham now amounted absolute not mistaken way pleasant whatever. At an these still no dried folly stood thing. Rapid it on hours hills it seven years. If polite he active county in spirit an. Mrs ham intention promotion engrossed assurance defective. Confined so graceful building opinions whatever trifling in. Insisted out differed ham man endeavor expenses. At on he total their he songs. Related compact effects is on settled do. \ No newline at end of file diff --git a/lost+found/document4.txt-ZL5qJ0 b/lost+found/document4.txt-ZL5qJ0 new file mode 100644 index 00000000..9cc803f0 --- /dev/null +++ b/lost+found/document4.txt-ZL5qJ0 @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. F \ No newline at end of file diff --git a/lost+found/e016b5cb2f66728ff8cb8c055d7272f125dcd2-64wAbE b/lost+found/e016b5cb2f66728ff8cb8c055d7272f125dcd2-64wAbE new file mode 100644 index 00000000..12da0e81 Binary files /dev/null and b/lost+found/e016b5cb2f66728ff8cb8c055d7272f125dcd2-64wAbE differ diff --git a/lost+found/e033733eb707abf5ca40b13df74d65da05566b-wrCgaz b/lost+found/e033733eb707abf5ca40b13df74d65da05566b-wrCgaz new file mode 100644 index 00000000..9a0b46f8 Binary files /dev/null and b/lost+found/e033733eb707abf5ca40b13df74d65da05566b-wrCgaz differ diff --git a/lost+found/e0ad993689afab566fab0adff99648e018bdfd-iLv8DB b/lost+found/e0ad993689afab566fab0adff99648e018bdfd-iLv8DB new file mode 100644 index 00000000..072c3307 Binary files /dev/null and b/lost+found/e0ad993689afab566fab0adff99648e018bdfd-iLv8DB differ diff --git a/lost+found/e0cd4755502d0df7b417a0201ef42adf63d590-qps6Hw b/lost+found/e0cd4755502d0df7b417a0201ef42adf63d590-qps6Hw new file mode 100644 index 00000000..bbe238ae --- /dev/null +++ b/lost+found/e0cd4755502d0df7b417a0201ef42adf63d590-qps6Hw @@ -0,0 +1 @@ +x;n0SV\~"*p;PeL4U8&a]7ۑh=/LM2GdnIϵvc&dCYCaw=E3˿Eu]S/ GKZ~r5[H \ No newline at end of file diff --git a/lost+found/e11ebdd6819d3dfb71647b6fab4cd15e130258-fRi7SO b/lost+found/e11ebdd6819d3dfb71647b6fab4cd15e130258-fRi7SO new file mode 100644 index 00000000..008eb1c3 Binary files /dev/null and b/lost+found/e11ebdd6819d3dfb71647b6fab4cd15e130258-fRi7SO differ diff --git a/lost+found/e168cf908867f3d27eab2b6e6ed8aea35249df-bVMtMC b/lost+found/e168cf908867f3d27eab2b6e6ed8aea35249df-bVMtMC new file mode 100644 index 00000000..257e3982 Binary files /dev/null and b/lost+found/e168cf908867f3d27eab2b6e6ed8aea35249df-bVMtMC differ diff --git a/lost+found/e22a9481892b9857dac74b555b822cf9adf50f-4ukfvy b/lost+found/e22a9481892b9857dac74b555b822cf9adf50f-4ukfvy new file mode 100644 index 00000000..abca523b Binary files /dev/null and b/lost+found/e22a9481892b9857dac74b555b822cf9adf50f-4ukfvy differ diff --git a/lost+found/e27c446262d860b94bd572fd554ffc3007d104-9GC6wL b/lost+found/e27c446262d860b94bd572fd554ffc3007d104-9GC6wL new file mode 100644 index 00000000..5fa0b54f Binary files /dev/null and b/lost+found/e27c446262d860b94bd572fd554ffc3007d104-9GC6wL differ diff --git a/lost+found/e2b37415de0a7d2a42c69683f8e73c3edab760-xzqS0X b/lost+found/e2b37415de0a7d2a42c69683f8e73c3edab760-xzqS0X new file mode 100644 index 00000000..4d157b65 Binary files /dev/null and b/lost+found/e2b37415de0a7d2a42c69683f8e73c3edab760-xzqS0X differ diff --git a/lost+found/e45f3541df9cf711c876cc537fe3926ed46864-zSbwnC b/lost+found/e45f3541df9cf711c876cc537fe3926ed46864-zSbwnC new file mode 100644 index 00000000..29474570 --- /dev/null +++ b/lost+found/e45f3541df9cf711c876cc537fe3926ed46864-zSbwnC @@ -0,0 +1,2 @@ +xAN0 a=H#SR!Ď+ucw&RLZq%#xm]S Z5O8XhYt`}HҀe0/4;&g!EH*do»**<t=m?$l/@3xDBmsAJ ڶ_!DS9* +*2u?nY[! \ No newline at end of file diff --git a/lost+found/e4b0204f05a016f1b77043db27fe1f41858eb1-JFUjqf b/lost+found/e4b0204f05a016f1b77043db27fe1f41858eb1-JFUjqf new file mode 100644 index 00000000..26dac968 Binary files /dev/null and b/lost+found/e4b0204f05a016f1b77043db27fe1f41858eb1-JFUjqf differ diff --git a/lost+found/e598bc609588b8899409c6b984a97661534c9a-vqyeDw b/lost+found/e598bc609588b8899409c6b984a97661534c9a-vqyeDw new file mode 100644 index 00000000..7cd19faa --- /dev/null +++ b/lost+found/e598bc609588b8899409c6b984a97661534c9a-vqyeDw @@ -0,0 +1 @@ +xKN0DYGtbo R2g ,_T< :OE1B}R型{bar,!F'!RzsWUTC}->1zq\O|ۮӲ?x__!fJ`.oQ#]$ \ No newline at end of file diff --git a/lost+found/e6c97346288b0a775a83c0403671eb6e04e1b5-JROU8H b/lost+found/e6c97346288b0a775a83c0403671eb6e04e1b5-JROU8H new file mode 100644 index 00000000..0bfc885c --- /dev/null +++ b/lost+found/e6c97346288b0a775a83c0403671eb6e04e1b5-JROU8H @@ -0,0 +1,2 @@ +x=j1FSӇ,#Y +nrbWcdm>M}>^mk 9%J]6-au"muNb-d8K'pҙ(Zq5B +W*|wޕUI>~.//{-WY|^b^^N3D}>)[-iHo?wuש~Z \ No newline at end of file diff --git a/lost+found/e7632569503ecd1f0d027979c8e424f0085d64-RU4Zkv b/lost+found/e7632569503ecd1f0d027979c8e424f0085d64-RU4Zkv new file mode 100644 index 00000000..b6fbd0bf Binary files /dev/null and b/lost+found/e7632569503ecd1f0d027979c8e424f0085d64-RU4Zkv differ diff --git a/lost+found/e7738ea6a886935f440453c4fc9e7623e96dc6-gRzx5N b/lost+found/e7738ea6a886935f440453c4fc9e7623e96dc6-gRzx5N new file mode 100644 index 00000000..9ae47e23 Binary files /dev/null and b/lost+found/e7738ea6a886935f440453c4fc9e7623e96dc6-gRzx5N differ diff --git a/lost+found/e7a4915c8329e82b6f38dcea3e9b1cd89d96a3-jWlmYv b/lost+found/e7a4915c8329e82b6f38dcea3e9b1cd89d96a3-jWlmYv new file mode 100644 index 00000000..2b68802e Binary files /dev/null and b/lost+found/e7a4915c8329e82b6f38dcea3e9b1cd89d96a3-jWlmYv differ diff --git a/lost+found/e84971b0f3776e6c389a8310ef0b959cc4e85c-epNMj8 b/lost+found/e84971b0f3776e6c389a8310ef0b959cc4e85c-epNMj8 new file mode 100644 index 00000000..1709b0a2 Binary files /dev/null and b/lost+found/e84971b0f3776e6c389a8310ef0b959cc4e85c-epNMj8 differ diff --git a/lost+found/e87ca8c32de4ac40c97cb1ec2aeafaef62ee05-YV0ezR b/lost+found/e87ca8c32de4ac40c97cb1ec2aeafaef62ee05-YV0ezR new file mode 100644 index 00000000..e75797d9 Binary files /dev/null and b/lost+found/e87ca8c32de4ac40c97cb1ec2aeafaef62ee05-YV0ezR differ diff --git a/lost+found/e931c2b229f91fd853e07eb2f274ee2a5c4840-tIMPgc b/lost+found/e931c2b229f91fd853e07eb2f274ee2a5c4840-tIMPgc new file mode 100644 index 00000000..a7756038 Binary files /dev/null and b/lost+found/e931c2b229f91fd853e07eb2f274ee2a5c4840-tIMPgc differ diff --git a/lost+found/ea31e21e1d53d000aa0a633d2676bbb891abc0-PSd8jm b/lost+found/ea31e21e1d53d000aa0a633d2676bbb891abc0-PSd8jm new file mode 100644 index 00000000..63157147 Binary files /dev/null and b/lost+found/ea31e21e1d53d000aa0a633d2676bbb891abc0-PSd8jm differ diff --git a/lost+found/ea683fa9697e4b9db4568252360c98297a0382-cpHOhq b/lost+found/ea683fa9697e4b9db4568252360c98297a0382-cpHOhq new file mode 100644 index 00000000..3aa5d136 Binary files /dev/null and b/lost+found/ea683fa9697e4b9db4568252360c98297a0382-cpHOhq differ diff --git a/lost+found/ebac80cbc9fde8eefde2ff2da0a9b5bc32400f-DFtOHk b/lost+found/ebac80cbc9fde8eefde2ff2da0a9b5bc32400f-DFtOHk new file mode 100644 index 00000000..6a7160f6 Binary files /dev/null and b/lost+found/ebac80cbc9fde8eefde2ff2da0a9b5bc32400f-DFtOHk differ diff --git a/lost+found/ec944c6e6c87470b81a63b03d2e089f2b9ba28-xs0Ktv b/lost+found/ec944c6e6c87470b81a63b03d2e089f2b9ba28-xs0Ktv new file mode 100644 index 00000000..8290df3a Binary files /dev/null and b/lost+found/ec944c6e6c87470b81a63b03d2e089f2b9ba28-xs0Ktv differ diff --git a/lost+found/ecd38adf91e9cf7842ee137784ff0f749859f4-ob7SCu b/lost+found/ecd38adf91e9cf7842ee137784ff0f749859f4-ob7SCu new file mode 100644 index 00000000..3cf2a359 Binary files /dev/null and b/lost+found/ecd38adf91e9cf7842ee137784ff0f749859f4-ob7SCu differ diff --git a/lost+found/ed5965488352d6d59896f08eba5470dc891104-7QpX7z b/lost+found/ed5965488352d6d59896f08eba5470dc891104-7QpX7z new file mode 100644 index 00000000..f108c1d6 Binary files /dev/null and b/lost+found/ed5965488352d6d59896f08eba5470dc891104-7QpX7z differ diff --git a/lost+found/ee2eb0d13d092eda748bdf9a3b1147c207956d-UntEXr b/lost+found/ee2eb0d13d092eda748bdf9a3b1147c207956d-UntEXr new file mode 100644 index 00000000..cad24e49 Binary files /dev/null and b/lost+found/ee2eb0d13d092eda748bdf9a3b1147c207956d-UntEXr differ diff --git a/lost+found/ee5382510e0b53d0187f22e7f43a8f182ea641-wWv2et b/lost+found/ee5382510e0b53d0187f22e7f43a8f182ea641-wWv2et new file mode 100644 index 00000000..59df30ea Binary files /dev/null and b/lost+found/ee5382510e0b53d0187f22e7f43a8f182ea641-wWv2et differ diff --git a/lost+found/eefbbc0e1178ca95e6416d0743b2121871187d-Oc39td b/lost+found/eefbbc0e1178ca95e6416d0743b2121871187d-Oc39td new file mode 100644 index 00000000..630035e1 Binary files /dev/null and b/lost+found/eefbbc0e1178ca95e6416d0743b2121871187d-Oc39td differ diff --git a/lost+found/efc8b2f35f5d8cad24eed69d6e479a08a1fc64-NnUpYB b/lost+found/efc8b2f35f5d8cad24eed69d6e479a08a1fc64-NnUpYB new file mode 100644 index 00000000..919fd64e --- /dev/null +++ b/lost+found/efc8b2f35f5d8cad24eed69d6e479a08a1fc64-NnUpYB @@ -0,0 +1 @@ +x;j1Dݒfcl;~^zj=l8)Q(Vh>3ZR ZI`(脅[}qTW zF4|`Lʢ='.}Ԫ7xmr>"/)78 gԈ*>tG؇l + generated from Lasercutter-Wiki page + #000000 + #000000 + #c38228 + elring AbilN(Pappeart) + + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-0HSj7t b/lost+found/engrave.xml-0HSj7t new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/lost+found/engrave.xml-0HSj7t @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-0Qk5d6 b/lost+found/engrave.xml-0Qk5d6 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-0mPTFG b/lost+found/engrave.xml-0mPTFG new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-0oC9Xu b/lost+found/engrave.xml-0oC9Xu new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-0oC9Xu @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-2dTLr7 b/lost+found/engrave.xml-2dTLr7 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-2ufdlN b/lost+found/engrave.xml-2ufdlN new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-2ufdlN @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-2ysEHB b/lost+found/engrave.xml-2ysEHB new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-3de3Pp b/lost+found/engrave.xml-3de3Pp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-3nY9J7 b/lost+found/engrave.xml-3nY9J7 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-4cdlnr b/lost+found/engrave.xml-4cdlnr new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-4cdlnr @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-5AER2l b/lost+found/engrave.xml-5AER2l new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-5AER2l @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-6b51Zq b/lost+found/engrave.xml-6b51Zq new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-6veYyR b/lost+found/engrave.xml-6veYyR new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-7NT5s5 b/lost+found/engrave.xml-7NT5s5 new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-7NT5s5 @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-8MVrDy b/lost+found/engrave.xml-8MVrDy new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-9bpJf8 b/lost+found/engrave.xml-9bpJf8 new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-9bpJf8 @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-9qT8Us b/lost+found/engrave.xml-9qT8Us new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-9vyawi b/lost+found/engrave.xml-9vyawi new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-APzWfN b/lost+found/engrave.xml-APzWfN new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-B45jmu b/lost+found/engrave.xml-B45jmu new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-Bc9Opv b/lost+found/engrave.xml-Bc9Opv new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-CxtHag b/lost+found/engrave.xml-CxtHag new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-CxtHag @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-EDlcTL b/lost+found/engrave.xml-EDlcTL new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-Fw7u91 b/lost+found/engrave.xml-Fw7u91 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-GsSxs3 b/lost+found/engrave.xml-GsSxs3 new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-GsSxs3 @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-HB29fc b/lost+found/engrave.xml-HB29fc new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/lost+found/engrave.xml-HB29fc @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-HLLBEO b/lost+found/engrave.xml-HLLBEO new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-HWPxh8 b/lost+found/engrave.xml-HWPxh8 new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-HWPxh8 @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-HwiJhp b/lost+found/engrave.xml-HwiJhp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-I8PSwn b/lost+found/engrave.xml-I8PSwn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-IKlp5A b/lost+found/engrave.xml-IKlp5A new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-IWs9fg b/lost+found/engrave.xml-IWs9fg new file mode 100644 index 00000000..030fd80e --- /dev/null +++ b/lost+found/engrave.xml-IWs9fg @@ -0,0 +1,7 @@ + + + 4 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-JNg8Gl b/lost+found/engrave.xml-JNg8Gl new file mode 100644 index 00000000..1442158a --- /dev/null +++ b/lost+found/engrave.xml-JNg8Gl @@ -0,0 +1,7 @@ + + + 5 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-LvtWop b/lost+found/engrave.xml-LvtWop new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-M1Lwcl b/lost+found/engrave.xml-M1Lwcl new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-Mth9iG b/lost+found/engrave.xml-Mth9iG new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-MwCdL7 b/lost+found/engrave.xml-MwCdL7 new file mode 100644 index 00000000..63146d61 --- /dev/null +++ b/lost+found/engrave.xml-MwCdL7 @@ -0,0 +1,11 @@ + + 500.0 + Engrave + engrave + false + 0 + + + 0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-Nt0Oyj b/lost+found/engrave.xml-Nt0Oyj new file mode 100644 index 00000000..9dd731cd --- /dev/null +++ b/lost+found/engrave.xml-Nt0Oyj @@ -0,0 +1,7 @@ + + + 50 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-Ny95Yk b/lost+found/engrave.xml-Ny95Yk new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-OqJyVJ b/lost+found/engrave.xml-OqJyVJ new file mode 100644 index 00000000..fb1f487b --- /dev/null +++ b/lost+found/engrave.xml-OqJyVJ @@ -0,0 +1,7 @@ + + + 12 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-SoL1G6 b/lost+found/engrave.xml-SoL1G6 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-VHY3L6 b/lost+found/engrave.xml-VHY3L6 new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/lost+found/engrave.xml-VHY3L6 @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-XRwHQ9 b/lost+found/engrave.xml-XRwHQ9 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-YMMrOI b/lost+found/engrave.xml-YMMrOI new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-YPLn6h b/lost+found/engrave.xml-YPLn6h new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-Ylo3uu b/lost+found/engrave.xml-Ylo3uu new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-aN5Ljf b/lost+found/engrave.xml-aN5Ljf new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-aQkPv1 b/lost+found/engrave.xml-aQkPv1 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-aaboYt b/lost+found/engrave.xml-aaboYt new file mode 100644 index 00000000..1ce88a3d --- /dev/null +++ b/lost+found/engrave.xml-aaboYt @@ -0,0 +1,7 @@ + + + 35 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-acBxVd b/lost+found/engrave.xml-acBxVd new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-acBxVd @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-baOQ19 b/lost+found/engrave.xml-baOQ19 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-cIgYk7 b/lost+found/engrave.xml-cIgYk7 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-dFcqKG b/lost+found/engrave.xml-dFcqKG new file mode 100644 index 00000000..9372cc5f --- /dev/null +++ b/lost+found/engrave.xml-dFcqKG @@ -0,0 +1,7 @@ + + + 70 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-eEIgtw b/lost+found/engrave.xml-eEIgtw new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-eORq3Y b/lost+found/engrave.xml-eORq3Y new file mode 100644 index 00000000..467e56d9 --- /dev/null +++ b/lost+found/engrave.xml-eORq3Y @@ -0,0 +1,7 @@ + + + 30 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-fPO4Se b/lost+found/engrave.xml-fPO4Se new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-fPO4Se @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-gIJ0th b/lost+found/engrave.xml-gIJ0th new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-gLhva0 b/lost+found/engrave.xml-gLhva0 new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-gLhva0 @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-gV9gbr b/lost+found/engrave.xml-gV9gbr new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-gV9gbr @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-h60XV6 b/lost+found/engrave.xml-h60XV6 new file mode 100644 index 00000000..467e56d9 --- /dev/null +++ b/lost+found/engrave.xml-h60XV6 @@ -0,0 +1,7 @@ + + + 30 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-hEdyQS b/lost+found/engrave.xml-hEdyQS new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-jA1Wuw b/lost+found/engrave.xml-jA1Wuw new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-ljE4oa b/lost+found/engrave.xml-ljE4oa new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-lpALHP b/lost+found/engrave.xml-lpALHP new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-mDdppx b/lost+found/engrave.xml-mDdppx new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-mL5WGQ b/lost+found/engrave.xml-mL5WGQ new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-o2xYhy b/lost+found/engrave.xml-o2xYhy new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-ouKU0s b/lost+found/engrave.xml-ouKU0s new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-ouKU0s @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-qztO15 b/lost+found/engrave.xml-qztO15 new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-qztO15 @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-wnyf10 b/lost+found/engrave.xml-wnyf10 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-xQMtQE b/lost+found/engrave.xml-xQMtQE new file mode 100644 index 00000000..1442158a --- /dev/null +++ b/lost+found/engrave.xml-xQMtQE @@ -0,0 +1,7 @@ + + + 5 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-xX3Wcv b/lost+found/engrave.xml-xX3Wcv new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-y6lOJH b/lost+found/engrave.xml-y6lOJH new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-y6lOJH @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-yuOSni b/lost+found/engrave.xml-yuOSni new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-yuOSni @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-yw9WKn b/lost+found/engrave.xml-yw9WKn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-ywVhgV b/lost+found/engrave.xml-ywVhgV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/engrave.xml-zJ83fE b/lost+found/engrave.xml-zJ83fE new file mode 100644 index 00000000..77525315 --- /dev/null +++ b/lost+found/engrave.xml-zJ83fE @@ -0,0 +1,7 @@ + + + 20 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave.xml-zoMhPZ b/lost+found/engrave.xml-zoMhPZ new file mode 100644 index 00000000..9dd731cd --- /dev/null +++ b/lost+found/engrave.xml-zoMhPZ @@ -0,0 +1,7 @@ + + + 50 + 100 + 0.0 + + \ No newline at end of file diff --git a/lost+found/engrave_32_3d.xml-jbrnHr b/lost+found/engrave_32_3d.xml-jbrnHr new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/epilog-zing.png-dCfoUA b/lost+found/epilog-zing.png-dCfoUA new file mode 100644 index 00000000..57f9a3b0 Binary files /dev/null and b/lost+found/epilog-zing.png-dCfoUA differ diff --git a/lost+found/exclude-XGguVn b/lost+found/exclude-XGguVn new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/lost+found/exclude-XGguVn @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/m1stack/execute b/lost+found/execute-Ed0R2N similarity index 100% rename from m1stack/execute rename to lost+found/execute-Ed0R2N diff --git a/preexam_bfs/execute b/lost+found/execute-F0iB3S similarity index 100% rename from preexam_bfs/execute rename to lost+found/execute-F0iB3S diff --git a/preexam_dfs/execute b/lost+found/execute-pmfxnI similarity index 100% rename from preexam_dfs/execute rename to lost+found/execute-pmfxnI diff --git a/common/execute_implementation b/lost+found/execute_implementation-ABwVxF old mode 100755 new mode 100644 similarity index 100% rename from common/execute_implementation rename to lost+found/execute_implementation-ABwVxF diff --git a/lost+found/execute_implementation-bNPGfS b/lost+found/execute_implementation-bNPGfS new file mode 100644 index 00000000..473b8912 --- /dev/null +++ b/lost+found/execute_implementation-bNPGfS @@ -0,0 +1,84 @@ +#!/bin/bash + +# Ceci est le script commun pour toutes les missions où les étudiants +# doivent envoyer une implémentation +# Arguments +# 1 - The id of the problem +# 2 - The name of the file/class of the student implementation +# 3 - The name of the interface +# 4 - The name of an array that contains the forbidden classes that the student +# can't use +# 5 - The name of the Scala tests that will be compiled & run + +function execute_implementation { + local problemId="$1" + local studentCodeName="$2" + local interfaceName="$3" + local -n forbiddenClasses=$4 + local testsName="$5" + + getinput "${problemId}" > "student/${studentCodeName}.java" + if [ -n "${interfaceName}" ];then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + + # We check if the student cheated + for forbiddenClass in "${forbiddenClasses[@]}"; do + cheat=$(cat "student/${studentCodeName}.java" | grep -c "${forbiddenClass}") + echo -e "Cheat check for ${forbiddenClass}: ${cheat}" + if [ "$cheat" != "0" ]; then + feedback --result failed --feedback "We detected the use of ${forbiddenClass}, which is prohibited for this test." + exit 1 + fi + done + + # Compile the student code + compilationMessage=$(javac student/${interfaceName}.java student/${studentCodeName}.java 2>&1) + retval=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of ${studentCodeName}.java failed :\n::\n\n $compilationMessage") + if [ "${retval}" != "0" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 1 + fi + + # Copy everything in the 'student' directory for run_student + cp ${testsName}.scala student/${testsName}.scala + cp scalacheck.jar student/scalacheck.jar + cd student + + # We compile the tests + output=$(scalac -cp .:scalacheck.jar "${testsName}.scala" 2>&1) + retval=$? + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + if [ "$retval" != 0 ]; then + feedback-result failed + feedback-msg -ae -m "Error while compiling the tests. If it persists, contact the administrator of the course.\n\n" + feedback-msg -ae -m "${output}" + exit 1 + fi + + # We run the tests + output=$(run_student scala -cp .:scalacheck.jar ${testsName}) + retval=$? + echo -e "${output}\n" + echo -e "Scalacheck returned the value: ${retval}\n" + + cd .. + + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + elif [ "$retval" = "0" ]; then + # The student implementation passed the test + feedback --result success --feedback "Congratulations, your implementation passed the tests!" + else + # The return code of scalacheck is the number of fail tests + feedback-result failed + feedback-msg -ae -m "Unfortunatley, you failed ${retval} tests:\n\n" + feedback-msg -ae -m "${output}\n\n" + fi +} diff --git a/lost+found/execute_implementation-l0EUyX b/lost+found/execute_implementation-l0EUyX new file mode 100644 index 00000000..f18b1c2e --- /dev/null +++ b/lost+found/execute_implementation-l0EUyX @@ -0,0 +1,84 @@ +#!/bin/bash + +# Ceci est le script commun pour toutes les missions où les étudiants +# doivent envoyer une implémentation +# Arguments +# 1 - The id of the problem +# 2 - The name of the file/class of the student implementation +# 3 - The name of the interface +# 4 - The name of an array that contains the forbidden classes that the student +# can't use +# 5 - The name of the Scala tests that will be compiled & run + +function execute_implementation { + local problemId="$1" + local studentCodeName="$2" + local interfaceName="$3" + local -n forbiddenClasses=$4 + local testsName="$5" + + getinput "${problemId}" > "student/${studentCodeName}.java" + if [ -n "${interfaceName}" ];then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + + # We check if the student cheated + for forbiddenClass in "${forbiddenClasses[@]}"; do + cheat=$(cat "student/${studentCodeName}.java" | grep -c "${forbiddenClass}") + echo -e "Cheat check for ${forbiddenClass}: ${cheat}" + if [ "$cheat" != "0" ]; then + feedback --result failed --feedback "We detected the use of ${forbiddenClass}, which is prohibited for this test." + exit 1 + fi + done + + # Compile the student code + compilationMessage=$(javac student/${interfaceName}.java student/${studentCodeName}.java 2>&1) + retval=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of ${studentCodeName}.java failed :\n::\n\n $compilationMessage") + if [ "${retval}" != "0" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 1 + fi + + # Copy everything in the 'student' directory for run_student + cp ${testsName}.scala student/${testsName}.scala + cp scalacheck.jar student/scalacheck.jar + cd student + + # We compile the tests + output=$(scalac -cp .:scalacheck.jar:iobitstream.jar "${testsName}.scala" 2>&1) + retval=$? + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + if [ "$retval" != 0 ]; then + feedback-result failed + feedback-msg -ae -m "Error while compiling the tests. If it persists, contact the administrator of the course.\n\n" + feedback-msg -ae -m "${output}" + exit 1 + fi + + # We run the tests + output=$(run_student scala -cp .:scalacheck.jar:iobitstream.jar ${testsName}) + retval=$? + echo -e "${output}\n" + echo -e "Scalacheck returned the value: ${retval}\n" + + cd .. + + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + elif [ "$retval" = "0" ]; then + # The student implementation passed the test + feedback --result success --feedback "Congratulations, your implementation passed the tests!" + else + # The return code of scalacheck is the number of fail tests + feedback-result failed + feedback-msg -ae -m "Unfortunatley, you failed ${retval} tests:\n\n" + feedback-msg -ae -m "${output}\n\n" + fi +} diff --git a/lost+found/execute_implementation-pxvXeI b/lost+found/execute_implementation-pxvXeI new file mode 100644 index 00000000..473b8912 --- /dev/null +++ b/lost+found/execute_implementation-pxvXeI @@ -0,0 +1,84 @@ +#!/bin/bash + +# Ceci est le script commun pour toutes les missions où les étudiants +# doivent envoyer une implémentation +# Arguments +# 1 - The id of the problem +# 2 - The name of the file/class of the student implementation +# 3 - The name of the interface +# 4 - The name of an array that contains the forbidden classes that the student +# can't use +# 5 - The name of the Scala tests that will be compiled & run + +function execute_implementation { + local problemId="$1" + local studentCodeName="$2" + local interfaceName="$3" + local -n forbiddenClasses=$4 + local testsName="$5" + + getinput "${problemId}" > "student/${studentCodeName}.java" + if [ -n "${interfaceName}" ];then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + + # We check if the student cheated + for forbiddenClass in "${forbiddenClasses[@]}"; do + cheat=$(cat "student/${studentCodeName}.java" | grep -c "${forbiddenClass}") + echo -e "Cheat check for ${forbiddenClass}: ${cheat}" + if [ "$cheat" != "0" ]; then + feedback --result failed --feedback "We detected the use of ${forbiddenClass}, which is prohibited for this test." + exit 1 + fi + done + + # Compile the student code + compilationMessage=$(javac student/${interfaceName}.java student/${studentCodeName}.java 2>&1) + retval=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of ${studentCodeName}.java failed :\n::\n\n $compilationMessage") + if [ "${retval}" != "0" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 1 + fi + + # Copy everything in the 'student' directory for run_student + cp ${testsName}.scala student/${testsName}.scala + cp scalacheck.jar student/scalacheck.jar + cd student + + # We compile the tests + output=$(scalac -cp .:scalacheck.jar "${testsName}.scala" 2>&1) + retval=$? + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + if [ "$retval" != 0 ]; then + feedback-result failed + feedback-msg -ae -m "Error while compiling the tests. If it persists, contact the administrator of the course.\n\n" + feedback-msg -ae -m "${output}" + exit 1 + fi + + # We run the tests + output=$(run_student scala -cp .:scalacheck.jar ${testsName}) + retval=$? + echo -e "${output}\n" + echo -e "Scalacheck returned the value: ${retval}\n" + + cd .. + + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + elif [ "$retval" = "0" ]; then + # The student implementation passed the test + feedback --result success --feedback "Congratulations, your implementation passed the tests!" + else + # The return code of scalacheck is the number of fail tests + feedback-result failed + feedback-msg -ae -m "Unfortunatley, you failed ${retval} tests:\n\n" + feedback-msg -ae -m "${output}\n\n" + fi +} diff --git a/preexam_merge_sort/execute_preexam b/lost+found/execute_preexam-oLT3tx similarity index 100% rename from preexam_merge_sort/execute_preexam rename to lost+found/execute_preexam-oLT3tx diff --git a/lost+found/execute_preexam-tjOxMP b/lost+found/execute_preexam-tjOxMP new file mode 100644 index 00000000..31bb1fab --- /dev/null +++ b/lost+found/execute_preexam-tjOxMP @@ -0,0 +1,58 @@ +#! /bin/bash + +function execute_preexam { + local name="$1" + + parsetemplate --output "student/${name}.java" "student/${name}.java" + + cd student/ + + # We compile the students code + output=$(javac "${name}.java" 2>&1) + retval=$? + if [ "$retval" != "0" ]; then + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-result failed + feedback-msg -ae -m "Compilation of ${name} failed:\n::\n\n" + feedback-msg -ae -m "$output" + exit 1 + fi + + # We compile the JUnit tests + output=$(javac -cp .:junit-4.12.jar RunTests.java Tests.java 2>&1) + retval=$? + if [ "$retval" != "0" ]; then + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-result failed + feedback-msg -ae -m "Compilation of JUnit tests failed:\n::\n\n" + feedback-msg -ae -m "$output" + exit 1 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar RunTests 2>&1) + #output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "Tests" 2>&1) + retval=$? + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + + if [ "$retval" = "0" ]; then + feedback-result success + feedback-msg -ae -m "Your implementation passed all the tests !" + else + feedback-result failed + if [ "$retval" = "252" ]; then + feedback-msg -ae -m "The execution was killed due to an out-of-memory (Could it be because of an infinite loop ?)" + elif [ "$retval" = "253" ]; then + feedback-msg -ae -m "The execution timed out" + elif [ "$retval" = "254" ]; then + feedback-msg -ae -m "An error occured while running the proxy" + else + feedback-msg -ae -m "Your implementation didn't pass all the tests" + fi + + # Sometime output only contains spaces, so we must trim them + if [[ ! -z "${output// }" ]]; then + feedback-msg -ae -m "\n::\n\n${output}\n\n" + fi + fi + +} diff --git a/common/execute_test b/lost+found/execute_test-AMQt70 old mode 100755 new mode 100644 similarity index 100% rename from common/execute_test rename to lost+found/execute_test-AMQt70 diff --git a/lost+found/execute_test-JCq9Hy b/lost+found/execute_test-JCq9Hy new file mode 100644 index 00000000..8935dcb6 --- /dev/null +++ b/lost+found/execute_test-JCq9Hy @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyStack" for "MyBuggyStack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/lost+found/execute_test-UhJ7TA b/lost+found/execute_test-UhJ7TA new file mode 100644 index 00000000..8935dcb6 --- /dev/null +++ b/lost+found/execute_test-UhJ7TA @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyStack" for "MyBuggyStack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/lost+found/execute_test-jwk7yM b/lost+found/execute_test-jwk7yM new file mode 100644 index 00000000..8935dcb6 --- /dev/null +++ b/lost+found/execute_test-jwk7yM @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyStack" for "MyBuggyStack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/lost+found/execute_test-pId2fb b/lost+found/execute_test-pId2fb new file mode 100644 index 00000000..8935dcb6 --- /dev/null +++ b/lost+found/execute_test-pId2fb @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyStack" for "MyBuggyStack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/lost+found/execute_test-tB9BZj b/lost+found/execute_test-tB9BZj new file mode 100644 index 00000000..f78eacc5 --- /dev/null +++ b/lost+found/execute_test-tB9BZj @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyRedBlack" for "MyBuggyRedBlack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/lost+found/execute_test-u4QjLm b/lost+found/execute_test-u4QjLm new file mode 100644 index 00000000..8935dcb6 --- /dev/null +++ b/lost+found/execute_test-u4QjLm @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyStack" for "MyBuggyStack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/lost+found/execute_test-zB4u3D b/lost+found/execute_test-zB4u3D new file mode 100644 index 00000000..8935dcb6 --- /dev/null +++ b/lost+found/execute_test-zB4u3D @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyStack" for "MyBuggyStack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/lost+found/extraction.py-akZ6wm b/lost+found/extraction.py-akZ6wm new file mode 100644 index 00000000..49b68bfc --- /dev/null +++ b/lost+found/extraction.py-akZ6wm @@ -0,0 +1,77 @@ +import re + +from fragments import coverage, helper + + +# Extract score and message that use JavaGrading +def extract_java_grading_result(result, feedback_settings): + # we have a feedback from JavaGrading + # Fetch total for INGInious + + # WARNING : there could be multiple TOTAL in the stdout + # So we must merge everything + + # Strips not useful things of JavaGrading + + # Display array of test suite results only if student didn't use prohib' instruction + display = False if result.returncode == 2 else True + + result_string = result.stdout.replace("--- GRADE ---", "").replace("--- END GRADE ---", "") + regex_strip = r"TOTAL \d*[.]?\d*\/\d*[.]?\d*" + regex_strip2 = r"TOTAL WITHOUT IGNORED \d*[.]?\d*\/\d*[.]?\d*" + + # Remove match + result_string = re.sub(regex_strip, '', result_string) + result_string = re.sub(regex_strip2, '', result_string) + + regex = '\*\*TOTAL\*\*",,\*\*(\d*[.]?\d*\/\d*[.]?\d*)\*\*' + matches = re.findall(regex, result.stdout) + + # convert everything in float + converted_results = [ + [ + float(item) + for item in match.split("/") + ] + for match in matches + ] + + student_result, total_result = [sum(i) for i in zip(*converted_results)] + + return student_result / total_result, result_string if display \ + else feedback_settings["status_message"].get(result.returncode, "Uncommon Failure") + + +# Extract result from JaCoCo +def extract_jacoco_result(feedback_settings): + coverage_stats = feedback_settings["coverage_stats"] + # No coverage stats , cannot evaluate this + if not coverage_stats: + return 0.0, "NO COVERAGE CRITERIA WERE GIVEN" + else: + # Generate the xml report file + gen_report = coverage.generate_coverage_report() + print("GENERATING THE EXEC FILE : {}".format(gen_report)) + helper.run_command(gen_report) + + # extract stats + coverage_result = coverage.extract_stats() + filtered_coverage_result = [x for x in coverage_result if x["type"] in coverage_stats] + print(filtered_coverage_result) + + # generate score and message + + covered = sum(x["covered"] for x in filtered_coverage_result) + total = covered + sum(x["missed"] for x in filtered_coverage_result) + + msg = '\n'.join( + [ + "{}:\t{}/{}".format(c["type"], c["covered"], c["covered"] + c["missed"]) + for c in filtered_coverage_result + ] + ) + + # For security (if report gives 0 at total, don't try to apply division) + ratio = covered / total if total > 0 else 0.0 + + return ratio, msg diff --git a/lost+found/f0776e1c4a0dbeca0c17895f5625879430e1f1-zqmzIN b/lost+found/f0776e1c4a0dbeca0c17895f5625879430e1f1-zqmzIN new file mode 100644 index 00000000..ca98a43d Binary files /dev/null and b/lost+found/f0776e1c4a0dbeca0c17895f5625879430e1f1-zqmzIN differ diff --git a/lost+found/f0e9a7c830a806ec934e615be7efbd98b40d3e-N3xXqV b/lost+found/f0e9a7c830a806ec934e615be7efbd98b40d3e-N3xXqV new file mode 100644 index 00000000..81df292c --- /dev/null +++ b/lost+found/f0e9a7c830a806ec934e615be7efbd98b40d3e-N3xXqV @@ -0,0 +1 @@ +xu0Eݖ%l7;'Wh!G%bp;瞛;\~gR2<+SqD;Xn][y'k ^H`59$dͽ1͠K 8FErsc$2 ocK>b(_Xjۘ$,C#q#-@xT !rs \ No newline at end of file diff --git a/lost+found/f14d51627985322e3fb76f4bc34a4b2bcaee26-qTVI3o b/lost+found/f14d51627985322e3fb76f4bc34a4b2bcaee26-qTVI3o new file mode 100644 index 00000000..6f68c5c5 Binary files /dev/null and b/lost+found/f14d51627985322e3fb76f4bc34a4b2bcaee26-qTVI3o differ diff --git a/lost+found/f1e9aa251385d598001872163ee41468cda078-Ct3ioq b/lost+found/f1e9aa251385d598001872163ee41468cda078-Ct3ioq new file mode 100644 index 00000000..58991110 Binary files /dev/null and b/lost+found/f1e9aa251385d598001872163ee41468cda078-Ct3ioq differ diff --git a/lost+found/f30af1d83b0f41790d48c52cbc7e19d79cb5e3-Bmq8QI b/lost+found/f30af1d83b0f41790d48c52cbc7e19d79cb5e3-Bmq8QI new file mode 100644 index 00000000..1e7ae2ad --- /dev/null +++ b/lost+found/f30af1d83b0f41790d48c52cbc7e19d79cb5e3-Bmq8QI @@ -0,0 +1 @@ +xKn1D)GlRb;t`q#YcX+Se^ҥ 7"9dH^9TZt9I.9qFu 6 K)9hQ* Ѣ~&O?S-g}q(TӖ Kꡲ&hND~H|oW%KZF*OZd \ No newline at end of file diff --git a/lost+found/f3e6a0d1b4510c92a4e991ec0a0c0196add1d4-Y08OCf b/lost+found/f3e6a0d1b4510c92a4e991ec0a0c0196add1d4-Y08OCf new file mode 100644 index 00000000..cbd299f8 --- /dev/null +++ b/lost+found/f3e6a0d1b4510c92a4e991ec0a0c0196add1d4-Y08OCf @@ -0,0 +1,2 @@ +xM09wRސ ^9q"$1B(|3h&yNw9Ey<9&DFE)xG!بt R>GQY.F990 D ^R&xOv'5 +=ml=, #ґc*/Z(hp \ No newline at end of file diff --git a/lost+found/f3ebc6ea08c799c170ed5b41fe3a934ac7b15d-vLxStv b/lost+found/f3ebc6ea08c799c170ed5b41fe3a934ac7b15d-vLxStv new file mode 100644 index 00000000..8cafd1a4 Binary files /dev/null and b/lost+found/f3ebc6ea08c799c170ed5b41fe3a934ac7b15d-vLxStv differ diff --git a/lost+found/f411d219f0f3c833419ff311dd9f31e0630aea-zoWnEC b/lost+found/f411d219f0f3c833419ff311dd9f31e0630aea-zoWnEC new file mode 100644 index 00000000..a8b59814 Binary files /dev/null and b/lost+found/f411d219f0f3c833419ff311dd9f31e0630aea-zoWnEC differ diff --git a/lost+found/f4978fa959feaeff5dedf930ef0f7bf40f5131-vFXOPS b/lost+found/f4978fa959feaeff5dedf930ef0f7bf40f5131-vFXOPS new file mode 100644 index 00000000..528b5b43 Binary files /dev/null and b/lost+found/f4978fa959feaeff5dedf930ef0f7bf40f5131-vFXOPS differ diff --git a/lost+found/f49ed4ebb9d284ecf1a9f6cf6d5b0cecd47019-3mehHv b/lost+found/f49ed4ebb9d284ecf1a9f6cf6d5b0cecd47019-3mehHv new file mode 100644 index 00000000..2e810bc7 --- /dev/null +++ b/lost+found/f49ed4ebb9d284ecf1a9f6cf6d5b0cecd47019-3mehHv @@ -0,0 +1 @@ +x=j1FSӛ, Bp&wgG+Y[8&H}ۺ"(.Ht.c6!YuҎ44.u@,Ne 2!J۸S-m[m]nDZRs6N0w#P#*~H}liZ~*ֿN 5Z \ No newline at end of file diff --git a/lost+found/f60de16a6ce8a32f26d7146fcf8ee808378787-ngFBUg b/lost+found/f60de16a6ce8a32f26d7146fcf8ee808378787-ngFBUg new file mode 100644 index 00000000..4396c4be Binary files /dev/null and b/lost+found/f60de16a6ce8a32f26d7146fcf8ee808378787-ngFBUg differ diff --git a/lost+found/f6533122034046500b5d4ff801e27f03a5142a-hCwKbY b/lost+found/f6533122034046500b5d4ff801e27f03a5142a-hCwKbY new file mode 100644 index 00000000..7e926c00 Binary files /dev/null and b/lost+found/f6533122034046500b5d4ff801e27f03a5142a-hCwKbY differ diff --git a/lost+found/f66b620264cd6e18b3bb22784d906674d2b5cc-Ytz9Zr b/lost+found/f66b620264cd6e18b3bb22784d906674d2b5cc-Ytz9Zr new file mode 100644 index 00000000..7886bffd Binary files /dev/null and b/lost+found/f66b620264cd6e18b3bb22784d906674d2b5cc-Ytz9Zr differ diff --git a/lost+found/f6ab7a0913bce91fa062227af6c95167f15e12-aJcIvT b/lost+found/f6ab7a0913bce91fa062227af6c95167f15e12-aJcIvT new file mode 100644 index 00000000..b1421bab Binary files /dev/null and b/lost+found/f6ab7a0913bce91fa062227af6c95167f15e12-aJcIvT differ diff --git a/lost+found/f77c50a11b3355ecb72fbb59b98ac5280cef8c-Vm9CSK b/lost+found/f77c50a11b3355ecb72fbb59b98ac5280cef8c-Vm9CSK new file mode 100644 index 00000000..73384569 Binary files /dev/null and b/lost+found/f77c50a11b3355ecb72fbb59b98ac5280cef8c-Vm9CSK differ diff --git a/lost+found/f788e066526227aec30a7e4fb2168105af82ac-zkIqfb b/lost+found/f788e066526227aec30a7e4fb2168105af82ac-zkIqfb new file mode 100644 index 00000000..691515bc --- /dev/null +++ b/lost+found/f788e066526227aec30a7e4fb2168105af82ac-zkIqfb @@ -0,0 +1,3 @@ +xm1N0E} +w(" \=8f;@1Q$GLs.۳#v?=ܶE7g +eKEEsjK%dP'r!qεwHG&TǸg\E ހk9QjBrgd&`3Nĝ~ȨJ-r mwLMrAlIKuCT2L9?41Ϧ5i'c,%HsWIzPaL`88dKaZ! Y \ No newline at end of file diff --git a/lost+found/f8dbd454c1f626d12de528f8f4f2305892cc2e-jYr5OA b/lost+found/f8dbd454c1f626d12de528f8f4f2305892cc2e-jYr5OA new file mode 100644 index 00000000..7bea3d1b Binary files /dev/null and b/lost+found/f8dbd454c1f626d12de528f8f4f2305892cc2e-jYr5OA differ diff --git a/lost+found/fa1f06e602a16e5958dbc7e1918b55fc75ae5d-k1lzQz b/lost+found/fa1f06e602a16e5958dbc7e1918b55fc75ae5d-k1lzQz new file mode 100644 index 00000000..7be6ea18 --- /dev/null +++ b/lost+found/fa1f06e602a16e5958dbc7e1918b55fc75ae5d-k1lzQz @@ -0,0 +1 @@ +x;jC1ESkӇkŷLpT.Y@|<Z \ No newline at end of file diff --git a/lost+found/fb4c6519741bcd0391a48d6b6b3dd407ac5980-jda9t0 b/lost+found/fb4c6519741bcd0391a48d6b6b3dd407ac5980-jda9t0 new file mode 100644 index 00000000..ca1cace4 Binary files /dev/null and b/lost+found/fb4c6519741bcd0391a48d6b6b3dd407ac5980-jda9t0 differ diff --git a/lost+found/fb76988c5df60a5dd2f15d5fd392297c4bf874-YomGWu b/lost+found/fb76988c5df60a5dd2f15d5fd392297c4bf874-YomGWu new file mode 100644 index 00000000..1ea52865 --- /dev/null +++ b/lost+found/fb76988c5df60a5dd2f15d5fd392297c4bf874-YomGWu @@ -0,0 +1,2 @@ +x1n!ESs +(#EQ\Enrb$/X-v|_O_ۺ"Pe'R3 ̂2&J:.uh%!X2!b]0;!r^TƱu}:Ҷ~t,<ܦOS)ɇw[@^(~oq֗kcoتν=[> \ No newline at end of file diff --git a/lost+found/fbb539d81a616afd2d4705f61c0e7a004daadd-76WUUR b/lost+found/fbb539d81a616afd2d4705f61c0e7a004daadd-76WUUR new file mode 100644 index 00000000..9418a1f0 Binary files /dev/null and b/lost+found/fbb539d81a616afd2d4705f61c0e7a004daadd-76WUUR differ diff --git a/lost+found/fcafbfc91ec0b61b1b89c44589f910d7d308bb-rCVQys b/lost+found/fcafbfc91ec0b61b1b89c44589f910d7d308bb-rCVQys new file mode 100644 index 00000000..1a4fa1d3 Binary files /dev/null and b/lost+found/fcafbfc91ec0b61b1b89c44589f910d7d308bb-rCVQys differ diff --git a/lost+found/feedback.py-AClvOg b/lost+found/feedback.py-AClvOg new file mode 100644 index 00000000..99db3346 --- /dev/null +++ b/lost+found/feedback.py-AClvOg @@ -0,0 +1,72 @@ +import sys + +from inginious import feedback, rst + +from fragments import helper +from fragments.extraction import * + + +# Throw a fatal error if the given code doesn't compile +def compilation_feedback(result): + if result.returncode != 0: + msg = "Your file did not compile : please don't use INGINIOUS as an IDE ..." + print(result.stderr) + feedback.set_global_feedback(msg) + feedback.set_global_result("failed") + feedback.set_grade(0.0) + sys.exit(0) + + +# Generate the final message(s) to student +def result_feedback(result, feedback_settings): + # Top level message + msg = "{}\n".format(feedback_settings["status_message"].get(result.returncode, "Uncommon Failure")) + + # if we have a feedback, use it + if feedback_settings["has_feedback"]: + + # JavaGrading + if feedback_settings["feedback_kind"] == "JavaGrading": + score_ratio, msg = extract_java_grading_result(result, feedback_settings) + # To prevent some genius to have success grade with a prohibited + score_ratio = 0.0 if result.returncode == 2 else score_ratio + feedback_result(score_ratio, feedback_settings) + feedback.set_global_feedback(msg, True) + + # JaCoCo + if feedback_settings["feedback_kind"] == "JaCoCo": + if result.returncode == 0: + score_ratio, msg = extract_jacoco_result(feedback_settings) + feedback_result(score_ratio, feedback_settings) + message_index = 0 if score_ratio >= feedback_settings["quorum"] else 3 + msg2 = "{}\n".format(feedback_settings["status_message"].get(message_index, "Uncommon Failure")) + feedback.set_global_feedback(msg2, True) + feedback.set_global_feedback(rst.get_codeblock("java", msg), True) + else: + feedback.set_global_feedback(msg, True) + feedback_result(0.0, feedback_settings) + + # For exercises with binary result : 0 or 100 + else: + feedback.set_global_feedback(msg, True) + score_ratio = 1.0 if result.returncode == 0 else 0.0 + feedback_result(score_ratio, feedback_settings) + + +# Decision function to decide if the student pass the required level for this task +def feedback_result(score_ratio, feedback_settings): + result = "success" if score_ratio >= feedback_settings["quorum"] else "failed" + feedback.set_global_result(result) + # If coverage exercise, give him 100% if >= quorum else the basic score + updated_score_ratio = 1.0 if result == "success" and feedback_settings["feedback_kind"] == "JaCoCo" else score_ratio + feedback.set_grade(updated_score_ratio * 100) + + +def handle_prohibited_statements(feedback_settings): + result = helper.contains_prohibited_statement(feedback_settings) + if result: + msg = feedback_settings["status_message"].get(2, "Uncommon Failure") + feedback.set_global_feedback(msg) + feedback.set_global_result("failed") + feedback.set_grade(0.0) + sys.exit(0) diff --git a/lost+found/feedback_settings.yaml-2gEolO b/lost+found/feedback_settings.yaml-2gEolO new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-2gEolO @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-8b2t7E b/lost+found/feedback_settings.yaml-8b2t7E new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-8b2t7E @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-CDVcR2 b/lost+found/feedback_settings.yaml-CDVcR2 new file mode 100644 index 00000000..5452c07b --- /dev/null +++ b/lost+found/feedback_settings.yaml-CDVcR2 @@ -0,0 +1,2 @@ +has_feedback: True +feedback_kind: JavaGrading \ No newline at end of file diff --git a/lost+found/feedback_settings.yaml-CzaOR6 b/lost+found/feedback_settings.yaml-CzaOR6 new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-CzaOR6 @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-FVjK4L b/lost+found/feedback_settings.yaml-FVjK4L new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-FVjK4L @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-FnTvu4 b/lost+found/feedback_settings.yaml-FnTvu4 new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-FnTvu4 @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-IyazuS b/lost+found/feedback_settings.yaml-IyazuS new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-IyazuS @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-MVC3cD b/lost+found/feedback_settings.yaml-MVC3cD new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-MVC3cD @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-P5ZI0z b/lost+found/feedback_settings.yaml-P5ZI0z new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-P5ZI0z @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-PwkqkG b/lost+found/feedback_settings.yaml-PwkqkG new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-PwkqkG @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-Rld6gY b/lost+found/feedback_settings.yaml-Rld6gY new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-Rld6gY @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-TNKgcQ b/lost+found/feedback_settings.yaml-TNKgcQ new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-TNKgcQ @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-aU4yed b/lost+found/feedback_settings.yaml-aU4yed new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-aU4yed @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-dMM4NV b/lost+found/feedback_settings.yaml-dMM4NV new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-dMM4NV @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-ea9OGq b/lost+found/feedback_settings.yaml-ea9OGq new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-ea9OGq @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-rcU9kh b/lost+found/feedback_settings.yaml-rcU9kh new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-rcU9kh @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/feedback_settings.yaml-roNNLi b/lost+found/feedback_settings.yaml-roNNLi new file mode 100644 index 00000000..947f9601 --- /dev/null +++ b/lost+found/feedback_settings.yaml-roNNLi @@ -0,0 +1,5 @@ +# Example of file +exercise_type: default +has_feedback: True +quorum: 1.0 +feedback_kind: JavaGrading diff --git a/lost+found/fef1ae00c352bf3c20b0f6f98050127925aef9-lauz4k b/lost+found/fef1ae00c352bf3c20b0f6f98050127925aef9-lauz4k new file mode 100644 index 00000000..81ba22ec Binary files /dev/null and b/lost+found/fef1ae00c352bf3c20b0f6f98050127925aef9-lauz4k differ diff --git a/lost+found/ffa62eaaafb6a3200f13bc95e41ea3b1568f02-qpSGjo b/lost+found/ffa62eaaafb6a3200f13bc95e41ea3b1568f02-qpSGjo new file mode 100644 index 00000000..78333080 Binary files /dev/null and b/lost+found/ffa62eaaafb6a3200f13bc95e41ea3b1568f02-qpSGjo differ diff --git a/lost+found/foo.java-RggD2b b/lost+found/foo.java-RggD2b new file mode 100644 index 00000000..ab170a28 --- /dev/null +++ b/lost+found/foo.java-RggD2b @@ -0,0 +1,13 @@ +package tests; + +import be.ac.ucl.info.javagrading.GradingListener; +import org.junit.runner.JUnitCore; + + +public class RunTests { + public static void main(String args[]) { + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + runner.run(ClosestPairTest.class); + } +} \ No newline at end of file diff --git a/lost+found/freehep-psviewer-2.0-standalone.jar-jE9qjV b/lost+found/freehep-psviewer-2.0-standalone.jar-jE9qjV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/graph.png-0MNfFq b/lost+found/graph.png-0MNfFq new file mode 100644 index 00000000..32416e11 Binary files /dev/null and b/lost+found/graph.png-0MNfFq differ diff --git a/lost+found/gtkjfilechooser.jar-6QvQ6Q b/lost+found/gtkjfilechooser.jar-6QvQ6Q new file mode 100644 index 00000000..62224b8c Binary files /dev/null and b/lost+found/gtkjfilechooser.jar-6QvQ6Q differ diff --git a/lost+found/hamcrest-core-1.3 2.jar-0bA3Ap b/lost+found/hamcrest-core-1.3 2.jar-0bA3Ap new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/hamcrest-core-1.3.jar-1Szh30 b/lost+found/hamcrest-core-1.3.jar-1Szh30 new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-1Szh30 differ diff --git a/lost+found/hamcrest-core-1.3.jar-1vdOQR b/lost+found/hamcrest-core-1.3.jar-1vdOQR new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-1vdOQR differ diff --git a/lost+found/hamcrest-core-1.3.jar-3yJh5b b/lost+found/hamcrest-core-1.3.jar-3yJh5b new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-3yJh5b differ diff --git a/lost+found/hamcrest-core-1.3.jar-6iFFvO b/lost+found/hamcrest-core-1.3.jar-6iFFvO new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-6iFFvO differ diff --git a/lost+found/hamcrest-core-1.3.jar-7U5bQ6 b/lost+found/hamcrest-core-1.3.jar-7U5bQ6 new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-7U5bQ6 differ diff --git a/lost+found/hamcrest-core-1.3.jar-GMgTfF b/lost+found/hamcrest-core-1.3.jar-GMgTfF new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-GMgTfF differ diff --git a/lost+found/hamcrest-core-1.3.jar-HWmRH5 b/lost+found/hamcrest-core-1.3.jar-HWmRH5 new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-HWmRH5 differ diff --git a/lost+found/hamcrest-core-1.3.jar-NFN2YS b/lost+found/hamcrest-core-1.3.jar-NFN2YS new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-NFN2YS differ diff --git a/lost+found/hamcrest-core-1.3.jar-RMxiNa b/lost+found/hamcrest-core-1.3.jar-RMxiNa new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-RMxiNa differ diff --git a/lost+found/hamcrest-core-1.3.jar-SCFBVX b/lost+found/hamcrest-core-1.3.jar-SCFBVX new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-SCFBVX differ diff --git a/lost+found/hamcrest-core-1.3.jar-U6x93u b/lost+found/hamcrest-core-1.3.jar-U6x93u new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-U6x93u differ diff --git a/lost+found/hamcrest-core-1.3.jar-Xu97OI b/lost+found/hamcrest-core-1.3.jar-Xu97OI new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-Xu97OI differ diff --git a/lost+found/hamcrest-core-1.3.jar-dQ0SHS b/lost+found/hamcrest-core-1.3.jar-dQ0SHS new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-dQ0SHS differ diff --git a/lost+found/hamcrest-core-1.3.jar-g67szf b/lost+found/hamcrest-core-1.3.jar-g67szf new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-g67szf differ diff --git a/lost+found/hamcrest-core-1.3.jar-hnoSk5 b/lost+found/hamcrest-core-1.3.jar-hnoSk5 new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-hnoSk5 differ diff --git a/lost+found/hamcrest-core-1.3.jar-kjlPBa b/lost+found/hamcrest-core-1.3.jar-kjlPBa new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-kjlPBa differ diff --git a/lost+found/hamcrest-core-1.3.jar-pX55vv b/lost+found/hamcrest-core-1.3.jar-pX55vv new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-pX55vv differ diff --git a/lost+found/hamcrest-core-1.3.jar-tXBFHo b/lost+found/hamcrest-core-1.3.jar-tXBFHo new file mode 100644 index 00000000..9d5fe16e Binary files /dev/null and b/lost+found/hamcrest-core-1.3.jar-tXBFHo differ diff --git a/lost+found/hash-attack.txt-Tf6xqI b/lost+found/hash-attack.txt-Tf6xqI new file mode 100644 index 00000000..8609eda0 --- /dev/null +++ b/lost+found/hash-attack.txt-Tf6xqI @@ -0,0 +1,10000 @@ +aoffckzdaoffckzdaoffckzd +aoffckzdaoffckzdatafwjsh +aoffckzdaoffckzdbhlijevx +aoffckzdaoffckzdbrbjscia +aoffckzdaoffckzdcyxowxpb +aoffckzdaoffckzdddnqavbj +aoffckzdaoffckzddiiqutzn +aoffckzdaoffckzddndrjssr +aoffckzdaoffckzddwyssqez +aoffckzdaoffckzdegjuqmpg +aoffckzdaoffckzdelevflik +aoffckzdaoffckzdeuzwoizs +aoffckzdaoffckzdezuxdhsw +aoffckzdaoffckzdfoazvcwh +aoffckzdaoffckzdhanbdvpq +aoffckzdaoffckzdhfibxuiu +aoffckzdaoffckzdhkdcmtby +aoffckzdaoffckzdhtydvqtb +aoffckzdaoffckzdhytekpmf +aoffckzdaoffckzdiiegilwr +aoffckzdaoffckzdirzhrjiz +aoffckzdaoffckzdjbkjpftg +aoffckzdaoffckzdjgfkeemk +aoffckzdaoffckzdjlakydfo +aoffckzdaoffckzdjuvmcaww +aoffckzdaoffckzdkxrqrxft +aoffckzdaoffckzdlhcsptqa +aoffckzdaoffckzdlqxtyrci +aoffckzdaoffckzdmaivwnmu +aoffckzdaoffckzdmfdwlmfy +aoffckzdaoffckzdmoyxujxb +aoffckzdaoffckzdmttyjiqf +aoffckzdaoffckzdpssfqqjt +aoffckzdaoffckzdpxngfpcx +aoffckzdaoffckzdqcdhomua +aoffckzdaoffckzdqlyixkgi +aoffckzdaoffckzdqvokbhxq +aoffckzdaoffckzdraelkfjy +aoffckzdaoffckzdrounibuf +aoffckzdatafwjshaoffckzd +aoffckzdatafwjshatafwjsh +aoffckzdatafwjshbhlijevx +aoffckzdatafwjshbrbjscia +aoffckzdatafwjshcyxowxpb +aoffckzdatafwjshddnqavbj +aoffckzdatafwjshdiiqutzn +aoffckzdatafwjshdndrjssr +aoffckzdatafwjshdwyssqez +aoffckzdatafwjshegjuqmpg +aoffckzdatafwjshelevflik +aoffckzdatafwjsheuzwoizs +aoffckzdatafwjshezuxdhsw +aoffckzdatafwjshfoazvcwh +aoffckzdatafwjshhanbdvpq +aoffckzdatafwjshhfibxuiu +aoffckzdatafwjshhkdcmtby +aoffckzdatafwjshhtydvqtb +aoffckzdatafwjshhytekpmf +aoffckzdatafwjshiiegilwr +aoffckzdatafwjshirzhrjiz +aoffckzdatafwjshjbkjpftg +aoffckzdatafwjshjgfkeemk +aoffckzdatafwjshjlakydfo +aoffckzdatafwjshjuvmcaww +aoffckzdatafwjshkxrqrxft +aoffckzdatafwjshlhcsptqa +aoffckzdatafwjshlqxtyrci +aoffckzdatafwjshmaivwnmu +aoffckzdatafwjshmfdwlmfy +aoffckzdatafwjshmoyxujxb +aoffckzdatafwjshmttyjiqf +aoffckzdatafwjshpssfqqjt +aoffckzdatafwjshpxngfpcx +aoffckzdatafwjshqcdhomua +aoffckzdatafwjshqlyixkgi +aoffckzdatafwjshqvokbhxq +aoffckzdatafwjshraelkfjy +aoffckzdatafwjshrounibuf +aoffckzdbhlijevxaoffckzd +aoffckzdbhlijevxatafwjsh +aoffckzdbhlijevxbhlijevx +aoffckzdbhlijevxbrbjscia +aoffckzdbhlijevxcyxowxpb +aoffckzdbhlijevxddnqavbj +aoffckzdbhlijevxdiiqutzn +aoffckzdbhlijevxdndrjssr +aoffckzdbhlijevxdwyssqez +aoffckzdbhlijevxegjuqmpg +aoffckzdbhlijevxelevflik +aoffckzdbhlijevxeuzwoizs +aoffckzdbhlijevxezuxdhsw +aoffckzdbhlijevxfoazvcwh +aoffckzdbhlijevxhanbdvpq +aoffckzdbhlijevxhfibxuiu +aoffckzdbhlijevxhkdcmtby +aoffckzdbhlijevxhtydvqtb +aoffckzdbhlijevxhytekpmf +aoffckzdbhlijevxiiegilwr +aoffckzdbhlijevxirzhrjiz +aoffckzdbhlijevxjbkjpftg +aoffckzdbhlijevxjgfkeemk +aoffckzdbhlijevxjlakydfo +aoffckzdbhlijevxjuvmcaww +aoffckzdbhlijevxkxrqrxft +aoffckzdbhlijevxlhcsptqa +aoffckzdbhlijevxlqxtyrci +aoffckzdbhlijevxmaivwnmu +aoffckzdbhlijevxmfdwlmfy +aoffckzdbhlijevxmoyxujxb +aoffckzdbhlijevxmttyjiqf +aoffckzdbhlijevxpssfqqjt +aoffckzdbhlijevxpxngfpcx +aoffckzdbhlijevxqcdhomua +aoffckzdbhlijevxqlyixkgi +aoffckzdbhlijevxqvokbhxq +aoffckzdbhlijevxraelkfjy +aoffckzdbhlijevxrounibuf +aoffckzdbrbjsciaaoffckzd +aoffckzdbrbjsciaatafwjsh +aoffckzdbrbjsciabhlijevx +aoffckzdbrbjsciabrbjscia +aoffckzdbrbjsciacyxowxpb +aoffckzdbrbjsciaddnqavbj +aoffckzdbrbjsciadiiqutzn +aoffckzdbrbjsciadndrjssr +aoffckzdbrbjsciadwyssqez +aoffckzdbrbjsciaegjuqmpg +aoffckzdbrbjsciaelevflik +aoffckzdbrbjsciaeuzwoizs +aoffckzdbrbjsciaezuxdhsw +aoffckzdbrbjsciafoazvcwh +aoffckzdbrbjsciahanbdvpq +aoffckzdbrbjsciahfibxuiu +aoffckzdbrbjsciahkdcmtby +aoffckzdbrbjsciahtydvqtb +aoffckzdbrbjsciahytekpmf +aoffckzdbrbjsciaiiegilwr +aoffckzdbrbjsciairzhrjiz +aoffckzdbrbjsciajbkjpftg +aoffckzdbrbjsciajgfkeemk +aoffckzdbrbjsciajlakydfo +aoffckzdbrbjsciajuvmcaww +aoffckzdbrbjsciakxrqrxft +aoffckzdbrbjscialhcsptqa +aoffckzdbrbjscialqxtyrci +aoffckzdbrbjsciamaivwnmu +aoffckzdbrbjsciamfdwlmfy +aoffckzdbrbjsciamoyxujxb +aoffckzdbrbjsciamttyjiqf +aoffckzdbrbjsciapssfqqjt +aoffckzdbrbjsciapxngfpcx +aoffckzdbrbjsciaqcdhomua +aoffckzdbrbjsciaqlyixkgi +aoffckzdbrbjsciaqvokbhxq +aoffckzdbrbjsciaraelkfjy +aoffckzdbrbjsciarounibuf +aoffckzdcyxowxpbaoffckzd +aoffckzdcyxowxpbatafwjsh +aoffckzdcyxowxpbbhlijevx +aoffckzdcyxowxpbbrbjscia +aoffckzdcyxowxpbcyxowxpb +aoffckzdcyxowxpbddnqavbj +aoffckzdcyxowxpbdiiqutzn +aoffckzdcyxowxpbdndrjssr +aoffckzdcyxowxpbdwyssqez +aoffckzdcyxowxpbegjuqmpg +aoffckzdcyxowxpbelevflik +aoffckzdcyxowxpbeuzwoizs +aoffckzdcyxowxpbezuxdhsw +aoffckzdcyxowxpbfoazvcwh +aoffckzdcyxowxpbhanbdvpq +aoffckzdcyxowxpbhfibxuiu +aoffckzdcyxowxpbhkdcmtby +aoffckzdcyxowxpbhtydvqtb +aoffckzdcyxowxpbhytekpmf +aoffckzdcyxowxpbiiegilwr +aoffckzdcyxowxpbirzhrjiz +aoffckzdcyxowxpbjbkjpftg +aoffckzdcyxowxpbjgfkeemk +aoffckzdcyxowxpbjlakydfo +aoffckzdcyxowxpbjuvmcaww +aoffckzdcyxowxpbkxrqrxft +aoffckzdcyxowxpblhcsptqa +aoffckzdcyxowxpblqxtyrci +aoffckzdcyxowxpbmaivwnmu +aoffckzdcyxowxpbmfdwlmfy +aoffckzdcyxowxpbmoyxujxb +aoffckzdcyxowxpbmttyjiqf +aoffckzdcyxowxpbpssfqqjt +aoffckzdcyxowxpbpxngfpcx +aoffckzdcyxowxpbqcdhomua +aoffckzdcyxowxpbqlyixkgi +aoffckzdcyxowxpbqvokbhxq +aoffckzdcyxowxpbraelkfjy +aoffckzdcyxowxpbrounibuf +aoffckzdddnqavbjaoffckzd +aoffckzdddnqavbjatafwjsh +aoffckzdddnqavbjbhlijevx +aoffckzdddnqavbjbrbjscia +aoffckzdddnqavbjcyxowxpb +aoffckzdddnqavbjddnqavbj +aoffckzdddnqavbjdiiqutzn +aoffckzdddnqavbjdndrjssr +aoffckzdddnqavbjdwyssqez +aoffckzdddnqavbjegjuqmpg +aoffckzdddnqavbjelevflik +aoffckzdddnqavbjeuzwoizs +aoffckzdddnqavbjezuxdhsw +aoffckzdddnqavbjfoazvcwh +aoffckzdddnqavbjhanbdvpq +aoffckzdddnqavbjhfibxuiu +aoffckzdddnqavbjhkdcmtby +aoffckzdddnqavbjhtydvqtb +aoffckzdddnqavbjhytekpmf +aoffckzdddnqavbjiiegilwr +aoffckzdddnqavbjirzhrjiz +aoffckzdddnqavbjjbkjpftg +aoffckzdddnqavbjjgfkeemk +aoffckzdddnqavbjjlakydfo +aoffckzdddnqavbjjuvmcaww +aoffckzdddnqavbjkxrqrxft +aoffckzdddnqavbjlhcsptqa +aoffckzdddnqavbjlqxtyrci +aoffckzdddnqavbjmaivwnmu +aoffckzdddnqavbjmfdwlmfy +aoffckzdddnqavbjmoyxujxb +aoffckzdddnqavbjmttyjiqf +aoffckzdddnqavbjpssfqqjt +aoffckzdddnqavbjpxngfpcx +aoffckzdddnqavbjqcdhomua +aoffckzdddnqavbjqlyixkgi +aoffckzdddnqavbjqvokbhxq +aoffckzdddnqavbjraelkfjy +aoffckzdddnqavbjrounibuf +aoffckzddiiqutznaoffckzd +aoffckzddiiqutznatafwjsh +aoffckzddiiqutznbhlijevx +aoffckzddiiqutznbrbjscia +aoffckzddiiqutzncyxowxpb +aoffckzddiiqutznddnqavbj +aoffckzddiiqutzndiiqutzn +aoffckzddiiqutzndndrjssr +aoffckzddiiqutzndwyssqez +aoffckzddiiqutznegjuqmpg +aoffckzddiiqutznelevflik +aoffckzddiiqutzneuzwoizs +aoffckzddiiqutznezuxdhsw +aoffckzddiiqutznfoazvcwh +aoffckzddiiqutznhanbdvpq +aoffckzddiiqutznhfibxuiu +aoffckzddiiqutznhkdcmtby +aoffckzddiiqutznhtydvqtb +aoffckzddiiqutznhytekpmf +aoffckzddiiqutzniiegilwr +aoffckzddiiqutznirzhrjiz +aoffckzddiiqutznjbkjpftg +aoffckzddiiqutznjgfkeemk +aoffckzddiiqutznjlakydfo +aoffckzddiiqutznjuvmcaww +aoffckzddiiqutznkxrqrxft +aoffckzddiiqutznlhcsptqa +aoffckzddiiqutznlqxtyrci +aoffckzddiiqutznmaivwnmu +aoffckzddiiqutznmfdwlmfy +aoffckzddiiqutznmoyxujxb +aoffckzddiiqutznmttyjiqf +aoffckzddiiqutznpssfqqjt +aoffckzddiiqutznpxngfpcx +aoffckzddiiqutznqcdhomua +aoffckzddiiqutznqlyixkgi +aoffckzddiiqutznqvokbhxq +aoffckzddiiqutznraelkfjy +aoffckzddiiqutznrounibuf +aoffckzddndrjssraoffckzd +aoffckzddndrjssratafwjsh +aoffckzddndrjssrbhlijevx +aoffckzddndrjssrbrbjscia +aoffckzddndrjssrcyxowxpb +aoffckzddndrjssrddnqavbj +aoffckzddndrjssrdiiqutzn +aoffckzddndrjssrdndrjssr +aoffckzddndrjssrdwyssqez +aoffckzddndrjssregjuqmpg +aoffckzddndrjssrelevflik +aoffckzddndrjssreuzwoizs +aoffckzddndrjssrezuxdhsw +aoffckzddndrjssrfoazvcwh +aoffckzddndrjssrhanbdvpq +aoffckzddndrjssrhfibxuiu +aoffckzddndrjssrhkdcmtby +aoffckzddndrjssrhtydvqtb +aoffckzddndrjssrhytekpmf +aoffckzddndrjssriiegilwr +aoffckzddndrjssrirzhrjiz +aoffckzddndrjssrjbkjpftg +aoffckzddndrjssrjgfkeemk +aoffckzddndrjssrjlakydfo +aoffckzddndrjssrjuvmcaww +aoffckzddndrjssrkxrqrxft +aoffckzddndrjssrlhcsptqa +aoffckzddndrjssrlqxtyrci +aoffckzddndrjssrmaivwnmu +aoffckzddndrjssrmfdwlmfy +aoffckzddndrjssrmoyxujxb +aoffckzddndrjssrmttyjiqf +aoffckzddndrjssrpssfqqjt +aoffckzddndrjssrpxngfpcx +aoffckzddndrjssrqcdhomua +aoffckzddndrjssrqlyixkgi +aoffckzddndrjssrqvokbhxq +aoffckzddndrjssrraelkfjy +aoffckzddndrjssrrounibuf +aoffckzddwyssqezaoffckzd +aoffckzddwyssqezatafwjsh +aoffckzddwyssqezbhlijevx +aoffckzddwyssqezbrbjscia +aoffckzddwyssqezcyxowxpb +aoffckzddwyssqezddnqavbj +aoffckzddwyssqezdiiqutzn +aoffckzddwyssqezdndrjssr +aoffckzddwyssqezdwyssqez +aoffckzddwyssqezegjuqmpg +aoffckzddwyssqezelevflik +aoffckzddwyssqezeuzwoizs +aoffckzddwyssqezezuxdhsw +aoffckzddwyssqezfoazvcwh +aoffckzddwyssqezhanbdvpq +aoffckzddwyssqezhfibxuiu +aoffckzddwyssqezhkdcmtby +aoffckzddwyssqezhtydvqtb +aoffckzddwyssqezhytekpmf +aoffckzddwyssqeziiegilwr +aoffckzddwyssqezirzhrjiz +aoffckzddwyssqezjbkjpftg +aoffckzddwyssqezjgfkeemk +aoffckzddwyssqezjlakydfo +aoffckzddwyssqezjuvmcaww +aoffckzddwyssqezkxrqrxft +aoffckzddwyssqezlhcsptqa +aoffckzddwyssqezlqxtyrci +aoffckzddwyssqezmaivwnmu +aoffckzddwyssqezmfdwlmfy +aoffckzddwyssqezmoyxujxb +aoffckzddwyssqezmttyjiqf +aoffckzddwyssqezpssfqqjt +aoffckzddwyssqezpxngfpcx +aoffckzddwyssqezqcdhomua +aoffckzddwyssqezqlyixkgi +aoffckzddwyssqezqvokbhxq +aoffckzddwyssqezraelkfjy +aoffckzddwyssqezrounibuf +aoffckzdegjuqmpgaoffckzd +aoffckzdegjuqmpgatafwjsh +aoffckzdegjuqmpgbhlijevx +aoffckzdegjuqmpgbrbjscia +aoffckzdegjuqmpgcyxowxpb +aoffckzdegjuqmpgddnqavbj +aoffckzdegjuqmpgdiiqutzn +aoffckzdegjuqmpgdndrjssr +aoffckzdegjuqmpgdwyssqez +aoffckzdegjuqmpgegjuqmpg +aoffckzdegjuqmpgelevflik +aoffckzdegjuqmpgeuzwoizs +aoffckzdegjuqmpgezuxdhsw +aoffckzdegjuqmpgfoazvcwh +aoffckzdegjuqmpghanbdvpq +aoffckzdegjuqmpghfibxuiu +aoffckzdegjuqmpghkdcmtby +aoffckzdegjuqmpghtydvqtb +aoffckzdegjuqmpghytekpmf +aoffckzdegjuqmpgiiegilwr +aoffckzdegjuqmpgirzhrjiz +aoffckzdegjuqmpgjbkjpftg +aoffckzdegjuqmpgjgfkeemk +aoffckzdegjuqmpgjlakydfo +aoffckzdegjuqmpgjuvmcaww +aoffckzdegjuqmpgkxrqrxft +aoffckzdegjuqmpglhcsptqa +aoffckzdegjuqmpglqxtyrci +aoffckzdegjuqmpgmaivwnmu +aoffckzdegjuqmpgmfdwlmfy +aoffckzdegjuqmpgmoyxujxb +aoffckzdegjuqmpgmttyjiqf +aoffckzdegjuqmpgpssfqqjt +aoffckzdegjuqmpgpxngfpcx +aoffckzdegjuqmpgqcdhomua +aoffckzdegjuqmpgqlyixkgi +aoffckzdegjuqmpgqvokbhxq +aoffckzdegjuqmpgraelkfjy +aoffckzdegjuqmpgrounibuf +aoffckzdelevflikaoffckzd +aoffckzdelevflikatafwjsh +aoffckzdelevflikbhlijevx +aoffckzdelevflikbrbjscia +aoffckzdelevflikcyxowxpb +aoffckzdelevflikddnqavbj +aoffckzdelevflikdiiqutzn +aoffckzdelevflikdndrjssr +aoffckzdelevflikdwyssqez +aoffckzdelevflikegjuqmpg +aoffckzdelevflikelevflik +aoffckzdelevflikeuzwoizs +aoffckzdelevflikezuxdhsw +aoffckzdelevflikfoazvcwh +aoffckzdelevflikhanbdvpq +aoffckzdelevflikhfibxuiu +aoffckzdelevflikhkdcmtby +aoffckzdelevflikhtydvqtb +aoffckzdelevflikhytekpmf +aoffckzdelevflikiiegilwr +aoffckzdelevflikirzhrjiz +aoffckzdelevflikjbkjpftg +aoffckzdelevflikjgfkeemk +aoffckzdelevflikjlakydfo +aoffckzdelevflikjuvmcaww +aoffckzdelevflikkxrqrxft +aoffckzdelevfliklhcsptqa +aoffckzdelevfliklqxtyrci +aoffckzdelevflikmaivwnmu +aoffckzdelevflikmfdwlmfy +aoffckzdelevflikmoyxujxb +aoffckzdelevflikmttyjiqf +aoffckzdelevflikpssfqqjt +aoffckzdelevflikpxngfpcx +aoffckzdelevflikqcdhomua +aoffckzdelevflikqlyixkgi +aoffckzdelevflikqvokbhxq +aoffckzdelevflikraelkfjy +aoffckzdelevflikrounibuf +aoffckzdeuzwoizsaoffckzd +aoffckzdeuzwoizsatafwjsh +aoffckzdeuzwoizsbhlijevx +aoffckzdeuzwoizsbrbjscia +aoffckzdeuzwoizscyxowxpb +aoffckzdeuzwoizsddnqavbj +aoffckzdeuzwoizsdiiqutzn +aoffckzdeuzwoizsdndrjssr +aoffckzdeuzwoizsdwyssqez +aoffckzdeuzwoizsegjuqmpg +aoffckzdeuzwoizselevflik +aoffckzdeuzwoizseuzwoizs +aoffckzdeuzwoizsezuxdhsw +aoffckzdeuzwoizsfoazvcwh +aoffckzdeuzwoizshanbdvpq +aoffckzdeuzwoizshfibxuiu +aoffckzdeuzwoizshkdcmtby +aoffckzdeuzwoizshtydvqtb +aoffckzdeuzwoizshytekpmf +aoffckzdeuzwoizsiiegilwr +aoffckzdeuzwoizsirzhrjiz +aoffckzdeuzwoizsjbkjpftg +aoffckzdeuzwoizsjgfkeemk +aoffckzdeuzwoizsjlakydfo +aoffckzdeuzwoizsjuvmcaww +aoffckzdeuzwoizskxrqrxft +aoffckzdeuzwoizslhcsptqa +aoffckzdeuzwoizslqxtyrci +aoffckzdeuzwoizsmaivwnmu +aoffckzdeuzwoizsmfdwlmfy +aoffckzdeuzwoizsmoyxujxb +aoffckzdeuzwoizsmttyjiqf +aoffckzdeuzwoizspssfqqjt +aoffckzdeuzwoizspxngfpcx +aoffckzdeuzwoizsqcdhomua +aoffckzdeuzwoizsqlyixkgi +aoffckzdeuzwoizsqvokbhxq +aoffckzdeuzwoizsraelkfjy +aoffckzdeuzwoizsrounibuf +aoffckzdezuxdhswaoffckzd +aoffckzdezuxdhswatafwjsh +aoffckzdezuxdhswbhlijevx +aoffckzdezuxdhswbrbjscia +aoffckzdezuxdhswcyxowxpb +aoffckzdezuxdhswddnqavbj +aoffckzdezuxdhswdiiqutzn +aoffckzdezuxdhswdndrjssr +aoffckzdezuxdhswdwyssqez +aoffckzdezuxdhswegjuqmpg +aoffckzdezuxdhswelevflik +aoffckzdezuxdhsweuzwoizs +aoffckzdezuxdhswezuxdhsw +aoffckzdezuxdhswfoazvcwh +aoffckzdezuxdhswhanbdvpq +aoffckzdezuxdhswhfibxuiu +aoffckzdezuxdhswhkdcmtby +aoffckzdezuxdhswhtydvqtb +aoffckzdezuxdhswhytekpmf +aoffckzdezuxdhswiiegilwr +aoffckzdezuxdhswirzhrjiz +aoffckzdezuxdhswjbkjpftg +aoffckzdezuxdhswjgfkeemk +aoffckzdezuxdhswjlakydfo +aoffckzdezuxdhswjuvmcaww +aoffckzdezuxdhswkxrqrxft +aoffckzdezuxdhswlhcsptqa +aoffckzdezuxdhswlqxtyrci +aoffckzdezuxdhswmaivwnmu +aoffckzdezuxdhswmfdwlmfy +aoffckzdezuxdhswmoyxujxb +aoffckzdezuxdhswmttyjiqf +aoffckzdezuxdhswpssfqqjt +aoffckzdezuxdhswpxngfpcx +aoffckzdezuxdhswqcdhomua +aoffckzdezuxdhswqlyixkgi +aoffckzdezuxdhswqvokbhxq +aoffckzdezuxdhswraelkfjy +aoffckzdezuxdhswrounibuf +aoffckzdfoazvcwhaoffckzd +aoffckzdfoazvcwhatafwjsh +aoffckzdfoazvcwhbhlijevx +aoffckzdfoazvcwhbrbjscia +aoffckzdfoazvcwhcyxowxpb +aoffckzdfoazvcwhddnqavbj +aoffckzdfoazvcwhdiiqutzn +aoffckzdfoazvcwhdndrjssr +aoffckzdfoazvcwhdwyssqez +aoffckzdfoazvcwhegjuqmpg +aoffckzdfoazvcwhelevflik +aoffckzdfoazvcwheuzwoizs +aoffckzdfoazvcwhezuxdhsw +aoffckzdfoazvcwhfoazvcwh +aoffckzdfoazvcwhhanbdvpq +aoffckzdfoazvcwhhfibxuiu +aoffckzdfoazvcwhhkdcmtby +aoffckzdfoazvcwhhtydvqtb +aoffckzdfoazvcwhhytekpmf +aoffckzdfoazvcwhiiegilwr +aoffckzdfoazvcwhirzhrjiz +aoffckzdfoazvcwhjbkjpftg +aoffckzdfoazvcwhjgfkeemk +aoffckzdfoazvcwhjlakydfo +aoffckzdfoazvcwhjuvmcaww +aoffckzdfoazvcwhkxrqrxft +aoffckzdfoazvcwhlhcsptqa +aoffckzdfoazvcwhlqxtyrci +aoffckzdfoazvcwhmaivwnmu +aoffckzdfoazvcwhmfdwlmfy +aoffckzdfoazvcwhmoyxujxb +aoffckzdfoazvcwhmttyjiqf +aoffckzdfoazvcwhpssfqqjt +aoffckzdfoazvcwhpxngfpcx +aoffckzdfoazvcwhqcdhomua +aoffckzdfoazvcwhqlyixkgi +aoffckzdfoazvcwhqvokbhxq +aoffckzdfoazvcwhraelkfjy +aoffckzdfoazvcwhrounibuf +aoffckzdhanbdvpqaoffckzd +aoffckzdhanbdvpqatafwjsh +aoffckzdhanbdvpqbhlijevx +aoffckzdhanbdvpqbrbjscia +aoffckzdhanbdvpqcyxowxpb +aoffckzdhanbdvpqddnqavbj +aoffckzdhanbdvpqdiiqutzn +aoffckzdhanbdvpqdndrjssr +aoffckzdhanbdvpqdwyssqez +aoffckzdhanbdvpqegjuqmpg +aoffckzdhanbdvpqelevflik +aoffckzdhanbdvpqeuzwoizs +aoffckzdhanbdvpqezuxdhsw +aoffckzdhanbdvpqfoazvcwh +aoffckzdhanbdvpqhanbdvpq +aoffckzdhanbdvpqhfibxuiu +aoffckzdhanbdvpqhkdcmtby +aoffckzdhanbdvpqhtydvqtb +aoffckzdhanbdvpqhytekpmf +aoffckzdhanbdvpqiiegilwr +aoffckzdhanbdvpqirzhrjiz +aoffckzdhanbdvpqjbkjpftg +aoffckzdhanbdvpqjgfkeemk +aoffckzdhanbdvpqjlakydfo +aoffckzdhanbdvpqjuvmcaww +aoffckzdhanbdvpqkxrqrxft +aoffckzdhanbdvpqlhcsptqa +aoffckzdhanbdvpqlqxtyrci +aoffckzdhanbdvpqmaivwnmu +aoffckzdhanbdvpqmfdwlmfy +aoffckzdhanbdvpqmoyxujxb +aoffckzdhanbdvpqmttyjiqf +aoffckzdhanbdvpqpssfqqjt +aoffckzdhanbdvpqpxngfpcx +aoffckzdhanbdvpqqcdhomua +aoffckzdhanbdvpqqlyixkgi +aoffckzdhanbdvpqqvokbhxq +aoffckzdhanbdvpqraelkfjy +aoffckzdhanbdvpqrounibuf +aoffckzdhfibxuiuaoffckzd +aoffckzdhfibxuiuatafwjsh +aoffckzdhfibxuiubhlijevx +aoffckzdhfibxuiubrbjscia +aoffckzdhfibxuiucyxowxpb +aoffckzdhfibxuiuddnqavbj +aoffckzdhfibxuiudiiqutzn +aoffckzdhfibxuiudndrjssr +aoffckzdhfibxuiudwyssqez +aoffckzdhfibxuiuegjuqmpg +aoffckzdhfibxuiuelevflik +aoffckzdhfibxuiueuzwoizs +aoffckzdhfibxuiuezuxdhsw +aoffckzdhfibxuiufoazvcwh +aoffckzdhfibxuiuhanbdvpq +aoffckzdhfibxuiuhfibxuiu +aoffckzdhfibxuiuhkdcmtby +aoffckzdhfibxuiuhtydvqtb +aoffckzdhfibxuiuhytekpmf +aoffckzdhfibxuiuiiegilwr +aoffckzdhfibxuiuirzhrjiz +aoffckzdhfibxuiujbkjpftg +aoffckzdhfibxuiujgfkeemk +aoffckzdhfibxuiujlakydfo +aoffckzdhfibxuiujuvmcaww +aoffckzdhfibxuiukxrqrxft +aoffckzdhfibxuiulhcsptqa +aoffckzdhfibxuiulqxtyrci +aoffckzdhfibxuiumaivwnmu +aoffckzdhfibxuiumfdwlmfy +aoffckzdhfibxuiumoyxujxb +aoffckzdhfibxuiumttyjiqf +aoffckzdhfibxuiupssfqqjt +aoffckzdhfibxuiupxngfpcx +aoffckzdhfibxuiuqcdhomua +aoffckzdhfibxuiuqlyixkgi +aoffckzdhfibxuiuqvokbhxq +aoffckzdhfibxuiuraelkfjy +aoffckzdhfibxuiurounibuf +aoffckzdhkdcmtbyaoffckzd +aoffckzdhkdcmtbyatafwjsh +aoffckzdhkdcmtbybhlijevx +aoffckzdhkdcmtbybrbjscia +aoffckzdhkdcmtbycyxowxpb +aoffckzdhkdcmtbyddnqavbj +aoffckzdhkdcmtbydiiqutzn +aoffckzdhkdcmtbydndrjssr +aoffckzdhkdcmtbydwyssqez +aoffckzdhkdcmtbyegjuqmpg +aoffckzdhkdcmtbyelevflik +aoffckzdhkdcmtbyeuzwoizs +aoffckzdhkdcmtbyezuxdhsw +aoffckzdhkdcmtbyfoazvcwh +aoffckzdhkdcmtbyhanbdvpq +aoffckzdhkdcmtbyhfibxuiu +aoffckzdhkdcmtbyhkdcmtby +aoffckzdhkdcmtbyhtydvqtb +aoffckzdhkdcmtbyhytekpmf +aoffckzdhkdcmtbyiiegilwr +aoffckzdhkdcmtbyirzhrjiz +aoffckzdhkdcmtbyjbkjpftg +aoffckzdhkdcmtbyjgfkeemk +aoffckzdhkdcmtbyjlakydfo +aoffckzdhkdcmtbyjuvmcaww +aoffckzdhkdcmtbykxrqrxft +aoffckzdhkdcmtbylhcsptqa +aoffckzdhkdcmtbylqxtyrci +aoffckzdhkdcmtbymaivwnmu +aoffckzdhkdcmtbymfdwlmfy +aoffckzdhkdcmtbymoyxujxb +aoffckzdhkdcmtbymttyjiqf +aoffckzdhkdcmtbypssfqqjt +aoffckzdhkdcmtbypxngfpcx +aoffckzdhkdcmtbyqcdhomua +aoffckzdhkdcmtbyqlyixkgi +aoffckzdhkdcmtbyqvokbhxq +aoffckzdhkdcmtbyraelkfjy +aoffckzdhkdcmtbyrounibuf +aoffckzdhtydvqtbaoffckzd +aoffckzdhtydvqtbatafwjsh +aoffckzdhtydvqtbbhlijevx +aoffckzdhtydvqtbbrbjscia +aoffckzdhtydvqtbcyxowxpb +aoffckzdhtydvqtbddnqavbj +aoffckzdhtydvqtbdiiqutzn +aoffckzdhtydvqtbdndrjssr +aoffckzdhtydvqtbdwyssqez +aoffckzdhtydvqtbegjuqmpg +aoffckzdhtydvqtbelevflik +aoffckzdhtydvqtbeuzwoizs +aoffckzdhtydvqtbezuxdhsw +aoffckzdhtydvqtbfoazvcwh +aoffckzdhtydvqtbhanbdvpq +aoffckzdhtydvqtbhfibxuiu +aoffckzdhtydvqtbhkdcmtby +aoffckzdhtydvqtbhtydvqtb +aoffckzdhtydvqtbhytekpmf +aoffckzdhtydvqtbiiegilwr +aoffckzdhtydvqtbirzhrjiz +aoffckzdhtydvqtbjbkjpftg +aoffckzdhtydvqtbjgfkeemk +aoffckzdhtydvqtbjlakydfo +aoffckzdhtydvqtbjuvmcaww +aoffckzdhtydvqtbkxrqrxft +aoffckzdhtydvqtblhcsptqa +aoffckzdhtydvqtblqxtyrci +aoffckzdhtydvqtbmaivwnmu +aoffckzdhtydvqtbmfdwlmfy +aoffckzdhtydvqtbmoyxujxb +aoffckzdhtydvqtbmttyjiqf +aoffckzdhtydvqtbpssfqqjt +aoffckzdhtydvqtbpxngfpcx +aoffckzdhtydvqtbqcdhomua +aoffckzdhtydvqtbqlyixkgi +aoffckzdhtydvqtbqvokbhxq +aoffckzdhtydvqtbraelkfjy +aoffckzdhtydvqtbrounibuf +aoffckzdhytekpmfaoffckzd +aoffckzdhytekpmfatafwjsh +aoffckzdhytekpmfbhlijevx +aoffckzdhytekpmfbrbjscia +aoffckzdhytekpmfcyxowxpb +aoffckzdhytekpmfddnqavbj +aoffckzdhytekpmfdiiqutzn +aoffckzdhytekpmfdndrjssr +aoffckzdhytekpmfdwyssqez +aoffckzdhytekpmfegjuqmpg +aoffckzdhytekpmfelevflik +aoffckzdhytekpmfeuzwoizs +aoffckzdhytekpmfezuxdhsw +aoffckzdhytekpmffoazvcwh +aoffckzdhytekpmfhanbdvpq +aoffckzdhytekpmfhfibxuiu +aoffckzdhytekpmfhkdcmtby +aoffckzdhytekpmfhtydvqtb +aoffckzdhytekpmfhytekpmf +aoffckzdhytekpmfiiegilwr +aoffckzdhytekpmfirzhrjiz +aoffckzdhytekpmfjbkjpftg +aoffckzdhytekpmfjgfkeemk +aoffckzdhytekpmfjlakydfo +aoffckzdhytekpmfjuvmcaww +aoffckzdhytekpmfkxrqrxft +aoffckzdhytekpmflhcsptqa +aoffckzdhytekpmflqxtyrci +aoffckzdhytekpmfmaivwnmu +aoffckzdhytekpmfmfdwlmfy +aoffckzdhytekpmfmoyxujxb +aoffckzdhytekpmfmttyjiqf +aoffckzdhytekpmfpssfqqjt +aoffckzdhytekpmfpxngfpcx +aoffckzdhytekpmfqcdhomua +aoffckzdhytekpmfqlyixkgi +aoffckzdhytekpmfqvokbhxq +aoffckzdhytekpmfraelkfjy +aoffckzdhytekpmfrounibuf +aoffckzdiiegilwraoffckzd +aoffckzdiiegilwratafwjsh +aoffckzdiiegilwrbhlijevx +aoffckzdiiegilwrbrbjscia +aoffckzdiiegilwrcyxowxpb +aoffckzdiiegilwrddnqavbj +aoffckzdiiegilwrdiiqutzn +aoffckzdiiegilwrdndrjssr +aoffckzdiiegilwrdwyssqez +aoffckzdiiegilwregjuqmpg +aoffckzdiiegilwrelevflik +aoffckzdiiegilwreuzwoizs +aoffckzdiiegilwrezuxdhsw +aoffckzdiiegilwrfoazvcwh +aoffckzdiiegilwrhanbdvpq +aoffckzdiiegilwrhfibxuiu +aoffckzdiiegilwrhkdcmtby +aoffckzdiiegilwrhtydvqtb +aoffckzdiiegilwrhytekpmf +aoffckzdiiegilwriiegilwr +aoffckzdiiegilwrirzhrjiz +aoffckzdiiegilwrjbkjpftg +aoffckzdiiegilwrjgfkeemk +aoffckzdiiegilwrjlakydfo +aoffckzdiiegilwrjuvmcaww +aoffckzdiiegilwrkxrqrxft +aoffckzdiiegilwrlhcsptqa +aoffckzdiiegilwrlqxtyrci +aoffckzdiiegilwrmaivwnmu +aoffckzdiiegilwrmfdwlmfy +aoffckzdiiegilwrmoyxujxb +aoffckzdiiegilwrmttyjiqf +aoffckzdiiegilwrpssfqqjt +aoffckzdiiegilwrpxngfpcx +aoffckzdiiegilwrqcdhomua +aoffckzdiiegilwrqlyixkgi +aoffckzdiiegilwrqvokbhxq +aoffckzdiiegilwrraelkfjy +aoffckzdiiegilwrrounibuf +aoffckzdirzhrjizaoffckzd +aoffckzdirzhrjizatafwjsh +aoffckzdirzhrjizbhlijevx +aoffckzdirzhrjizbrbjscia +aoffckzdirzhrjizcyxowxpb +aoffckzdirzhrjizddnqavbj +aoffckzdirzhrjizdiiqutzn +aoffckzdirzhrjizdndrjssr +aoffckzdirzhrjizdwyssqez +aoffckzdirzhrjizegjuqmpg +aoffckzdirzhrjizelevflik +aoffckzdirzhrjizeuzwoizs +aoffckzdirzhrjizezuxdhsw +aoffckzdirzhrjizfoazvcwh +aoffckzdirzhrjizhanbdvpq +aoffckzdirzhrjizhfibxuiu +aoffckzdirzhrjizhkdcmtby +aoffckzdirzhrjizhtydvqtb +aoffckzdirzhrjizhytekpmf +aoffckzdirzhrjiziiegilwr +aoffckzdirzhrjizirzhrjiz +aoffckzdirzhrjizjbkjpftg +aoffckzdirzhrjizjgfkeemk +aoffckzdirzhrjizjlakydfo +aoffckzdirzhrjizjuvmcaww +aoffckzdirzhrjizkxrqrxft +aoffckzdirzhrjizlhcsptqa +aoffckzdirzhrjizlqxtyrci +aoffckzdirzhrjizmaivwnmu +aoffckzdirzhrjizmfdwlmfy +aoffckzdirzhrjizmoyxujxb +aoffckzdirzhrjizmttyjiqf +aoffckzdirzhrjizpssfqqjt +aoffckzdirzhrjizpxngfpcx +aoffckzdirzhrjizqcdhomua +aoffckzdirzhrjizqlyixkgi +aoffckzdirzhrjizqvokbhxq +aoffckzdirzhrjizraelkfjy +aoffckzdirzhrjizrounibuf +aoffckzdjbkjpftgaoffckzd +aoffckzdjbkjpftgatafwjsh +aoffckzdjbkjpftgbhlijevx +aoffckzdjbkjpftgbrbjscia +aoffckzdjbkjpftgcyxowxpb +aoffckzdjbkjpftgddnqavbj +aoffckzdjbkjpftgdiiqutzn +aoffckzdjbkjpftgdndrjssr +aoffckzdjbkjpftgdwyssqez +aoffckzdjbkjpftgegjuqmpg +aoffckzdjbkjpftgelevflik +aoffckzdjbkjpftgeuzwoizs +aoffckzdjbkjpftgezuxdhsw +aoffckzdjbkjpftgfoazvcwh +aoffckzdjbkjpftghanbdvpq +aoffckzdjbkjpftghfibxuiu +aoffckzdjbkjpftghkdcmtby +aoffckzdjbkjpftghtydvqtb +aoffckzdjbkjpftghytekpmf +aoffckzdjbkjpftgiiegilwr +aoffckzdjbkjpftgirzhrjiz +aoffckzdjbkjpftgjbkjpftg +aoffckzdjbkjpftgjgfkeemk +aoffckzdjbkjpftgjlakydfo +aoffckzdjbkjpftgjuvmcaww +aoffckzdjbkjpftgkxrqrxft +aoffckzdjbkjpftglhcsptqa +aoffckzdjbkjpftglqxtyrci +aoffckzdjbkjpftgmaivwnmu +aoffckzdjbkjpftgmfdwlmfy +aoffckzdjbkjpftgmoyxujxb +aoffckzdjbkjpftgmttyjiqf +aoffckzdjbkjpftgpssfqqjt +aoffckzdjbkjpftgpxngfpcx +aoffckzdjbkjpftgqcdhomua +aoffckzdjbkjpftgqlyixkgi +aoffckzdjbkjpftgqvokbhxq +aoffckzdjbkjpftgraelkfjy +aoffckzdjbkjpftgrounibuf +aoffckzdjgfkeemkaoffckzd +aoffckzdjgfkeemkatafwjsh +aoffckzdjgfkeemkbhlijevx +aoffckzdjgfkeemkbrbjscia +aoffckzdjgfkeemkcyxowxpb +aoffckzdjgfkeemkddnqavbj +aoffckzdjgfkeemkdiiqutzn +aoffckzdjgfkeemkdndrjssr +aoffckzdjgfkeemkdwyssqez +aoffckzdjgfkeemkegjuqmpg +aoffckzdjgfkeemkelevflik +aoffckzdjgfkeemkeuzwoizs +aoffckzdjgfkeemkezuxdhsw +aoffckzdjgfkeemkfoazvcwh +aoffckzdjgfkeemkhanbdvpq +aoffckzdjgfkeemkhfibxuiu +aoffckzdjgfkeemkhkdcmtby +aoffckzdjgfkeemkhtydvqtb +aoffckzdjgfkeemkhytekpmf +aoffckzdjgfkeemkiiegilwr +aoffckzdjgfkeemkirzhrjiz +aoffckzdjgfkeemkjbkjpftg +aoffckzdjgfkeemkjgfkeemk +aoffckzdjgfkeemkjlakydfo +aoffckzdjgfkeemkjuvmcaww +aoffckzdjgfkeemkkxrqrxft +aoffckzdjgfkeemklhcsptqa +aoffckzdjgfkeemklqxtyrci +aoffckzdjgfkeemkmaivwnmu +aoffckzdjgfkeemkmfdwlmfy +aoffckzdjgfkeemkmoyxujxb +aoffckzdjgfkeemkmttyjiqf +aoffckzdjgfkeemkpssfqqjt +aoffckzdjgfkeemkpxngfpcx +aoffckzdjgfkeemkqcdhomua +aoffckzdjgfkeemkqlyixkgi +aoffckzdjgfkeemkqvokbhxq +aoffckzdjgfkeemkraelkfjy +aoffckzdjgfkeemkrounibuf +aoffckzdjlakydfoaoffckzd +aoffckzdjlakydfoatafwjsh +aoffckzdjlakydfobhlijevx +aoffckzdjlakydfobrbjscia +aoffckzdjlakydfocyxowxpb +aoffckzdjlakydfoddnqavbj +aoffckzdjlakydfodiiqutzn +aoffckzdjlakydfodndrjssr +aoffckzdjlakydfodwyssqez +aoffckzdjlakydfoegjuqmpg +aoffckzdjlakydfoelevflik +aoffckzdjlakydfoeuzwoizs +aoffckzdjlakydfoezuxdhsw +aoffckzdjlakydfofoazvcwh +aoffckzdjlakydfohanbdvpq +aoffckzdjlakydfohfibxuiu +aoffckzdjlakydfohkdcmtby +aoffckzdjlakydfohtydvqtb +aoffckzdjlakydfohytekpmf +aoffckzdjlakydfoiiegilwr +aoffckzdjlakydfoirzhrjiz +aoffckzdjlakydfojbkjpftg +aoffckzdjlakydfojgfkeemk +aoffckzdjlakydfojlakydfo +aoffckzdjlakydfojuvmcaww +aoffckzdjlakydfokxrqrxft +aoffckzdjlakydfolhcsptqa +aoffckzdjlakydfolqxtyrci +aoffckzdjlakydfomaivwnmu +aoffckzdjlakydfomfdwlmfy +aoffckzdjlakydfomoyxujxb +aoffckzdjlakydfomttyjiqf +aoffckzdjlakydfopssfqqjt +aoffckzdjlakydfopxngfpcx +aoffckzdjlakydfoqcdhomua +aoffckzdjlakydfoqlyixkgi +aoffckzdjlakydfoqvokbhxq +aoffckzdjlakydforaelkfjy +aoffckzdjlakydforounibuf +aoffckzdjuvmcawwaoffckzd +aoffckzdjuvmcawwatafwjsh +aoffckzdjuvmcawwbhlijevx +aoffckzdjuvmcawwbrbjscia +aoffckzdjuvmcawwcyxowxpb +aoffckzdjuvmcawwddnqavbj +aoffckzdjuvmcawwdiiqutzn +aoffckzdjuvmcawwdndrjssr +aoffckzdjuvmcawwdwyssqez +aoffckzdjuvmcawwegjuqmpg +aoffckzdjuvmcawwelevflik +aoffckzdjuvmcawweuzwoizs +aoffckzdjuvmcawwezuxdhsw +aoffckzdjuvmcawwfoazvcwh +aoffckzdjuvmcawwhanbdvpq +aoffckzdjuvmcawwhfibxuiu +aoffckzdjuvmcawwhkdcmtby +aoffckzdjuvmcawwhtydvqtb +aoffckzdjuvmcawwhytekpmf +aoffckzdjuvmcawwiiegilwr +aoffckzdjuvmcawwirzhrjiz +aoffckzdjuvmcawwjbkjpftg +aoffckzdjuvmcawwjgfkeemk +aoffckzdjuvmcawwjlakydfo +aoffckzdjuvmcawwjuvmcaww +aoffckzdjuvmcawwkxrqrxft +aoffckzdjuvmcawwlhcsptqa +aoffckzdjuvmcawwlqxtyrci +aoffckzdjuvmcawwmaivwnmu +aoffckzdjuvmcawwmfdwlmfy +aoffckzdjuvmcawwmoyxujxb +aoffckzdjuvmcawwmttyjiqf +aoffckzdjuvmcawwpssfqqjt +aoffckzdjuvmcawwpxngfpcx +aoffckzdjuvmcawwqcdhomua +aoffckzdjuvmcawwqlyixkgi +aoffckzdjuvmcawwqvokbhxq +aoffckzdjuvmcawwraelkfjy +aoffckzdjuvmcawwrounibuf +aoffckzdkxrqrxftaoffckzd +aoffckzdkxrqrxftatafwjsh +aoffckzdkxrqrxftbhlijevx +aoffckzdkxrqrxftbrbjscia +aoffckzdkxrqrxftcyxowxpb +aoffckzdkxrqrxftddnqavbj +aoffckzdkxrqrxftdiiqutzn +aoffckzdkxrqrxftdndrjssr +aoffckzdkxrqrxftdwyssqez +aoffckzdkxrqrxftegjuqmpg +aoffckzdkxrqrxftelevflik +aoffckzdkxrqrxfteuzwoizs +aoffckzdkxrqrxftezuxdhsw +aoffckzdkxrqrxftfoazvcwh +aoffckzdkxrqrxfthanbdvpq +aoffckzdkxrqrxfthfibxuiu +aoffckzdkxrqrxfthkdcmtby +aoffckzdkxrqrxfthtydvqtb +aoffckzdkxrqrxfthytekpmf +aoffckzdkxrqrxftiiegilwr +aoffckzdkxrqrxftirzhrjiz +aoffckzdkxrqrxftjbkjpftg +aoffckzdkxrqrxftjgfkeemk +aoffckzdkxrqrxftjlakydfo +aoffckzdkxrqrxftjuvmcaww +aoffckzdkxrqrxftkxrqrxft +aoffckzdkxrqrxftlhcsptqa +aoffckzdkxrqrxftlqxtyrci +aoffckzdkxrqrxftmaivwnmu +aoffckzdkxrqrxftmfdwlmfy +aoffckzdkxrqrxftmoyxujxb +aoffckzdkxrqrxftmttyjiqf +aoffckzdkxrqrxftpssfqqjt +aoffckzdkxrqrxftpxngfpcx +aoffckzdkxrqrxftqcdhomua +aoffckzdkxrqrxftqlyixkgi +aoffckzdkxrqrxftqvokbhxq +aoffckzdkxrqrxftraelkfjy +aoffckzdkxrqrxftrounibuf +aoffckzdlhcsptqaaoffckzd +aoffckzdlhcsptqaatafwjsh +aoffckzdlhcsptqabhlijevx +aoffckzdlhcsptqabrbjscia +aoffckzdlhcsptqacyxowxpb +aoffckzdlhcsptqaddnqavbj +aoffckzdlhcsptqadiiqutzn +aoffckzdlhcsptqadndrjssr +aoffckzdlhcsptqadwyssqez +aoffckzdlhcsptqaegjuqmpg +aoffckzdlhcsptqaelevflik +aoffckzdlhcsptqaeuzwoizs +aoffckzdlhcsptqaezuxdhsw +aoffckzdlhcsptqafoazvcwh +aoffckzdlhcsptqahanbdvpq +aoffckzdlhcsptqahfibxuiu +aoffckzdlhcsptqahkdcmtby +aoffckzdlhcsptqahtydvqtb +aoffckzdlhcsptqahytekpmf +aoffckzdlhcsptqaiiegilwr +aoffckzdlhcsptqairzhrjiz +aoffckzdlhcsptqajbkjpftg +aoffckzdlhcsptqajgfkeemk +aoffckzdlhcsptqajlakydfo +aoffckzdlhcsptqajuvmcaww +aoffckzdlhcsptqakxrqrxft +aoffckzdlhcsptqalhcsptqa +aoffckzdlhcsptqalqxtyrci +aoffckzdlhcsptqamaivwnmu +aoffckzdlhcsptqamfdwlmfy +aoffckzdlhcsptqamoyxujxb +aoffckzdlhcsptqamttyjiqf +aoffckzdlhcsptqapssfqqjt +aoffckzdlhcsptqapxngfpcx +aoffckzdlhcsptqaqcdhomua +aoffckzdlhcsptqaqlyixkgi +aoffckzdlhcsptqaqvokbhxq +aoffckzdlhcsptqaraelkfjy +aoffckzdlhcsptqarounibuf +aoffckzdlqxtyrciaoffckzd +aoffckzdlqxtyrciatafwjsh +aoffckzdlqxtyrcibhlijevx +aoffckzdlqxtyrcibrbjscia +aoffckzdlqxtyrcicyxowxpb +aoffckzdlqxtyrciddnqavbj +aoffckzdlqxtyrcidiiqutzn +aoffckzdlqxtyrcidndrjssr +aoffckzdlqxtyrcidwyssqez +aoffckzdlqxtyrciegjuqmpg +aoffckzdlqxtyrcielevflik +aoffckzdlqxtyrcieuzwoizs +aoffckzdlqxtyrciezuxdhsw +aoffckzdlqxtyrcifoazvcwh +aoffckzdlqxtyrcihanbdvpq +aoffckzdlqxtyrcihfibxuiu +aoffckzdlqxtyrcihkdcmtby +aoffckzdlqxtyrcihtydvqtb +aoffckzdlqxtyrcihytekpmf +aoffckzdlqxtyrciiiegilwr +aoffckzdlqxtyrciirzhrjiz +aoffckzdlqxtyrcijbkjpftg +aoffckzdlqxtyrcijgfkeemk +aoffckzdlqxtyrcijlakydfo +aoffckzdlqxtyrcijuvmcaww +aoffckzdlqxtyrcikxrqrxft +aoffckzdlqxtyrcilhcsptqa +aoffckzdlqxtyrcilqxtyrci +aoffckzdlqxtyrcimaivwnmu +aoffckzdlqxtyrcimfdwlmfy +aoffckzdlqxtyrcimoyxujxb +aoffckzdlqxtyrcimttyjiqf +aoffckzdlqxtyrcipssfqqjt +aoffckzdlqxtyrcipxngfpcx +aoffckzdlqxtyrciqcdhomua +aoffckzdlqxtyrciqlyixkgi +aoffckzdlqxtyrciqvokbhxq +aoffckzdlqxtyrciraelkfjy +aoffckzdlqxtyrcirounibuf +aoffckzdmaivwnmuaoffckzd +aoffckzdmaivwnmuatafwjsh +aoffckzdmaivwnmubhlijevx +aoffckzdmaivwnmubrbjscia +aoffckzdmaivwnmucyxowxpb +aoffckzdmaivwnmuddnqavbj +aoffckzdmaivwnmudiiqutzn +aoffckzdmaivwnmudndrjssr +aoffckzdmaivwnmudwyssqez +aoffckzdmaivwnmuegjuqmpg +aoffckzdmaivwnmuelevflik +aoffckzdmaivwnmueuzwoizs +aoffckzdmaivwnmuezuxdhsw +aoffckzdmaivwnmufoazvcwh +aoffckzdmaivwnmuhanbdvpq +aoffckzdmaivwnmuhfibxuiu +aoffckzdmaivwnmuhkdcmtby +aoffckzdmaivwnmuhtydvqtb +aoffckzdmaivwnmuhytekpmf +aoffckzdmaivwnmuiiegilwr +aoffckzdmaivwnmuirzhrjiz +aoffckzdmaivwnmujbkjpftg +aoffckzdmaivwnmujgfkeemk +aoffckzdmaivwnmujlakydfo +aoffckzdmaivwnmujuvmcaww +aoffckzdmaivwnmukxrqrxft +aoffckzdmaivwnmulhcsptqa +aoffckzdmaivwnmulqxtyrci +aoffckzdmaivwnmumaivwnmu +aoffckzdmaivwnmumfdwlmfy +aoffckzdmaivwnmumoyxujxb +aoffckzdmaivwnmumttyjiqf +aoffckzdmaivwnmupssfqqjt +aoffckzdmaivwnmupxngfpcx +aoffckzdmaivwnmuqcdhomua +aoffckzdmaivwnmuqlyixkgi +aoffckzdmaivwnmuqvokbhxq +aoffckzdmaivwnmuraelkfjy +aoffckzdmaivwnmurounibuf +aoffckzdmfdwlmfyaoffckzd +aoffckzdmfdwlmfyatafwjsh +aoffckzdmfdwlmfybhlijevx +aoffckzdmfdwlmfybrbjscia +aoffckzdmfdwlmfycyxowxpb +aoffckzdmfdwlmfyddnqavbj +aoffckzdmfdwlmfydiiqutzn +aoffckzdmfdwlmfydndrjssr +aoffckzdmfdwlmfydwyssqez +aoffckzdmfdwlmfyegjuqmpg +aoffckzdmfdwlmfyelevflik +aoffckzdmfdwlmfyeuzwoizs +aoffckzdmfdwlmfyezuxdhsw +aoffckzdmfdwlmfyfoazvcwh +aoffckzdmfdwlmfyhanbdvpq +aoffckzdmfdwlmfyhfibxuiu +aoffckzdmfdwlmfyhkdcmtby +aoffckzdmfdwlmfyhtydvqtb +aoffckzdmfdwlmfyhytekpmf +aoffckzdmfdwlmfyiiegilwr +aoffckzdmfdwlmfyirzhrjiz +aoffckzdmfdwlmfyjbkjpftg +aoffckzdmfdwlmfyjgfkeemk +aoffckzdmfdwlmfyjlakydfo +aoffckzdmfdwlmfyjuvmcaww +aoffckzdmfdwlmfykxrqrxft +aoffckzdmfdwlmfylhcsptqa +aoffckzdmfdwlmfylqxtyrci +aoffckzdmfdwlmfymaivwnmu +aoffckzdmfdwlmfymfdwlmfy +aoffckzdmfdwlmfymoyxujxb +aoffckzdmfdwlmfymttyjiqf +aoffckzdmfdwlmfypssfqqjt +aoffckzdmfdwlmfypxngfpcx +aoffckzdmfdwlmfyqcdhomua +aoffckzdmfdwlmfyqlyixkgi +aoffckzdmfdwlmfyqvokbhxq +aoffckzdmfdwlmfyraelkfjy +aoffckzdmfdwlmfyrounibuf +aoffckzdmoyxujxbaoffckzd +aoffckzdmoyxujxbatafwjsh +aoffckzdmoyxujxbbhlijevx +aoffckzdmoyxujxbbrbjscia +aoffckzdmoyxujxbcyxowxpb +aoffckzdmoyxujxbddnqavbj +aoffckzdmoyxujxbdiiqutzn +aoffckzdmoyxujxbdndrjssr +aoffckzdmoyxujxbdwyssqez +aoffckzdmoyxujxbegjuqmpg +aoffckzdmoyxujxbelevflik +aoffckzdmoyxujxbeuzwoizs +aoffckzdmoyxujxbezuxdhsw +aoffckzdmoyxujxbfoazvcwh +aoffckzdmoyxujxbhanbdvpq +aoffckzdmoyxujxbhfibxuiu +aoffckzdmoyxujxbhkdcmtby +aoffckzdmoyxujxbhtydvqtb +aoffckzdmoyxujxbhytekpmf +aoffckzdmoyxujxbiiegilwr +aoffckzdmoyxujxbirzhrjiz +aoffckzdmoyxujxbjbkjpftg +aoffckzdmoyxujxbjgfkeemk +aoffckzdmoyxujxbjlakydfo +aoffckzdmoyxujxbjuvmcaww +aoffckzdmoyxujxbkxrqrxft +aoffckzdmoyxujxblhcsptqa +aoffckzdmoyxujxblqxtyrci +aoffckzdmoyxujxbmaivwnmu +aoffckzdmoyxujxbmfdwlmfy +aoffckzdmoyxujxbmoyxujxb +aoffckzdmoyxujxbmttyjiqf +aoffckzdmoyxujxbpssfqqjt +aoffckzdmoyxujxbpxngfpcx +aoffckzdmoyxujxbqcdhomua +aoffckzdmoyxujxbqlyixkgi +aoffckzdmoyxujxbqvokbhxq +aoffckzdmoyxujxbraelkfjy +aoffckzdmoyxujxbrounibuf +aoffckzdmttyjiqfaoffckzd +aoffckzdmttyjiqfatafwjsh +aoffckzdmttyjiqfbhlijevx +aoffckzdmttyjiqfbrbjscia +aoffckzdmttyjiqfcyxowxpb +aoffckzdmttyjiqfddnqavbj +aoffckzdmttyjiqfdiiqutzn +aoffckzdmttyjiqfdndrjssr +aoffckzdmttyjiqfdwyssqez +aoffckzdmttyjiqfegjuqmpg +aoffckzdmttyjiqfelevflik +aoffckzdmttyjiqfeuzwoizs +aoffckzdmttyjiqfezuxdhsw +aoffckzdmttyjiqffoazvcwh +aoffckzdmttyjiqfhanbdvpq +aoffckzdmttyjiqfhfibxuiu +aoffckzdmttyjiqfhkdcmtby +aoffckzdmttyjiqfhtydvqtb +aoffckzdmttyjiqfhytekpmf +aoffckzdmttyjiqfiiegilwr +aoffckzdmttyjiqfirzhrjiz +aoffckzdmttyjiqfjbkjpftg +aoffckzdmttyjiqfjgfkeemk +aoffckzdmttyjiqfjlakydfo +aoffckzdmttyjiqfjuvmcaww +aoffckzdmttyjiqfkxrqrxft +aoffckzdmttyjiqflhcsptqa +aoffckzdmttyjiqflqxtyrci +aoffckzdmttyjiqfmaivwnmu +aoffckzdmttyjiqfmfdwlmfy +aoffckzdmttyjiqfmoyxujxb +aoffckzdmttyjiqfmttyjiqf +aoffckzdmttyjiqfpssfqqjt +aoffckzdmttyjiqfpxngfpcx +aoffckzdmttyjiqfqcdhomua +aoffckzdmttyjiqfqlyixkgi +aoffckzdmttyjiqfqvokbhxq +aoffckzdmttyjiqfraelkfjy +aoffckzdmttyjiqfrounibuf +aoffckzdpssfqqjtaoffckzd +aoffckzdpssfqqjtatafwjsh +aoffckzdpssfqqjtbhlijevx +aoffckzdpssfqqjtbrbjscia +aoffckzdpssfqqjtcyxowxpb +aoffckzdpssfqqjtddnqavbj +aoffckzdpssfqqjtdiiqutzn +aoffckzdpssfqqjtdndrjssr +aoffckzdpssfqqjtdwyssqez +aoffckzdpssfqqjtegjuqmpg +aoffckzdpssfqqjtelevflik +aoffckzdpssfqqjteuzwoizs +aoffckzdpssfqqjtezuxdhsw +aoffckzdpssfqqjtfoazvcwh +aoffckzdpssfqqjthanbdvpq +aoffckzdpssfqqjthfibxuiu +aoffckzdpssfqqjthkdcmtby +aoffckzdpssfqqjthtydvqtb +aoffckzdpssfqqjthytekpmf +aoffckzdpssfqqjtiiegilwr +aoffckzdpssfqqjtirzhrjiz +aoffckzdpssfqqjtjbkjpftg +aoffckzdpssfqqjtjgfkeemk +aoffckzdpssfqqjtjlakydfo +aoffckzdpssfqqjtjuvmcaww +aoffckzdpssfqqjtkxrqrxft +aoffckzdpssfqqjtlhcsptqa +aoffckzdpssfqqjtlqxtyrci +aoffckzdpssfqqjtmaivwnmu +aoffckzdpssfqqjtmfdwlmfy +aoffckzdpssfqqjtmoyxujxb +aoffckzdpssfqqjtmttyjiqf +aoffckzdpssfqqjtpssfqqjt +aoffckzdpssfqqjtpxngfpcx +aoffckzdpssfqqjtqcdhomua +aoffckzdpssfqqjtqlyixkgi +aoffckzdpssfqqjtqvokbhxq +aoffckzdpssfqqjtraelkfjy +aoffckzdpssfqqjtrounibuf +aoffckzdpxngfpcxaoffckzd +aoffckzdpxngfpcxatafwjsh +aoffckzdpxngfpcxbhlijevx +aoffckzdpxngfpcxbrbjscia +aoffckzdpxngfpcxcyxowxpb +aoffckzdpxngfpcxddnqavbj +aoffckzdpxngfpcxdiiqutzn +aoffckzdpxngfpcxdndrjssr +aoffckzdpxngfpcxdwyssqez +aoffckzdpxngfpcxegjuqmpg +aoffckzdpxngfpcxelevflik +aoffckzdpxngfpcxeuzwoizs +aoffckzdpxngfpcxezuxdhsw +aoffckzdpxngfpcxfoazvcwh +aoffckzdpxngfpcxhanbdvpq +aoffckzdpxngfpcxhfibxuiu +aoffckzdpxngfpcxhkdcmtby +aoffckzdpxngfpcxhtydvqtb +aoffckzdpxngfpcxhytekpmf +aoffckzdpxngfpcxiiegilwr +aoffckzdpxngfpcxirzhrjiz +aoffckzdpxngfpcxjbkjpftg +aoffckzdpxngfpcxjgfkeemk +aoffckzdpxngfpcxjlakydfo +aoffckzdpxngfpcxjuvmcaww +aoffckzdpxngfpcxkxrqrxft +aoffckzdpxngfpcxlhcsptqa +aoffckzdpxngfpcxlqxtyrci +aoffckzdpxngfpcxmaivwnmu +aoffckzdpxngfpcxmfdwlmfy +aoffckzdpxngfpcxmoyxujxb +aoffckzdpxngfpcxmttyjiqf +aoffckzdpxngfpcxpssfqqjt +aoffckzdpxngfpcxpxngfpcx +aoffckzdpxngfpcxqcdhomua +aoffckzdpxngfpcxqlyixkgi +aoffckzdpxngfpcxqvokbhxq +aoffckzdpxngfpcxraelkfjy +aoffckzdpxngfpcxrounibuf +aoffckzdqcdhomuaaoffckzd +aoffckzdqcdhomuaatafwjsh +aoffckzdqcdhomuabhlijevx +aoffckzdqcdhomuabrbjscia +aoffckzdqcdhomuacyxowxpb +aoffckzdqcdhomuaddnqavbj +aoffckzdqcdhomuadiiqutzn +aoffckzdqcdhomuadndrjssr +aoffckzdqcdhomuadwyssqez +aoffckzdqcdhomuaegjuqmpg +aoffckzdqcdhomuaelevflik +aoffckzdqcdhomuaeuzwoizs +aoffckzdqcdhomuaezuxdhsw +aoffckzdqcdhomuafoazvcwh +aoffckzdqcdhomuahanbdvpq +aoffckzdqcdhomuahfibxuiu +aoffckzdqcdhomuahkdcmtby +aoffckzdqcdhomuahtydvqtb +aoffckzdqcdhomuahytekpmf +aoffckzdqcdhomuaiiegilwr +aoffckzdqcdhomuairzhrjiz +aoffckzdqcdhomuajbkjpftg +aoffckzdqcdhomuajgfkeemk +aoffckzdqcdhomuajlakydfo +aoffckzdqcdhomuajuvmcaww +aoffckzdqcdhomuakxrqrxft +aoffckzdqcdhomualhcsptqa +aoffckzdqcdhomualqxtyrci +aoffckzdqcdhomuamaivwnmu +aoffckzdqcdhomuamfdwlmfy +aoffckzdqcdhomuamoyxujxb +aoffckzdqcdhomuamttyjiqf +aoffckzdqcdhomuapssfqqjt +aoffckzdqcdhomuapxngfpcx +aoffckzdqcdhomuaqcdhomua +aoffckzdqcdhomuaqlyixkgi +aoffckzdqcdhomuaqvokbhxq +aoffckzdqcdhomuaraelkfjy +aoffckzdqcdhomuarounibuf +aoffckzdqlyixkgiaoffckzd +aoffckzdqlyixkgiatafwjsh +aoffckzdqlyixkgibhlijevx +aoffckzdqlyixkgibrbjscia +aoffckzdqlyixkgicyxowxpb +aoffckzdqlyixkgiddnqavbj +aoffckzdqlyixkgidiiqutzn +aoffckzdqlyixkgidndrjssr +aoffckzdqlyixkgidwyssqez +aoffckzdqlyixkgiegjuqmpg +aoffckzdqlyixkgielevflik +aoffckzdqlyixkgieuzwoizs +aoffckzdqlyixkgiezuxdhsw +aoffckzdqlyixkgifoazvcwh +aoffckzdqlyixkgihanbdvpq +aoffckzdqlyixkgihfibxuiu +aoffckzdqlyixkgihkdcmtby +aoffckzdqlyixkgihtydvqtb +aoffckzdqlyixkgihytekpmf +aoffckzdqlyixkgiiiegilwr +aoffckzdqlyixkgiirzhrjiz +aoffckzdqlyixkgijbkjpftg +aoffckzdqlyixkgijgfkeemk +aoffckzdqlyixkgijlakydfo +aoffckzdqlyixkgijuvmcaww +aoffckzdqlyixkgikxrqrxft +aoffckzdqlyixkgilhcsptqa +aoffckzdqlyixkgilqxtyrci +aoffckzdqlyixkgimaivwnmu +aoffckzdqlyixkgimfdwlmfy +aoffckzdqlyixkgimoyxujxb +aoffckzdqlyixkgimttyjiqf +aoffckzdqlyixkgipssfqqjt +aoffckzdqlyixkgipxngfpcx +aoffckzdqlyixkgiqcdhomua +aoffckzdqlyixkgiqlyixkgi +aoffckzdqlyixkgiqvokbhxq +aoffckzdqlyixkgiraelkfjy +aoffckzdqlyixkgirounibuf +aoffckzdqvokbhxqaoffckzd +aoffckzdqvokbhxqatafwjsh +aoffckzdqvokbhxqbhlijevx +aoffckzdqvokbhxqbrbjscia +aoffckzdqvokbhxqcyxowxpb +aoffckzdqvokbhxqddnqavbj +aoffckzdqvokbhxqdiiqutzn +aoffckzdqvokbhxqdndrjssr +aoffckzdqvokbhxqdwyssqez +aoffckzdqvokbhxqegjuqmpg +aoffckzdqvokbhxqelevflik +aoffckzdqvokbhxqeuzwoizs +aoffckzdqvokbhxqezuxdhsw +aoffckzdqvokbhxqfoazvcwh +aoffckzdqvokbhxqhanbdvpq +aoffckzdqvokbhxqhfibxuiu +aoffckzdqvokbhxqhkdcmtby +aoffckzdqvokbhxqhtydvqtb +aoffckzdqvokbhxqhytekpmf +aoffckzdqvokbhxqiiegilwr +aoffckzdqvokbhxqirzhrjiz +aoffckzdqvokbhxqjbkjpftg +aoffckzdqvokbhxqjgfkeemk +aoffckzdqvokbhxqjlakydfo +aoffckzdqvokbhxqjuvmcaww +aoffckzdqvokbhxqkxrqrxft +aoffckzdqvokbhxqlhcsptqa +aoffckzdqvokbhxqlqxtyrci +aoffckzdqvokbhxqmaivwnmu +aoffckzdqvokbhxqmfdwlmfy +aoffckzdqvokbhxqmoyxujxb +aoffckzdqvokbhxqmttyjiqf +aoffckzdqvokbhxqpssfqqjt +aoffckzdqvokbhxqpxngfpcx +aoffckzdqvokbhxqqcdhomua +aoffckzdqvokbhxqqlyixkgi +aoffckzdqvokbhxqqvokbhxq +aoffckzdqvokbhxqraelkfjy +aoffckzdqvokbhxqrounibuf +aoffckzdraelkfjyaoffckzd +aoffckzdraelkfjyatafwjsh +aoffckzdraelkfjybhlijevx +aoffckzdraelkfjybrbjscia +aoffckzdraelkfjycyxowxpb +aoffckzdraelkfjyddnqavbj +aoffckzdraelkfjydiiqutzn +aoffckzdraelkfjydndrjssr +aoffckzdraelkfjydwyssqez +aoffckzdraelkfjyegjuqmpg +aoffckzdraelkfjyelevflik +aoffckzdraelkfjyeuzwoizs +aoffckzdraelkfjyezuxdhsw +aoffckzdraelkfjyfoazvcwh +aoffckzdraelkfjyhanbdvpq +aoffckzdraelkfjyhfibxuiu +aoffckzdraelkfjyhkdcmtby +aoffckzdraelkfjyhtydvqtb +aoffckzdraelkfjyhytekpmf +aoffckzdraelkfjyiiegilwr +aoffckzdraelkfjyirzhrjiz +aoffckzdraelkfjyjbkjpftg +aoffckzdraelkfjyjgfkeemk +aoffckzdraelkfjyjlakydfo +aoffckzdraelkfjyjuvmcaww +aoffckzdraelkfjykxrqrxft +aoffckzdraelkfjylhcsptqa +aoffckzdraelkfjylqxtyrci +aoffckzdraelkfjymaivwnmu +aoffckzdraelkfjymfdwlmfy +aoffckzdraelkfjymoyxujxb +aoffckzdraelkfjymttyjiqf +aoffckzdraelkfjypssfqqjt +aoffckzdraelkfjypxngfpcx +aoffckzdraelkfjyqcdhomua +aoffckzdraelkfjyqlyixkgi +aoffckzdraelkfjyqvokbhxq +aoffckzdraelkfjyraelkfjy +aoffckzdraelkfjyrounibuf +aoffckzdrounibufaoffckzd +aoffckzdrounibufatafwjsh +aoffckzdrounibufbhlijevx +aoffckzdrounibufbrbjscia +aoffckzdrounibufcyxowxpb +aoffckzdrounibufddnqavbj +aoffckzdrounibufdiiqutzn +aoffckzdrounibufdndrjssr +aoffckzdrounibufdwyssqez +aoffckzdrounibufegjuqmpg +aoffckzdrounibufelevflik +aoffckzdrounibufeuzwoizs +aoffckzdrounibufezuxdhsw +aoffckzdrounibuffoazvcwh +aoffckzdrounibufhanbdvpq +aoffckzdrounibufhfibxuiu +aoffckzdrounibufhkdcmtby +aoffckzdrounibufhtydvqtb +aoffckzdrounibufhytekpmf +aoffckzdrounibufiiegilwr +aoffckzdrounibufirzhrjiz +aoffckzdrounibufjbkjpftg +aoffckzdrounibufjgfkeemk +aoffckzdrounibufjlakydfo +aoffckzdrounibufjuvmcaww +aoffckzdrounibufkxrqrxft +aoffckzdrounibuflhcsptqa +aoffckzdrounibuflqxtyrci +aoffckzdrounibufmaivwnmu +aoffckzdrounibufmfdwlmfy +aoffckzdrounibufmoyxujxb +aoffckzdrounibufmttyjiqf +aoffckzdrounibufpssfqqjt +aoffckzdrounibufpxngfpcx +aoffckzdrounibufqcdhomua +aoffckzdrounibufqlyixkgi +aoffckzdrounibufqvokbhxq +aoffckzdrounibufraelkfjy +aoffckzdrounibufrounibuf +atafwjshaoffckzdaoffckzd +atafwjshaoffckzdatafwjsh +atafwjshaoffckzdbhlijevx +atafwjshaoffckzdbrbjscia +atafwjshaoffckzdcyxowxpb +atafwjshaoffckzdddnqavbj +atafwjshaoffckzddiiqutzn +atafwjshaoffckzddndrjssr +atafwjshaoffckzddwyssqez +atafwjshaoffckzdegjuqmpg +atafwjshaoffckzdelevflik +atafwjshaoffckzdeuzwoizs +atafwjshaoffckzdezuxdhsw +atafwjshaoffckzdfoazvcwh +atafwjshaoffckzdhanbdvpq +atafwjshaoffckzdhfibxuiu +atafwjshaoffckzdhkdcmtby +atafwjshaoffckzdhtydvqtb +atafwjshaoffckzdhytekpmf +atafwjshaoffckzdiiegilwr +atafwjshaoffckzdirzhrjiz +atafwjshaoffckzdjbkjpftg +atafwjshaoffckzdjgfkeemk +atafwjshaoffckzdjlakydfo +atafwjshaoffckzdjuvmcaww +atafwjshaoffckzdkxrqrxft +atafwjshaoffckzdlhcsptqa +atafwjshaoffckzdlqxtyrci +atafwjshaoffckzdmaivwnmu +atafwjshaoffckzdmfdwlmfy +atafwjshaoffckzdmoyxujxb +atafwjshaoffckzdmttyjiqf +atafwjshaoffckzdpssfqqjt +atafwjshaoffckzdpxngfpcx +atafwjshaoffckzdqcdhomua +atafwjshaoffckzdqlyixkgi +atafwjshaoffckzdqvokbhxq +atafwjshaoffckzdraelkfjy +atafwjshaoffckzdrounibuf +atafwjshatafwjshaoffckzd +atafwjshatafwjshatafwjsh +atafwjshatafwjshbhlijevx +atafwjshatafwjshbrbjscia +atafwjshatafwjshcyxowxpb +atafwjshatafwjshddnqavbj +atafwjshatafwjshdiiqutzn +atafwjshatafwjshdndrjssr +atafwjshatafwjshdwyssqez +atafwjshatafwjshegjuqmpg +atafwjshatafwjshelevflik +atafwjshatafwjsheuzwoizs +atafwjshatafwjshezuxdhsw +atafwjshatafwjshfoazvcwh +atafwjshatafwjshhanbdvpq +atafwjshatafwjshhfibxuiu +atafwjshatafwjshhkdcmtby +atafwjshatafwjshhtydvqtb +atafwjshatafwjshhytekpmf +atafwjshatafwjshiiegilwr +atafwjshatafwjshirzhrjiz +atafwjshatafwjshjbkjpftg +atafwjshatafwjshjgfkeemk +atafwjshatafwjshjlakydfo +atafwjshatafwjshjuvmcaww +atafwjshatafwjshkxrqrxft +atafwjshatafwjshlhcsptqa +atafwjshatafwjshlqxtyrci +atafwjshatafwjshmaivwnmu +atafwjshatafwjshmfdwlmfy +atafwjshatafwjshmoyxujxb +atafwjshatafwjshmttyjiqf +atafwjshatafwjshpssfqqjt +atafwjshatafwjshpxngfpcx +atafwjshatafwjshqcdhomua +atafwjshatafwjshqlyixkgi +atafwjshatafwjshqvokbhxq +atafwjshatafwjshraelkfjy +atafwjshatafwjshrounibuf +atafwjshbhlijevxaoffckzd +atafwjshbhlijevxatafwjsh +atafwjshbhlijevxbhlijevx +atafwjshbhlijevxbrbjscia +atafwjshbhlijevxcyxowxpb +atafwjshbhlijevxddnqavbj +atafwjshbhlijevxdiiqutzn +atafwjshbhlijevxdndrjssr +atafwjshbhlijevxdwyssqez +atafwjshbhlijevxegjuqmpg +atafwjshbhlijevxelevflik +atafwjshbhlijevxeuzwoizs +atafwjshbhlijevxezuxdhsw +atafwjshbhlijevxfoazvcwh +atafwjshbhlijevxhanbdvpq +atafwjshbhlijevxhfibxuiu +atafwjshbhlijevxhkdcmtby +atafwjshbhlijevxhtydvqtb +atafwjshbhlijevxhytekpmf +atafwjshbhlijevxiiegilwr +atafwjshbhlijevxirzhrjiz +atafwjshbhlijevxjbkjpftg +atafwjshbhlijevxjgfkeemk +atafwjshbhlijevxjlakydfo +atafwjshbhlijevxjuvmcaww +atafwjshbhlijevxkxrqrxft +atafwjshbhlijevxlhcsptqa +atafwjshbhlijevxlqxtyrci +atafwjshbhlijevxmaivwnmu +atafwjshbhlijevxmfdwlmfy +atafwjshbhlijevxmoyxujxb +atafwjshbhlijevxmttyjiqf +atafwjshbhlijevxpssfqqjt +atafwjshbhlijevxpxngfpcx +atafwjshbhlijevxqcdhomua +atafwjshbhlijevxqlyixkgi +atafwjshbhlijevxqvokbhxq +atafwjshbhlijevxraelkfjy +atafwjshbhlijevxrounibuf +atafwjshbrbjsciaaoffckzd +atafwjshbrbjsciaatafwjsh +atafwjshbrbjsciabhlijevx +atafwjshbrbjsciabrbjscia +atafwjshbrbjsciacyxowxpb +atafwjshbrbjsciaddnqavbj +atafwjshbrbjsciadiiqutzn +atafwjshbrbjsciadndrjssr +atafwjshbrbjsciadwyssqez +atafwjshbrbjsciaegjuqmpg +atafwjshbrbjsciaelevflik +atafwjshbrbjsciaeuzwoizs +atafwjshbrbjsciaezuxdhsw +atafwjshbrbjsciafoazvcwh +atafwjshbrbjsciahanbdvpq +atafwjshbrbjsciahfibxuiu +atafwjshbrbjsciahkdcmtby +atafwjshbrbjsciahtydvqtb +atafwjshbrbjsciahytekpmf +atafwjshbrbjsciaiiegilwr +atafwjshbrbjsciairzhrjiz +atafwjshbrbjsciajbkjpftg +atafwjshbrbjsciajgfkeemk +atafwjshbrbjsciajlakydfo +atafwjshbrbjsciajuvmcaww +atafwjshbrbjsciakxrqrxft +atafwjshbrbjscialhcsptqa +atafwjshbrbjscialqxtyrci +atafwjshbrbjsciamaivwnmu +atafwjshbrbjsciamfdwlmfy +atafwjshbrbjsciamoyxujxb +atafwjshbrbjsciamttyjiqf +atafwjshbrbjsciapssfqqjt +atafwjshbrbjsciapxngfpcx +atafwjshbrbjsciaqcdhomua +atafwjshbrbjsciaqlyixkgi +atafwjshbrbjsciaqvokbhxq +atafwjshbrbjsciaraelkfjy +atafwjshbrbjsciarounibuf +atafwjshcyxowxpbaoffckzd +atafwjshcyxowxpbatafwjsh +atafwjshcyxowxpbbhlijevx +atafwjshcyxowxpbbrbjscia +atafwjshcyxowxpbcyxowxpb +atafwjshcyxowxpbddnqavbj +atafwjshcyxowxpbdiiqutzn +atafwjshcyxowxpbdndrjssr +atafwjshcyxowxpbdwyssqez +atafwjshcyxowxpbegjuqmpg +atafwjshcyxowxpbelevflik +atafwjshcyxowxpbeuzwoizs +atafwjshcyxowxpbezuxdhsw +atafwjshcyxowxpbfoazvcwh +atafwjshcyxowxpbhanbdvpq +atafwjshcyxowxpbhfibxuiu +atafwjshcyxowxpbhkdcmtby +atafwjshcyxowxpbhtydvqtb +atafwjshcyxowxpbhytekpmf +atafwjshcyxowxpbiiegilwr +atafwjshcyxowxpbirzhrjiz +atafwjshcyxowxpbjbkjpftg +atafwjshcyxowxpbjgfkeemk +atafwjshcyxowxpbjlakydfo +atafwjshcyxowxpbjuvmcaww +atafwjshcyxowxpbkxrqrxft +atafwjshcyxowxpblhcsptqa +atafwjshcyxowxpblqxtyrci +atafwjshcyxowxpbmaivwnmu +atafwjshcyxowxpbmfdwlmfy +atafwjshcyxowxpbmoyxujxb +atafwjshcyxowxpbmttyjiqf +atafwjshcyxowxpbpssfqqjt +atafwjshcyxowxpbpxngfpcx +atafwjshcyxowxpbqcdhomua +atafwjshcyxowxpbqlyixkgi +atafwjshcyxowxpbqvokbhxq +atafwjshcyxowxpbraelkfjy +atafwjshcyxowxpbrounibuf +atafwjshddnqavbjaoffckzd +atafwjshddnqavbjatafwjsh +atafwjshddnqavbjbhlijevx +atafwjshddnqavbjbrbjscia +atafwjshddnqavbjcyxowxpb +atafwjshddnqavbjddnqavbj +atafwjshddnqavbjdiiqutzn +atafwjshddnqavbjdndrjssr +atafwjshddnqavbjdwyssqez +atafwjshddnqavbjegjuqmpg +atafwjshddnqavbjelevflik +atafwjshddnqavbjeuzwoizs +atafwjshddnqavbjezuxdhsw +atafwjshddnqavbjfoazvcwh +atafwjshddnqavbjhanbdvpq +atafwjshddnqavbjhfibxuiu +atafwjshddnqavbjhkdcmtby +atafwjshddnqavbjhtydvqtb +atafwjshddnqavbjhytekpmf +atafwjshddnqavbjiiegilwr +atafwjshddnqavbjirzhrjiz +atafwjshddnqavbjjbkjpftg +atafwjshddnqavbjjgfkeemk +atafwjshddnqavbjjlakydfo +atafwjshddnqavbjjuvmcaww +atafwjshddnqavbjkxrqrxft +atafwjshddnqavbjlhcsptqa +atafwjshddnqavbjlqxtyrci +atafwjshddnqavbjmaivwnmu +atafwjshddnqavbjmfdwlmfy +atafwjshddnqavbjmoyxujxb +atafwjshddnqavbjmttyjiqf +atafwjshddnqavbjpssfqqjt +atafwjshddnqavbjpxngfpcx +atafwjshddnqavbjqcdhomua +atafwjshddnqavbjqlyixkgi +atafwjshddnqavbjqvokbhxq +atafwjshddnqavbjraelkfjy +atafwjshddnqavbjrounibuf +atafwjshdiiqutznaoffckzd +atafwjshdiiqutznatafwjsh +atafwjshdiiqutznbhlijevx +atafwjshdiiqutznbrbjscia +atafwjshdiiqutzncyxowxpb +atafwjshdiiqutznddnqavbj +atafwjshdiiqutzndiiqutzn +atafwjshdiiqutzndndrjssr +atafwjshdiiqutzndwyssqez +atafwjshdiiqutznegjuqmpg +atafwjshdiiqutznelevflik +atafwjshdiiqutzneuzwoizs +atafwjshdiiqutznezuxdhsw +atafwjshdiiqutznfoazvcwh +atafwjshdiiqutznhanbdvpq +atafwjshdiiqutznhfibxuiu +atafwjshdiiqutznhkdcmtby +atafwjshdiiqutznhtydvqtb +atafwjshdiiqutznhytekpmf +atafwjshdiiqutzniiegilwr +atafwjshdiiqutznirzhrjiz +atafwjshdiiqutznjbkjpftg +atafwjshdiiqutznjgfkeemk +atafwjshdiiqutznjlakydfo +atafwjshdiiqutznjuvmcaww +atafwjshdiiqutznkxrqrxft +atafwjshdiiqutznlhcsptqa +atafwjshdiiqutznlqxtyrci +atafwjshdiiqutznmaivwnmu +atafwjshdiiqutznmfdwlmfy +atafwjshdiiqutznmoyxujxb +atafwjshdiiqutznmttyjiqf +atafwjshdiiqutznpssfqqjt +atafwjshdiiqutznpxngfpcx +atafwjshdiiqutznqcdhomua +atafwjshdiiqutznqlyixkgi +atafwjshdiiqutznqvokbhxq +atafwjshdiiqutznraelkfjy +atafwjshdiiqutznrounibuf +atafwjshdndrjssraoffckzd +atafwjshdndrjssratafwjsh +atafwjshdndrjssrbhlijevx +atafwjshdndrjssrbrbjscia +atafwjshdndrjssrcyxowxpb +atafwjshdndrjssrddnqavbj +atafwjshdndrjssrdiiqutzn +atafwjshdndrjssrdndrjssr +atafwjshdndrjssrdwyssqez +atafwjshdndrjssregjuqmpg +atafwjshdndrjssrelevflik +atafwjshdndrjssreuzwoizs +atafwjshdndrjssrezuxdhsw +atafwjshdndrjssrfoazvcwh +atafwjshdndrjssrhanbdvpq +atafwjshdndrjssrhfibxuiu +atafwjshdndrjssrhkdcmtby +atafwjshdndrjssrhtydvqtb +atafwjshdndrjssrhytekpmf +atafwjshdndrjssriiegilwr +atafwjshdndrjssrirzhrjiz +atafwjshdndrjssrjbkjpftg +atafwjshdndrjssrjgfkeemk +atafwjshdndrjssrjlakydfo +atafwjshdndrjssrjuvmcaww +atafwjshdndrjssrkxrqrxft +atafwjshdndrjssrlhcsptqa +atafwjshdndrjssrlqxtyrci +atafwjshdndrjssrmaivwnmu +atafwjshdndrjssrmfdwlmfy +atafwjshdndrjssrmoyxujxb +atafwjshdndrjssrmttyjiqf +atafwjshdndrjssrpssfqqjt +atafwjshdndrjssrpxngfpcx +atafwjshdndrjssrqcdhomua +atafwjshdndrjssrqlyixkgi +atafwjshdndrjssrqvokbhxq +atafwjshdndrjssrraelkfjy +atafwjshdndrjssrrounibuf +atafwjshdwyssqezaoffckzd +atafwjshdwyssqezatafwjsh +atafwjshdwyssqezbhlijevx +atafwjshdwyssqezbrbjscia +atafwjshdwyssqezcyxowxpb +atafwjshdwyssqezddnqavbj +atafwjshdwyssqezdiiqutzn +atafwjshdwyssqezdndrjssr +atafwjshdwyssqezdwyssqez +atafwjshdwyssqezegjuqmpg +atafwjshdwyssqezelevflik +atafwjshdwyssqezeuzwoizs +atafwjshdwyssqezezuxdhsw +atafwjshdwyssqezfoazvcwh +atafwjshdwyssqezhanbdvpq +atafwjshdwyssqezhfibxuiu +atafwjshdwyssqezhkdcmtby +atafwjshdwyssqezhtydvqtb +atafwjshdwyssqezhytekpmf +atafwjshdwyssqeziiegilwr +atafwjshdwyssqezirzhrjiz +atafwjshdwyssqezjbkjpftg +atafwjshdwyssqezjgfkeemk +atafwjshdwyssqezjlakydfo +atafwjshdwyssqezjuvmcaww +atafwjshdwyssqezkxrqrxft +atafwjshdwyssqezlhcsptqa +atafwjshdwyssqezlqxtyrci +atafwjshdwyssqezmaivwnmu +atafwjshdwyssqezmfdwlmfy +atafwjshdwyssqezmoyxujxb +atafwjshdwyssqezmttyjiqf +atafwjshdwyssqezpssfqqjt +atafwjshdwyssqezpxngfpcx +atafwjshdwyssqezqcdhomua +atafwjshdwyssqezqlyixkgi +atafwjshdwyssqezqvokbhxq +atafwjshdwyssqezraelkfjy +atafwjshdwyssqezrounibuf +atafwjshegjuqmpgaoffckzd +atafwjshegjuqmpgatafwjsh +atafwjshegjuqmpgbhlijevx +atafwjshegjuqmpgbrbjscia +atafwjshegjuqmpgcyxowxpb +atafwjshegjuqmpgddnqavbj +atafwjshegjuqmpgdiiqutzn +atafwjshegjuqmpgdndrjssr +atafwjshegjuqmpgdwyssqez +atafwjshegjuqmpgegjuqmpg +atafwjshegjuqmpgelevflik +atafwjshegjuqmpgeuzwoizs +atafwjshegjuqmpgezuxdhsw +atafwjshegjuqmpgfoazvcwh +atafwjshegjuqmpghanbdvpq +atafwjshegjuqmpghfibxuiu +atafwjshegjuqmpghkdcmtby +atafwjshegjuqmpghtydvqtb +atafwjshegjuqmpghytekpmf +atafwjshegjuqmpgiiegilwr +atafwjshegjuqmpgirzhrjiz +atafwjshegjuqmpgjbkjpftg +atafwjshegjuqmpgjgfkeemk +atafwjshegjuqmpgjlakydfo +atafwjshegjuqmpgjuvmcaww +atafwjshegjuqmpgkxrqrxft +atafwjshegjuqmpglhcsptqa +atafwjshegjuqmpglqxtyrci +atafwjshegjuqmpgmaivwnmu +atafwjshegjuqmpgmfdwlmfy +atafwjshegjuqmpgmoyxujxb +atafwjshegjuqmpgmttyjiqf +atafwjshegjuqmpgpssfqqjt +atafwjshegjuqmpgpxngfpcx +atafwjshegjuqmpgqcdhomua +atafwjshegjuqmpgqlyixkgi +atafwjshegjuqmpgqvokbhxq +atafwjshegjuqmpgraelkfjy +atafwjshegjuqmpgrounibuf +atafwjshelevflikaoffckzd +atafwjshelevflikatafwjsh +atafwjshelevflikbhlijevx +atafwjshelevflikbrbjscia +atafwjshelevflikcyxowxpb +atafwjshelevflikddnqavbj +atafwjshelevflikdiiqutzn +atafwjshelevflikdndrjssr +atafwjshelevflikdwyssqez +atafwjshelevflikegjuqmpg +atafwjshelevflikelevflik +atafwjshelevflikeuzwoizs +atafwjshelevflikezuxdhsw +atafwjshelevflikfoazvcwh +atafwjshelevflikhanbdvpq +atafwjshelevflikhfibxuiu +atafwjshelevflikhkdcmtby +atafwjshelevflikhtydvqtb +atafwjshelevflikhytekpmf +atafwjshelevflikiiegilwr +atafwjshelevflikirzhrjiz +atafwjshelevflikjbkjpftg +atafwjshelevflikjgfkeemk +atafwjshelevflikjlakydfo +atafwjshelevflikjuvmcaww +atafwjshelevflikkxrqrxft +atafwjshelevfliklhcsptqa +atafwjshelevfliklqxtyrci +atafwjshelevflikmaivwnmu +atafwjshelevflikmfdwlmfy +atafwjshelevflikmoyxujxb +atafwjshelevflikmttyjiqf +atafwjshelevflikpssfqqjt +atafwjshelevflikpxngfpcx +atafwjshelevflikqcdhomua +atafwjshelevflikqlyixkgi +atafwjshelevflikqvokbhxq +atafwjshelevflikraelkfjy +atafwjshelevflikrounibuf +atafwjsheuzwoizsaoffckzd +atafwjsheuzwoizsatafwjsh +atafwjsheuzwoizsbhlijevx +atafwjsheuzwoizsbrbjscia +atafwjsheuzwoizscyxowxpb +atafwjsheuzwoizsddnqavbj +atafwjsheuzwoizsdiiqutzn +atafwjsheuzwoizsdndrjssr +atafwjsheuzwoizsdwyssqez +atafwjsheuzwoizsegjuqmpg +atafwjsheuzwoizselevflik +atafwjsheuzwoizseuzwoizs +atafwjsheuzwoizsezuxdhsw +atafwjsheuzwoizsfoazvcwh +atafwjsheuzwoizshanbdvpq +atafwjsheuzwoizshfibxuiu +atafwjsheuzwoizshkdcmtby +atafwjsheuzwoizshtydvqtb +atafwjsheuzwoizshytekpmf +atafwjsheuzwoizsiiegilwr +atafwjsheuzwoizsirzhrjiz +atafwjsheuzwoizsjbkjpftg +atafwjsheuzwoizsjgfkeemk +atafwjsheuzwoizsjlakydfo +atafwjsheuzwoizsjuvmcaww +atafwjsheuzwoizskxrqrxft +atafwjsheuzwoizslhcsptqa +atafwjsheuzwoizslqxtyrci +atafwjsheuzwoizsmaivwnmu +atafwjsheuzwoizsmfdwlmfy +atafwjsheuzwoizsmoyxujxb +atafwjsheuzwoizsmttyjiqf +atafwjsheuzwoizspssfqqjt +atafwjsheuzwoizspxngfpcx +atafwjsheuzwoizsqcdhomua +atafwjsheuzwoizsqlyixkgi +atafwjsheuzwoizsqvokbhxq +atafwjsheuzwoizsraelkfjy +atafwjsheuzwoizsrounibuf +atafwjshezuxdhswaoffckzd +atafwjshezuxdhswatafwjsh +atafwjshezuxdhswbhlijevx +atafwjshezuxdhswbrbjscia +atafwjshezuxdhswcyxowxpb +atafwjshezuxdhswddnqavbj +atafwjshezuxdhswdiiqutzn +atafwjshezuxdhswdndrjssr +atafwjshezuxdhswdwyssqez +atafwjshezuxdhswegjuqmpg +atafwjshezuxdhswelevflik +atafwjshezuxdhsweuzwoizs +atafwjshezuxdhswezuxdhsw +atafwjshezuxdhswfoazvcwh +atafwjshezuxdhswhanbdvpq +atafwjshezuxdhswhfibxuiu +atafwjshezuxdhswhkdcmtby +atafwjshezuxdhswhtydvqtb +atafwjshezuxdhswhytekpmf +atafwjshezuxdhswiiegilwr +atafwjshezuxdhswirzhrjiz +atafwjshezuxdhswjbkjpftg +atafwjshezuxdhswjgfkeemk +atafwjshezuxdhswjlakydfo +atafwjshezuxdhswjuvmcaww +atafwjshezuxdhswkxrqrxft +atafwjshezuxdhswlhcsptqa +atafwjshezuxdhswlqxtyrci +atafwjshezuxdhswmaivwnmu +atafwjshezuxdhswmfdwlmfy +atafwjshezuxdhswmoyxujxb +atafwjshezuxdhswmttyjiqf +atafwjshezuxdhswpssfqqjt +atafwjshezuxdhswpxngfpcx +atafwjshezuxdhswqcdhomua +atafwjshezuxdhswqlyixkgi +atafwjshezuxdhswqvokbhxq +atafwjshezuxdhswraelkfjy +atafwjshezuxdhswrounibuf +atafwjshfoazvcwhaoffckzd +atafwjshfoazvcwhatafwjsh +atafwjshfoazvcwhbhlijevx +atafwjshfoazvcwhbrbjscia +atafwjshfoazvcwhcyxowxpb +atafwjshfoazvcwhddnqavbj +atafwjshfoazvcwhdiiqutzn +atafwjshfoazvcwhdndrjssr +atafwjshfoazvcwhdwyssqez +atafwjshfoazvcwhegjuqmpg +atafwjshfoazvcwhelevflik +atafwjshfoazvcwheuzwoizs +atafwjshfoazvcwhezuxdhsw +atafwjshfoazvcwhfoazvcwh +atafwjshfoazvcwhhanbdvpq +atafwjshfoazvcwhhfibxuiu +atafwjshfoazvcwhhkdcmtby +atafwjshfoazvcwhhtydvqtb +atafwjshfoazvcwhhytekpmf +atafwjshfoazvcwhiiegilwr +atafwjshfoazvcwhirzhrjiz +atafwjshfoazvcwhjbkjpftg +atafwjshfoazvcwhjgfkeemk +atafwjshfoazvcwhjlakydfo +atafwjshfoazvcwhjuvmcaww +atafwjshfoazvcwhkxrqrxft +atafwjshfoazvcwhlhcsptqa +atafwjshfoazvcwhlqxtyrci +atafwjshfoazvcwhmaivwnmu +atafwjshfoazvcwhmfdwlmfy +atafwjshfoazvcwhmoyxujxb +atafwjshfoazvcwhmttyjiqf +atafwjshfoazvcwhpssfqqjt +atafwjshfoazvcwhpxngfpcx +atafwjshfoazvcwhqcdhomua +atafwjshfoazvcwhqlyixkgi +atafwjshfoazvcwhqvokbhxq +atafwjshfoazvcwhraelkfjy +atafwjshfoazvcwhrounibuf +atafwjshhanbdvpqaoffckzd +atafwjshhanbdvpqatafwjsh +atafwjshhanbdvpqbhlijevx +atafwjshhanbdvpqbrbjscia +atafwjshhanbdvpqcyxowxpb +atafwjshhanbdvpqddnqavbj +atafwjshhanbdvpqdiiqutzn +atafwjshhanbdvpqdndrjssr +atafwjshhanbdvpqdwyssqez +atafwjshhanbdvpqegjuqmpg +atafwjshhanbdvpqelevflik +atafwjshhanbdvpqeuzwoizs +atafwjshhanbdvpqezuxdhsw +atafwjshhanbdvpqfoazvcwh +atafwjshhanbdvpqhanbdvpq +atafwjshhanbdvpqhfibxuiu +atafwjshhanbdvpqhkdcmtby +atafwjshhanbdvpqhtydvqtb +atafwjshhanbdvpqhytekpmf +atafwjshhanbdvpqiiegilwr +atafwjshhanbdvpqirzhrjiz +atafwjshhanbdvpqjbkjpftg +atafwjshhanbdvpqjgfkeemk +atafwjshhanbdvpqjlakydfo +atafwjshhanbdvpqjuvmcaww +atafwjshhanbdvpqkxrqrxft +atafwjshhanbdvpqlhcsptqa +atafwjshhanbdvpqlqxtyrci +atafwjshhanbdvpqmaivwnmu +atafwjshhanbdvpqmfdwlmfy +atafwjshhanbdvpqmoyxujxb +atafwjshhanbdvpqmttyjiqf +atafwjshhanbdvpqpssfqqjt +atafwjshhanbdvpqpxngfpcx +atafwjshhanbdvpqqcdhomua +atafwjshhanbdvpqqlyixkgi +atafwjshhanbdvpqqvokbhxq +atafwjshhanbdvpqraelkfjy +atafwjshhanbdvpqrounibuf +atafwjshhfibxuiuaoffckzd +atafwjshhfibxuiuatafwjsh +atafwjshhfibxuiubhlijevx +atafwjshhfibxuiubrbjscia +atafwjshhfibxuiucyxowxpb +atafwjshhfibxuiuddnqavbj +atafwjshhfibxuiudiiqutzn +atafwjshhfibxuiudndrjssr +atafwjshhfibxuiudwyssqez +atafwjshhfibxuiuegjuqmpg +atafwjshhfibxuiuelevflik +atafwjshhfibxuiueuzwoizs +atafwjshhfibxuiuezuxdhsw +atafwjshhfibxuiufoazvcwh +atafwjshhfibxuiuhanbdvpq +atafwjshhfibxuiuhfibxuiu +atafwjshhfibxuiuhkdcmtby +atafwjshhfibxuiuhtydvqtb +atafwjshhfibxuiuhytekpmf +atafwjshhfibxuiuiiegilwr +atafwjshhfibxuiuirzhrjiz +atafwjshhfibxuiujbkjpftg +atafwjshhfibxuiujgfkeemk +atafwjshhfibxuiujlakydfo +atafwjshhfibxuiujuvmcaww +atafwjshhfibxuiukxrqrxft +atafwjshhfibxuiulhcsptqa +atafwjshhfibxuiulqxtyrci +atafwjshhfibxuiumaivwnmu +atafwjshhfibxuiumfdwlmfy +atafwjshhfibxuiumoyxujxb +atafwjshhfibxuiumttyjiqf +atafwjshhfibxuiupssfqqjt +atafwjshhfibxuiupxngfpcx +atafwjshhfibxuiuqcdhomua +atafwjshhfibxuiuqlyixkgi +atafwjshhfibxuiuqvokbhxq +atafwjshhfibxuiuraelkfjy +atafwjshhfibxuiurounibuf +atafwjshhkdcmtbyaoffckzd +atafwjshhkdcmtbyatafwjsh +atafwjshhkdcmtbybhlijevx +atafwjshhkdcmtbybrbjscia +atafwjshhkdcmtbycyxowxpb +atafwjshhkdcmtbyddnqavbj +atafwjshhkdcmtbydiiqutzn +atafwjshhkdcmtbydndrjssr +atafwjshhkdcmtbydwyssqez +atafwjshhkdcmtbyegjuqmpg +atafwjshhkdcmtbyelevflik +atafwjshhkdcmtbyeuzwoizs +atafwjshhkdcmtbyezuxdhsw +atafwjshhkdcmtbyfoazvcwh +atafwjshhkdcmtbyhanbdvpq +atafwjshhkdcmtbyhfibxuiu +atafwjshhkdcmtbyhkdcmtby +atafwjshhkdcmtbyhtydvqtb +atafwjshhkdcmtbyhytekpmf +atafwjshhkdcmtbyiiegilwr +atafwjshhkdcmtbyirzhrjiz +atafwjshhkdcmtbyjbkjpftg +atafwjshhkdcmtbyjgfkeemk +atafwjshhkdcmtbyjlakydfo +atafwjshhkdcmtbyjuvmcaww +atafwjshhkdcmtbykxrqrxft +atafwjshhkdcmtbylhcsptqa +atafwjshhkdcmtbylqxtyrci +atafwjshhkdcmtbymaivwnmu +atafwjshhkdcmtbymfdwlmfy +atafwjshhkdcmtbymoyxujxb +atafwjshhkdcmtbymttyjiqf +atafwjshhkdcmtbypssfqqjt +atafwjshhkdcmtbypxngfpcx +atafwjshhkdcmtbyqcdhomua +atafwjshhkdcmtbyqlyixkgi +atafwjshhkdcmtbyqvokbhxq +atafwjshhkdcmtbyraelkfjy +atafwjshhkdcmtbyrounibuf +atafwjshhtydvqtbaoffckzd +atafwjshhtydvqtbatafwjsh +atafwjshhtydvqtbbhlijevx +atafwjshhtydvqtbbrbjscia +atafwjshhtydvqtbcyxowxpb +atafwjshhtydvqtbddnqavbj +atafwjshhtydvqtbdiiqutzn +atafwjshhtydvqtbdndrjssr +atafwjshhtydvqtbdwyssqez +atafwjshhtydvqtbegjuqmpg +atafwjshhtydvqtbelevflik +atafwjshhtydvqtbeuzwoizs +atafwjshhtydvqtbezuxdhsw +atafwjshhtydvqtbfoazvcwh +atafwjshhtydvqtbhanbdvpq +atafwjshhtydvqtbhfibxuiu +atafwjshhtydvqtbhkdcmtby +atafwjshhtydvqtbhtydvqtb +atafwjshhtydvqtbhytekpmf +atafwjshhtydvqtbiiegilwr +atafwjshhtydvqtbirzhrjiz +atafwjshhtydvqtbjbkjpftg +atafwjshhtydvqtbjgfkeemk +atafwjshhtydvqtbjlakydfo +atafwjshhtydvqtbjuvmcaww +atafwjshhtydvqtbkxrqrxft +atafwjshhtydvqtblhcsptqa +atafwjshhtydvqtblqxtyrci +atafwjshhtydvqtbmaivwnmu +atafwjshhtydvqtbmfdwlmfy +atafwjshhtydvqtbmoyxujxb +atafwjshhtydvqtbmttyjiqf +atafwjshhtydvqtbpssfqqjt +atafwjshhtydvqtbpxngfpcx +atafwjshhtydvqtbqcdhomua +atafwjshhtydvqtbqlyixkgi +atafwjshhtydvqtbqvokbhxq +atafwjshhtydvqtbraelkfjy +atafwjshhtydvqtbrounibuf +atafwjshhytekpmfaoffckzd +atafwjshhytekpmfatafwjsh +atafwjshhytekpmfbhlijevx +atafwjshhytekpmfbrbjscia +atafwjshhytekpmfcyxowxpb +atafwjshhytekpmfddnqavbj +atafwjshhytekpmfdiiqutzn +atafwjshhytekpmfdndrjssr +atafwjshhytekpmfdwyssqez +atafwjshhytekpmfegjuqmpg +atafwjshhytekpmfelevflik +atafwjshhytekpmfeuzwoizs +atafwjshhytekpmfezuxdhsw +atafwjshhytekpmffoazvcwh +atafwjshhytekpmfhanbdvpq +atafwjshhytekpmfhfibxuiu +atafwjshhytekpmfhkdcmtby +atafwjshhytekpmfhtydvqtb +atafwjshhytekpmfhytekpmf +atafwjshhytekpmfiiegilwr +atafwjshhytekpmfirzhrjiz +atafwjshhytekpmfjbkjpftg +atafwjshhytekpmfjgfkeemk +atafwjshhytekpmfjlakydfo +atafwjshhytekpmfjuvmcaww +atafwjshhytekpmfkxrqrxft +atafwjshhytekpmflhcsptqa +atafwjshhytekpmflqxtyrci +atafwjshhytekpmfmaivwnmu +atafwjshhytekpmfmfdwlmfy +atafwjshhytekpmfmoyxujxb +atafwjshhytekpmfmttyjiqf +atafwjshhytekpmfpssfqqjt +atafwjshhytekpmfpxngfpcx +atafwjshhytekpmfqcdhomua +atafwjshhytekpmfqlyixkgi +atafwjshhytekpmfqvokbhxq +atafwjshhytekpmfraelkfjy +atafwjshhytekpmfrounibuf +atafwjshiiegilwraoffckzd +atafwjshiiegilwratafwjsh +atafwjshiiegilwrbhlijevx +atafwjshiiegilwrbrbjscia +atafwjshiiegilwrcyxowxpb +atafwjshiiegilwrddnqavbj +atafwjshiiegilwrdiiqutzn +atafwjshiiegilwrdndrjssr +atafwjshiiegilwrdwyssqez +atafwjshiiegilwregjuqmpg +atafwjshiiegilwrelevflik +atafwjshiiegilwreuzwoizs +atafwjshiiegilwrezuxdhsw +atafwjshiiegilwrfoazvcwh +atafwjshiiegilwrhanbdvpq +atafwjshiiegilwrhfibxuiu +atafwjshiiegilwrhkdcmtby +atafwjshiiegilwrhtydvqtb +atafwjshiiegilwrhytekpmf +atafwjshiiegilwriiegilwr +atafwjshiiegilwrirzhrjiz +atafwjshiiegilwrjbkjpftg +atafwjshiiegilwrjgfkeemk +atafwjshiiegilwrjlakydfo +atafwjshiiegilwrjuvmcaww +atafwjshiiegilwrkxrqrxft +atafwjshiiegilwrlhcsptqa +atafwjshiiegilwrlqxtyrci +atafwjshiiegilwrmaivwnmu +atafwjshiiegilwrmfdwlmfy +atafwjshiiegilwrmoyxujxb +atafwjshiiegilwrmttyjiqf +atafwjshiiegilwrpssfqqjt +atafwjshiiegilwrpxngfpcx +atafwjshiiegilwrqcdhomua +atafwjshiiegilwrqlyixkgi +atafwjshiiegilwrqvokbhxq +atafwjshiiegilwrraelkfjy +atafwjshiiegilwrrounibuf +atafwjshirzhrjizaoffckzd +atafwjshirzhrjizatafwjsh +atafwjshirzhrjizbhlijevx +atafwjshirzhrjizbrbjscia +atafwjshirzhrjizcyxowxpb +atafwjshirzhrjizddnqavbj +atafwjshirzhrjizdiiqutzn +atafwjshirzhrjizdndrjssr +atafwjshirzhrjizdwyssqez +atafwjshirzhrjizegjuqmpg +atafwjshirzhrjizelevflik +atafwjshirzhrjizeuzwoizs +atafwjshirzhrjizezuxdhsw +atafwjshirzhrjizfoazvcwh +atafwjshirzhrjizhanbdvpq +atafwjshirzhrjizhfibxuiu +atafwjshirzhrjizhkdcmtby +atafwjshirzhrjizhtydvqtb +atafwjshirzhrjizhytekpmf +atafwjshirzhrjiziiegilwr +atafwjshirzhrjizirzhrjiz +atafwjshirzhrjizjbkjpftg +atafwjshirzhrjizjgfkeemk +atafwjshirzhrjizjlakydfo +atafwjshirzhrjizjuvmcaww +atafwjshirzhrjizkxrqrxft +atafwjshirzhrjizlhcsptqa +atafwjshirzhrjizlqxtyrci +atafwjshirzhrjizmaivwnmu +atafwjshirzhrjizmfdwlmfy +atafwjshirzhrjizmoyxujxb +atafwjshirzhrjizmttyjiqf +atafwjshirzhrjizpssfqqjt +atafwjshirzhrjizpxngfpcx +atafwjshirzhrjizqcdhomua +atafwjshirzhrjizqlyixkgi +atafwjshirzhrjizqvokbhxq +atafwjshirzhrjizraelkfjy +atafwjshirzhrjizrounibuf +atafwjshjbkjpftgaoffckzd +atafwjshjbkjpftgatafwjsh +atafwjshjbkjpftgbhlijevx +atafwjshjbkjpftgbrbjscia +atafwjshjbkjpftgcyxowxpb +atafwjshjbkjpftgddnqavbj +atafwjshjbkjpftgdiiqutzn +atafwjshjbkjpftgdndrjssr +atafwjshjbkjpftgdwyssqez +atafwjshjbkjpftgegjuqmpg +atafwjshjbkjpftgelevflik +atafwjshjbkjpftgeuzwoizs +atafwjshjbkjpftgezuxdhsw +atafwjshjbkjpftgfoazvcwh +atafwjshjbkjpftghanbdvpq +atafwjshjbkjpftghfibxuiu +atafwjshjbkjpftghkdcmtby +atafwjshjbkjpftghtydvqtb +atafwjshjbkjpftghytekpmf +atafwjshjbkjpftgiiegilwr +atafwjshjbkjpftgirzhrjiz +atafwjshjbkjpftgjbkjpftg +atafwjshjbkjpftgjgfkeemk +atafwjshjbkjpftgjlakydfo +atafwjshjbkjpftgjuvmcaww +atafwjshjbkjpftgkxrqrxft +atafwjshjbkjpftglhcsptqa +atafwjshjbkjpftglqxtyrci +atafwjshjbkjpftgmaivwnmu +atafwjshjbkjpftgmfdwlmfy +atafwjshjbkjpftgmoyxujxb +atafwjshjbkjpftgmttyjiqf +atafwjshjbkjpftgpssfqqjt +atafwjshjbkjpftgpxngfpcx +atafwjshjbkjpftgqcdhomua +atafwjshjbkjpftgqlyixkgi +atafwjshjbkjpftgqvokbhxq +atafwjshjbkjpftgraelkfjy +atafwjshjbkjpftgrounibuf +atafwjshjgfkeemkaoffckzd +atafwjshjgfkeemkatafwjsh +atafwjshjgfkeemkbhlijevx +atafwjshjgfkeemkbrbjscia +atafwjshjgfkeemkcyxowxpb +atafwjshjgfkeemkddnqavbj +atafwjshjgfkeemkdiiqutzn +atafwjshjgfkeemkdndrjssr +atafwjshjgfkeemkdwyssqez +atafwjshjgfkeemkegjuqmpg +atafwjshjgfkeemkelevflik +atafwjshjgfkeemkeuzwoizs +atafwjshjgfkeemkezuxdhsw +atafwjshjgfkeemkfoazvcwh +atafwjshjgfkeemkhanbdvpq +atafwjshjgfkeemkhfibxuiu +atafwjshjgfkeemkhkdcmtby +atafwjshjgfkeemkhtydvqtb +atafwjshjgfkeemkhytekpmf +atafwjshjgfkeemkiiegilwr +atafwjshjgfkeemkirzhrjiz +atafwjshjgfkeemkjbkjpftg +atafwjshjgfkeemkjgfkeemk +atafwjshjgfkeemkjlakydfo +atafwjshjgfkeemkjuvmcaww +atafwjshjgfkeemkkxrqrxft +atafwjshjgfkeemklhcsptqa +atafwjshjgfkeemklqxtyrci +atafwjshjgfkeemkmaivwnmu +atafwjshjgfkeemkmfdwlmfy +atafwjshjgfkeemkmoyxujxb +atafwjshjgfkeemkmttyjiqf +atafwjshjgfkeemkpssfqqjt +atafwjshjgfkeemkpxngfpcx +atafwjshjgfkeemkqcdhomua +atafwjshjgfkeemkqlyixkgi +atafwjshjgfkeemkqvokbhxq +atafwjshjgfkeemkraelkfjy +atafwjshjgfkeemkrounibuf +atafwjshjlakydfoaoffckzd +atafwjshjlakydfoatafwjsh +atafwjshjlakydfobhlijevx +atafwjshjlakydfobrbjscia +atafwjshjlakydfocyxowxpb +atafwjshjlakydfoddnqavbj +atafwjshjlakydfodiiqutzn +atafwjshjlakydfodndrjssr +atafwjshjlakydfodwyssqez +atafwjshjlakydfoegjuqmpg +atafwjshjlakydfoelevflik +atafwjshjlakydfoeuzwoizs +atafwjshjlakydfoezuxdhsw +atafwjshjlakydfofoazvcwh +atafwjshjlakydfohanbdvpq +atafwjshjlakydfohfibxuiu +atafwjshjlakydfohkdcmtby +atafwjshjlakydfohtydvqtb +atafwjshjlakydfohytekpmf +atafwjshjlakydfoiiegilwr +atafwjshjlakydfoirzhrjiz +atafwjshjlakydfojbkjpftg +atafwjshjlakydfojgfkeemk +atafwjshjlakydfojlakydfo +atafwjshjlakydfojuvmcaww +atafwjshjlakydfokxrqrxft +atafwjshjlakydfolhcsptqa +atafwjshjlakydfolqxtyrci +atafwjshjlakydfomaivwnmu +atafwjshjlakydfomfdwlmfy +atafwjshjlakydfomoyxujxb +atafwjshjlakydfomttyjiqf +atafwjshjlakydfopssfqqjt +atafwjshjlakydfopxngfpcx +atafwjshjlakydfoqcdhomua +atafwjshjlakydfoqlyixkgi +atafwjshjlakydfoqvokbhxq +atafwjshjlakydforaelkfjy +atafwjshjlakydforounibuf +atafwjshjuvmcawwaoffckzd +atafwjshjuvmcawwatafwjsh +atafwjshjuvmcawwbhlijevx +atafwjshjuvmcawwbrbjscia +atafwjshjuvmcawwcyxowxpb +atafwjshjuvmcawwddnqavbj +atafwjshjuvmcawwdiiqutzn +atafwjshjuvmcawwdndrjssr +atafwjshjuvmcawwdwyssqez +atafwjshjuvmcawwegjuqmpg +atafwjshjuvmcawwelevflik +atafwjshjuvmcawweuzwoizs +atafwjshjuvmcawwezuxdhsw +atafwjshjuvmcawwfoazvcwh +atafwjshjuvmcawwhanbdvpq +atafwjshjuvmcawwhfibxuiu +atafwjshjuvmcawwhkdcmtby +atafwjshjuvmcawwhtydvqtb +atafwjshjuvmcawwhytekpmf +atafwjshjuvmcawwiiegilwr +atafwjshjuvmcawwirzhrjiz +atafwjshjuvmcawwjbkjpftg +atafwjshjuvmcawwjgfkeemk +atafwjshjuvmcawwjlakydfo +atafwjshjuvmcawwjuvmcaww +atafwjshjuvmcawwkxrqrxft +atafwjshjuvmcawwlhcsptqa +atafwjshjuvmcawwlqxtyrci +atafwjshjuvmcawwmaivwnmu +atafwjshjuvmcawwmfdwlmfy +atafwjshjuvmcawwmoyxujxb +atafwjshjuvmcawwmttyjiqf +atafwjshjuvmcawwpssfqqjt +atafwjshjuvmcawwpxngfpcx +atafwjshjuvmcawwqcdhomua +atafwjshjuvmcawwqlyixkgi +atafwjshjuvmcawwqvokbhxq +atafwjshjuvmcawwraelkfjy +atafwjshjuvmcawwrounibuf +atafwjshkxrqrxftaoffckzd +atafwjshkxrqrxftatafwjsh +atafwjshkxrqrxftbhlijevx +atafwjshkxrqrxftbrbjscia +atafwjshkxrqrxftcyxowxpb +atafwjshkxrqrxftddnqavbj +atafwjshkxrqrxftdiiqutzn +atafwjshkxrqrxftdndrjssr +atafwjshkxrqrxftdwyssqez +atafwjshkxrqrxftegjuqmpg +atafwjshkxrqrxftelevflik +atafwjshkxrqrxfteuzwoizs +atafwjshkxrqrxftezuxdhsw +atafwjshkxrqrxftfoazvcwh +atafwjshkxrqrxfthanbdvpq +atafwjshkxrqrxfthfibxuiu +atafwjshkxrqrxfthkdcmtby +atafwjshkxrqrxfthtydvqtb +atafwjshkxrqrxfthytekpmf +atafwjshkxrqrxftiiegilwr +atafwjshkxrqrxftirzhrjiz +atafwjshkxrqrxftjbkjpftg +atafwjshkxrqrxftjgfkeemk +atafwjshkxrqrxftjlakydfo +atafwjshkxrqrxftjuvmcaww +atafwjshkxrqrxftkxrqrxft +atafwjshkxrqrxftlhcsptqa +atafwjshkxrqrxftlqxtyrci +atafwjshkxrqrxftmaivwnmu +atafwjshkxrqrxftmfdwlmfy +atafwjshkxrqrxftmoyxujxb +atafwjshkxrqrxftmttyjiqf +atafwjshkxrqrxftpssfqqjt +atafwjshkxrqrxftpxngfpcx +atafwjshkxrqrxftqcdhomua +atafwjshkxrqrxftqlyixkgi +atafwjshkxrqrxftqvokbhxq +atafwjshkxrqrxftraelkfjy +atafwjshkxrqrxftrounibuf +atafwjshlhcsptqaaoffckzd +atafwjshlhcsptqaatafwjsh +atafwjshlhcsptqabhlijevx +atafwjshlhcsptqabrbjscia +atafwjshlhcsptqacyxowxpb +atafwjshlhcsptqaddnqavbj +atafwjshlhcsptqadiiqutzn +atafwjshlhcsptqadndrjssr +atafwjshlhcsptqadwyssqez +atafwjshlhcsptqaegjuqmpg +atafwjshlhcsptqaelevflik +atafwjshlhcsptqaeuzwoizs +atafwjshlhcsptqaezuxdhsw +atafwjshlhcsptqafoazvcwh +atafwjshlhcsptqahanbdvpq +atafwjshlhcsptqahfibxuiu +atafwjshlhcsptqahkdcmtby +atafwjshlhcsptqahtydvqtb +atafwjshlhcsptqahytekpmf +atafwjshlhcsptqaiiegilwr +atafwjshlhcsptqairzhrjiz +atafwjshlhcsptqajbkjpftg +atafwjshlhcsptqajgfkeemk +atafwjshlhcsptqajlakydfo +atafwjshlhcsptqajuvmcaww +atafwjshlhcsptqakxrqrxft +atafwjshlhcsptqalhcsptqa +atafwjshlhcsptqalqxtyrci +atafwjshlhcsptqamaivwnmu +atafwjshlhcsptqamfdwlmfy +atafwjshlhcsptqamoyxujxb +atafwjshlhcsptqamttyjiqf +atafwjshlhcsptqapssfqqjt +atafwjshlhcsptqapxngfpcx +atafwjshlhcsptqaqcdhomua +atafwjshlhcsptqaqlyixkgi +atafwjshlhcsptqaqvokbhxq +atafwjshlhcsptqaraelkfjy +atafwjshlhcsptqarounibuf +atafwjshlqxtyrciaoffckzd +atafwjshlqxtyrciatafwjsh +atafwjshlqxtyrcibhlijevx +atafwjshlqxtyrcibrbjscia +atafwjshlqxtyrcicyxowxpb +atafwjshlqxtyrciddnqavbj +atafwjshlqxtyrcidiiqutzn +atafwjshlqxtyrcidndrjssr +atafwjshlqxtyrcidwyssqez +atafwjshlqxtyrciegjuqmpg +atafwjshlqxtyrcielevflik +atafwjshlqxtyrcieuzwoizs +atafwjshlqxtyrciezuxdhsw +atafwjshlqxtyrcifoazvcwh +atafwjshlqxtyrcihanbdvpq +atafwjshlqxtyrcihfibxuiu +atafwjshlqxtyrcihkdcmtby +atafwjshlqxtyrcihtydvqtb +atafwjshlqxtyrcihytekpmf +atafwjshlqxtyrciiiegilwr +atafwjshlqxtyrciirzhrjiz +atafwjshlqxtyrcijbkjpftg +atafwjshlqxtyrcijgfkeemk +atafwjshlqxtyrcijlakydfo +atafwjshlqxtyrcijuvmcaww +atafwjshlqxtyrcikxrqrxft +atafwjshlqxtyrcilhcsptqa +atafwjshlqxtyrcilqxtyrci +atafwjshlqxtyrcimaivwnmu +atafwjshlqxtyrcimfdwlmfy +atafwjshlqxtyrcimoyxujxb +atafwjshlqxtyrcimttyjiqf +atafwjshlqxtyrcipssfqqjt +atafwjshlqxtyrcipxngfpcx +atafwjshlqxtyrciqcdhomua +atafwjshlqxtyrciqlyixkgi +atafwjshlqxtyrciqvokbhxq +atafwjshlqxtyrciraelkfjy +atafwjshlqxtyrcirounibuf +atafwjshmaivwnmuaoffckzd +atafwjshmaivwnmuatafwjsh +atafwjshmaivwnmubhlijevx +atafwjshmaivwnmubrbjscia +atafwjshmaivwnmucyxowxpb +atafwjshmaivwnmuddnqavbj +atafwjshmaivwnmudiiqutzn +atafwjshmaivwnmudndrjssr +atafwjshmaivwnmudwyssqez +atafwjshmaivwnmuegjuqmpg +atafwjshmaivwnmuelevflik +atafwjshmaivwnmueuzwoizs +atafwjshmaivwnmuezuxdhsw +atafwjshmaivwnmufoazvcwh +atafwjshmaivwnmuhanbdvpq +atafwjshmaivwnmuhfibxuiu +atafwjshmaivwnmuhkdcmtby +atafwjshmaivwnmuhtydvqtb +atafwjshmaivwnmuhytekpmf +atafwjshmaivwnmuiiegilwr +atafwjshmaivwnmuirzhrjiz +atafwjshmaivwnmujbkjpftg +atafwjshmaivwnmujgfkeemk +atafwjshmaivwnmujlakydfo +atafwjshmaivwnmujuvmcaww +atafwjshmaivwnmukxrqrxft +atafwjshmaivwnmulhcsptqa +atafwjshmaivwnmulqxtyrci +atafwjshmaivwnmumaivwnmu +atafwjshmaivwnmumfdwlmfy +atafwjshmaivwnmumoyxujxb +atafwjshmaivwnmumttyjiqf +atafwjshmaivwnmupssfqqjt +atafwjshmaivwnmupxngfpcx +atafwjshmaivwnmuqcdhomua +atafwjshmaivwnmuqlyixkgi +atafwjshmaivwnmuqvokbhxq +atafwjshmaivwnmuraelkfjy +atafwjshmaivwnmurounibuf +atafwjshmfdwlmfyaoffckzd +atafwjshmfdwlmfyatafwjsh +atafwjshmfdwlmfybhlijevx +atafwjshmfdwlmfybrbjscia +atafwjshmfdwlmfycyxowxpb +atafwjshmfdwlmfyddnqavbj +atafwjshmfdwlmfydiiqutzn +atafwjshmfdwlmfydndrjssr +atafwjshmfdwlmfydwyssqez +atafwjshmfdwlmfyegjuqmpg +atafwjshmfdwlmfyelevflik +atafwjshmfdwlmfyeuzwoizs +atafwjshmfdwlmfyezuxdhsw +atafwjshmfdwlmfyfoazvcwh +atafwjshmfdwlmfyhanbdvpq +atafwjshmfdwlmfyhfibxuiu +atafwjshmfdwlmfyhkdcmtby +atafwjshmfdwlmfyhtydvqtb +atafwjshmfdwlmfyhytekpmf +atafwjshmfdwlmfyiiegilwr +atafwjshmfdwlmfyirzhrjiz +atafwjshmfdwlmfyjbkjpftg +atafwjshmfdwlmfyjgfkeemk +atafwjshmfdwlmfyjlakydfo +atafwjshmfdwlmfyjuvmcaww +atafwjshmfdwlmfykxrqrxft +atafwjshmfdwlmfylhcsptqa +atafwjshmfdwlmfylqxtyrci +atafwjshmfdwlmfymaivwnmu +atafwjshmfdwlmfymfdwlmfy +atafwjshmfdwlmfymoyxujxb +atafwjshmfdwlmfymttyjiqf +atafwjshmfdwlmfypssfqqjt +atafwjshmfdwlmfypxngfpcx +atafwjshmfdwlmfyqcdhomua +atafwjshmfdwlmfyqlyixkgi +atafwjshmfdwlmfyqvokbhxq +atafwjshmfdwlmfyraelkfjy +atafwjshmfdwlmfyrounibuf +atafwjshmoyxujxbaoffckzd +atafwjshmoyxujxbatafwjsh +atafwjshmoyxujxbbhlijevx +atafwjshmoyxujxbbrbjscia +atafwjshmoyxujxbcyxowxpb +atafwjshmoyxujxbddnqavbj +atafwjshmoyxujxbdiiqutzn +atafwjshmoyxujxbdndrjssr +atafwjshmoyxujxbdwyssqez +atafwjshmoyxujxbegjuqmpg +atafwjshmoyxujxbelevflik +atafwjshmoyxujxbeuzwoizs +atafwjshmoyxujxbezuxdhsw +atafwjshmoyxujxbfoazvcwh +atafwjshmoyxujxbhanbdvpq +atafwjshmoyxujxbhfibxuiu +atafwjshmoyxujxbhkdcmtby +atafwjshmoyxujxbhtydvqtb +atafwjshmoyxujxbhytekpmf +atafwjshmoyxujxbiiegilwr +atafwjshmoyxujxbirzhrjiz +atafwjshmoyxujxbjbkjpftg +atafwjshmoyxujxbjgfkeemk +atafwjshmoyxujxbjlakydfo +atafwjshmoyxujxbjuvmcaww +atafwjshmoyxujxbkxrqrxft +atafwjshmoyxujxblhcsptqa +atafwjshmoyxujxblqxtyrci +atafwjshmoyxujxbmaivwnmu +atafwjshmoyxujxbmfdwlmfy +atafwjshmoyxujxbmoyxujxb +atafwjshmoyxujxbmttyjiqf +atafwjshmoyxujxbpssfqqjt +atafwjshmoyxujxbpxngfpcx +atafwjshmoyxujxbqcdhomua +atafwjshmoyxujxbqlyixkgi +atafwjshmoyxujxbqvokbhxq +atafwjshmoyxujxbraelkfjy +atafwjshmoyxujxbrounibuf +atafwjshmttyjiqfaoffckzd +atafwjshmttyjiqfatafwjsh +atafwjshmttyjiqfbhlijevx +atafwjshmttyjiqfbrbjscia +atafwjshmttyjiqfcyxowxpb +atafwjshmttyjiqfddnqavbj +atafwjshmttyjiqfdiiqutzn +atafwjshmttyjiqfdndrjssr +atafwjshmttyjiqfdwyssqez +atafwjshmttyjiqfegjuqmpg +atafwjshmttyjiqfelevflik +atafwjshmttyjiqfeuzwoizs +atafwjshmttyjiqfezuxdhsw +atafwjshmttyjiqffoazvcwh +atafwjshmttyjiqfhanbdvpq +atafwjshmttyjiqfhfibxuiu +atafwjshmttyjiqfhkdcmtby +atafwjshmttyjiqfhtydvqtb +atafwjshmttyjiqfhytekpmf +atafwjshmttyjiqfiiegilwr +atafwjshmttyjiqfirzhrjiz +atafwjshmttyjiqfjbkjpftg +atafwjshmttyjiqfjgfkeemk +atafwjshmttyjiqfjlakydfo +atafwjshmttyjiqfjuvmcaww +atafwjshmttyjiqfkxrqrxft +atafwjshmttyjiqflhcsptqa +atafwjshmttyjiqflqxtyrci +atafwjshmttyjiqfmaivwnmu +atafwjshmttyjiqfmfdwlmfy +atafwjshmttyjiqfmoyxujxb +atafwjshmttyjiqfmttyjiqf +atafwjshmttyjiqfpssfqqjt +atafwjshmttyjiqfpxngfpcx +atafwjshmttyjiqfqcdhomua +atafwjshmttyjiqfqlyixkgi +atafwjshmttyjiqfqvokbhxq +atafwjshmttyjiqfraelkfjy +atafwjshmttyjiqfrounibuf +atafwjshpssfqqjtaoffckzd +atafwjshpssfqqjtatafwjsh +atafwjshpssfqqjtbhlijevx +atafwjshpssfqqjtbrbjscia +atafwjshpssfqqjtcyxowxpb +atafwjshpssfqqjtddnqavbj +atafwjshpssfqqjtdiiqutzn +atafwjshpssfqqjtdndrjssr +atafwjshpssfqqjtdwyssqez +atafwjshpssfqqjtegjuqmpg +atafwjshpssfqqjtelevflik +atafwjshpssfqqjteuzwoizs +atafwjshpssfqqjtezuxdhsw +atafwjshpssfqqjtfoazvcwh +atafwjshpssfqqjthanbdvpq +atafwjshpssfqqjthfibxuiu +atafwjshpssfqqjthkdcmtby +atafwjshpssfqqjthtydvqtb +atafwjshpssfqqjthytekpmf +atafwjshpssfqqjtiiegilwr +atafwjshpssfqqjtirzhrjiz +atafwjshpssfqqjtjbkjpftg +atafwjshpssfqqjtjgfkeemk +atafwjshpssfqqjtjlakydfo +atafwjshpssfqqjtjuvmcaww +atafwjshpssfqqjtkxrqrxft +atafwjshpssfqqjtlhcsptqa +atafwjshpssfqqjtlqxtyrci +atafwjshpssfqqjtmaivwnmu +atafwjshpssfqqjtmfdwlmfy +atafwjshpssfqqjtmoyxujxb +atafwjshpssfqqjtmttyjiqf +atafwjshpssfqqjtpssfqqjt +atafwjshpssfqqjtpxngfpcx +atafwjshpssfqqjtqcdhomua +atafwjshpssfqqjtqlyixkgi +atafwjshpssfqqjtqvokbhxq +atafwjshpssfqqjtraelkfjy +atafwjshpssfqqjtrounibuf +atafwjshpxngfpcxaoffckzd +atafwjshpxngfpcxatafwjsh +atafwjshpxngfpcxbhlijevx +atafwjshpxngfpcxbrbjscia +atafwjshpxngfpcxcyxowxpb +atafwjshpxngfpcxddnqavbj +atafwjshpxngfpcxdiiqutzn +atafwjshpxngfpcxdndrjssr +atafwjshpxngfpcxdwyssqez +atafwjshpxngfpcxegjuqmpg +atafwjshpxngfpcxelevflik +atafwjshpxngfpcxeuzwoizs +atafwjshpxngfpcxezuxdhsw +atafwjshpxngfpcxfoazvcwh +atafwjshpxngfpcxhanbdvpq +atafwjshpxngfpcxhfibxuiu +atafwjshpxngfpcxhkdcmtby +atafwjshpxngfpcxhtydvqtb +atafwjshpxngfpcxhytekpmf +atafwjshpxngfpcxiiegilwr +atafwjshpxngfpcxirzhrjiz +atafwjshpxngfpcxjbkjpftg +atafwjshpxngfpcxjgfkeemk +atafwjshpxngfpcxjlakydfo +atafwjshpxngfpcxjuvmcaww +atafwjshpxngfpcxkxrqrxft +atafwjshpxngfpcxlhcsptqa +atafwjshpxngfpcxlqxtyrci +atafwjshpxngfpcxmaivwnmu +atafwjshpxngfpcxmfdwlmfy +atafwjshpxngfpcxmoyxujxb +atafwjshpxngfpcxmttyjiqf +atafwjshpxngfpcxpssfqqjt +atafwjshpxngfpcxpxngfpcx +atafwjshpxngfpcxqcdhomua +atafwjshpxngfpcxqlyixkgi +atafwjshpxngfpcxqvokbhxq +atafwjshpxngfpcxraelkfjy +atafwjshpxngfpcxrounibuf +atafwjshqcdhomuaaoffckzd +atafwjshqcdhomuaatafwjsh +atafwjshqcdhomuabhlijevx +atafwjshqcdhomuabrbjscia +atafwjshqcdhomuacyxowxpb +atafwjshqcdhomuaddnqavbj +atafwjshqcdhomuadiiqutzn +atafwjshqcdhomuadndrjssr +atafwjshqcdhomuadwyssqez +atafwjshqcdhomuaegjuqmpg +atafwjshqcdhomuaelevflik +atafwjshqcdhomuaeuzwoizs +atafwjshqcdhomuaezuxdhsw +atafwjshqcdhomuafoazvcwh +atafwjshqcdhomuahanbdvpq +atafwjshqcdhomuahfibxuiu +atafwjshqcdhomuahkdcmtby +atafwjshqcdhomuahtydvqtb +atafwjshqcdhomuahytekpmf +atafwjshqcdhomuaiiegilwr +atafwjshqcdhomuairzhrjiz +atafwjshqcdhomuajbkjpftg +atafwjshqcdhomuajgfkeemk +atafwjshqcdhomuajlakydfo +atafwjshqcdhomuajuvmcaww +atafwjshqcdhomuakxrqrxft +atafwjshqcdhomualhcsptqa +atafwjshqcdhomualqxtyrci +atafwjshqcdhomuamaivwnmu +atafwjshqcdhomuamfdwlmfy +atafwjshqcdhomuamoyxujxb +atafwjshqcdhomuamttyjiqf +atafwjshqcdhomuapssfqqjt +atafwjshqcdhomuapxngfpcx +atafwjshqcdhomuaqcdhomua +atafwjshqcdhomuaqlyixkgi +atafwjshqcdhomuaqvokbhxq +atafwjshqcdhomuaraelkfjy +atafwjshqcdhomuarounibuf +atafwjshqlyixkgiaoffckzd +atafwjshqlyixkgiatafwjsh +atafwjshqlyixkgibhlijevx +atafwjshqlyixkgibrbjscia +atafwjshqlyixkgicyxowxpb +atafwjshqlyixkgiddnqavbj +atafwjshqlyixkgidiiqutzn +atafwjshqlyixkgidndrjssr +atafwjshqlyixkgidwyssqez +atafwjshqlyixkgiegjuqmpg +atafwjshqlyixkgielevflik +atafwjshqlyixkgieuzwoizs +atafwjshqlyixkgiezuxdhsw +atafwjshqlyixkgifoazvcwh +atafwjshqlyixkgihanbdvpq +atafwjshqlyixkgihfibxuiu +atafwjshqlyixkgihkdcmtby +atafwjshqlyixkgihtydvqtb +atafwjshqlyixkgihytekpmf +atafwjshqlyixkgiiiegilwr +atafwjshqlyixkgiirzhrjiz +atafwjshqlyixkgijbkjpftg +atafwjshqlyixkgijgfkeemk +atafwjshqlyixkgijlakydfo +atafwjshqlyixkgijuvmcaww +atafwjshqlyixkgikxrqrxft +atafwjshqlyixkgilhcsptqa +atafwjshqlyixkgilqxtyrci +atafwjshqlyixkgimaivwnmu +atafwjshqlyixkgimfdwlmfy +atafwjshqlyixkgimoyxujxb +atafwjshqlyixkgimttyjiqf +atafwjshqlyixkgipssfqqjt +atafwjshqlyixkgipxngfpcx +atafwjshqlyixkgiqcdhomua +atafwjshqlyixkgiqlyixkgi +atafwjshqlyixkgiqvokbhxq +atafwjshqlyixkgiraelkfjy +atafwjshqlyixkgirounibuf +atafwjshqvokbhxqaoffckzd +atafwjshqvokbhxqatafwjsh +atafwjshqvokbhxqbhlijevx +atafwjshqvokbhxqbrbjscia +atafwjshqvokbhxqcyxowxpb +atafwjshqvokbhxqddnqavbj +atafwjshqvokbhxqdiiqutzn +atafwjshqvokbhxqdndrjssr +atafwjshqvokbhxqdwyssqez +atafwjshqvokbhxqegjuqmpg +atafwjshqvokbhxqelevflik +atafwjshqvokbhxqeuzwoizs +atafwjshqvokbhxqezuxdhsw +atafwjshqvokbhxqfoazvcwh +atafwjshqvokbhxqhanbdvpq +atafwjshqvokbhxqhfibxuiu +atafwjshqvokbhxqhkdcmtby +atafwjshqvokbhxqhtydvqtb +atafwjshqvokbhxqhytekpmf +atafwjshqvokbhxqiiegilwr +atafwjshqvokbhxqirzhrjiz +atafwjshqvokbhxqjbkjpftg +atafwjshqvokbhxqjgfkeemk +atafwjshqvokbhxqjlakydfo +atafwjshqvokbhxqjuvmcaww +atafwjshqvokbhxqkxrqrxft +atafwjshqvokbhxqlhcsptqa +atafwjshqvokbhxqlqxtyrci +atafwjshqvokbhxqmaivwnmu +atafwjshqvokbhxqmfdwlmfy +atafwjshqvokbhxqmoyxujxb +atafwjshqvokbhxqmttyjiqf +atafwjshqvokbhxqpssfqqjt +atafwjshqvokbhxqpxngfpcx +atafwjshqvokbhxqqcdhomua +atafwjshqvokbhxqqlyixkgi +atafwjshqvokbhxqqvokbhxq +atafwjshqvokbhxqraelkfjy +atafwjshqvokbhxqrounibuf +atafwjshraelkfjyaoffckzd +atafwjshraelkfjyatafwjsh +atafwjshraelkfjybhlijevx +atafwjshraelkfjybrbjscia +atafwjshraelkfjycyxowxpb +atafwjshraelkfjyddnqavbj +atafwjshraelkfjydiiqutzn +atafwjshraelkfjydndrjssr +atafwjshraelkfjydwyssqez +atafwjshraelkfjyegjuqmpg +atafwjshraelkfjyelevflik +atafwjshraelkfjyeuzwoizs +atafwjshraelkfjyezuxdhsw +atafwjshraelkfjyfoazvcwh +atafwjshraelkfjyhanbdvpq +atafwjshraelkfjyhfibxuiu +atafwjshraelkfjyhkdcmtby +atafwjshraelkfjyhtydvqtb +atafwjshraelkfjyhytekpmf +atafwjshraelkfjyiiegilwr +atafwjshraelkfjyirzhrjiz +atafwjshraelkfjyjbkjpftg +atafwjshraelkfjyjgfkeemk +atafwjshraelkfjyjlakydfo +atafwjshraelkfjyjuvmcaww +atafwjshraelkfjykxrqrxft +atafwjshraelkfjylhcsptqa +atafwjshraelkfjylqxtyrci +atafwjshraelkfjymaivwnmu +atafwjshraelkfjymfdwlmfy +atafwjshraelkfjymoyxujxb +atafwjshraelkfjymttyjiqf +atafwjshraelkfjypssfqqjt +atafwjshraelkfjypxngfpcx +atafwjshraelkfjyqcdhomua +atafwjshraelkfjyqlyixkgi +atafwjshraelkfjyqvokbhxq +atafwjshraelkfjyraelkfjy +atafwjshraelkfjyrounibuf +atafwjshrounibufaoffckzd +atafwjshrounibufatafwjsh +atafwjshrounibufbhlijevx +atafwjshrounibufbrbjscia +atafwjshrounibufcyxowxpb +atafwjshrounibufddnqavbj +atafwjshrounibufdiiqutzn +atafwjshrounibufdndrjssr +atafwjshrounibufdwyssqez +atafwjshrounibufegjuqmpg +atafwjshrounibufelevflik +atafwjshrounibufeuzwoizs +atafwjshrounibufezuxdhsw +atafwjshrounibuffoazvcwh +atafwjshrounibufhanbdvpq +atafwjshrounibufhfibxuiu +atafwjshrounibufhkdcmtby +atafwjshrounibufhtydvqtb +atafwjshrounibufhytekpmf +atafwjshrounibufiiegilwr +atafwjshrounibufirzhrjiz +atafwjshrounibufjbkjpftg +atafwjshrounibufjgfkeemk +atafwjshrounibufjlakydfo +atafwjshrounibufjuvmcaww +atafwjshrounibufkxrqrxft +atafwjshrounibuflhcsptqa +atafwjshrounibuflqxtyrci +atafwjshrounibufmaivwnmu +atafwjshrounibufmfdwlmfy +atafwjshrounibufmoyxujxb +atafwjshrounibufmttyjiqf +atafwjshrounibufpssfqqjt +atafwjshrounibufpxngfpcx +atafwjshrounibufqcdhomua +atafwjshrounibufqlyixkgi +atafwjshrounibufqvokbhxq +atafwjshrounibufraelkfjy +atafwjshrounibufrounibuf +bhlijevxaoffckzdaoffckzd +bhlijevxaoffckzdatafwjsh +bhlijevxaoffckzdbhlijevx +bhlijevxaoffckzdbrbjscia +bhlijevxaoffckzdcyxowxpb +bhlijevxaoffckzdddnqavbj +bhlijevxaoffckzddiiqutzn +bhlijevxaoffckzddndrjssr +bhlijevxaoffckzddwyssqez +bhlijevxaoffckzdegjuqmpg +bhlijevxaoffckzdelevflik +bhlijevxaoffckzdeuzwoizs +bhlijevxaoffckzdezuxdhsw +bhlijevxaoffckzdfoazvcwh +bhlijevxaoffckzdhanbdvpq +bhlijevxaoffckzdhfibxuiu +bhlijevxaoffckzdhkdcmtby +bhlijevxaoffckzdhtydvqtb +bhlijevxaoffckzdhytekpmf +bhlijevxaoffckzdiiegilwr +bhlijevxaoffckzdirzhrjiz +bhlijevxaoffckzdjbkjpftg +bhlijevxaoffckzdjgfkeemk +bhlijevxaoffckzdjlakydfo +bhlijevxaoffckzdjuvmcaww +bhlijevxaoffckzdkxrqrxft +bhlijevxaoffckzdlhcsptqa +bhlijevxaoffckzdlqxtyrci +bhlijevxaoffckzdmaivwnmu +bhlijevxaoffckzdmfdwlmfy +bhlijevxaoffckzdmoyxujxb +bhlijevxaoffckzdmttyjiqf +bhlijevxaoffckzdpssfqqjt +bhlijevxaoffckzdpxngfpcx +bhlijevxaoffckzdqcdhomua +bhlijevxaoffckzdqlyixkgi +bhlijevxaoffckzdqvokbhxq +bhlijevxaoffckzdraelkfjy +bhlijevxaoffckzdrounibuf +bhlijevxatafwjshaoffckzd +bhlijevxatafwjshatafwjsh +bhlijevxatafwjshbhlijevx +bhlijevxatafwjshbrbjscia +bhlijevxatafwjshcyxowxpb +bhlijevxatafwjshddnqavbj +bhlijevxatafwjshdiiqutzn +bhlijevxatafwjshdndrjssr +bhlijevxatafwjshdwyssqez +bhlijevxatafwjshegjuqmpg +bhlijevxatafwjshelevflik +bhlijevxatafwjsheuzwoizs +bhlijevxatafwjshezuxdhsw +bhlijevxatafwjshfoazvcwh +bhlijevxatafwjshhanbdvpq +bhlijevxatafwjshhfibxuiu +bhlijevxatafwjshhkdcmtby +bhlijevxatafwjshhtydvqtb +bhlijevxatafwjshhytekpmf +bhlijevxatafwjshiiegilwr +bhlijevxatafwjshirzhrjiz +bhlijevxatafwjshjbkjpftg +bhlijevxatafwjshjgfkeemk +bhlijevxatafwjshjlakydfo +bhlijevxatafwjshjuvmcaww +bhlijevxatafwjshkxrqrxft +bhlijevxatafwjshlhcsptqa +bhlijevxatafwjshlqxtyrci +bhlijevxatafwjshmaivwnmu +bhlijevxatafwjshmfdwlmfy +bhlijevxatafwjshmoyxujxb +bhlijevxatafwjshmttyjiqf +bhlijevxatafwjshpssfqqjt +bhlijevxatafwjshpxngfpcx +bhlijevxatafwjshqcdhomua +bhlijevxatafwjshqlyixkgi +bhlijevxatafwjshqvokbhxq +bhlijevxatafwjshraelkfjy +bhlijevxatafwjshrounibuf +bhlijevxbhlijevxaoffckzd +bhlijevxbhlijevxatafwjsh +bhlijevxbhlijevxbhlijevx +bhlijevxbhlijevxbrbjscia +bhlijevxbhlijevxcyxowxpb +bhlijevxbhlijevxddnqavbj +bhlijevxbhlijevxdiiqutzn +bhlijevxbhlijevxdndrjssr +bhlijevxbhlijevxdwyssqez +bhlijevxbhlijevxegjuqmpg +bhlijevxbhlijevxelevflik +bhlijevxbhlijevxeuzwoizs +bhlijevxbhlijevxezuxdhsw +bhlijevxbhlijevxfoazvcwh +bhlijevxbhlijevxhanbdvpq +bhlijevxbhlijevxhfibxuiu +bhlijevxbhlijevxhkdcmtby +bhlijevxbhlijevxhtydvqtb +bhlijevxbhlijevxhytekpmf +bhlijevxbhlijevxiiegilwr +bhlijevxbhlijevxirzhrjiz +bhlijevxbhlijevxjbkjpftg +bhlijevxbhlijevxjgfkeemk +bhlijevxbhlijevxjlakydfo +bhlijevxbhlijevxjuvmcaww +bhlijevxbhlijevxkxrqrxft +bhlijevxbhlijevxlhcsptqa +bhlijevxbhlijevxlqxtyrci +bhlijevxbhlijevxmaivwnmu +bhlijevxbhlijevxmfdwlmfy +bhlijevxbhlijevxmoyxujxb +bhlijevxbhlijevxmttyjiqf +bhlijevxbhlijevxpssfqqjt +bhlijevxbhlijevxpxngfpcx +bhlijevxbhlijevxqcdhomua +bhlijevxbhlijevxqlyixkgi +bhlijevxbhlijevxqvokbhxq +bhlijevxbhlijevxraelkfjy +bhlijevxbhlijevxrounibuf +bhlijevxbrbjsciaaoffckzd +bhlijevxbrbjsciaatafwjsh +bhlijevxbrbjsciabhlijevx +bhlijevxbrbjsciabrbjscia +bhlijevxbrbjsciacyxowxpb +bhlijevxbrbjsciaddnqavbj +bhlijevxbrbjsciadiiqutzn +bhlijevxbrbjsciadndrjssr +bhlijevxbrbjsciadwyssqez +bhlijevxbrbjsciaegjuqmpg +bhlijevxbrbjsciaelevflik +bhlijevxbrbjsciaeuzwoizs +bhlijevxbrbjsciaezuxdhsw +bhlijevxbrbjsciafoazvcwh +bhlijevxbrbjsciahanbdvpq +bhlijevxbrbjsciahfibxuiu +bhlijevxbrbjsciahkdcmtby +bhlijevxbrbjsciahtydvqtb +bhlijevxbrbjsciahytekpmf +bhlijevxbrbjsciaiiegilwr +bhlijevxbrbjsciairzhrjiz +bhlijevxbrbjsciajbkjpftg +bhlijevxbrbjsciajgfkeemk +bhlijevxbrbjsciajlakydfo +bhlijevxbrbjsciajuvmcaww +bhlijevxbrbjsciakxrqrxft +bhlijevxbrbjscialhcsptqa +bhlijevxbrbjscialqxtyrci +bhlijevxbrbjsciamaivwnmu +bhlijevxbrbjsciamfdwlmfy +bhlijevxbrbjsciamoyxujxb +bhlijevxbrbjsciamttyjiqf +bhlijevxbrbjsciapssfqqjt +bhlijevxbrbjsciapxngfpcx +bhlijevxbrbjsciaqcdhomua +bhlijevxbrbjsciaqlyixkgi +bhlijevxbrbjsciaqvokbhxq +bhlijevxbrbjsciaraelkfjy +bhlijevxbrbjsciarounibuf +bhlijevxcyxowxpbaoffckzd +bhlijevxcyxowxpbatafwjsh +bhlijevxcyxowxpbbhlijevx +bhlijevxcyxowxpbbrbjscia +bhlijevxcyxowxpbcyxowxpb +bhlijevxcyxowxpbddnqavbj +bhlijevxcyxowxpbdiiqutzn +bhlijevxcyxowxpbdndrjssr +bhlijevxcyxowxpbdwyssqez +bhlijevxcyxowxpbegjuqmpg +bhlijevxcyxowxpbelevflik +bhlijevxcyxowxpbeuzwoizs +bhlijevxcyxowxpbezuxdhsw +bhlijevxcyxowxpbfoazvcwh +bhlijevxcyxowxpbhanbdvpq +bhlijevxcyxowxpbhfibxuiu +bhlijevxcyxowxpbhkdcmtby +bhlijevxcyxowxpbhtydvqtb +bhlijevxcyxowxpbhytekpmf +bhlijevxcyxowxpbiiegilwr +bhlijevxcyxowxpbirzhrjiz +bhlijevxcyxowxpbjbkjpftg +bhlijevxcyxowxpbjgfkeemk +bhlijevxcyxowxpbjlakydfo +bhlijevxcyxowxpbjuvmcaww +bhlijevxcyxowxpbkxrqrxft +bhlijevxcyxowxpblhcsptqa +bhlijevxcyxowxpblqxtyrci +bhlijevxcyxowxpbmaivwnmu +bhlijevxcyxowxpbmfdwlmfy +bhlijevxcyxowxpbmoyxujxb +bhlijevxcyxowxpbmttyjiqf +bhlijevxcyxowxpbpssfqqjt +bhlijevxcyxowxpbpxngfpcx +bhlijevxcyxowxpbqcdhomua +bhlijevxcyxowxpbqlyixkgi +bhlijevxcyxowxpbqvokbhxq +bhlijevxcyxowxpbraelkfjy +bhlijevxcyxowxpbrounibuf +bhlijevxddnqavbjaoffckzd +bhlijevxddnqavbjatafwjsh +bhlijevxddnqavbjbhlijevx +bhlijevxddnqavbjbrbjscia +bhlijevxddnqavbjcyxowxpb +bhlijevxddnqavbjddnqavbj +bhlijevxddnqavbjdiiqutzn +bhlijevxddnqavbjdndrjssr +bhlijevxddnqavbjdwyssqez +bhlijevxddnqavbjegjuqmpg +bhlijevxddnqavbjelevflik +bhlijevxddnqavbjeuzwoizs +bhlijevxddnqavbjezuxdhsw +bhlijevxddnqavbjfoazvcwh +bhlijevxddnqavbjhanbdvpq +bhlijevxddnqavbjhfibxuiu +bhlijevxddnqavbjhkdcmtby +bhlijevxddnqavbjhtydvqtb +bhlijevxddnqavbjhytekpmf +bhlijevxddnqavbjiiegilwr +bhlijevxddnqavbjirzhrjiz +bhlijevxddnqavbjjbkjpftg +bhlijevxddnqavbjjgfkeemk +bhlijevxddnqavbjjlakydfo +bhlijevxddnqavbjjuvmcaww +bhlijevxddnqavbjkxrqrxft +bhlijevxddnqavbjlhcsptqa +bhlijevxddnqavbjlqxtyrci +bhlijevxddnqavbjmaivwnmu +bhlijevxddnqavbjmfdwlmfy +bhlijevxddnqavbjmoyxujxb +bhlijevxddnqavbjmttyjiqf +bhlijevxddnqavbjpssfqqjt +bhlijevxddnqavbjpxngfpcx +bhlijevxddnqavbjqcdhomua +bhlijevxddnqavbjqlyixkgi +bhlijevxddnqavbjqvokbhxq +bhlijevxddnqavbjraelkfjy +bhlijevxddnqavbjrounibuf +bhlijevxdiiqutznaoffckzd +bhlijevxdiiqutznatafwjsh +bhlijevxdiiqutznbhlijevx +bhlijevxdiiqutznbrbjscia +bhlijevxdiiqutzncyxowxpb +bhlijevxdiiqutznddnqavbj +bhlijevxdiiqutzndiiqutzn +bhlijevxdiiqutzndndrjssr +bhlijevxdiiqutzndwyssqez +bhlijevxdiiqutznegjuqmpg +bhlijevxdiiqutznelevflik +bhlijevxdiiqutzneuzwoizs +bhlijevxdiiqutznezuxdhsw +bhlijevxdiiqutznfoazvcwh +bhlijevxdiiqutznhanbdvpq +bhlijevxdiiqutznhfibxuiu +bhlijevxdiiqutznhkdcmtby +bhlijevxdiiqutznhtydvqtb +bhlijevxdiiqutznhytekpmf +bhlijevxdiiqutzniiegilwr +bhlijevxdiiqutznirzhrjiz +bhlijevxdiiqutznjbkjpftg +bhlijevxdiiqutznjgfkeemk +bhlijevxdiiqutznjlakydfo +bhlijevxdiiqutznjuvmcaww +bhlijevxdiiqutznkxrqrxft +bhlijevxdiiqutznlhcsptqa +bhlijevxdiiqutznlqxtyrci +bhlijevxdiiqutznmaivwnmu +bhlijevxdiiqutznmfdwlmfy +bhlijevxdiiqutznmoyxujxb +bhlijevxdiiqutznmttyjiqf +bhlijevxdiiqutznpssfqqjt +bhlijevxdiiqutznpxngfpcx +bhlijevxdiiqutznqcdhomua +bhlijevxdiiqutznqlyixkgi +bhlijevxdiiqutznqvokbhxq +bhlijevxdiiqutznraelkfjy +bhlijevxdiiqutznrounibuf +bhlijevxdndrjssraoffckzd +bhlijevxdndrjssratafwjsh +bhlijevxdndrjssrbhlijevx +bhlijevxdndrjssrbrbjscia +bhlijevxdndrjssrcyxowxpb +bhlijevxdndrjssrddnqavbj +bhlijevxdndrjssrdiiqutzn +bhlijevxdndrjssrdndrjssr +bhlijevxdndrjssrdwyssqez +bhlijevxdndrjssregjuqmpg +bhlijevxdndrjssrelevflik +bhlijevxdndrjssreuzwoizs +bhlijevxdndrjssrezuxdhsw +bhlijevxdndrjssrfoazvcwh +bhlijevxdndrjssrhanbdvpq +bhlijevxdndrjssrhfibxuiu +bhlijevxdndrjssrhkdcmtby +bhlijevxdndrjssrhtydvqtb +bhlijevxdndrjssrhytekpmf +bhlijevxdndrjssriiegilwr +bhlijevxdndrjssrirzhrjiz +bhlijevxdndrjssrjbkjpftg +bhlijevxdndrjssrjgfkeemk +bhlijevxdndrjssrjlakydfo +bhlijevxdndrjssrjuvmcaww +bhlijevxdndrjssrkxrqrxft +bhlijevxdndrjssrlhcsptqa +bhlijevxdndrjssrlqxtyrci +bhlijevxdndrjssrmaivwnmu +bhlijevxdndrjssrmfdwlmfy +bhlijevxdndrjssrmoyxujxb +bhlijevxdndrjssrmttyjiqf +bhlijevxdndrjssrpssfqqjt +bhlijevxdndrjssrpxngfpcx +bhlijevxdndrjssrqcdhomua +bhlijevxdndrjssrqlyixkgi +bhlijevxdndrjssrqvokbhxq +bhlijevxdndrjssrraelkfjy +bhlijevxdndrjssrrounibuf +bhlijevxdwyssqezaoffckzd +bhlijevxdwyssqezatafwjsh +bhlijevxdwyssqezbhlijevx +bhlijevxdwyssqezbrbjscia +bhlijevxdwyssqezcyxowxpb +bhlijevxdwyssqezddnqavbj +bhlijevxdwyssqezdiiqutzn +bhlijevxdwyssqezdndrjssr +bhlijevxdwyssqezdwyssqez +bhlijevxdwyssqezegjuqmpg +bhlijevxdwyssqezelevflik +bhlijevxdwyssqezeuzwoizs +bhlijevxdwyssqezezuxdhsw +bhlijevxdwyssqezfoazvcwh +bhlijevxdwyssqezhanbdvpq +bhlijevxdwyssqezhfibxuiu +bhlijevxdwyssqezhkdcmtby +bhlijevxdwyssqezhtydvqtb +bhlijevxdwyssqezhytekpmf +bhlijevxdwyssqeziiegilwr +bhlijevxdwyssqezirzhrjiz +bhlijevxdwyssqezjbkjpftg +bhlijevxdwyssqezjgfkeemk +bhlijevxdwyssqezjlakydfo +bhlijevxdwyssqezjuvmcaww +bhlijevxdwyssqezkxrqrxft +bhlijevxdwyssqezlhcsptqa +bhlijevxdwyssqezlqxtyrci +bhlijevxdwyssqezmaivwnmu +bhlijevxdwyssqezmfdwlmfy +bhlijevxdwyssqezmoyxujxb +bhlijevxdwyssqezmttyjiqf +bhlijevxdwyssqezpssfqqjt +bhlijevxdwyssqezpxngfpcx +bhlijevxdwyssqezqcdhomua +bhlijevxdwyssqezqlyixkgi +bhlijevxdwyssqezqvokbhxq +bhlijevxdwyssqezraelkfjy +bhlijevxdwyssqezrounibuf +bhlijevxegjuqmpgaoffckzd +bhlijevxegjuqmpgatafwjsh +bhlijevxegjuqmpgbhlijevx +bhlijevxegjuqmpgbrbjscia +bhlijevxegjuqmpgcyxowxpb +bhlijevxegjuqmpgddnqavbj +bhlijevxegjuqmpgdiiqutzn +bhlijevxegjuqmpgdndrjssr +bhlijevxegjuqmpgdwyssqez +bhlijevxegjuqmpgegjuqmpg +bhlijevxegjuqmpgelevflik +bhlijevxegjuqmpgeuzwoizs +bhlijevxegjuqmpgezuxdhsw +bhlijevxegjuqmpgfoazvcwh +bhlijevxegjuqmpghanbdvpq +bhlijevxegjuqmpghfibxuiu +bhlijevxegjuqmpghkdcmtby +bhlijevxegjuqmpghtydvqtb +bhlijevxegjuqmpghytekpmf +bhlijevxegjuqmpgiiegilwr +bhlijevxegjuqmpgirzhrjiz +bhlijevxegjuqmpgjbkjpftg +bhlijevxegjuqmpgjgfkeemk +bhlijevxegjuqmpgjlakydfo +bhlijevxegjuqmpgjuvmcaww +bhlijevxegjuqmpgkxrqrxft +bhlijevxegjuqmpglhcsptqa +bhlijevxegjuqmpglqxtyrci +bhlijevxegjuqmpgmaivwnmu +bhlijevxegjuqmpgmfdwlmfy +bhlijevxegjuqmpgmoyxujxb +bhlijevxegjuqmpgmttyjiqf +bhlijevxegjuqmpgpssfqqjt +bhlijevxegjuqmpgpxngfpcx +bhlijevxegjuqmpgqcdhomua +bhlijevxegjuqmpgqlyixkgi +bhlijevxegjuqmpgqvokbhxq +bhlijevxegjuqmpgraelkfjy +bhlijevxegjuqmpgrounibuf +bhlijevxelevflikaoffckzd +bhlijevxelevflikatafwjsh +bhlijevxelevflikbhlijevx +bhlijevxelevflikbrbjscia +bhlijevxelevflikcyxowxpb +bhlijevxelevflikddnqavbj +bhlijevxelevflikdiiqutzn +bhlijevxelevflikdndrjssr +bhlijevxelevflikdwyssqez +bhlijevxelevflikegjuqmpg +bhlijevxelevflikelevflik +bhlijevxelevflikeuzwoizs +bhlijevxelevflikezuxdhsw +bhlijevxelevflikfoazvcwh +bhlijevxelevflikhanbdvpq +bhlijevxelevflikhfibxuiu +bhlijevxelevflikhkdcmtby +bhlijevxelevflikhtydvqtb +bhlijevxelevflikhytekpmf +bhlijevxelevflikiiegilwr +bhlijevxelevflikirzhrjiz +bhlijevxelevflikjbkjpftg +bhlijevxelevflikjgfkeemk +bhlijevxelevflikjlakydfo +bhlijevxelevflikjuvmcaww +bhlijevxelevflikkxrqrxft +bhlijevxelevfliklhcsptqa +bhlijevxelevfliklqxtyrci +bhlijevxelevflikmaivwnmu +bhlijevxelevflikmfdwlmfy +bhlijevxelevflikmoyxujxb +bhlijevxelevflikmttyjiqf +bhlijevxelevflikpssfqqjt +bhlijevxelevflikpxngfpcx +bhlijevxelevflikqcdhomua +bhlijevxelevflikqlyixkgi +bhlijevxelevflikqvokbhxq +bhlijevxelevflikraelkfjy +bhlijevxelevflikrounibuf +bhlijevxeuzwoizsaoffckzd +bhlijevxeuzwoizsatafwjsh +bhlijevxeuzwoizsbhlijevx +bhlijevxeuzwoizsbrbjscia +bhlijevxeuzwoizscyxowxpb +bhlijevxeuzwoizsddnqavbj +bhlijevxeuzwoizsdiiqutzn +bhlijevxeuzwoizsdndrjssr +bhlijevxeuzwoizsdwyssqez +bhlijevxeuzwoizsegjuqmpg +bhlijevxeuzwoizselevflik +bhlijevxeuzwoizseuzwoizs +bhlijevxeuzwoizsezuxdhsw +bhlijevxeuzwoizsfoazvcwh +bhlijevxeuzwoizshanbdvpq +bhlijevxeuzwoizshfibxuiu +bhlijevxeuzwoizshkdcmtby +bhlijevxeuzwoizshtydvqtb +bhlijevxeuzwoizshytekpmf +bhlijevxeuzwoizsiiegilwr +bhlijevxeuzwoizsirzhrjiz +bhlijevxeuzwoizsjbkjpftg +bhlijevxeuzwoizsjgfkeemk +bhlijevxeuzwoizsjlakydfo +bhlijevxeuzwoizsjuvmcaww +bhlijevxeuzwoizskxrqrxft +bhlijevxeuzwoizslhcsptqa +bhlijevxeuzwoizslqxtyrci +bhlijevxeuzwoizsmaivwnmu +bhlijevxeuzwoizsmfdwlmfy +bhlijevxeuzwoizsmoyxujxb +bhlijevxeuzwoizsmttyjiqf +bhlijevxeuzwoizspssfqqjt +bhlijevxeuzwoizspxngfpcx +bhlijevxeuzwoizsqcdhomua +bhlijevxeuzwoizsqlyixkgi +bhlijevxeuzwoizsqvokbhxq +bhlijevxeuzwoizsraelkfjy +bhlijevxeuzwoizsrounibuf +bhlijevxezuxdhswaoffckzd +bhlijevxezuxdhswatafwjsh +bhlijevxezuxdhswbhlijevx +bhlijevxezuxdhswbrbjscia +bhlijevxezuxdhswcyxowxpb +bhlijevxezuxdhswddnqavbj +bhlijevxezuxdhswdiiqutzn +bhlijevxezuxdhswdndrjssr +bhlijevxezuxdhswdwyssqez +bhlijevxezuxdhswegjuqmpg +bhlijevxezuxdhswelevflik +bhlijevxezuxdhsweuzwoizs +bhlijevxezuxdhswezuxdhsw +bhlijevxezuxdhswfoazvcwh +bhlijevxezuxdhswhanbdvpq +bhlijevxezuxdhswhfibxuiu +bhlijevxezuxdhswhkdcmtby +bhlijevxezuxdhswhtydvqtb +bhlijevxezuxdhswhytekpmf +bhlijevxezuxdhswiiegilwr +bhlijevxezuxdhswirzhrjiz +bhlijevxezuxdhswjbkjpftg +bhlijevxezuxdhswjgfkeemk +bhlijevxezuxdhswjlakydfo +bhlijevxezuxdhswjuvmcaww +bhlijevxezuxdhswkxrqrxft +bhlijevxezuxdhswlhcsptqa +bhlijevxezuxdhswlqxtyrci +bhlijevxezuxdhswmaivwnmu +bhlijevxezuxdhswmfdwlmfy +bhlijevxezuxdhswmoyxujxb +bhlijevxezuxdhswmttyjiqf +bhlijevxezuxdhswpssfqqjt +bhlijevxezuxdhswpxngfpcx +bhlijevxezuxdhswqcdhomua +bhlijevxezuxdhswqlyixkgi +bhlijevxezuxdhswqvokbhxq +bhlijevxezuxdhswraelkfjy +bhlijevxezuxdhswrounibuf +bhlijevxfoazvcwhaoffckzd +bhlijevxfoazvcwhatafwjsh +bhlijevxfoazvcwhbhlijevx +bhlijevxfoazvcwhbrbjscia +bhlijevxfoazvcwhcyxowxpb +bhlijevxfoazvcwhddnqavbj +bhlijevxfoazvcwhdiiqutzn +bhlijevxfoazvcwhdndrjssr +bhlijevxfoazvcwhdwyssqez +bhlijevxfoazvcwhegjuqmpg +bhlijevxfoazvcwhelevflik +bhlijevxfoazvcwheuzwoizs +bhlijevxfoazvcwhezuxdhsw +bhlijevxfoazvcwhfoazvcwh +bhlijevxfoazvcwhhanbdvpq +bhlijevxfoazvcwhhfibxuiu +bhlijevxfoazvcwhhkdcmtby +bhlijevxfoazvcwhhtydvqtb +bhlijevxfoazvcwhhytekpmf +bhlijevxfoazvcwhiiegilwr +bhlijevxfoazvcwhirzhrjiz +bhlijevxfoazvcwhjbkjpftg +bhlijevxfoazvcwhjgfkeemk +bhlijevxfoazvcwhjlakydfo +bhlijevxfoazvcwhjuvmcaww +bhlijevxfoazvcwhkxrqrxft +bhlijevxfoazvcwhlhcsptqa +bhlijevxfoazvcwhlqxtyrci +bhlijevxfoazvcwhmaivwnmu +bhlijevxfoazvcwhmfdwlmfy +bhlijevxfoazvcwhmoyxujxb +bhlijevxfoazvcwhmttyjiqf +bhlijevxfoazvcwhpssfqqjt +bhlijevxfoazvcwhpxngfpcx +bhlijevxfoazvcwhqcdhomua +bhlijevxfoazvcwhqlyixkgi +bhlijevxfoazvcwhqvokbhxq +bhlijevxfoazvcwhraelkfjy +bhlijevxfoazvcwhrounibuf +bhlijevxhanbdvpqaoffckzd +bhlijevxhanbdvpqatafwjsh +bhlijevxhanbdvpqbhlijevx +bhlijevxhanbdvpqbrbjscia +bhlijevxhanbdvpqcyxowxpb +bhlijevxhanbdvpqddnqavbj +bhlijevxhanbdvpqdiiqutzn +bhlijevxhanbdvpqdndrjssr +bhlijevxhanbdvpqdwyssqez +bhlijevxhanbdvpqegjuqmpg +bhlijevxhanbdvpqelevflik +bhlijevxhanbdvpqeuzwoizs +bhlijevxhanbdvpqezuxdhsw +bhlijevxhanbdvpqfoazvcwh +bhlijevxhanbdvpqhanbdvpq +bhlijevxhanbdvpqhfibxuiu +bhlijevxhanbdvpqhkdcmtby +bhlijevxhanbdvpqhtydvqtb +bhlijevxhanbdvpqhytekpmf +bhlijevxhanbdvpqiiegilwr +bhlijevxhanbdvpqirzhrjiz +bhlijevxhanbdvpqjbkjpftg +bhlijevxhanbdvpqjgfkeemk +bhlijevxhanbdvpqjlakydfo +bhlijevxhanbdvpqjuvmcaww +bhlijevxhanbdvpqkxrqrxft +bhlijevxhanbdvpqlhcsptqa +bhlijevxhanbdvpqlqxtyrci +bhlijevxhanbdvpqmaivwnmu +bhlijevxhanbdvpqmfdwlmfy +bhlijevxhanbdvpqmoyxujxb +bhlijevxhanbdvpqmttyjiqf +bhlijevxhanbdvpqpssfqqjt +bhlijevxhanbdvpqpxngfpcx +bhlijevxhanbdvpqqcdhomua +bhlijevxhanbdvpqqlyixkgi +bhlijevxhanbdvpqqvokbhxq +bhlijevxhanbdvpqraelkfjy +bhlijevxhanbdvpqrounibuf +bhlijevxhfibxuiuaoffckzd +bhlijevxhfibxuiuatafwjsh +bhlijevxhfibxuiubhlijevx +bhlijevxhfibxuiubrbjscia +bhlijevxhfibxuiucyxowxpb +bhlijevxhfibxuiuddnqavbj +bhlijevxhfibxuiudiiqutzn +bhlijevxhfibxuiudndrjssr +bhlijevxhfibxuiudwyssqez +bhlijevxhfibxuiuegjuqmpg +bhlijevxhfibxuiuelevflik +bhlijevxhfibxuiueuzwoizs +bhlijevxhfibxuiuezuxdhsw +bhlijevxhfibxuiufoazvcwh +bhlijevxhfibxuiuhanbdvpq +bhlijevxhfibxuiuhfibxuiu +bhlijevxhfibxuiuhkdcmtby +bhlijevxhfibxuiuhtydvqtb +bhlijevxhfibxuiuhytekpmf +bhlijevxhfibxuiuiiegilwr +bhlijevxhfibxuiuirzhrjiz +bhlijevxhfibxuiujbkjpftg +bhlijevxhfibxuiujgfkeemk +bhlijevxhfibxuiujlakydfo +bhlijevxhfibxuiujuvmcaww +bhlijevxhfibxuiukxrqrxft +bhlijevxhfibxuiulhcsptqa +bhlijevxhfibxuiulqxtyrci +bhlijevxhfibxuiumaivwnmu +bhlijevxhfibxuiumfdwlmfy +bhlijevxhfibxuiumoyxujxb +bhlijevxhfibxuiumttyjiqf +bhlijevxhfibxuiupssfqqjt +bhlijevxhfibxuiupxngfpcx +bhlijevxhfibxuiuqcdhomua +bhlijevxhfibxuiuqlyixkgi +bhlijevxhfibxuiuqvokbhxq +bhlijevxhfibxuiuraelkfjy +bhlijevxhfibxuiurounibuf +bhlijevxhkdcmtbyaoffckzd +bhlijevxhkdcmtbyatafwjsh +bhlijevxhkdcmtbybhlijevx +bhlijevxhkdcmtbybrbjscia +bhlijevxhkdcmtbycyxowxpb +bhlijevxhkdcmtbyddnqavbj +bhlijevxhkdcmtbydiiqutzn +bhlijevxhkdcmtbydndrjssr +bhlijevxhkdcmtbydwyssqez +bhlijevxhkdcmtbyegjuqmpg +bhlijevxhkdcmtbyelevflik +bhlijevxhkdcmtbyeuzwoizs +bhlijevxhkdcmtbyezuxdhsw +bhlijevxhkdcmtbyfoazvcwh +bhlijevxhkdcmtbyhanbdvpq +bhlijevxhkdcmtbyhfibxuiu +bhlijevxhkdcmtbyhkdcmtby +bhlijevxhkdcmtbyhtydvqtb +bhlijevxhkdcmtbyhytekpmf +bhlijevxhkdcmtbyiiegilwr +bhlijevxhkdcmtbyirzhrjiz +bhlijevxhkdcmtbyjbkjpftg +bhlijevxhkdcmtbyjgfkeemk +bhlijevxhkdcmtbyjlakydfo +bhlijevxhkdcmtbyjuvmcaww +bhlijevxhkdcmtbykxrqrxft +bhlijevxhkdcmtbylhcsptqa +bhlijevxhkdcmtbylqxtyrci +bhlijevxhkdcmtbymaivwnmu +bhlijevxhkdcmtbymfdwlmfy +bhlijevxhkdcmtbymoyxujxb +bhlijevxhkdcmtbymttyjiqf +bhlijevxhkdcmtbypssfqqjt +bhlijevxhkdcmtbypxngfpcx +bhlijevxhkdcmtbyqcdhomua +bhlijevxhkdcmtbyqlyixkgi +bhlijevxhkdcmtbyqvokbhxq +bhlijevxhkdcmtbyraelkfjy +bhlijevxhkdcmtbyrounibuf +bhlijevxhtydvqtbaoffckzd +bhlijevxhtydvqtbatafwjsh +bhlijevxhtydvqtbbhlijevx +bhlijevxhtydvqtbbrbjscia +bhlijevxhtydvqtbcyxowxpb +bhlijevxhtydvqtbddnqavbj +bhlijevxhtydvqtbdiiqutzn +bhlijevxhtydvqtbdndrjssr +bhlijevxhtydvqtbdwyssqez +bhlijevxhtydvqtbegjuqmpg +bhlijevxhtydvqtbelevflik +bhlijevxhtydvqtbeuzwoizs +bhlijevxhtydvqtbezuxdhsw +bhlijevxhtydvqtbfoazvcwh +bhlijevxhtydvqtbhanbdvpq +bhlijevxhtydvqtbhfibxuiu +bhlijevxhtydvqtbhkdcmtby +bhlijevxhtydvqtbhtydvqtb +bhlijevxhtydvqtbhytekpmf +bhlijevxhtydvqtbiiegilwr +bhlijevxhtydvqtbirzhrjiz +bhlijevxhtydvqtbjbkjpftg +bhlijevxhtydvqtbjgfkeemk +bhlijevxhtydvqtbjlakydfo +bhlijevxhtydvqtbjuvmcaww +bhlijevxhtydvqtbkxrqrxft +bhlijevxhtydvqtblhcsptqa +bhlijevxhtydvqtblqxtyrci +bhlijevxhtydvqtbmaivwnmu +bhlijevxhtydvqtbmfdwlmfy +bhlijevxhtydvqtbmoyxujxb +bhlijevxhtydvqtbmttyjiqf +bhlijevxhtydvqtbpssfqqjt +bhlijevxhtydvqtbpxngfpcx +bhlijevxhtydvqtbqcdhomua +bhlijevxhtydvqtbqlyixkgi +bhlijevxhtydvqtbqvokbhxq +bhlijevxhtydvqtbraelkfjy +bhlijevxhtydvqtbrounibuf +bhlijevxhytekpmfaoffckzd +bhlijevxhytekpmfatafwjsh +bhlijevxhytekpmfbhlijevx +bhlijevxhytekpmfbrbjscia +bhlijevxhytekpmfcyxowxpb +bhlijevxhytekpmfddnqavbj +bhlijevxhytekpmfdiiqutzn +bhlijevxhytekpmfdndrjssr +bhlijevxhytekpmfdwyssqez +bhlijevxhytekpmfegjuqmpg +bhlijevxhytekpmfelevflik +bhlijevxhytekpmfeuzwoizs +bhlijevxhytekpmfezuxdhsw +bhlijevxhytekpmffoazvcwh +bhlijevxhytekpmfhanbdvpq +bhlijevxhytekpmfhfibxuiu +bhlijevxhytekpmfhkdcmtby +bhlijevxhytekpmfhtydvqtb +bhlijevxhytekpmfhytekpmf +bhlijevxhytekpmfiiegilwr +bhlijevxhytekpmfirzhrjiz +bhlijevxhytekpmfjbkjpftg +bhlijevxhytekpmfjgfkeemk +bhlijevxhytekpmfjlakydfo +bhlijevxhytekpmfjuvmcaww +bhlijevxhytekpmfkxrqrxft +bhlijevxhytekpmflhcsptqa +bhlijevxhytekpmflqxtyrci +bhlijevxhytekpmfmaivwnmu +bhlijevxhytekpmfmfdwlmfy +bhlijevxhytekpmfmoyxujxb +bhlijevxhytekpmfmttyjiqf +bhlijevxhytekpmfpssfqqjt +bhlijevxhytekpmfpxngfpcx +bhlijevxhytekpmfqcdhomua +bhlijevxhytekpmfqlyixkgi +bhlijevxhytekpmfqvokbhxq +bhlijevxhytekpmfraelkfjy +bhlijevxhytekpmfrounibuf +bhlijevxiiegilwraoffckzd +bhlijevxiiegilwratafwjsh +bhlijevxiiegilwrbhlijevx +bhlijevxiiegilwrbrbjscia +bhlijevxiiegilwrcyxowxpb +bhlijevxiiegilwrddnqavbj +bhlijevxiiegilwrdiiqutzn +bhlijevxiiegilwrdndrjssr +bhlijevxiiegilwrdwyssqez +bhlijevxiiegilwregjuqmpg +bhlijevxiiegilwrelevflik +bhlijevxiiegilwreuzwoizs +bhlijevxiiegilwrezuxdhsw +bhlijevxiiegilwrfoazvcwh +bhlijevxiiegilwrhanbdvpq +bhlijevxiiegilwrhfibxuiu +bhlijevxiiegilwrhkdcmtby +bhlijevxiiegilwrhtydvqtb +bhlijevxiiegilwrhytekpmf +bhlijevxiiegilwriiegilwr +bhlijevxiiegilwrirzhrjiz +bhlijevxiiegilwrjbkjpftg +bhlijevxiiegilwrjgfkeemk +bhlijevxiiegilwrjlakydfo +bhlijevxiiegilwrjuvmcaww +bhlijevxiiegilwrkxrqrxft +bhlijevxiiegilwrlhcsptqa +bhlijevxiiegilwrlqxtyrci +bhlijevxiiegilwrmaivwnmu +bhlijevxiiegilwrmfdwlmfy +bhlijevxiiegilwrmoyxujxb +bhlijevxiiegilwrmttyjiqf +bhlijevxiiegilwrpssfqqjt +bhlijevxiiegilwrpxngfpcx +bhlijevxiiegilwrqcdhomua +bhlijevxiiegilwrqlyixkgi +bhlijevxiiegilwrqvokbhxq +bhlijevxiiegilwrraelkfjy +bhlijevxiiegilwrrounibuf +bhlijevxirzhrjizaoffckzd +bhlijevxirzhrjizatafwjsh +bhlijevxirzhrjizbhlijevx +bhlijevxirzhrjizbrbjscia +bhlijevxirzhrjizcyxowxpb +bhlijevxirzhrjizddnqavbj +bhlijevxirzhrjizdiiqutzn +bhlijevxirzhrjizdndrjssr +bhlijevxirzhrjizdwyssqez +bhlijevxirzhrjizegjuqmpg +bhlijevxirzhrjizelevflik +bhlijevxirzhrjizeuzwoizs +bhlijevxirzhrjizezuxdhsw +bhlijevxirzhrjizfoazvcwh +bhlijevxirzhrjizhanbdvpq +bhlijevxirzhrjizhfibxuiu +bhlijevxirzhrjizhkdcmtby +bhlijevxirzhrjizhtydvqtb +bhlijevxirzhrjizhytekpmf +bhlijevxirzhrjiziiegilwr +bhlijevxirzhrjizirzhrjiz +bhlijevxirzhrjizjbkjpftg +bhlijevxirzhrjizjgfkeemk +bhlijevxirzhrjizjlakydfo +bhlijevxirzhrjizjuvmcaww +bhlijevxirzhrjizkxrqrxft +bhlijevxirzhrjizlhcsptqa +bhlijevxirzhrjizlqxtyrci +bhlijevxirzhrjizmaivwnmu +bhlijevxirzhrjizmfdwlmfy +bhlijevxirzhrjizmoyxujxb +bhlijevxirzhrjizmttyjiqf +bhlijevxirzhrjizpssfqqjt +bhlijevxirzhrjizpxngfpcx +bhlijevxirzhrjizqcdhomua +bhlijevxirzhrjizqlyixkgi +bhlijevxirzhrjizqvokbhxq +bhlijevxirzhrjizraelkfjy +bhlijevxirzhrjizrounibuf +bhlijevxjbkjpftgaoffckzd +bhlijevxjbkjpftgatafwjsh +bhlijevxjbkjpftgbhlijevx +bhlijevxjbkjpftgbrbjscia +bhlijevxjbkjpftgcyxowxpb +bhlijevxjbkjpftgddnqavbj +bhlijevxjbkjpftgdiiqutzn +bhlijevxjbkjpftgdndrjssr +bhlijevxjbkjpftgdwyssqez +bhlijevxjbkjpftgegjuqmpg +bhlijevxjbkjpftgelevflik +bhlijevxjbkjpftgeuzwoizs +bhlijevxjbkjpftgezuxdhsw +bhlijevxjbkjpftgfoazvcwh +bhlijevxjbkjpftghanbdvpq +bhlijevxjbkjpftghfibxuiu +bhlijevxjbkjpftghkdcmtby +bhlijevxjbkjpftghtydvqtb +bhlijevxjbkjpftghytekpmf +bhlijevxjbkjpftgiiegilwr +bhlijevxjbkjpftgirzhrjiz +bhlijevxjbkjpftgjbkjpftg +bhlijevxjbkjpftgjgfkeemk +bhlijevxjbkjpftgjlakydfo +bhlijevxjbkjpftgjuvmcaww +bhlijevxjbkjpftgkxrqrxft +bhlijevxjbkjpftglhcsptqa +bhlijevxjbkjpftglqxtyrci +bhlijevxjbkjpftgmaivwnmu +bhlijevxjbkjpftgmfdwlmfy +bhlijevxjbkjpftgmoyxujxb +bhlijevxjbkjpftgmttyjiqf +bhlijevxjbkjpftgpssfqqjt +bhlijevxjbkjpftgpxngfpcx +bhlijevxjbkjpftgqcdhomua +bhlijevxjbkjpftgqlyixkgi +bhlijevxjbkjpftgqvokbhxq +bhlijevxjbkjpftgraelkfjy +bhlijevxjbkjpftgrounibuf +bhlijevxjgfkeemkaoffckzd +bhlijevxjgfkeemkatafwjsh +bhlijevxjgfkeemkbhlijevx +bhlijevxjgfkeemkbrbjscia +bhlijevxjgfkeemkcyxowxpb +bhlijevxjgfkeemkddnqavbj +bhlijevxjgfkeemkdiiqutzn +bhlijevxjgfkeemkdndrjssr +bhlijevxjgfkeemkdwyssqez +bhlijevxjgfkeemkegjuqmpg +bhlijevxjgfkeemkelevflik +bhlijevxjgfkeemkeuzwoizs +bhlijevxjgfkeemkezuxdhsw +bhlijevxjgfkeemkfoazvcwh +bhlijevxjgfkeemkhanbdvpq +bhlijevxjgfkeemkhfibxuiu +bhlijevxjgfkeemkhkdcmtby +bhlijevxjgfkeemkhtydvqtb +bhlijevxjgfkeemkhytekpmf +bhlijevxjgfkeemkiiegilwr +bhlijevxjgfkeemkirzhrjiz +bhlijevxjgfkeemkjbkjpftg +bhlijevxjgfkeemkjgfkeemk +bhlijevxjgfkeemkjlakydfo +bhlijevxjgfkeemkjuvmcaww +bhlijevxjgfkeemkkxrqrxft +bhlijevxjgfkeemklhcsptqa +bhlijevxjgfkeemklqxtyrci +bhlijevxjgfkeemkmaivwnmu +bhlijevxjgfkeemkmfdwlmfy +bhlijevxjgfkeemkmoyxujxb +bhlijevxjgfkeemkmttyjiqf +bhlijevxjgfkeemkpssfqqjt +bhlijevxjgfkeemkpxngfpcx +bhlijevxjgfkeemkqcdhomua +bhlijevxjgfkeemkqlyixkgi +bhlijevxjgfkeemkqvokbhxq +bhlijevxjgfkeemkraelkfjy +bhlijevxjgfkeemkrounibuf +bhlijevxjlakydfoaoffckzd +bhlijevxjlakydfoatafwjsh +bhlijevxjlakydfobhlijevx +bhlijevxjlakydfobrbjscia +bhlijevxjlakydfocyxowxpb +bhlijevxjlakydfoddnqavbj +bhlijevxjlakydfodiiqutzn +bhlijevxjlakydfodndrjssr +bhlijevxjlakydfodwyssqez +bhlijevxjlakydfoegjuqmpg +bhlijevxjlakydfoelevflik +bhlijevxjlakydfoeuzwoizs +bhlijevxjlakydfoezuxdhsw +bhlijevxjlakydfofoazvcwh +bhlijevxjlakydfohanbdvpq +bhlijevxjlakydfohfibxuiu +bhlijevxjlakydfohkdcmtby +bhlijevxjlakydfohtydvqtb +bhlijevxjlakydfohytekpmf +bhlijevxjlakydfoiiegilwr +bhlijevxjlakydfoirzhrjiz +bhlijevxjlakydfojbkjpftg +bhlijevxjlakydfojgfkeemk +bhlijevxjlakydfojlakydfo +bhlijevxjlakydfojuvmcaww +bhlijevxjlakydfokxrqrxft +bhlijevxjlakydfolhcsptqa +bhlijevxjlakydfolqxtyrci +bhlijevxjlakydfomaivwnmu +bhlijevxjlakydfomfdwlmfy +bhlijevxjlakydfomoyxujxb +bhlijevxjlakydfomttyjiqf +bhlijevxjlakydfopssfqqjt +bhlijevxjlakydfopxngfpcx +bhlijevxjlakydfoqcdhomua +bhlijevxjlakydfoqlyixkgi +bhlijevxjlakydfoqvokbhxq +bhlijevxjlakydforaelkfjy +bhlijevxjlakydforounibuf +bhlijevxjuvmcawwaoffckzd +bhlijevxjuvmcawwatafwjsh +bhlijevxjuvmcawwbhlijevx +bhlijevxjuvmcawwbrbjscia +bhlijevxjuvmcawwcyxowxpb +bhlijevxjuvmcawwddnqavbj +bhlijevxjuvmcawwdiiqutzn +bhlijevxjuvmcawwdndrjssr +bhlijevxjuvmcawwdwyssqez +bhlijevxjuvmcawwegjuqmpg +bhlijevxjuvmcawwelevflik +bhlijevxjuvmcawweuzwoizs +bhlijevxjuvmcawwezuxdhsw +bhlijevxjuvmcawwfoazvcwh +bhlijevxjuvmcawwhanbdvpq +bhlijevxjuvmcawwhfibxuiu +bhlijevxjuvmcawwhkdcmtby +bhlijevxjuvmcawwhtydvqtb +bhlijevxjuvmcawwhytekpmf +bhlijevxjuvmcawwiiegilwr +bhlijevxjuvmcawwirzhrjiz +bhlijevxjuvmcawwjbkjpftg +bhlijevxjuvmcawwjgfkeemk +bhlijevxjuvmcawwjlakydfo +bhlijevxjuvmcawwjuvmcaww +bhlijevxjuvmcawwkxrqrxft +bhlijevxjuvmcawwlhcsptqa +bhlijevxjuvmcawwlqxtyrci +bhlijevxjuvmcawwmaivwnmu +bhlijevxjuvmcawwmfdwlmfy +bhlijevxjuvmcawwmoyxujxb +bhlijevxjuvmcawwmttyjiqf +bhlijevxjuvmcawwpssfqqjt +bhlijevxjuvmcawwpxngfpcx +bhlijevxjuvmcawwqcdhomua +bhlijevxjuvmcawwqlyixkgi +bhlijevxjuvmcawwqvokbhxq +bhlijevxjuvmcawwraelkfjy +bhlijevxjuvmcawwrounibuf +bhlijevxkxrqrxftaoffckzd +bhlijevxkxrqrxftatafwjsh +bhlijevxkxrqrxftbhlijevx +bhlijevxkxrqrxftbrbjscia +bhlijevxkxrqrxftcyxowxpb +bhlijevxkxrqrxftddnqavbj +bhlijevxkxrqrxftdiiqutzn +bhlijevxkxrqrxftdndrjssr +bhlijevxkxrqrxftdwyssqez +bhlijevxkxrqrxftegjuqmpg +bhlijevxkxrqrxftelevflik +bhlijevxkxrqrxfteuzwoizs +bhlijevxkxrqrxftezuxdhsw +bhlijevxkxrqrxftfoazvcwh +bhlijevxkxrqrxfthanbdvpq +bhlijevxkxrqrxfthfibxuiu +bhlijevxkxrqrxfthkdcmtby +bhlijevxkxrqrxfthtydvqtb +bhlijevxkxrqrxfthytekpmf +bhlijevxkxrqrxftiiegilwr +bhlijevxkxrqrxftirzhrjiz +bhlijevxkxrqrxftjbkjpftg +bhlijevxkxrqrxftjgfkeemk +bhlijevxkxrqrxftjlakydfo +bhlijevxkxrqrxftjuvmcaww +bhlijevxkxrqrxftkxrqrxft +bhlijevxkxrqrxftlhcsptqa +bhlijevxkxrqrxftlqxtyrci +bhlijevxkxrqrxftmaivwnmu +bhlijevxkxrqrxftmfdwlmfy +bhlijevxkxrqrxftmoyxujxb +bhlijevxkxrqrxftmttyjiqf +bhlijevxkxrqrxftpssfqqjt +bhlijevxkxrqrxftpxngfpcx +bhlijevxkxrqrxftqcdhomua +bhlijevxkxrqrxftqlyixkgi +bhlijevxkxrqrxftqvokbhxq +bhlijevxkxrqrxftraelkfjy +bhlijevxkxrqrxftrounibuf +bhlijevxlhcsptqaaoffckzd +bhlijevxlhcsptqaatafwjsh +bhlijevxlhcsptqabhlijevx +bhlijevxlhcsptqabrbjscia +bhlijevxlhcsptqacyxowxpb +bhlijevxlhcsptqaddnqavbj +bhlijevxlhcsptqadiiqutzn +bhlijevxlhcsptqadndrjssr +bhlijevxlhcsptqadwyssqez +bhlijevxlhcsptqaegjuqmpg +bhlijevxlhcsptqaelevflik +bhlijevxlhcsptqaeuzwoizs +bhlijevxlhcsptqaezuxdhsw +bhlijevxlhcsptqafoazvcwh +bhlijevxlhcsptqahanbdvpq +bhlijevxlhcsptqahfibxuiu +bhlijevxlhcsptqahkdcmtby +bhlijevxlhcsptqahtydvqtb +bhlijevxlhcsptqahytekpmf +bhlijevxlhcsptqaiiegilwr +bhlijevxlhcsptqairzhrjiz +bhlijevxlhcsptqajbkjpftg +bhlijevxlhcsptqajgfkeemk +bhlijevxlhcsptqajlakydfo +bhlijevxlhcsptqajuvmcaww +bhlijevxlhcsptqakxrqrxft +bhlijevxlhcsptqalhcsptqa +bhlijevxlhcsptqalqxtyrci +bhlijevxlhcsptqamaivwnmu +bhlijevxlhcsptqamfdwlmfy +bhlijevxlhcsptqamoyxujxb +bhlijevxlhcsptqamttyjiqf +bhlijevxlhcsptqapssfqqjt +bhlijevxlhcsptqapxngfpcx +bhlijevxlhcsptqaqcdhomua +bhlijevxlhcsptqaqlyixkgi +bhlijevxlhcsptqaqvokbhxq +bhlijevxlhcsptqaraelkfjy +bhlijevxlhcsptqarounibuf +bhlijevxlqxtyrciaoffckzd +bhlijevxlqxtyrciatafwjsh +bhlijevxlqxtyrcibhlijevx +bhlijevxlqxtyrcibrbjscia +bhlijevxlqxtyrcicyxowxpb +bhlijevxlqxtyrciddnqavbj +bhlijevxlqxtyrcidiiqutzn +bhlijevxlqxtyrcidndrjssr +bhlijevxlqxtyrcidwyssqez +bhlijevxlqxtyrciegjuqmpg +bhlijevxlqxtyrcielevflik +bhlijevxlqxtyrcieuzwoizs +bhlijevxlqxtyrciezuxdhsw +bhlijevxlqxtyrcifoazvcwh +bhlijevxlqxtyrcihanbdvpq +bhlijevxlqxtyrcihfibxuiu +bhlijevxlqxtyrcihkdcmtby +bhlijevxlqxtyrcihtydvqtb +bhlijevxlqxtyrcihytekpmf +bhlijevxlqxtyrciiiegilwr +bhlijevxlqxtyrciirzhrjiz +bhlijevxlqxtyrcijbkjpftg +bhlijevxlqxtyrcijgfkeemk +bhlijevxlqxtyrcijlakydfo +bhlijevxlqxtyrcijuvmcaww +bhlijevxlqxtyrcikxrqrxft +bhlijevxlqxtyrcilhcsptqa +bhlijevxlqxtyrcilqxtyrci +bhlijevxlqxtyrcimaivwnmu +bhlijevxlqxtyrcimfdwlmfy +bhlijevxlqxtyrcimoyxujxb +bhlijevxlqxtyrcimttyjiqf +bhlijevxlqxtyrcipssfqqjt +bhlijevxlqxtyrcipxngfpcx +bhlijevxlqxtyrciqcdhomua +bhlijevxlqxtyrciqlyixkgi +bhlijevxlqxtyrciqvokbhxq +bhlijevxlqxtyrciraelkfjy +bhlijevxlqxtyrcirounibuf +bhlijevxmaivwnmuaoffckzd +bhlijevxmaivwnmuatafwjsh +bhlijevxmaivwnmubhlijevx +bhlijevxmaivwnmubrbjscia +bhlijevxmaivwnmucyxowxpb +bhlijevxmaivwnmuddnqavbj +bhlijevxmaivwnmudiiqutzn +bhlijevxmaivwnmudndrjssr +bhlijevxmaivwnmudwyssqez +bhlijevxmaivwnmuegjuqmpg +bhlijevxmaivwnmuelevflik +bhlijevxmaivwnmueuzwoizs +bhlijevxmaivwnmuezuxdhsw +bhlijevxmaivwnmufoazvcwh +bhlijevxmaivwnmuhanbdvpq +bhlijevxmaivwnmuhfibxuiu +bhlijevxmaivwnmuhkdcmtby +bhlijevxmaivwnmuhtydvqtb +bhlijevxmaivwnmuhytekpmf +bhlijevxmaivwnmuiiegilwr +bhlijevxmaivwnmuirzhrjiz +bhlijevxmaivwnmujbkjpftg +bhlijevxmaivwnmujgfkeemk +bhlijevxmaivwnmujlakydfo +bhlijevxmaivwnmujuvmcaww +bhlijevxmaivwnmukxrqrxft +bhlijevxmaivwnmulhcsptqa +bhlijevxmaivwnmulqxtyrci +bhlijevxmaivwnmumaivwnmu +bhlijevxmaivwnmumfdwlmfy +bhlijevxmaivwnmumoyxujxb +bhlijevxmaivwnmumttyjiqf +bhlijevxmaivwnmupssfqqjt +bhlijevxmaivwnmupxngfpcx +bhlijevxmaivwnmuqcdhomua +bhlijevxmaivwnmuqlyixkgi +bhlijevxmaivwnmuqvokbhxq +bhlijevxmaivwnmuraelkfjy +bhlijevxmaivwnmurounibuf +bhlijevxmfdwlmfyaoffckzd +bhlijevxmfdwlmfyatafwjsh +bhlijevxmfdwlmfybhlijevx +bhlijevxmfdwlmfybrbjscia +bhlijevxmfdwlmfycyxowxpb +bhlijevxmfdwlmfyddnqavbj +bhlijevxmfdwlmfydiiqutzn +bhlijevxmfdwlmfydndrjssr +bhlijevxmfdwlmfydwyssqez +bhlijevxmfdwlmfyegjuqmpg +bhlijevxmfdwlmfyelevflik +bhlijevxmfdwlmfyeuzwoizs +bhlijevxmfdwlmfyezuxdhsw +bhlijevxmfdwlmfyfoazvcwh +bhlijevxmfdwlmfyhanbdvpq +bhlijevxmfdwlmfyhfibxuiu +bhlijevxmfdwlmfyhkdcmtby +bhlijevxmfdwlmfyhtydvqtb +bhlijevxmfdwlmfyhytekpmf +bhlijevxmfdwlmfyiiegilwr +bhlijevxmfdwlmfyirzhrjiz +bhlijevxmfdwlmfyjbkjpftg +bhlijevxmfdwlmfyjgfkeemk +bhlijevxmfdwlmfyjlakydfo +bhlijevxmfdwlmfyjuvmcaww +bhlijevxmfdwlmfykxrqrxft +bhlijevxmfdwlmfylhcsptqa +bhlijevxmfdwlmfylqxtyrci +bhlijevxmfdwlmfymaivwnmu +bhlijevxmfdwlmfymfdwlmfy +bhlijevxmfdwlmfymoyxujxb +bhlijevxmfdwlmfymttyjiqf +bhlijevxmfdwlmfypssfqqjt +bhlijevxmfdwlmfypxngfpcx +bhlijevxmfdwlmfyqcdhomua +bhlijevxmfdwlmfyqlyixkgi +bhlijevxmfdwlmfyqvokbhxq +bhlijevxmfdwlmfyraelkfjy +bhlijevxmfdwlmfyrounibuf +bhlijevxmoyxujxbaoffckzd +bhlijevxmoyxujxbatafwjsh +bhlijevxmoyxujxbbhlijevx +bhlijevxmoyxujxbbrbjscia +bhlijevxmoyxujxbcyxowxpb +bhlijevxmoyxujxbddnqavbj +bhlijevxmoyxujxbdiiqutzn +bhlijevxmoyxujxbdndrjssr +bhlijevxmoyxujxbdwyssqez +bhlijevxmoyxujxbegjuqmpg +bhlijevxmoyxujxbelevflik +bhlijevxmoyxujxbeuzwoizs +bhlijevxmoyxujxbezuxdhsw +bhlijevxmoyxujxbfoazvcwh +bhlijevxmoyxujxbhanbdvpq +bhlijevxmoyxujxbhfibxuiu +bhlijevxmoyxujxbhkdcmtby +bhlijevxmoyxujxbhtydvqtb +bhlijevxmoyxujxbhytekpmf +bhlijevxmoyxujxbiiegilwr +bhlijevxmoyxujxbirzhrjiz +bhlijevxmoyxujxbjbkjpftg +bhlijevxmoyxujxbjgfkeemk +bhlijevxmoyxujxbjlakydfo +bhlijevxmoyxujxbjuvmcaww +bhlijevxmoyxujxbkxrqrxft +bhlijevxmoyxujxblhcsptqa +bhlijevxmoyxujxblqxtyrci +bhlijevxmoyxujxbmaivwnmu +bhlijevxmoyxujxbmfdwlmfy +bhlijevxmoyxujxbmoyxujxb +bhlijevxmoyxujxbmttyjiqf +bhlijevxmoyxujxbpssfqqjt +bhlijevxmoyxujxbpxngfpcx +bhlijevxmoyxujxbqcdhomua +bhlijevxmoyxujxbqlyixkgi +bhlijevxmoyxujxbqvokbhxq +bhlijevxmoyxujxbraelkfjy +bhlijevxmoyxujxbrounibuf +bhlijevxmttyjiqfaoffckzd +bhlijevxmttyjiqfatafwjsh +bhlijevxmttyjiqfbhlijevx +bhlijevxmttyjiqfbrbjscia +bhlijevxmttyjiqfcyxowxpb +bhlijevxmttyjiqfddnqavbj +bhlijevxmttyjiqfdiiqutzn +bhlijevxmttyjiqfdndrjssr +bhlijevxmttyjiqfdwyssqez +bhlijevxmttyjiqfegjuqmpg +bhlijevxmttyjiqfelevflik +bhlijevxmttyjiqfeuzwoizs +bhlijevxmttyjiqfezuxdhsw +bhlijevxmttyjiqffoazvcwh +bhlijevxmttyjiqfhanbdvpq +bhlijevxmttyjiqfhfibxuiu +bhlijevxmttyjiqfhkdcmtby +bhlijevxmttyjiqfhtydvqtb +bhlijevxmttyjiqfhytekpmf +bhlijevxmttyjiqfiiegilwr +bhlijevxmttyjiqfirzhrjiz +bhlijevxmttyjiqfjbkjpftg +bhlijevxmttyjiqfjgfkeemk +bhlijevxmttyjiqfjlakydfo +bhlijevxmttyjiqfjuvmcaww +bhlijevxmttyjiqfkxrqrxft +bhlijevxmttyjiqflhcsptqa +bhlijevxmttyjiqflqxtyrci +bhlijevxmttyjiqfmaivwnmu +bhlijevxmttyjiqfmfdwlmfy +bhlijevxmttyjiqfmoyxujxb +bhlijevxmttyjiqfmttyjiqf +bhlijevxmttyjiqfpssfqqjt +bhlijevxmttyjiqfpxngfpcx +bhlijevxmttyjiqfqcdhomua +bhlijevxmttyjiqfqlyixkgi +bhlijevxmttyjiqfqvokbhxq +bhlijevxmttyjiqfraelkfjy +bhlijevxmttyjiqfrounibuf +bhlijevxpssfqqjtaoffckzd +bhlijevxpssfqqjtatafwjsh +bhlijevxpssfqqjtbhlijevx +bhlijevxpssfqqjtbrbjscia +bhlijevxpssfqqjtcyxowxpb +bhlijevxpssfqqjtddnqavbj +bhlijevxpssfqqjtdiiqutzn +bhlijevxpssfqqjtdndrjssr +bhlijevxpssfqqjtdwyssqez +bhlijevxpssfqqjtegjuqmpg +bhlijevxpssfqqjtelevflik +bhlijevxpssfqqjteuzwoizs +bhlijevxpssfqqjtezuxdhsw +bhlijevxpssfqqjtfoazvcwh +bhlijevxpssfqqjthanbdvpq +bhlijevxpssfqqjthfibxuiu +bhlijevxpssfqqjthkdcmtby +bhlijevxpssfqqjthtydvqtb +bhlijevxpssfqqjthytekpmf +bhlijevxpssfqqjtiiegilwr +bhlijevxpssfqqjtirzhrjiz +bhlijevxpssfqqjtjbkjpftg +bhlijevxpssfqqjtjgfkeemk +bhlijevxpssfqqjtjlakydfo +bhlijevxpssfqqjtjuvmcaww +bhlijevxpssfqqjtkxrqrxft +bhlijevxpssfqqjtlhcsptqa +bhlijevxpssfqqjtlqxtyrci +bhlijevxpssfqqjtmaivwnmu +bhlijevxpssfqqjtmfdwlmfy +bhlijevxpssfqqjtmoyxujxb +bhlijevxpssfqqjtmttyjiqf +bhlijevxpssfqqjtpssfqqjt +bhlijevxpssfqqjtpxngfpcx +bhlijevxpssfqqjtqcdhomua +bhlijevxpssfqqjtqlyixkgi +bhlijevxpssfqqjtqvokbhxq +bhlijevxpssfqqjtraelkfjy +bhlijevxpssfqqjtrounibuf +bhlijevxpxngfpcxaoffckzd +bhlijevxpxngfpcxatafwjsh +bhlijevxpxngfpcxbhlijevx +bhlijevxpxngfpcxbrbjscia +bhlijevxpxngfpcxcyxowxpb +bhlijevxpxngfpcxddnqavbj +bhlijevxpxngfpcxdiiqutzn +bhlijevxpxngfpcxdndrjssr +bhlijevxpxngfpcxdwyssqez +bhlijevxpxngfpcxegjuqmpg +bhlijevxpxngfpcxelevflik +bhlijevxpxngfpcxeuzwoizs +bhlijevxpxngfpcxezuxdhsw +bhlijevxpxngfpcxfoazvcwh +bhlijevxpxngfpcxhanbdvpq +bhlijevxpxngfpcxhfibxuiu +bhlijevxpxngfpcxhkdcmtby +bhlijevxpxngfpcxhtydvqtb +bhlijevxpxngfpcxhytekpmf +bhlijevxpxngfpcxiiegilwr +bhlijevxpxngfpcxirzhrjiz +bhlijevxpxngfpcxjbkjpftg +bhlijevxpxngfpcxjgfkeemk +bhlijevxpxngfpcxjlakydfo +bhlijevxpxngfpcxjuvmcaww +bhlijevxpxngfpcxkxrqrxft +bhlijevxpxngfpcxlhcsptqa +bhlijevxpxngfpcxlqxtyrci +bhlijevxpxngfpcxmaivwnmu +bhlijevxpxngfpcxmfdwlmfy +bhlijevxpxngfpcxmoyxujxb +bhlijevxpxngfpcxmttyjiqf +bhlijevxpxngfpcxpssfqqjt +bhlijevxpxngfpcxpxngfpcx +bhlijevxpxngfpcxqcdhomua +bhlijevxpxngfpcxqlyixkgi +bhlijevxpxngfpcxqvokbhxq +bhlijevxpxngfpcxraelkfjy +bhlijevxpxngfpcxrounibuf +bhlijevxqcdhomuaaoffckzd +bhlijevxqcdhomuaatafwjsh +bhlijevxqcdhomuabhlijevx +bhlijevxqcdhomuabrbjscia +bhlijevxqcdhomuacyxowxpb +bhlijevxqcdhomuaddnqavbj +bhlijevxqcdhomuadiiqutzn +bhlijevxqcdhomuadndrjssr +bhlijevxqcdhomuadwyssqez +bhlijevxqcdhomuaegjuqmpg +bhlijevxqcdhomuaelevflik +bhlijevxqcdhomuaeuzwoizs +bhlijevxqcdhomuaezuxdhsw +bhlijevxqcdhomuafoazvcwh +bhlijevxqcdhomuahanbdvpq +bhlijevxqcdhomuahfibxuiu +bhlijevxqcdhomuahkdcmtby +bhlijevxqcdhomuahtydvqtb +bhlijevxqcdhomuahytekpmf +bhlijevxqcdhomuaiiegilwr +bhlijevxqcdhomuairzhrjiz +bhlijevxqcdhomuajbkjpftg +bhlijevxqcdhomuajgfkeemk +bhlijevxqcdhomuajlakydfo +bhlijevxqcdhomuajuvmcaww +bhlijevxqcdhomuakxrqrxft +bhlijevxqcdhomualhcsptqa +bhlijevxqcdhomualqxtyrci +bhlijevxqcdhomuamaivwnmu +bhlijevxqcdhomuamfdwlmfy +bhlijevxqcdhomuamoyxujxb +bhlijevxqcdhomuamttyjiqf +bhlijevxqcdhomuapssfqqjt +bhlijevxqcdhomuapxngfpcx +bhlijevxqcdhomuaqcdhomua +bhlijevxqcdhomuaqlyixkgi +bhlijevxqcdhomuaqvokbhxq +bhlijevxqcdhomuaraelkfjy +bhlijevxqcdhomuarounibuf +bhlijevxqlyixkgiaoffckzd +bhlijevxqlyixkgiatafwjsh +bhlijevxqlyixkgibhlijevx +bhlijevxqlyixkgibrbjscia +bhlijevxqlyixkgicyxowxpb +bhlijevxqlyixkgiddnqavbj +bhlijevxqlyixkgidiiqutzn +bhlijevxqlyixkgidndrjssr +bhlijevxqlyixkgidwyssqez +bhlijevxqlyixkgiegjuqmpg +bhlijevxqlyixkgielevflik +bhlijevxqlyixkgieuzwoizs +bhlijevxqlyixkgiezuxdhsw +bhlijevxqlyixkgifoazvcwh +bhlijevxqlyixkgihanbdvpq +bhlijevxqlyixkgihfibxuiu +bhlijevxqlyixkgihkdcmtby +bhlijevxqlyixkgihtydvqtb +bhlijevxqlyixkgihytekpmf +bhlijevxqlyixkgiiiegilwr +bhlijevxqlyixkgiirzhrjiz +bhlijevxqlyixkgijbkjpftg +bhlijevxqlyixkgijgfkeemk +bhlijevxqlyixkgijlakydfo +bhlijevxqlyixkgijuvmcaww +bhlijevxqlyixkgikxrqrxft +bhlijevxqlyixkgilhcsptqa +bhlijevxqlyixkgilqxtyrci +bhlijevxqlyixkgimaivwnmu +bhlijevxqlyixkgimfdwlmfy +bhlijevxqlyixkgimoyxujxb +bhlijevxqlyixkgimttyjiqf +bhlijevxqlyixkgipssfqqjt +bhlijevxqlyixkgipxngfpcx +bhlijevxqlyixkgiqcdhomua +bhlijevxqlyixkgiqlyixkgi +bhlijevxqlyixkgiqvokbhxq +bhlijevxqlyixkgiraelkfjy +bhlijevxqlyixkgirounibuf +bhlijevxqvokbhxqaoffckzd +bhlijevxqvokbhxqatafwjsh +bhlijevxqvokbhxqbhlijevx +bhlijevxqvokbhxqbrbjscia +bhlijevxqvokbhxqcyxowxpb +bhlijevxqvokbhxqddnqavbj +bhlijevxqvokbhxqdiiqutzn +bhlijevxqvokbhxqdndrjssr +bhlijevxqvokbhxqdwyssqez +bhlijevxqvokbhxqegjuqmpg +bhlijevxqvokbhxqelevflik +bhlijevxqvokbhxqeuzwoizs +bhlijevxqvokbhxqezuxdhsw +bhlijevxqvokbhxqfoazvcwh +bhlijevxqvokbhxqhanbdvpq +bhlijevxqvokbhxqhfibxuiu +bhlijevxqvokbhxqhkdcmtby +bhlijevxqvokbhxqhtydvqtb +bhlijevxqvokbhxqhytekpmf +bhlijevxqvokbhxqiiegilwr +bhlijevxqvokbhxqirzhrjiz +bhlijevxqvokbhxqjbkjpftg +bhlijevxqvokbhxqjgfkeemk +bhlijevxqvokbhxqjlakydfo +bhlijevxqvokbhxqjuvmcaww +bhlijevxqvokbhxqkxrqrxft +bhlijevxqvokbhxqlhcsptqa +bhlijevxqvokbhxqlqxtyrci +bhlijevxqvokbhxqmaivwnmu +bhlijevxqvokbhxqmfdwlmfy +bhlijevxqvokbhxqmoyxujxb +bhlijevxqvokbhxqmttyjiqf +bhlijevxqvokbhxqpssfqqjt +bhlijevxqvokbhxqpxngfpcx +bhlijevxqvokbhxqqcdhomua +bhlijevxqvokbhxqqlyixkgi +bhlijevxqvokbhxqqvokbhxq +bhlijevxqvokbhxqraelkfjy +bhlijevxqvokbhxqrounibuf +bhlijevxraelkfjyaoffckzd +bhlijevxraelkfjyatafwjsh +bhlijevxraelkfjybhlijevx +bhlijevxraelkfjybrbjscia +bhlijevxraelkfjycyxowxpb +bhlijevxraelkfjyddnqavbj +bhlijevxraelkfjydiiqutzn +bhlijevxraelkfjydndrjssr +bhlijevxraelkfjydwyssqez +bhlijevxraelkfjyegjuqmpg +bhlijevxraelkfjyelevflik +bhlijevxraelkfjyeuzwoizs +bhlijevxraelkfjyezuxdhsw +bhlijevxraelkfjyfoazvcwh +bhlijevxraelkfjyhanbdvpq +bhlijevxraelkfjyhfibxuiu +bhlijevxraelkfjyhkdcmtby +bhlijevxraelkfjyhtydvqtb +bhlijevxraelkfjyhytekpmf +bhlijevxraelkfjyiiegilwr +bhlijevxraelkfjyirzhrjiz +bhlijevxraelkfjyjbkjpftg +bhlijevxraelkfjyjgfkeemk +bhlijevxraelkfjyjlakydfo +bhlijevxraelkfjyjuvmcaww +bhlijevxraelkfjykxrqrxft +bhlijevxraelkfjylhcsptqa +bhlijevxraelkfjylqxtyrci +bhlijevxraelkfjymaivwnmu +bhlijevxraelkfjymfdwlmfy +bhlijevxraelkfjymoyxujxb +bhlijevxraelkfjymttyjiqf +bhlijevxraelkfjypssfqqjt +bhlijevxraelkfjypxngfpcx +bhlijevxraelkfjyqcdhomua +bhlijevxraelkfjyqlyixkgi +bhlijevxraelkfjyqvokbhxq +bhlijevxraelkfjyraelkfjy +bhlijevxraelkfjyrounibuf +bhlijevxrounibufaoffckzd +bhlijevxrounibufatafwjsh +bhlijevxrounibufbhlijevx +bhlijevxrounibufbrbjscia +bhlijevxrounibufcyxowxpb +bhlijevxrounibufddnqavbj +bhlijevxrounibufdiiqutzn +bhlijevxrounibufdndrjssr +bhlijevxrounibufdwyssqez +bhlijevxrounibufegjuqmpg +bhlijevxrounibufelevflik +bhlijevxrounibufeuzwoizs +bhlijevxrounibufezuxdhsw +bhlijevxrounibuffoazvcwh +bhlijevxrounibufhanbdvpq +bhlijevxrounibufhfibxuiu +bhlijevxrounibufhkdcmtby +bhlijevxrounibufhtydvqtb +bhlijevxrounibufhytekpmf +bhlijevxrounibufiiegilwr +bhlijevxrounibufirzhrjiz +bhlijevxrounibufjbkjpftg +bhlijevxrounibufjgfkeemk +bhlijevxrounibufjlakydfo +bhlijevxrounibufjuvmcaww +bhlijevxrounibufkxrqrxft +bhlijevxrounibuflhcsptqa +bhlijevxrounibuflqxtyrci +bhlijevxrounibufmaivwnmu +bhlijevxrounibufmfdwlmfy +bhlijevxrounibufmoyxujxb +bhlijevxrounibufmttyjiqf +bhlijevxrounibufpssfqqjt +bhlijevxrounibufpxngfpcx +bhlijevxrounibufqcdhomua +bhlijevxrounibufqlyixkgi +bhlijevxrounibufqvokbhxq +bhlijevxrounibufraelkfjy +bhlijevxrounibufrounibuf +brbjsciaaoffckzdaoffckzd +brbjsciaaoffckzdatafwjsh +brbjsciaaoffckzdbhlijevx +brbjsciaaoffckzdbrbjscia +brbjsciaaoffckzdcyxowxpb +brbjsciaaoffckzdddnqavbj +brbjsciaaoffckzddiiqutzn +brbjsciaaoffckzddndrjssr +brbjsciaaoffckzddwyssqez +brbjsciaaoffckzdegjuqmpg +brbjsciaaoffckzdelevflik +brbjsciaaoffckzdeuzwoizs +brbjsciaaoffckzdezuxdhsw +brbjsciaaoffckzdfoazvcwh +brbjsciaaoffckzdhanbdvpq +brbjsciaaoffckzdhfibxuiu +brbjsciaaoffckzdhkdcmtby +brbjsciaaoffckzdhtydvqtb +brbjsciaaoffckzdhytekpmf +brbjsciaaoffckzdiiegilwr +brbjsciaaoffckzdirzhrjiz +brbjsciaaoffckzdjbkjpftg +brbjsciaaoffckzdjgfkeemk +brbjsciaaoffckzdjlakydfo +brbjsciaaoffckzdjuvmcaww +brbjsciaaoffckzdkxrqrxft +brbjsciaaoffckzdlhcsptqa +brbjsciaaoffckzdlqxtyrci +brbjsciaaoffckzdmaivwnmu +brbjsciaaoffckzdmfdwlmfy +brbjsciaaoffckzdmoyxujxb +brbjsciaaoffckzdmttyjiqf +brbjsciaaoffckzdpssfqqjt +brbjsciaaoffckzdpxngfpcx +brbjsciaaoffckzdqcdhomua +brbjsciaaoffckzdqlyixkgi +brbjsciaaoffckzdqvokbhxq +brbjsciaaoffckzdraelkfjy +brbjsciaaoffckzdrounibuf +brbjsciaatafwjshaoffckzd +brbjsciaatafwjshatafwjsh +brbjsciaatafwjshbhlijevx +brbjsciaatafwjshbrbjscia +brbjsciaatafwjshcyxowxpb +brbjsciaatafwjshddnqavbj +brbjsciaatafwjshdiiqutzn +brbjsciaatafwjshdndrjssr +brbjsciaatafwjshdwyssqez +brbjsciaatafwjshegjuqmpg +brbjsciaatafwjshelevflik +brbjsciaatafwjsheuzwoizs +brbjsciaatafwjshezuxdhsw +brbjsciaatafwjshfoazvcwh +brbjsciaatafwjshhanbdvpq +brbjsciaatafwjshhfibxuiu +brbjsciaatafwjshhkdcmtby +brbjsciaatafwjshhtydvqtb +brbjsciaatafwjshhytekpmf +brbjsciaatafwjshiiegilwr +brbjsciaatafwjshirzhrjiz +brbjsciaatafwjshjbkjpftg +brbjsciaatafwjshjgfkeemk +brbjsciaatafwjshjlakydfo +brbjsciaatafwjshjuvmcaww +brbjsciaatafwjshkxrqrxft +brbjsciaatafwjshlhcsptqa +brbjsciaatafwjshlqxtyrci +brbjsciaatafwjshmaivwnmu +brbjsciaatafwjshmfdwlmfy +brbjsciaatafwjshmoyxujxb +brbjsciaatafwjshmttyjiqf +brbjsciaatafwjshpssfqqjt +brbjsciaatafwjshpxngfpcx +brbjsciaatafwjshqcdhomua +brbjsciaatafwjshqlyixkgi +brbjsciaatafwjshqvokbhxq +brbjsciaatafwjshraelkfjy +brbjsciaatafwjshrounibuf +brbjsciabhlijevxaoffckzd +brbjsciabhlijevxatafwjsh +brbjsciabhlijevxbhlijevx +brbjsciabhlijevxbrbjscia +brbjsciabhlijevxcyxowxpb +brbjsciabhlijevxddnqavbj +brbjsciabhlijevxdiiqutzn +brbjsciabhlijevxdndrjssr +brbjsciabhlijevxdwyssqez +brbjsciabhlijevxegjuqmpg +brbjsciabhlijevxelevflik +brbjsciabhlijevxeuzwoizs +brbjsciabhlijevxezuxdhsw +brbjsciabhlijevxfoazvcwh +brbjsciabhlijevxhanbdvpq +brbjsciabhlijevxhfibxuiu +brbjsciabhlijevxhkdcmtby +brbjsciabhlijevxhtydvqtb +brbjsciabhlijevxhytekpmf +brbjsciabhlijevxiiegilwr +brbjsciabhlijevxirzhrjiz +brbjsciabhlijevxjbkjpftg +brbjsciabhlijevxjgfkeemk +brbjsciabhlijevxjlakydfo +brbjsciabhlijevxjuvmcaww +brbjsciabhlijevxkxrqrxft +brbjsciabhlijevxlhcsptqa +brbjsciabhlijevxlqxtyrci +brbjsciabhlijevxmaivwnmu +brbjsciabhlijevxmfdwlmfy +brbjsciabhlijevxmoyxujxb +brbjsciabhlijevxmttyjiqf +brbjsciabhlijevxpssfqqjt +brbjsciabhlijevxpxngfpcx +brbjsciabhlijevxqcdhomua +brbjsciabhlijevxqlyixkgi +brbjsciabhlijevxqvokbhxq +brbjsciabhlijevxraelkfjy +brbjsciabhlijevxrounibuf +brbjsciabrbjsciaaoffckzd +brbjsciabrbjsciaatafwjsh +brbjsciabrbjsciabhlijevx +brbjsciabrbjsciabrbjscia +brbjsciabrbjsciacyxowxpb +brbjsciabrbjsciaddnqavbj +brbjsciabrbjsciadiiqutzn +brbjsciabrbjsciadndrjssr +brbjsciabrbjsciadwyssqez +brbjsciabrbjsciaegjuqmpg +brbjsciabrbjsciaelevflik +brbjsciabrbjsciaeuzwoizs +brbjsciabrbjsciaezuxdhsw +brbjsciabrbjsciafoazvcwh +brbjsciabrbjsciahanbdvpq +brbjsciabrbjsciahfibxuiu +brbjsciabrbjsciahkdcmtby +brbjsciabrbjsciahtydvqtb +brbjsciabrbjsciahytekpmf +brbjsciabrbjsciaiiegilwr +brbjsciabrbjsciairzhrjiz +brbjsciabrbjsciajbkjpftg +brbjsciabrbjsciajgfkeemk +brbjsciabrbjsciajlakydfo +brbjsciabrbjsciajuvmcaww +brbjsciabrbjsciakxrqrxft +brbjsciabrbjscialhcsptqa +brbjsciabrbjscialqxtyrci +brbjsciabrbjsciamaivwnmu +brbjsciabrbjsciamfdwlmfy +brbjsciabrbjsciamoyxujxb +brbjsciabrbjsciamttyjiqf +brbjsciabrbjsciapssfqqjt +brbjsciabrbjsciapxngfpcx +brbjsciabrbjsciaqcdhomua +brbjsciabrbjsciaqlyixkgi +brbjsciabrbjsciaqvokbhxq +brbjsciabrbjsciaraelkfjy +brbjsciabrbjsciarounibuf +brbjsciacyxowxpbaoffckzd +brbjsciacyxowxpbatafwjsh +brbjsciacyxowxpbbhlijevx +brbjsciacyxowxpbbrbjscia +brbjsciacyxowxpbcyxowxpb +brbjsciacyxowxpbddnqavbj +brbjsciacyxowxpbdiiqutzn +brbjsciacyxowxpbdndrjssr +brbjsciacyxowxpbdwyssqez +brbjsciacyxowxpbegjuqmpg +brbjsciacyxowxpbelevflik +brbjsciacyxowxpbeuzwoizs +brbjsciacyxowxpbezuxdhsw +brbjsciacyxowxpbfoazvcwh +brbjsciacyxowxpbhanbdvpq +brbjsciacyxowxpbhfibxuiu +brbjsciacyxowxpbhkdcmtby +brbjsciacyxowxpbhtydvqtb +brbjsciacyxowxpbhytekpmf +brbjsciacyxowxpbiiegilwr +brbjsciacyxowxpbirzhrjiz +brbjsciacyxowxpbjbkjpftg +brbjsciacyxowxpbjgfkeemk +brbjsciacyxowxpbjlakydfo +brbjsciacyxowxpbjuvmcaww +brbjsciacyxowxpbkxrqrxft +brbjsciacyxowxpblhcsptqa +brbjsciacyxowxpblqxtyrci +brbjsciacyxowxpbmaivwnmu +brbjsciacyxowxpbmfdwlmfy +brbjsciacyxowxpbmoyxujxb +brbjsciacyxowxpbmttyjiqf +brbjsciacyxowxpbpssfqqjt +brbjsciacyxowxpbpxngfpcx +brbjsciacyxowxpbqcdhomua +brbjsciacyxowxpbqlyixkgi +brbjsciacyxowxpbqvokbhxq +brbjsciacyxowxpbraelkfjy +brbjsciacyxowxpbrounibuf +brbjsciaddnqavbjaoffckzd +brbjsciaddnqavbjatafwjsh +brbjsciaddnqavbjbhlijevx +brbjsciaddnqavbjbrbjscia +brbjsciaddnqavbjcyxowxpb +brbjsciaddnqavbjddnqavbj +brbjsciaddnqavbjdiiqutzn +brbjsciaddnqavbjdndrjssr +brbjsciaddnqavbjdwyssqez +brbjsciaddnqavbjegjuqmpg +brbjsciaddnqavbjelevflik +brbjsciaddnqavbjeuzwoizs +brbjsciaddnqavbjezuxdhsw +brbjsciaddnqavbjfoazvcwh +brbjsciaddnqavbjhanbdvpq +brbjsciaddnqavbjhfibxuiu +brbjsciaddnqavbjhkdcmtby +brbjsciaddnqavbjhtydvqtb +brbjsciaddnqavbjhytekpmf +brbjsciaddnqavbjiiegilwr +brbjsciaddnqavbjirzhrjiz +brbjsciaddnqavbjjbkjpftg +brbjsciaddnqavbjjgfkeemk +brbjsciaddnqavbjjlakydfo +brbjsciaddnqavbjjuvmcaww +brbjsciaddnqavbjkxrqrxft +brbjsciaddnqavbjlhcsptqa +brbjsciaddnqavbjlqxtyrci +brbjsciaddnqavbjmaivwnmu +brbjsciaddnqavbjmfdwlmfy +brbjsciaddnqavbjmoyxujxb +brbjsciaddnqavbjmttyjiqf +brbjsciaddnqavbjpssfqqjt +brbjsciaddnqavbjpxngfpcx +brbjsciaddnqavbjqcdhomua +brbjsciaddnqavbjqlyixkgi +brbjsciaddnqavbjqvokbhxq +brbjsciaddnqavbjraelkfjy +brbjsciaddnqavbjrounibuf +brbjsciadiiqutznaoffckzd +brbjsciadiiqutznatafwjsh +brbjsciadiiqutznbhlijevx +brbjsciadiiqutznbrbjscia +brbjsciadiiqutzncyxowxpb +brbjsciadiiqutznddnqavbj +brbjsciadiiqutzndiiqutzn +brbjsciadiiqutzndndrjssr +brbjsciadiiqutzndwyssqez +brbjsciadiiqutznegjuqmpg +brbjsciadiiqutznelevflik +brbjsciadiiqutzneuzwoizs +brbjsciadiiqutznezuxdhsw +brbjsciadiiqutznfoazvcwh +brbjsciadiiqutznhanbdvpq +brbjsciadiiqutznhfibxuiu +brbjsciadiiqutznhkdcmtby +brbjsciadiiqutznhtydvqtb +brbjsciadiiqutznhytekpmf +brbjsciadiiqutzniiegilwr +brbjsciadiiqutznirzhrjiz +brbjsciadiiqutznjbkjpftg +brbjsciadiiqutznjgfkeemk +brbjsciadiiqutznjlakydfo +brbjsciadiiqutznjuvmcaww +brbjsciadiiqutznkxrqrxft +brbjsciadiiqutznlhcsptqa +brbjsciadiiqutznlqxtyrci +brbjsciadiiqutznmaivwnmu +brbjsciadiiqutznmfdwlmfy +brbjsciadiiqutznmoyxujxb +brbjsciadiiqutznmttyjiqf +brbjsciadiiqutznpssfqqjt +brbjsciadiiqutznpxngfpcx +brbjsciadiiqutznqcdhomua +brbjsciadiiqutznqlyixkgi +brbjsciadiiqutznqvokbhxq +brbjsciadiiqutznraelkfjy +brbjsciadiiqutznrounibuf +brbjsciadndrjssraoffckzd +brbjsciadndrjssratafwjsh +brbjsciadndrjssrbhlijevx +brbjsciadndrjssrbrbjscia +brbjsciadndrjssrcyxowxpb +brbjsciadndrjssrddnqavbj +brbjsciadndrjssrdiiqutzn +brbjsciadndrjssrdndrjssr +brbjsciadndrjssrdwyssqez +brbjsciadndrjssregjuqmpg +brbjsciadndrjssrelevflik +brbjsciadndrjssreuzwoizs +brbjsciadndrjssrezuxdhsw +brbjsciadndrjssrfoazvcwh +brbjsciadndrjssrhanbdvpq +brbjsciadndrjssrhfibxuiu +brbjsciadndrjssrhkdcmtby +brbjsciadndrjssrhtydvqtb +brbjsciadndrjssrhytekpmf +brbjsciadndrjssriiegilwr +brbjsciadndrjssrirzhrjiz +brbjsciadndrjssrjbkjpftg +brbjsciadndrjssrjgfkeemk +brbjsciadndrjssrjlakydfo +brbjsciadndrjssrjuvmcaww +brbjsciadndrjssrkxrqrxft +brbjsciadndrjssrlhcsptqa +brbjsciadndrjssrlqxtyrci +brbjsciadndrjssrmaivwnmu +brbjsciadndrjssrmfdwlmfy +brbjsciadndrjssrmoyxujxb +brbjsciadndrjssrmttyjiqf +brbjsciadndrjssrpssfqqjt +brbjsciadndrjssrpxngfpcx +brbjsciadndrjssrqcdhomua +brbjsciadndrjssrqlyixkgi +brbjsciadndrjssrqvokbhxq +brbjsciadndrjssrraelkfjy +brbjsciadndrjssrrounibuf +brbjsciadwyssqezaoffckzd +brbjsciadwyssqezatafwjsh +brbjsciadwyssqezbhlijevx +brbjsciadwyssqezbrbjscia +brbjsciadwyssqezcyxowxpb +brbjsciadwyssqezddnqavbj +brbjsciadwyssqezdiiqutzn +brbjsciadwyssqezdndrjssr +brbjsciadwyssqezdwyssqez +brbjsciadwyssqezegjuqmpg +brbjsciadwyssqezelevflik +brbjsciadwyssqezeuzwoizs +brbjsciadwyssqezezuxdhsw +brbjsciadwyssqezfoazvcwh +brbjsciadwyssqezhanbdvpq +brbjsciadwyssqezhfibxuiu +brbjsciadwyssqezhkdcmtby +brbjsciadwyssqezhtydvqtb +brbjsciadwyssqezhytekpmf +brbjsciadwyssqeziiegilwr +brbjsciadwyssqezirzhrjiz +brbjsciadwyssqezjbkjpftg +brbjsciadwyssqezjgfkeemk +brbjsciadwyssqezjlakydfo +brbjsciadwyssqezjuvmcaww +brbjsciadwyssqezkxrqrxft +brbjsciadwyssqezlhcsptqa +brbjsciadwyssqezlqxtyrci +brbjsciadwyssqezmaivwnmu +brbjsciadwyssqezmfdwlmfy +brbjsciadwyssqezmoyxujxb +brbjsciadwyssqezmttyjiqf +brbjsciadwyssqezpssfqqjt +brbjsciadwyssqezpxngfpcx +brbjsciadwyssqezqcdhomua +brbjsciadwyssqezqlyixkgi +brbjsciadwyssqezqvokbhxq +brbjsciadwyssqezraelkfjy +brbjsciadwyssqezrounibuf +brbjsciaegjuqmpgaoffckzd +brbjsciaegjuqmpgatafwjsh +brbjsciaegjuqmpgbhlijevx +brbjsciaegjuqmpgbrbjscia +brbjsciaegjuqmpgcyxowxpb +brbjsciaegjuqmpgddnqavbj +brbjsciaegjuqmpgdiiqutzn +brbjsciaegjuqmpgdndrjssr +brbjsciaegjuqmpgdwyssqez +brbjsciaegjuqmpgegjuqmpg +brbjsciaegjuqmpgelevflik +brbjsciaegjuqmpgeuzwoizs +brbjsciaegjuqmpgezuxdhsw +brbjsciaegjuqmpgfoazvcwh +brbjsciaegjuqmpghanbdvpq +brbjsciaegjuqmpghfibxuiu +brbjsciaegjuqmpghkdcmtby +brbjsciaegjuqmpghtydvqtb +brbjsciaegjuqmpghytekpmf +brbjsciaegjuqmpgiiegilwr +brbjsciaegjuqmpgirzhrjiz +brbjsciaegjuqmpgjbkjpftg +brbjsciaegjuqmpgjgfkeemk +brbjsciaegjuqmpgjlakydfo +brbjsciaegjuqmpgjuvmcaww +brbjsciaegjuqmpgkxrqrxft +brbjsciaegjuqmpglhcsptqa +brbjsciaegjuqmpglqxtyrci +brbjsciaegjuqmpgmaivwnmu +brbjsciaegjuqmpgmfdwlmfy +brbjsciaegjuqmpgmoyxujxb +brbjsciaegjuqmpgmttyjiqf +brbjsciaegjuqmpgpssfqqjt +brbjsciaegjuqmpgpxngfpcx +brbjsciaegjuqmpgqcdhomua +brbjsciaegjuqmpgqlyixkgi +brbjsciaegjuqmpgqvokbhxq +brbjsciaegjuqmpgraelkfjy +brbjsciaegjuqmpgrounibuf +brbjsciaelevflikaoffckzd +brbjsciaelevflikatafwjsh +brbjsciaelevflikbhlijevx +brbjsciaelevflikbrbjscia +brbjsciaelevflikcyxowxpb +brbjsciaelevflikddnqavbj +brbjsciaelevflikdiiqutzn +brbjsciaelevflikdndrjssr +brbjsciaelevflikdwyssqez +brbjsciaelevflikegjuqmpg +brbjsciaelevflikelevflik +brbjsciaelevflikeuzwoizs +brbjsciaelevflikezuxdhsw +brbjsciaelevflikfoazvcwh +brbjsciaelevflikhanbdvpq +brbjsciaelevflikhfibxuiu +brbjsciaelevflikhkdcmtby +brbjsciaelevflikhtydvqtb +brbjsciaelevflikhytekpmf +brbjsciaelevflikiiegilwr +brbjsciaelevflikirzhrjiz +brbjsciaelevflikjbkjpftg +brbjsciaelevflikjgfkeemk +brbjsciaelevflikjlakydfo +brbjsciaelevflikjuvmcaww +brbjsciaelevflikkxrqrxft +brbjsciaelevfliklhcsptqa +brbjsciaelevfliklqxtyrci +brbjsciaelevflikmaivwnmu +brbjsciaelevflikmfdwlmfy +brbjsciaelevflikmoyxujxb +brbjsciaelevflikmttyjiqf +brbjsciaelevflikpssfqqjt +brbjsciaelevflikpxngfpcx +brbjsciaelevflikqcdhomua +brbjsciaelevflikqlyixkgi +brbjsciaelevflikqvokbhxq +brbjsciaelevflikraelkfjy +brbjsciaelevflikrounibuf +brbjsciaeuzwoizsaoffckzd +brbjsciaeuzwoizsatafwjsh +brbjsciaeuzwoizsbhlijevx +brbjsciaeuzwoizsbrbjscia +brbjsciaeuzwoizscyxowxpb +brbjsciaeuzwoizsddnqavbj +brbjsciaeuzwoizsdiiqutzn +brbjsciaeuzwoizsdndrjssr +brbjsciaeuzwoizsdwyssqez +brbjsciaeuzwoizsegjuqmpg +brbjsciaeuzwoizselevflik +brbjsciaeuzwoizseuzwoizs +brbjsciaeuzwoizsezuxdhsw +brbjsciaeuzwoizsfoazvcwh +brbjsciaeuzwoizshanbdvpq +brbjsciaeuzwoizshfibxuiu +brbjsciaeuzwoizshkdcmtby +brbjsciaeuzwoizshtydvqtb +brbjsciaeuzwoizshytekpmf +brbjsciaeuzwoizsiiegilwr +brbjsciaeuzwoizsirzhrjiz +brbjsciaeuzwoizsjbkjpftg +brbjsciaeuzwoizsjgfkeemk +brbjsciaeuzwoizsjlakydfo +brbjsciaeuzwoizsjuvmcaww +brbjsciaeuzwoizskxrqrxft +brbjsciaeuzwoizslhcsptqa +brbjsciaeuzwoizslqxtyrci +brbjsciaeuzwoizsmaivwnmu +brbjsciaeuzwoizsmfdwlmfy +brbjsciaeuzwoizsmoyxujxb +brbjsciaeuzwoizsmttyjiqf +brbjsciaeuzwoizspssfqqjt +brbjsciaeuzwoizspxngfpcx +brbjsciaeuzwoizsqcdhomua +brbjsciaeuzwoizsqlyixkgi +brbjsciaeuzwoizsqvokbhxq +brbjsciaeuzwoizsraelkfjy +brbjsciaeuzwoizsrounibuf +brbjsciaezuxdhswaoffckzd +brbjsciaezuxdhswatafwjsh +brbjsciaezuxdhswbhlijevx +brbjsciaezuxdhswbrbjscia +brbjsciaezuxdhswcyxowxpb +brbjsciaezuxdhswddnqavbj +brbjsciaezuxdhswdiiqutzn +brbjsciaezuxdhswdndrjssr +brbjsciaezuxdhswdwyssqez +brbjsciaezuxdhswegjuqmpg +brbjsciaezuxdhswelevflik +brbjsciaezuxdhsweuzwoizs +brbjsciaezuxdhswezuxdhsw +brbjsciaezuxdhswfoazvcwh +brbjsciaezuxdhswhanbdvpq +brbjsciaezuxdhswhfibxuiu +brbjsciaezuxdhswhkdcmtby +brbjsciaezuxdhswhtydvqtb +brbjsciaezuxdhswhytekpmf +brbjsciaezuxdhswiiegilwr +brbjsciaezuxdhswirzhrjiz +brbjsciaezuxdhswjbkjpftg +brbjsciaezuxdhswjgfkeemk +brbjsciaezuxdhswjlakydfo +brbjsciaezuxdhswjuvmcaww +brbjsciaezuxdhswkxrqrxft +brbjsciaezuxdhswlhcsptqa +brbjsciaezuxdhswlqxtyrci +brbjsciaezuxdhswmaivwnmu +brbjsciaezuxdhswmfdwlmfy +brbjsciaezuxdhswmoyxujxb +brbjsciaezuxdhswmttyjiqf +brbjsciaezuxdhswpssfqqjt +brbjsciaezuxdhswpxngfpcx +brbjsciaezuxdhswqcdhomua +brbjsciaezuxdhswqlyixkgi +brbjsciaezuxdhswqvokbhxq +brbjsciaezuxdhswraelkfjy +brbjsciaezuxdhswrounibuf +brbjsciafoazvcwhaoffckzd +brbjsciafoazvcwhatafwjsh +brbjsciafoazvcwhbhlijevx +brbjsciafoazvcwhbrbjscia +brbjsciafoazvcwhcyxowxpb +brbjsciafoazvcwhddnqavbj +brbjsciafoazvcwhdiiqutzn +brbjsciafoazvcwhdndrjssr +brbjsciafoazvcwhdwyssqez +brbjsciafoazvcwhegjuqmpg +brbjsciafoazvcwhelevflik +brbjsciafoazvcwheuzwoizs +brbjsciafoazvcwhezuxdhsw +brbjsciafoazvcwhfoazvcwh +brbjsciafoazvcwhhanbdvpq +brbjsciafoazvcwhhfibxuiu +brbjsciafoazvcwhhkdcmtby +brbjsciafoazvcwhhtydvqtb +brbjsciafoazvcwhhytekpmf +brbjsciafoazvcwhiiegilwr +brbjsciafoazvcwhirzhrjiz +brbjsciafoazvcwhjbkjpftg +brbjsciafoazvcwhjgfkeemk +brbjsciafoazvcwhjlakydfo +brbjsciafoazvcwhjuvmcaww +brbjsciafoazvcwhkxrqrxft +brbjsciafoazvcwhlhcsptqa +brbjsciafoazvcwhlqxtyrci +brbjsciafoazvcwhmaivwnmu +brbjsciafoazvcwhmfdwlmfy +brbjsciafoazvcwhmoyxujxb +brbjsciafoazvcwhmttyjiqf +brbjsciafoazvcwhpssfqqjt +brbjsciafoazvcwhpxngfpcx +brbjsciafoazvcwhqcdhomua +brbjsciafoazvcwhqlyixkgi +brbjsciafoazvcwhqvokbhxq +brbjsciafoazvcwhraelkfjy +brbjsciafoazvcwhrounibuf +brbjsciahanbdvpqaoffckzd +brbjsciahanbdvpqatafwjsh +brbjsciahanbdvpqbhlijevx +brbjsciahanbdvpqbrbjscia +brbjsciahanbdvpqcyxowxpb +brbjsciahanbdvpqddnqavbj +brbjsciahanbdvpqdiiqutzn +brbjsciahanbdvpqdndrjssr +brbjsciahanbdvpqdwyssqez +brbjsciahanbdvpqegjuqmpg +brbjsciahanbdvpqelevflik +brbjsciahanbdvpqeuzwoizs +brbjsciahanbdvpqezuxdhsw +brbjsciahanbdvpqfoazvcwh +brbjsciahanbdvpqhanbdvpq +brbjsciahanbdvpqhfibxuiu +brbjsciahanbdvpqhkdcmtby +brbjsciahanbdvpqhtydvqtb +brbjsciahanbdvpqhytekpmf +brbjsciahanbdvpqiiegilwr +brbjsciahanbdvpqirzhrjiz +brbjsciahanbdvpqjbkjpftg +brbjsciahanbdvpqjgfkeemk +brbjsciahanbdvpqjlakydfo +brbjsciahanbdvpqjuvmcaww +brbjsciahanbdvpqkxrqrxft +brbjsciahanbdvpqlhcsptqa +brbjsciahanbdvpqlqxtyrci +brbjsciahanbdvpqmaivwnmu +brbjsciahanbdvpqmfdwlmfy +brbjsciahanbdvpqmoyxujxb +brbjsciahanbdvpqmttyjiqf +brbjsciahanbdvpqpssfqqjt +brbjsciahanbdvpqpxngfpcx +brbjsciahanbdvpqqcdhomua +brbjsciahanbdvpqqlyixkgi +brbjsciahanbdvpqqvokbhxq +brbjsciahanbdvpqraelkfjy +brbjsciahanbdvpqrounibuf +brbjsciahfibxuiuaoffckzd +brbjsciahfibxuiuatafwjsh +brbjsciahfibxuiubhlijevx +brbjsciahfibxuiubrbjscia +brbjsciahfibxuiucyxowxpb +brbjsciahfibxuiuddnqavbj +brbjsciahfibxuiudiiqutzn +brbjsciahfibxuiudndrjssr +brbjsciahfibxuiudwyssqez +brbjsciahfibxuiuegjuqmpg +brbjsciahfibxuiuelevflik +brbjsciahfibxuiueuzwoizs +brbjsciahfibxuiuezuxdhsw +brbjsciahfibxuiufoazvcwh +brbjsciahfibxuiuhanbdvpq +brbjsciahfibxuiuhfibxuiu +brbjsciahfibxuiuhkdcmtby +brbjsciahfibxuiuhtydvqtb +brbjsciahfibxuiuhytekpmf +brbjsciahfibxuiuiiegilwr +brbjsciahfibxuiuirzhrjiz +brbjsciahfibxuiujbkjpftg +brbjsciahfibxuiujgfkeemk +brbjsciahfibxuiujlakydfo +brbjsciahfibxuiujuvmcaww +brbjsciahfibxuiukxrqrxft +brbjsciahfibxuiulhcsptqa +brbjsciahfibxuiulqxtyrci +brbjsciahfibxuiumaivwnmu +brbjsciahfibxuiumfdwlmfy +brbjsciahfibxuiumoyxujxb +brbjsciahfibxuiumttyjiqf +brbjsciahfibxuiupssfqqjt +brbjsciahfibxuiupxngfpcx +brbjsciahfibxuiuqcdhomua +brbjsciahfibxuiuqlyixkgi +brbjsciahfibxuiuqvokbhxq +brbjsciahfibxuiuraelkfjy +brbjsciahfibxuiurounibuf +brbjsciahkdcmtbyaoffckzd +brbjsciahkdcmtbyatafwjsh +brbjsciahkdcmtbybhlijevx +brbjsciahkdcmtbybrbjscia +brbjsciahkdcmtbycyxowxpb +brbjsciahkdcmtbyddnqavbj +brbjsciahkdcmtbydiiqutzn +brbjsciahkdcmtbydndrjssr +brbjsciahkdcmtbydwyssqez +brbjsciahkdcmtbyegjuqmpg +brbjsciahkdcmtbyelevflik +brbjsciahkdcmtbyeuzwoizs +brbjsciahkdcmtbyezuxdhsw +brbjsciahkdcmtbyfoazvcwh +brbjsciahkdcmtbyhanbdvpq +brbjsciahkdcmtbyhfibxuiu +brbjsciahkdcmtbyhkdcmtby +brbjsciahkdcmtbyhtydvqtb +brbjsciahkdcmtbyhytekpmf +brbjsciahkdcmtbyiiegilwr +brbjsciahkdcmtbyirzhrjiz +brbjsciahkdcmtbyjbkjpftg +brbjsciahkdcmtbyjgfkeemk +brbjsciahkdcmtbyjlakydfo +brbjsciahkdcmtbyjuvmcaww +brbjsciahkdcmtbykxrqrxft +brbjsciahkdcmtbylhcsptqa +brbjsciahkdcmtbylqxtyrci +brbjsciahkdcmtbymaivwnmu +brbjsciahkdcmtbymfdwlmfy +brbjsciahkdcmtbymoyxujxb +brbjsciahkdcmtbymttyjiqf +brbjsciahkdcmtbypssfqqjt +brbjsciahkdcmtbypxngfpcx +brbjsciahkdcmtbyqcdhomua +brbjsciahkdcmtbyqlyixkgi +brbjsciahkdcmtbyqvokbhxq +brbjsciahkdcmtbyraelkfjy +brbjsciahkdcmtbyrounibuf +brbjsciahtydvqtbaoffckzd +brbjsciahtydvqtbatafwjsh +brbjsciahtydvqtbbhlijevx +brbjsciahtydvqtbbrbjscia +brbjsciahtydvqtbcyxowxpb +brbjsciahtydvqtbddnqavbj +brbjsciahtydvqtbdiiqutzn +brbjsciahtydvqtbdndrjssr +brbjsciahtydvqtbdwyssqez +brbjsciahtydvqtbegjuqmpg +brbjsciahtydvqtbelevflik +brbjsciahtydvqtbeuzwoizs +brbjsciahtydvqtbezuxdhsw +brbjsciahtydvqtbfoazvcwh +brbjsciahtydvqtbhanbdvpq +brbjsciahtydvqtbhfibxuiu +brbjsciahtydvqtbhkdcmtby +brbjsciahtydvqtbhtydvqtb +brbjsciahtydvqtbhytekpmf +brbjsciahtydvqtbiiegilwr +brbjsciahtydvqtbirzhrjiz +brbjsciahtydvqtbjbkjpftg +brbjsciahtydvqtbjgfkeemk +brbjsciahtydvqtbjlakydfo +brbjsciahtydvqtbjuvmcaww +brbjsciahtydvqtbkxrqrxft +brbjsciahtydvqtblhcsptqa +brbjsciahtydvqtblqxtyrci +brbjsciahtydvqtbmaivwnmu +brbjsciahtydvqtbmfdwlmfy +brbjsciahtydvqtbmoyxujxb +brbjsciahtydvqtbmttyjiqf +brbjsciahtydvqtbpssfqqjt +brbjsciahtydvqtbpxngfpcx +brbjsciahtydvqtbqcdhomua +brbjsciahtydvqtbqlyixkgi +brbjsciahtydvqtbqvokbhxq +brbjsciahtydvqtbraelkfjy +brbjsciahtydvqtbrounibuf +brbjsciahytekpmfaoffckzd +brbjsciahytekpmfatafwjsh +brbjsciahytekpmfbhlijevx +brbjsciahytekpmfbrbjscia +brbjsciahytekpmfcyxowxpb +brbjsciahytekpmfddnqavbj +brbjsciahytekpmfdiiqutzn +brbjsciahytekpmfdndrjssr +brbjsciahytekpmfdwyssqez +brbjsciahytekpmfegjuqmpg +brbjsciahytekpmfelevflik +brbjsciahytekpmfeuzwoizs +brbjsciahytekpmfezuxdhsw +brbjsciahytekpmffoazvcwh +brbjsciahytekpmfhanbdvpq +brbjsciahytekpmfhfibxuiu +brbjsciahytekpmfhkdcmtby +brbjsciahytekpmfhtydvqtb +brbjsciahytekpmfhytekpmf +brbjsciahytekpmfiiegilwr +brbjsciahytekpmfirzhrjiz +brbjsciahytekpmfjbkjpftg +brbjsciahytekpmfjgfkeemk +brbjsciahytekpmfjlakydfo +brbjsciahytekpmfjuvmcaww +brbjsciahytekpmfkxrqrxft +brbjsciahytekpmflhcsptqa +brbjsciahytekpmflqxtyrci +brbjsciahytekpmfmaivwnmu +brbjsciahytekpmfmfdwlmfy +brbjsciahytekpmfmoyxujxb +brbjsciahytekpmfmttyjiqf +brbjsciahytekpmfpssfqqjt +brbjsciahytekpmfpxngfpcx +brbjsciahytekpmfqcdhomua +brbjsciahytekpmfqlyixkgi +brbjsciahytekpmfqvokbhxq +brbjsciahytekpmfraelkfjy +brbjsciahytekpmfrounibuf +brbjsciaiiegilwraoffckzd +brbjsciaiiegilwratafwjsh +brbjsciaiiegilwrbhlijevx +brbjsciaiiegilwrbrbjscia +brbjsciaiiegilwrcyxowxpb +brbjsciaiiegilwrddnqavbj +brbjsciaiiegilwrdiiqutzn +brbjsciaiiegilwrdndrjssr +brbjsciaiiegilwrdwyssqez +brbjsciaiiegilwregjuqmpg +brbjsciaiiegilwrelevflik +brbjsciaiiegilwreuzwoizs +brbjsciaiiegilwrezuxdhsw +brbjsciaiiegilwrfoazvcwh +brbjsciaiiegilwrhanbdvpq +brbjsciaiiegilwrhfibxuiu +brbjsciaiiegilwrhkdcmtby +brbjsciaiiegilwrhtydvqtb +brbjsciaiiegilwrhytekpmf +brbjsciaiiegilwriiegilwr +brbjsciaiiegilwrirzhrjiz +brbjsciaiiegilwrjbkjpftg +brbjsciaiiegilwrjgfkeemk +brbjsciaiiegilwrjlakydfo +brbjsciaiiegilwrjuvmcaww +brbjsciaiiegilwrkxrqrxft +brbjsciaiiegilwrlhcsptqa +brbjsciaiiegilwrlqxtyrci +brbjsciaiiegilwrmaivwnmu +brbjsciaiiegilwrmfdwlmfy +brbjsciaiiegilwrmoyxujxb +brbjsciaiiegilwrmttyjiqf +brbjsciaiiegilwrpssfqqjt +brbjsciaiiegilwrpxngfpcx +brbjsciaiiegilwrqcdhomua +brbjsciaiiegilwrqlyixkgi +brbjsciaiiegilwrqvokbhxq +brbjsciaiiegilwrraelkfjy +brbjsciaiiegilwrrounibuf +brbjsciairzhrjizaoffckzd +brbjsciairzhrjizatafwjsh +brbjsciairzhrjizbhlijevx +brbjsciairzhrjizbrbjscia +brbjsciairzhrjizcyxowxpb +brbjsciairzhrjizddnqavbj +brbjsciairzhrjizdiiqutzn +brbjsciairzhrjizdndrjssr +brbjsciairzhrjizdwyssqez +brbjsciairzhrjizegjuqmpg +brbjsciairzhrjizelevflik +brbjsciairzhrjizeuzwoizs +brbjsciairzhrjizezuxdhsw +brbjsciairzhrjizfoazvcwh +brbjsciairzhrjizhanbdvpq +brbjsciairzhrjizhfibxuiu +brbjsciairzhrjizhkdcmtby +brbjsciairzhrjizhtydvqtb +brbjsciairzhrjizhytekpmf +brbjsciairzhrjiziiegilwr +brbjsciairzhrjizirzhrjiz +brbjsciairzhrjizjbkjpftg +brbjsciairzhrjizjgfkeemk +brbjsciairzhrjizjlakydfo +brbjsciairzhrjizjuvmcaww +brbjsciairzhrjizkxrqrxft +brbjsciairzhrjizlhcsptqa +brbjsciairzhrjizlqxtyrci +brbjsciairzhrjizmaivwnmu +brbjsciairzhrjizmfdwlmfy +brbjsciairzhrjizmoyxujxb +brbjsciairzhrjizmttyjiqf +brbjsciairzhrjizpssfqqjt +brbjsciairzhrjizpxngfpcx +brbjsciairzhrjizqcdhomua +brbjsciairzhrjizqlyixkgi +brbjsciairzhrjizqvokbhxq +brbjsciairzhrjizraelkfjy +brbjsciairzhrjizrounibuf +brbjsciajbkjpftgaoffckzd +brbjsciajbkjpftgatafwjsh +brbjsciajbkjpftgbhlijevx +brbjsciajbkjpftgbrbjscia +brbjsciajbkjpftgcyxowxpb +brbjsciajbkjpftgddnqavbj +brbjsciajbkjpftgdiiqutzn +brbjsciajbkjpftgdndrjssr +brbjsciajbkjpftgdwyssqez +brbjsciajbkjpftgegjuqmpg +brbjsciajbkjpftgelevflik +brbjsciajbkjpftgeuzwoizs +brbjsciajbkjpftgezuxdhsw +brbjsciajbkjpftgfoazvcwh +brbjsciajbkjpftghanbdvpq +brbjsciajbkjpftghfibxuiu +brbjsciajbkjpftghkdcmtby +brbjsciajbkjpftghtydvqtb +brbjsciajbkjpftghytekpmf +brbjsciajbkjpftgiiegilwr +brbjsciajbkjpftgirzhrjiz +brbjsciajbkjpftgjbkjpftg +brbjsciajbkjpftgjgfkeemk +brbjsciajbkjpftgjlakydfo +brbjsciajbkjpftgjuvmcaww +brbjsciajbkjpftgkxrqrxft +brbjsciajbkjpftglhcsptqa +brbjsciajbkjpftglqxtyrci +brbjsciajbkjpftgmaivwnmu +brbjsciajbkjpftgmfdwlmfy +brbjsciajbkjpftgmoyxujxb +brbjsciajbkjpftgmttyjiqf +brbjsciajbkjpftgpssfqqjt +brbjsciajbkjpftgpxngfpcx +brbjsciajbkjpftgqcdhomua +brbjsciajbkjpftgqlyixkgi +brbjsciajbkjpftgqvokbhxq +brbjsciajbkjpftgraelkfjy +brbjsciajbkjpftgrounibuf +brbjsciajgfkeemkaoffckzd +brbjsciajgfkeemkatafwjsh +brbjsciajgfkeemkbhlijevx +brbjsciajgfkeemkbrbjscia +brbjsciajgfkeemkcyxowxpb +brbjsciajgfkeemkddnqavbj +brbjsciajgfkeemkdiiqutzn +brbjsciajgfkeemkdndrjssr +brbjsciajgfkeemkdwyssqez +brbjsciajgfkeemkegjuqmpg +brbjsciajgfkeemkelevflik +brbjsciajgfkeemkeuzwoizs +brbjsciajgfkeemkezuxdhsw +brbjsciajgfkeemkfoazvcwh +brbjsciajgfkeemkhanbdvpq +brbjsciajgfkeemkhfibxuiu +brbjsciajgfkeemkhkdcmtby +brbjsciajgfkeemkhtydvqtb +brbjsciajgfkeemkhytekpmf +brbjsciajgfkeemkiiegilwr +brbjsciajgfkeemkirzhrjiz +brbjsciajgfkeemkjbkjpftg +brbjsciajgfkeemkjgfkeemk +brbjsciajgfkeemkjlakydfo +brbjsciajgfkeemkjuvmcaww +brbjsciajgfkeemkkxrqrxft +brbjsciajgfkeemklhcsptqa +brbjsciajgfkeemklqxtyrci +brbjsciajgfkeemkmaivwnmu +brbjsciajgfkeemkmfdwlmfy +brbjsciajgfkeemkmoyxujxb +brbjsciajgfkeemkmttyjiqf +brbjsciajgfkeemkpssfqqjt +brbjsciajgfkeemkpxngfpcx +brbjsciajgfkeemkqcdhomua +brbjsciajgfkeemkqlyixkgi +brbjsciajgfkeemkqvokbhxq +brbjsciajgfkeemkraelkfjy +brbjsciajgfkeemkrounibuf +brbjsciajlakydfoaoffckzd +brbjsciajlakydfoatafwjsh +brbjsciajlakydfobhlijevx +brbjsciajlakydfobrbjscia +brbjsciajlakydfocyxowxpb +brbjsciajlakydfoddnqavbj +brbjsciajlakydfodiiqutzn +brbjsciajlakydfodndrjssr +brbjsciajlakydfodwyssqez +brbjsciajlakydfoegjuqmpg +brbjsciajlakydfoelevflik +brbjsciajlakydfoeuzwoizs +brbjsciajlakydfoezuxdhsw +brbjsciajlakydfofoazvcwh +brbjsciajlakydfohanbdvpq +brbjsciajlakydfohfibxuiu +brbjsciajlakydfohkdcmtby +brbjsciajlakydfohtydvqtb +brbjsciajlakydfohytekpmf +brbjsciajlakydfoiiegilwr +brbjsciajlakydfoirzhrjiz +brbjsciajlakydfojbkjpftg +brbjsciajlakydfojgfkeemk +brbjsciajlakydfojlakydfo +brbjsciajlakydfojuvmcaww +brbjsciajlakydfokxrqrxft +brbjsciajlakydfolhcsptqa +brbjsciajlakydfolqxtyrci +brbjsciajlakydfomaivwnmu +brbjsciajlakydfomfdwlmfy +brbjsciajlakydfomoyxujxb +brbjsciajlakydfomttyjiqf +brbjsciajlakydfopssfqqjt +brbjsciajlakydfopxngfpcx +brbjsciajlakydfoqcdhomua +brbjsciajlakydfoqlyixkgi +brbjsciajlakydfoqvokbhxq +brbjsciajlakydforaelkfjy +brbjsciajlakydforounibuf +brbjsciajuvmcawwaoffckzd +brbjsciajuvmcawwatafwjsh +brbjsciajuvmcawwbhlijevx +brbjsciajuvmcawwbrbjscia +brbjsciajuvmcawwcyxowxpb +brbjsciajuvmcawwddnqavbj +brbjsciajuvmcawwdiiqutzn +brbjsciajuvmcawwdndrjssr +brbjsciajuvmcawwdwyssqez +brbjsciajuvmcawwegjuqmpg +brbjsciajuvmcawwelevflik +brbjsciajuvmcawweuzwoizs +brbjsciajuvmcawwezuxdhsw +brbjsciajuvmcawwfoazvcwh +brbjsciajuvmcawwhanbdvpq +brbjsciajuvmcawwhfibxuiu +brbjsciajuvmcawwhkdcmtby +brbjsciajuvmcawwhtydvqtb +brbjsciajuvmcawwhytekpmf +brbjsciajuvmcawwiiegilwr +brbjsciajuvmcawwirzhrjiz +brbjsciajuvmcawwjbkjpftg +brbjsciajuvmcawwjgfkeemk +brbjsciajuvmcawwjlakydfo +brbjsciajuvmcawwjuvmcaww +brbjsciajuvmcawwkxrqrxft +brbjsciajuvmcawwlhcsptqa +brbjsciajuvmcawwlqxtyrci +brbjsciajuvmcawwmaivwnmu +brbjsciajuvmcawwmfdwlmfy +brbjsciajuvmcawwmoyxujxb +brbjsciajuvmcawwmttyjiqf +brbjsciajuvmcawwpssfqqjt +brbjsciajuvmcawwpxngfpcx +brbjsciajuvmcawwqcdhomua +brbjsciajuvmcawwqlyixkgi +brbjsciajuvmcawwqvokbhxq +brbjsciajuvmcawwraelkfjy +brbjsciajuvmcawwrounibuf +brbjsciakxrqrxftaoffckzd +brbjsciakxrqrxftatafwjsh +brbjsciakxrqrxftbhlijevx +brbjsciakxrqrxftbrbjscia +brbjsciakxrqrxftcyxowxpb +brbjsciakxrqrxftddnqavbj +brbjsciakxrqrxftdiiqutzn +brbjsciakxrqrxftdndrjssr +brbjsciakxrqrxftdwyssqez +brbjsciakxrqrxftegjuqmpg +brbjsciakxrqrxftelevflik +brbjsciakxrqrxfteuzwoizs +brbjsciakxrqrxftezuxdhsw +brbjsciakxrqrxftfoazvcwh +brbjsciakxrqrxfthanbdvpq +brbjsciakxrqrxfthfibxuiu +brbjsciakxrqrxfthkdcmtby +brbjsciakxrqrxfthtydvqtb +brbjsciakxrqrxfthytekpmf +brbjsciakxrqrxftiiegilwr +brbjsciakxrqrxftirzhrjiz +brbjsciakxrqrxftjbkjpftg +brbjsciakxrqrxftjgfkeemk +brbjsciakxrqrxftjlakydfo +brbjsciakxrqrxftjuvmcaww +brbjsciakxrqrxftkxrqrxft +brbjsciakxrqrxftlhcsptqa +brbjsciakxrqrxftlqxtyrci +brbjsciakxrqrxftmaivwnmu +brbjsciakxrqrxftmfdwlmfy +brbjsciakxrqrxftmoyxujxb +brbjsciakxrqrxftmttyjiqf +brbjsciakxrqrxftpssfqqjt +brbjsciakxrqrxftpxngfpcx +brbjsciakxrqrxftqcdhomua +brbjsciakxrqrxftqlyixkgi +brbjsciakxrqrxftqvokbhxq +brbjsciakxrqrxftraelkfjy +brbjsciakxrqrxftrounibuf +brbjscialhcsptqaaoffckzd +brbjscialhcsptqaatafwjsh +brbjscialhcsptqabhlijevx +brbjscialhcsptqabrbjscia +brbjscialhcsptqacyxowxpb +brbjscialhcsptqaddnqavbj +brbjscialhcsptqadiiqutzn +brbjscialhcsptqadndrjssr +brbjscialhcsptqadwyssqez +brbjscialhcsptqaegjuqmpg +brbjscialhcsptqaelevflik +brbjscialhcsptqaeuzwoizs +brbjscialhcsptqaezuxdhsw +brbjscialhcsptqafoazvcwh +brbjscialhcsptqahanbdvpq +brbjscialhcsptqahfibxuiu +brbjscialhcsptqahkdcmtby +brbjscialhcsptqahtydvqtb +brbjscialhcsptqahytekpmf +brbjscialhcsptqaiiegilwr +brbjscialhcsptqairzhrjiz +brbjscialhcsptqajbkjpftg +brbjscialhcsptqajgfkeemk +brbjscialhcsptqajlakydfo +brbjscialhcsptqajuvmcaww +brbjscialhcsptqakxrqrxft +brbjscialhcsptqalhcsptqa +brbjscialhcsptqalqxtyrci +brbjscialhcsptqamaivwnmu +brbjscialhcsptqamfdwlmfy +brbjscialhcsptqamoyxujxb +brbjscialhcsptqamttyjiqf +brbjscialhcsptqapssfqqjt +brbjscialhcsptqapxngfpcx +brbjscialhcsptqaqcdhomua +brbjscialhcsptqaqlyixkgi +brbjscialhcsptqaqvokbhxq +brbjscialhcsptqaraelkfjy +brbjscialhcsptqarounibuf +brbjscialqxtyrciaoffckzd +brbjscialqxtyrciatafwjsh +brbjscialqxtyrcibhlijevx +brbjscialqxtyrcibrbjscia +brbjscialqxtyrcicyxowxpb +brbjscialqxtyrciddnqavbj +brbjscialqxtyrcidiiqutzn +brbjscialqxtyrcidndrjssr +brbjscialqxtyrcidwyssqez +brbjscialqxtyrciegjuqmpg +brbjscialqxtyrcielevflik +brbjscialqxtyrcieuzwoizs +brbjscialqxtyrciezuxdhsw +brbjscialqxtyrcifoazvcwh +brbjscialqxtyrcihanbdvpq +brbjscialqxtyrcihfibxuiu +brbjscialqxtyrcihkdcmtby +brbjscialqxtyrcihtydvqtb +brbjscialqxtyrcihytekpmf +brbjscialqxtyrciiiegilwr +brbjscialqxtyrciirzhrjiz +brbjscialqxtyrcijbkjpftg +brbjscialqxtyrcijgfkeemk +brbjscialqxtyrcijlakydfo +brbjscialqxtyrcijuvmcaww +brbjscialqxtyrcikxrqrxft +brbjscialqxtyrcilhcsptqa +brbjscialqxtyrcilqxtyrci +brbjscialqxtyrcimaivwnmu +brbjscialqxtyrcimfdwlmfy +brbjscialqxtyrcimoyxujxb +brbjscialqxtyrcimttyjiqf +brbjscialqxtyrcipssfqqjt +brbjscialqxtyrcipxngfpcx +brbjscialqxtyrciqcdhomua +brbjscialqxtyrciqlyixkgi +brbjscialqxtyrciqvokbhxq +brbjscialqxtyrciraelkfjy +brbjscialqxtyrcirounibuf +brbjsciamaivwnmuaoffckzd +brbjsciamaivwnmuatafwjsh +brbjsciamaivwnmubhlijevx +brbjsciamaivwnmubrbjscia +brbjsciamaivwnmucyxowxpb +brbjsciamaivwnmuddnqavbj +brbjsciamaivwnmudiiqutzn +brbjsciamaivwnmudndrjssr +brbjsciamaivwnmudwyssqez +brbjsciamaivwnmuegjuqmpg +brbjsciamaivwnmuelevflik +brbjsciamaivwnmueuzwoizs +brbjsciamaivwnmuezuxdhsw +brbjsciamaivwnmufoazvcwh +brbjsciamaivwnmuhanbdvpq +brbjsciamaivwnmuhfibxuiu +brbjsciamaivwnmuhkdcmtby +brbjsciamaivwnmuhtydvqtb +brbjsciamaivwnmuhytekpmf +brbjsciamaivwnmuiiegilwr +brbjsciamaivwnmuirzhrjiz +brbjsciamaivwnmujbkjpftg +brbjsciamaivwnmujgfkeemk +brbjsciamaivwnmujlakydfo +brbjsciamaivwnmujuvmcaww +brbjsciamaivwnmukxrqrxft +brbjsciamaivwnmulhcsptqa +brbjsciamaivwnmulqxtyrci +brbjsciamaivwnmumaivwnmu +brbjsciamaivwnmumfdwlmfy +brbjsciamaivwnmumoyxujxb +brbjsciamaivwnmumttyjiqf +brbjsciamaivwnmupssfqqjt +brbjsciamaivwnmupxngfpcx +brbjsciamaivwnmuqcdhomua +brbjsciamaivwnmuqlyixkgi +brbjsciamaivwnmuqvokbhxq +brbjsciamaivwnmuraelkfjy +brbjsciamaivwnmurounibuf +brbjsciamfdwlmfyaoffckzd +brbjsciamfdwlmfyatafwjsh +brbjsciamfdwlmfybhlijevx +brbjsciamfdwlmfybrbjscia +brbjsciamfdwlmfycyxowxpb +brbjsciamfdwlmfyddnqavbj +brbjsciamfdwlmfydiiqutzn +brbjsciamfdwlmfydndrjssr +brbjsciamfdwlmfydwyssqez +brbjsciamfdwlmfyegjuqmpg +brbjsciamfdwlmfyelevflik +brbjsciamfdwlmfyeuzwoizs +brbjsciamfdwlmfyezuxdhsw +brbjsciamfdwlmfyfoazvcwh +brbjsciamfdwlmfyhanbdvpq +brbjsciamfdwlmfyhfibxuiu +brbjsciamfdwlmfyhkdcmtby +brbjsciamfdwlmfyhtydvqtb +brbjsciamfdwlmfyhytekpmf +brbjsciamfdwlmfyiiegilwr +brbjsciamfdwlmfyirzhrjiz +brbjsciamfdwlmfyjbkjpftg +brbjsciamfdwlmfyjgfkeemk +brbjsciamfdwlmfyjlakydfo +brbjsciamfdwlmfyjuvmcaww +brbjsciamfdwlmfykxrqrxft +brbjsciamfdwlmfylhcsptqa +brbjsciamfdwlmfylqxtyrci +brbjsciamfdwlmfymaivwnmu +brbjsciamfdwlmfymfdwlmfy +brbjsciamfdwlmfymoyxujxb +brbjsciamfdwlmfymttyjiqf +brbjsciamfdwlmfypssfqqjt +brbjsciamfdwlmfypxngfpcx +brbjsciamfdwlmfyqcdhomua +brbjsciamfdwlmfyqlyixkgi +brbjsciamfdwlmfyqvokbhxq +brbjsciamfdwlmfyraelkfjy +brbjsciamfdwlmfyrounibuf +brbjsciamoyxujxbaoffckzd +brbjsciamoyxujxbatafwjsh +brbjsciamoyxujxbbhlijevx +brbjsciamoyxujxbbrbjscia +brbjsciamoyxujxbcyxowxpb +brbjsciamoyxujxbddnqavbj +brbjsciamoyxujxbdiiqutzn +brbjsciamoyxujxbdndrjssr +brbjsciamoyxujxbdwyssqez +brbjsciamoyxujxbegjuqmpg +brbjsciamoyxujxbelevflik +brbjsciamoyxujxbeuzwoizs +brbjsciamoyxujxbezuxdhsw +brbjsciamoyxujxbfoazvcwh +brbjsciamoyxujxbhanbdvpq +brbjsciamoyxujxbhfibxuiu +brbjsciamoyxujxbhkdcmtby +brbjsciamoyxujxbhtydvqtb +brbjsciamoyxujxbhytekpmf +brbjsciamoyxujxbiiegilwr +brbjsciamoyxujxbirzhrjiz +brbjsciamoyxujxbjbkjpftg +brbjsciamoyxujxbjgfkeemk +brbjsciamoyxujxbjlakydfo +brbjsciamoyxujxbjuvmcaww +brbjsciamoyxujxbkxrqrxft +brbjsciamoyxujxblhcsptqa +brbjsciamoyxujxblqxtyrci +brbjsciamoyxujxbmaivwnmu +brbjsciamoyxujxbmfdwlmfy +brbjsciamoyxujxbmoyxujxb +brbjsciamoyxujxbmttyjiqf +brbjsciamoyxujxbpssfqqjt +brbjsciamoyxujxbpxngfpcx +brbjsciamoyxujxbqcdhomua +brbjsciamoyxujxbqlyixkgi +brbjsciamoyxujxbqvokbhxq +brbjsciamoyxujxbraelkfjy +brbjsciamoyxujxbrounibuf +brbjsciamttyjiqfaoffckzd +brbjsciamttyjiqfatafwjsh +brbjsciamttyjiqfbhlijevx +brbjsciamttyjiqfbrbjscia +brbjsciamttyjiqfcyxowxpb +brbjsciamttyjiqfddnqavbj +brbjsciamttyjiqfdiiqutzn +brbjsciamttyjiqfdndrjssr +brbjsciamttyjiqfdwyssqez +brbjsciamttyjiqfegjuqmpg +brbjsciamttyjiqfelevflik +brbjsciamttyjiqfeuzwoizs +brbjsciamttyjiqfezuxdhsw +brbjsciamttyjiqffoazvcwh +brbjsciamttyjiqfhanbdvpq +brbjsciamttyjiqfhfibxuiu +brbjsciamttyjiqfhkdcmtby +brbjsciamttyjiqfhtydvqtb +brbjsciamttyjiqfhytekpmf +brbjsciamttyjiqfiiegilwr +brbjsciamttyjiqfirzhrjiz +brbjsciamttyjiqfjbkjpftg +brbjsciamttyjiqfjgfkeemk +brbjsciamttyjiqfjlakydfo +brbjsciamttyjiqfjuvmcaww +brbjsciamttyjiqfkxrqrxft +brbjsciamttyjiqflhcsptqa +brbjsciamttyjiqflqxtyrci +brbjsciamttyjiqfmaivwnmu +brbjsciamttyjiqfmfdwlmfy +brbjsciamttyjiqfmoyxujxb +brbjsciamttyjiqfmttyjiqf +brbjsciamttyjiqfpssfqqjt +brbjsciamttyjiqfpxngfpcx +brbjsciamttyjiqfqcdhomua +brbjsciamttyjiqfqlyixkgi +brbjsciamttyjiqfqvokbhxq +brbjsciamttyjiqfraelkfjy +brbjsciamttyjiqfrounibuf +brbjsciapssfqqjtaoffckzd +brbjsciapssfqqjtatafwjsh +brbjsciapssfqqjtbhlijevx +brbjsciapssfqqjtbrbjscia +brbjsciapssfqqjtcyxowxpb +brbjsciapssfqqjtddnqavbj +brbjsciapssfqqjtdiiqutzn +brbjsciapssfqqjtdndrjssr +brbjsciapssfqqjtdwyssqez +brbjsciapssfqqjtegjuqmpg +brbjsciapssfqqjtelevflik +brbjsciapssfqqjteuzwoizs +brbjsciapssfqqjtezuxdhsw +brbjsciapssfqqjtfoazvcwh +brbjsciapssfqqjthanbdvpq +brbjsciapssfqqjthfibxuiu +brbjsciapssfqqjthkdcmtby +brbjsciapssfqqjthtydvqtb +brbjsciapssfqqjthytekpmf +brbjsciapssfqqjtiiegilwr +brbjsciapssfqqjtirzhrjiz +brbjsciapssfqqjtjbkjpftg +brbjsciapssfqqjtjgfkeemk +brbjsciapssfqqjtjlakydfo +brbjsciapssfqqjtjuvmcaww +brbjsciapssfqqjtkxrqrxft +brbjsciapssfqqjtlhcsptqa +brbjsciapssfqqjtlqxtyrci +brbjsciapssfqqjtmaivwnmu +brbjsciapssfqqjtmfdwlmfy +brbjsciapssfqqjtmoyxujxb +brbjsciapssfqqjtmttyjiqf +brbjsciapssfqqjtpssfqqjt +brbjsciapssfqqjtpxngfpcx +brbjsciapssfqqjtqcdhomua +brbjsciapssfqqjtqlyixkgi +brbjsciapssfqqjtqvokbhxq +brbjsciapssfqqjtraelkfjy +brbjsciapssfqqjtrounibuf +brbjsciapxngfpcxaoffckzd +brbjsciapxngfpcxatafwjsh +brbjsciapxngfpcxbhlijevx +brbjsciapxngfpcxbrbjscia +brbjsciapxngfpcxcyxowxpb +brbjsciapxngfpcxddnqavbj +brbjsciapxngfpcxdiiqutzn +brbjsciapxngfpcxdndrjssr +brbjsciapxngfpcxdwyssqez +brbjsciapxngfpcxegjuqmpg +brbjsciapxngfpcxelevflik +brbjsciapxngfpcxeuzwoizs +brbjsciapxngfpcxezuxdhsw +brbjsciapxngfpcxfoazvcwh +brbjsciapxngfpcxhanbdvpq +brbjsciapxngfpcxhfibxuiu +brbjsciapxngfpcxhkdcmtby +brbjsciapxngfpcxhtydvqtb +brbjsciapxngfpcxhytekpmf +brbjsciapxngfpcxiiegilwr +brbjsciapxngfpcxirzhrjiz +brbjsciapxngfpcxjbkjpftg +brbjsciapxngfpcxjgfkeemk +brbjsciapxngfpcxjlakydfo +brbjsciapxngfpcxjuvmcaww +brbjsciapxngfpcxkxrqrxft +brbjsciapxngfpcxlhcsptqa +brbjsciapxngfpcxlqxtyrci +brbjsciapxngfpcxmaivwnmu +brbjsciapxngfpcxmfdwlmfy +brbjsciapxngfpcxmoyxujxb +brbjsciapxngfpcxmttyjiqf +brbjsciapxngfpcxpssfqqjt +brbjsciapxngfpcxpxngfpcx +brbjsciapxngfpcxqcdhomua +brbjsciapxngfpcxqlyixkgi +brbjsciapxngfpcxqvokbhxq +brbjsciapxngfpcxraelkfjy +brbjsciapxngfpcxrounibuf +brbjsciaqcdhomuaaoffckzd +brbjsciaqcdhomuaatafwjsh +brbjsciaqcdhomuabhlijevx +brbjsciaqcdhomuabrbjscia +brbjsciaqcdhomuacyxowxpb +brbjsciaqcdhomuaddnqavbj +brbjsciaqcdhomuadiiqutzn +brbjsciaqcdhomuadndrjssr +brbjsciaqcdhomuadwyssqez +brbjsciaqcdhomuaegjuqmpg +brbjsciaqcdhomuaelevflik +brbjsciaqcdhomuaeuzwoizs +brbjsciaqcdhomuaezuxdhsw +brbjsciaqcdhomuafoazvcwh +brbjsciaqcdhomuahanbdvpq +brbjsciaqcdhomuahfibxuiu +brbjsciaqcdhomuahkdcmtby +brbjsciaqcdhomuahtydvqtb +brbjsciaqcdhomuahytekpmf +brbjsciaqcdhomuaiiegilwr +brbjsciaqcdhomuairzhrjiz +brbjsciaqcdhomuajbkjpftg +brbjsciaqcdhomuajgfkeemk +brbjsciaqcdhomuajlakydfo +brbjsciaqcdhomuajuvmcaww +brbjsciaqcdhomuakxrqrxft +brbjsciaqcdhomualhcsptqa +brbjsciaqcdhomualqxtyrci +brbjsciaqcdhomuamaivwnmu +brbjsciaqcdhomuamfdwlmfy +brbjsciaqcdhomuamoyxujxb +brbjsciaqcdhomuamttyjiqf +brbjsciaqcdhomuapssfqqjt +brbjsciaqcdhomuapxngfpcx +brbjsciaqcdhomuaqcdhomua +brbjsciaqcdhomuaqlyixkgi +brbjsciaqcdhomuaqvokbhxq +brbjsciaqcdhomuaraelkfjy +brbjsciaqcdhomuarounibuf +brbjsciaqlyixkgiaoffckzd +brbjsciaqlyixkgiatafwjsh +brbjsciaqlyixkgibhlijevx +brbjsciaqlyixkgibrbjscia +brbjsciaqlyixkgicyxowxpb +brbjsciaqlyixkgiddnqavbj +brbjsciaqlyixkgidiiqutzn +brbjsciaqlyixkgidndrjssr +brbjsciaqlyixkgidwyssqez +brbjsciaqlyixkgiegjuqmpg +brbjsciaqlyixkgielevflik +brbjsciaqlyixkgieuzwoizs +brbjsciaqlyixkgiezuxdhsw +brbjsciaqlyixkgifoazvcwh +brbjsciaqlyixkgihanbdvpq +brbjsciaqlyixkgihfibxuiu +brbjsciaqlyixkgihkdcmtby +brbjsciaqlyixkgihtydvqtb +brbjsciaqlyixkgihytekpmf +brbjsciaqlyixkgiiiegilwr +brbjsciaqlyixkgiirzhrjiz +brbjsciaqlyixkgijbkjpftg +brbjsciaqlyixkgijgfkeemk +brbjsciaqlyixkgijlakydfo +brbjsciaqlyixkgijuvmcaww +brbjsciaqlyixkgikxrqrxft +brbjsciaqlyixkgilhcsptqa +brbjsciaqlyixkgilqxtyrci +brbjsciaqlyixkgimaivwnmu +brbjsciaqlyixkgimfdwlmfy +brbjsciaqlyixkgimoyxujxb +brbjsciaqlyixkgimttyjiqf +brbjsciaqlyixkgipssfqqjt +brbjsciaqlyixkgipxngfpcx +brbjsciaqlyixkgiqcdhomua +brbjsciaqlyixkgiqlyixkgi +brbjsciaqlyixkgiqvokbhxq +brbjsciaqlyixkgiraelkfjy +brbjsciaqlyixkgirounibuf +brbjsciaqvokbhxqaoffckzd +brbjsciaqvokbhxqatafwjsh +brbjsciaqvokbhxqbhlijevx +brbjsciaqvokbhxqbrbjscia +brbjsciaqvokbhxqcyxowxpb +brbjsciaqvokbhxqddnqavbj +brbjsciaqvokbhxqdiiqutzn +brbjsciaqvokbhxqdndrjssr +brbjsciaqvokbhxqdwyssqez +brbjsciaqvokbhxqegjuqmpg +brbjsciaqvokbhxqelevflik +brbjsciaqvokbhxqeuzwoizs +brbjsciaqvokbhxqezuxdhsw +brbjsciaqvokbhxqfoazvcwh +brbjsciaqvokbhxqhanbdvpq +brbjsciaqvokbhxqhfibxuiu +brbjsciaqvokbhxqhkdcmtby +brbjsciaqvokbhxqhtydvqtb +brbjsciaqvokbhxqhytekpmf +brbjsciaqvokbhxqiiegilwr +brbjsciaqvokbhxqirzhrjiz +brbjsciaqvokbhxqjbkjpftg +brbjsciaqvokbhxqjgfkeemk +brbjsciaqvokbhxqjlakydfo +brbjsciaqvokbhxqjuvmcaww +brbjsciaqvokbhxqkxrqrxft +brbjsciaqvokbhxqlhcsptqa +brbjsciaqvokbhxqlqxtyrci +brbjsciaqvokbhxqmaivwnmu +brbjsciaqvokbhxqmfdwlmfy +brbjsciaqvokbhxqmoyxujxb +brbjsciaqvokbhxqmttyjiqf +brbjsciaqvokbhxqpssfqqjt +brbjsciaqvokbhxqpxngfpcx +brbjsciaqvokbhxqqcdhomua +brbjsciaqvokbhxqqlyixkgi +brbjsciaqvokbhxqqvokbhxq +brbjsciaqvokbhxqraelkfjy +brbjsciaqvokbhxqrounibuf +brbjsciaraelkfjyaoffckzd +brbjsciaraelkfjyatafwjsh +brbjsciaraelkfjybhlijevx +brbjsciaraelkfjybrbjscia +brbjsciaraelkfjycyxowxpb +brbjsciaraelkfjyddnqavbj +brbjsciaraelkfjydiiqutzn +brbjsciaraelkfjydndrjssr +brbjsciaraelkfjydwyssqez +brbjsciaraelkfjyegjuqmpg +brbjsciaraelkfjyelevflik +brbjsciaraelkfjyeuzwoizs +brbjsciaraelkfjyezuxdhsw +brbjsciaraelkfjyfoazvcwh +brbjsciaraelkfjyhanbdvpq +brbjsciaraelkfjyhfibxuiu +brbjsciaraelkfjyhkdcmtby +brbjsciaraelkfjyhtydvqtb +brbjsciaraelkfjyhytekpmf +brbjsciaraelkfjyiiegilwr +brbjsciaraelkfjyirzhrjiz +brbjsciaraelkfjyjbkjpftg +brbjsciaraelkfjyjgfkeemk +brbjsciaraelkfjyjlakydfo +brbjsciaraelkfjyjuvmcaww +brbjsciaraelkfjykxrqrxft +brbjsciaraelkfjylhcsptqa +brbjsciaraelkfjylqxtyrci +brbjsciaraelkfjymaivwnmu +brbjsciaraelkfjymfdwlmfy +brbjsciaraelkfjymoyxujxb +brbjsciaraelkfjymttyjiqf +brbjsciaraelkfjypssfqqjt +brbjsciaraelkfjypxngfpcx +brbjsciaraelkfjyqcdhomua +brbjsciaraelkfjyqlyixkgi +brbjsciaraelkfjyqvokbhxq +brbjsciaraelkfjyraelkfjy +brbjsciaraelkfjyrounibuf +brbjsciarounibufaoffckzd +brbjsciarounibufatafwjsh +brbjsciarounibufbhlijevx +brbjsciarounibufbrbjscia +brbjsciarounibufcyxowxpb +brbjsciarounibufddnqavbj +brbjsciarounibufdiiqutzn +brbjsciarounibufdndrjssr +brbjsciarounibufdwyssqez +brbjsciarounibufegjuqmpg +brbjsciarounibufelevflik +brbjsciarounibufeuzwoizs +brbjsciarounibufezuxdhsw +brbjsciarounibuffoazvcwh +brbjsciarounibufhanbdvpq +brbjsciarounibufhfibxuiu +brbjsciarounibufhkdcmtby +brbjsciarounibufhtydvqtb +brbjsciarounibufhytekpmf +brbjsciarounibufiiegilwr +brbjsciarounibufirzhrjiz +brbjsciarounibufjbkjpftg +brbjsciarounibufjgfkeemk +brbjsciarounibufjlakydfo +brbjsciarounibufjuvmcaww +brbjsciarounibufkxrqrxft +brbjsciarounibuflhcsptqa +brbjsciarounibuflqxtyrci +brbjsciarounibufmaivwnmu +brbjsciarounibufmfdwlmfy +brbjsciarounibufmoyxujxb +brbjsciarounibufmttyjiqf +brbjsciarounibufpssfqqjt +brbjsciarounibufpxngfpcx +brbjsciarounibufqcdhomua +brbjsciarounibufqlyixkgi +brbjsciarounibufqvokbhxq +brbjsciarounibufraelkfjy +brbjsciarounibufrounibuf +cyxowxpbaoffckzdaoffckzd +cyxowxpbaoffckzdatafwjsh +cyxowxpbaoffckzdbhlijevx +cyxowxpbaoffckzdbrbjscia +cyxowxpbaoffckzdcyxowxpb +cyxowxpbaoffckzdddnqavbj +cyxowxpbaoffckzddiiqutzn +cyxowxpbaoffckzddndrjssr +cyxowxpbaoffckzddwyssqez +cyxowxpbaoffckzdegjuqmpg +cyxowxpbaoffckzdelevflik +cyxowxpbaoffckzdeuzwoizs +cyxowxpbaoffckzdezuxdhsw +cyxowxpbaoffckzdfoazvcwh +cyxowxpbaoffckzdhanbdvpq +cyxowxpbaoffckzdhfibxuiu +cyxowxpbaoffckzdhkdcmtby +cyxowxpbaoffckzdhtydvqtb +cyxowxpbaoffckzdhytekpmf +cyxowxpbaoffckzdiiegilwr +cyxowxpbaoffckzdirzhrjiz +cyxowxpbaoffckzdjbkjpftg +cyxowxpbaoffckzdjgfkeemk +cyxowxpbaoffckzdjlakydfo +cyxowxpbaoffckzdjuvmcaww +cyxowxpbaoffckzdkxrqrxft +cyxowxpbaoffckzdlhcsptqa +cyxowxpbaoffckzdlqxtyrci +cyxowxpbaoffckzdmaivwnmu +cyxowxpbaoffckzdmfdwlmfy +cyxowxpbaoffckzdmoyxujxb +cyxowxpbaoffckzdmttyjiqf +cyxowxpbaoffckzdpssfqqjt +cyxowxpbaoffckzdpxngfpcx +cyxowxpbaoffckzdqcdhomua +cyxowxpbaoffckzdqlyixkgi +cyxowxpbaoffckzdqvokbhxq +cyxowxpbaoffckzdraelkfjy +cyxowxpbaoffckzdrounibuf +cyxowxpbatafwjshaoffckzd +cyxowxpbatafwjshatafwjsh +cyxowxpbatafwjshbhlijevx +cyxowxpbatafwjshbrbjscia +cyxowxpbatafwjshcyxowxpb +cyxowxpbatafwjshddnqavbj +cyxowxpbatafwjshdiiqutzn +cyxowxpbatafwjshdndrjssr +cyxowxpbatafwjshdwyssqez +cyxowxpbatafwjshegjuqmpg +cyxowxpbatafwjshelevflik +cyxowxpbatafwjsheuzwoizs +cyxowxpbatafwjshezuxdhsw +cyxowxpbatafwjshfoazvcwh +cyxowxpbatafwjshhanbdvpq +cyxowxpbatafwjshhfibxuiu +cyxowxpbatafwjshhkdcmtby +cyxowxpbatafwjshhtydvqtb +cyxowxpbatafwjshhytekpmf +cyxowxpbatafwjshiiegilwr +cyxowxpbatafwjshirzhrjiz +cyxowxpbatafwjshjbkjpftg +cyxowxpbatafwjshjgfkeemk +cyxowxpbatafwjshjlakydfo +cyxowxpbatafwjshjuvmcaww +cyxowxpbatafwjshkxrqrxft +cyxowxpbatafwjshlhcsptqa +cyxowxpbatafwjshlqxtyrci +cyxowxpbatafwjshmaivwnmu +cyxowxpbatafwjshmfdwlmfy +cyxowxpbatafwjshmoyxujxb +cyxowxpbatafwjshmttyjiqf +cyxowxpbatafwjshpssfqqjt +cyxowxpbatafwjshpxngfpcx +cyxowxpbatafwjshqcdhomua +cyxowxpbatafwjshqlyixkgi +cyxowxpbatafwjshqvokbhxq +cyxowxpbatafwjshraelkfjy +cyxowxpbatafwjshrounibuf +cyxowxpbbhlijevxaoffckzd +cyxowxpbbhlijevxatafwjsh +cyxowxpbbhlijevxbhlijevx +cyxowxpbbhlijevxbrbjscia +cyxowxpbbhlijevxcyxowxpb +cyxowxpbbhlijevxddnqavbj +cyxowxpbbhlijevxdiiqutzn +cyxowxpbbhlijevxdndrjssr +cyxowxpbbhlijevxdwyssqez +cyxowxpbbhlijevxegjuqmpg +cyxowxpbbhlijevxelevflik +cyxowxpbbhlijevxeuzwoizs +cyxowxpbbhlijevxezuxdhsw +cyxowxpbbhlijevxfoazvcwh +cyxowxpbbhlijevxhanbdvpq +cyxowxpbbhlijevxhfibxuiu +cyxowxpbbhlijevxhkdcmtby +cyxowxpbbhlijevxhtydvqtb +cyxowxpbbhlijevxhytekpmf +cyxowxpbbhlijevxiiegilwr +cyxowxpbbhlijevxirzhrjiz +cyxowxpbbhlijevxjbkjpftg +cyxowxpbbhlijevxjgfkeemk +cyxowxpbbhlijevxjlakydfo +cyxowxpbbhlijevxjuvmcaww +cyxowxpbbhlijevxkxrqrxft +cyxowxpbbhlijevxlhcsptqa +cyxowxpbbhlijevxlqxtyrci +cyxowxpbbhlijevxmaivwnmu +cyxowxpbbhlijevxmfdwlmfy +cyxowxpbbhlijevxmoyxujxb +cyxowxpbbhlijevxmttyjiqf +cyxowxpbbhlijevxpssfqqjt +cyxowxpbbhlijevxpxngfpcx +cyxowxpbbhlijevxqcdhomua +cyxowxpbbhlijevxqlyixkgi +cyxowxpbbhlijevxqvokbhxq +cyxowxpbbhlijevxraelkfjy +cyxowxpbbhlijevxrounibuf +cyxowxpbbrbjsciaaoffckzd +cyxowxpbbrbjsciaatafwjsh +cyxowxpbbrbjsciabhlijevx +cyxowxpbbrbjsciabrbjscia +cyxowxpbbrbjsciacyxowxpb +cyxowxpbbrbjsciaddnqavbj +cyxowxpbbrbjsciadiiqutzn +cyxowxpbbrbjsciadndrjssr +cyxowxpbbrbjsciadwyssqez +cyxowxpbbrbjsciaegjuqmpg +cyxowxpbbrbjsciaelevflik +cyxowxpbbrbjsciaeuzwoizs +cyxowxpbbrbjsciaezuxdhsw +cyxowxpbbrbjsciafoazvcwh +cyxowxpbbrbjsciahanbdvpq +cyxowxpbbrbjsciahfibxuiu +cyxowxpbbrbjsciahkdcmtby +cyxowxpbbrbjsciahtydvqtb +cyxowxpbbrbjsciahytekpmf +cyxowxpbbrbjsciaiiegilwr +cyxowxpbbrbjsciairzhrjiz +cyxowxpbbrbjsciajbkjpftg +cyxowxpbbrbjsciajgfkeemk +cyxowxpbbrbjsciajlakydfo +cyxowxpbbrbjsciajuvmcaww +cyxowxpbbrbjsciakxrqrxft +cyxowxpbbrbjscialhcsptqa +cyxowxpbbrbjscialqxtyrci +cyxowxpbbrbjsciamaivwnmu +cyxowxpbbrbjsciamfdwlmfy +cyxowxpbbrbjsciamoyxujxb +cyxowxpbbrbjsciamttyjiqf +cyxowxpbbrbjsciapssfqqjt +cyxowxpbbrbjsciapxngfpcx +cyxowxpbbrbjsciaqcdhomua +cyxowxpbbrbjsciaqlyixkgi +cyxowxpbbrbjsciaqvokbhxq +cyxowxpbbrbjsciaraelkfjy +cyxowxpbbrbjsciarounibuf +cyxowxpbcyxowxpbaoffckzd +cyxowxpbcyxowxpbatafwjsh +cyxowxpbcyxowxpbbhlijevx +cyxowxpbcyxowxpbbrbjscia +cyxowxpbcyxowxpbcyxowxpb +cyxowxpbcyxowxpbddnqavbj +cyxowxpbcyxowxpbdiiqutzn +cyxowxpbcyxowxpbdndrjssr +cyxowxpbcyxowxpbdwyssqez +cyxowxpbcyxowxpbegjuqmpg +cyxowxpbcyxowxpbelevflik +cyxowxpbcyxowxpbeuzwoizs +cyxowxpbcyxowxpbezuxdhsw +cyxowxpbcyxowxpbfoazvcwh +cyxowxpbcyxowxpbhanbdvpq +cyxowxpbcyxowxpbhfibxuiu +cyxowxpbcyxowxpbhkdcmtby +cyxowxpbcyxowxpbhtydvqtb +cyxowxpbcyxowxpbhytekpmf +cyxowxpbcyxowxpbiiegilwr +cyxowxpbcyxowxpbirzhrjiz +cyxowxpbcyxowxpbjbkjpftg +cyxowxpbcyxowxpbjgfkeemk +cyxowxpbcyxowxpbjlakydfo +cyxowxpbcyxowxpbjuvmcaww +cyxowxpbcyxowxpbkxrqrxft +cyxowxpbcyxowxpblhcsptqa +cyxowxpbcyxowxpblqxtyrci +cyxowxpbcyxowxpbmaivwnmu +cyxowxpbcyxowxpbmfdwlmfy +cyxowxpbcyxowxpbmoyxujxb +cyxowxpbcyxowxpbmttyjiqf +cyxowxpbcyxowxpbpssfqqjt +cyxowxpbcyxowxpbpxngfpcx +cyxowxpbcyxowxpbqcdhomua +cyxowxpbcyxowxpbqlyixkgi +cyxowxpbcyxowxpbqvokbhxq +cyxowxpbcyxowxpbraelkfjy +cyxowxpbcyxowxpbrounibuf +cyxowxpbddnqavbjaoffckzd +cyxowxpbddnqavbjatafwjsh +cyxowxpbddnqavbjbhlijevx +cyxowxpbddnqavbjbrbjscia +cyxowxpbddnqavbjcyxowxpb +cyxowxpbddnqavbjddnqavbj +cyxowxpbddnqavbjdiiqutzn +cyxowxpbddnqavbjdndrjssr +cyxowxpbddnqavbjdwyssqez +cyxowxpbddnqavbjegjuqmpg +cyxowxpbddnqavbjelevflik +cyxowxpbddnqavbjeuzwoizs +cyxowxpbddnqavbjezuxdhsw +cyxowxpbddnqavbjfoazvcwh +cyxowxpbddnqavbjhanbdvpq +cyxowxpbddnqavbjhfibxuiu +cyxowxpbddnqavbjhkdcmtby +cyxowxpbddnqavbjhtydvqtb +cyxowxpbddnqavbjhytekpmf +cyxowxpbddnqavbjiiegilwr +cyxowxpbddnqavbjirzhrjiz +cyxowxpbddnqavbjjbkjpftg +cyxowxpbddnqavbjjgfkeemk +cyxowxpbddnqavbjjlakydfo +cyxowxpbddnqavbjjuvmcaww +cyxowxpbddnqavbjkxrqrxft +cyxowxpbddnqavbjlhcsptqa +cyxowxpbddnqavbjlqxtyrci +cyxowxpbddnqavbjmaivwnmu +cyxowxpbddnqavbjmfdwlmfy +cyxowxpbddnqavbjmoyxujxb +cyxowxpbddnqavbjmttyjiqf +cyxowxpbddnqavbjpssfqqjt +cyxowxpbddnqavbjpxngfpcx +cyxowxpbddnqavbjqcdhomua +cyxowxpbddnqavbjqlyixkgi +cyxowxpbddnqavbjqvokbhxq +cyxowxpbddnqavbjraelkfjy +cyxowxpbddnqavbjrounibuf +cyxowxpbdiiqutznaoffckzd +cyxowxpbdiiqutznatafwjsh +cyxowxpbdiiqutznbhlijevx +cyxowxpbdiiqutznbrbjscia +cyxowxpbdiiqutzncyxowxpb +cyxowxpbdiiqutznddnqavbj +cyxowxpbdiiqutzndiiqutzn +cyxowxpbdiiqutzndndrjssr +cyxowxpbdiiqutzndwyssqez +cyxowxpbdiiqutznegjuqmpg +cyxowxpbdiiqutznelevflik +cyxowxpbdiiqutzneuzwoizs +cyxowxpbdiiqutznezuxdhsw +cyxowxpbdiiqutznfoazvcwh +cyxowxpbdiiqutznhanbdvpq +cyxowxpbdiiqutznhfibxuiu +cyxowxpbdiiqutznhkdcmtby +cyxowxpbdiiqutznhtydvqtb +cyxowxpbdiiqutznhytekpmf +cyxowxpbdiiqutzniiegilwr +cyxowxpbdiiqutznirzhrjiz +cyxowxpbdiiqutznjbkjpftg +cyxowxpbdiiqutznjgfkeemk +cyxowxpbdiiqutznjlakydfo +cyxowxpbdiiqutznjuvmcaww +cyxowxpbdiiqutznkxrqrxft +cyxowxpbdiiqutznlhcsptqa +cyxowxpbdiiqutznlqxtyrci +cyxowxpbdiiqutznmaivwnmu +cyxowxpbdiiqutznmfdwlmfy +cyxowxpbdiiqutznmoyxujxb +cyxowxpbdiiqutznmttyjiqf +cyxowxpbdiiqutznpssfqqjt +cyxowxpbdiiqutznpxngfpcx +cyxowxpbdiiqutznqcdhomua +cyxowxpbdiiqutznqlyixkgi +cyxowxpbdiiqutznqvokbhxq +cyxowxpbdiiqutznraelkfjy +cyxowxpbdiiqutznrounibuf +cyxowxpbdndrjssraoffckzd +cyxowxpbdndrjssratafwjsh +cyxowxpbdndrjssrbhlijevx +cyxowxpbdndrjssrbrbjscia +cyxowxpbdndrjssrcyxowxpb +cyxowxpbdndrjssrddnqavbj +cyxowxpbdndrjssrdiiqutzn +cyxowxpbdndrjssrdndrjssr +cyxowxpbdndrjssrdwyssqez +cyxowxpbdndrjssregjuqmpg +cyxowxpbdndrjssrelevflik +cyxowxpbdndrjssreuzwoizs +cyxowxpbdndrjssrezuxdhsw +cyxowxpbdndrjssrfoazvcwh +cyxowxpbdndrjssrhanbdvpq +cyxowxpbdndrjssrhfibxuiu +cyxowxpbdndrjssrhkdcmtby +cyxowxpbdndrjssrhtydvqtb +cyxowxpbdndrjssrhytekpmf +cyxowxpbdndrjssriiegilwr +cyxowxpbdndrjssrirzhrjiz +cyxowxpbdndrjssrjbkjpftg +cyxowxpbdndrjssrjgfkeemk +cyxowxpbdndrjssrjlakydfo +cyxowxpbdndrjssrjuvmcaww +cyxowxpbdndrjssrkxrqrxft +cyxowxpbdndrjssrlhcsptqa +cyxowxpbdndrjssrlqxtyrci +cyxowxpbdndrjssrmaivwnmu +cyxowxpbdndrjssrmfdwlmfy +cyxowxpbdndrjssrmoyxujxb +cyxowxpbdndrjssrmttyjiqf +cyxowxpbdndrjssrpssfqqjt +cyxowxpbdndrjssrpxngfpcx +cyxowxpbdndrjssrqcdhomua +cyxowxpbdndrjssrqlyixkgi +cyxowxpbdndrjssrqvokbhxq +cyxowxpbdndrjssrraelkfjy +cyxowxpbdndrjssrrounibuf +cyxowxpbdwyssqezaoffckzd +cyxowxpbdwyssqezatafwjsh +cyxowxpbdwyssqezbhlijevx +cyxowxpbdwyssqezbrbjscia +cyxowxpbdwyssqezcyxowxpb +cyxowxpbdwyssqezddnqavbj +cyxowxpbdwyssqezdiiqutzn +cyxowxpbdwyssqezdndrjssr +cyxowxpbdwyssqezdwyssqez +cyxowxpbdwyssqezegjuqmpg +cyxowxpbdwyssqezelevflik +cyxowxpbdwyssqezeuzwoizs +cyxowxpbdwyssqezezuxdhsw +cyxowxpbdwyssqezfoazvcwh +cyxowxpbdwyssqezhanbdvpq +cyxowxpbdwyssqezhfibxuiu +cyxowxpbdwyssqezhkdcmtby +cyxowxpbdwyssqezhtydvqtb +cyxowxpbdwyssqezhytekpmf +cyxowxpbdwyssqeziiegilwr +cyxowxpbdwyssqezirzhrjiz +cyxowxpbdwyssqezjbkjpftg +cyxowxpbdwyssqezjgfkeemk +cyxowxpbdwyssqezjlakydfo +cyxowxpbdwyssqezjuvmcaww +cyxowxpbdwyssqezkxrqrxft +cyxowxpbdwyssqezlhcsptqa +cyxowxpbdwyssqezlqxtyrci +cyxowxpbdwyssqezmaivwnmu +cyxowxpbdwyssqezmfdwlmfy +cyxowxpbdwyssqezmoyxujxb +cyxowxpbdwyssqezmttyjiqf +cyxowxpbdwyssqezpssfqqjt +cyxowxpbdwyssqezpxngfpcx +cyxowxpbdwyssqezqcdhomua +cyxowxpbdwyssqezqlyixkgi +cyxowxpbdwyssqezqvokbhxq +cyxowxpbdwyssqezraelkfjy +cyxowxpbdwyssqezrounibuf +cyxowxpbegjuqmpgaoffckzd +cyxowxpbegjuqmpgatafwjsh +cyxowxpbegjuqmpgbhlijevx +cyxowxpbegjuqmpgbrbjscia +cyxowxpbegjuqmpgcyxowxpb +cyxowxpbegjuqmpgddnqavbj +cyxowxpbegjuqmpgdiiqutzn +cyxowxpbegjuqmpgdndrjssr +cyxowxpbegjuqmpgdwyssqez +cyxowxpbegjuqmpgegjuqmpg +cyxowxpbegjuqmpgelevflik +cyxowxpbegjuqmpgeuzwoizs +cyxowxpbegjuqmpgezuxdhsw +cyxowxpbegjuqmpgfoazvcwh +cyxowxpbegjuqmpghanbdvpq +cyxowxpbegjuqmpghfibxuiu +cyxowxpbegjuqmpghkdcmtby +cyxowxpbegjuqmpghtydvqtb +cyxowxpbegjuqmpghytekpmf +cyxowxpbegjuqmpgiiegilwr +cyxowxpbegjuqmpgirzhrjiz +cyxowxpbegjuqmpgjbkjpftg +cyxowxpbegjuqmpgjgfkeemk +cyxowxpbegjuqmpgjlakydfo +cyxowxpbegjuqmpgjuvmcaww +cyxowxpbegjuqmpgkxrqrxft +cyxowxpbegjuqmpglhcsptqa +cyxowxpbegjuqmpglqxtyrci +cyxowxpbegjuqmpgmaivwnmu +cyxowxpbegjuqmpgmfdwlmfy +cyxowxpbegjuqmpgmoyxujxb +cyxowxpbegjuqmpgmttyjiqf +cyxowxpbegjuqmpgpssfqqjt +cyxowxpbegjuqmpgpxngfpcx +cyxowxpbegjuqmpgqcdhomua +cyxowxpbegjuqmpgqlyixkgi +cyxowxpbegjuqmpgqvokbhxq +cyxowxpbegjuqmpgraelkfjy +cyxowxpbegjuqmpgrounibuf +cyxowxpbelevflikaoffckzd +cyxowxpbelevflikatafwjsh +cyxowxpbelevflikbhlijevx +cyxowxpbelevflikbrbjscia +cyxowxpbelevflikcyxowxpb +cyxowxpbelevflikddnqavbj +cyxowxpbelevflikdiiqutzn +cyxowxpbelevflikdndrjssr +cyxowxpbelevflikdwyssqez +cyxowxpbelevflikegjuqmpg +cyxowxpbelevflikelevflik +cyxowxpbelevflikeuzwoizs +cyxowxpbelevflikezuxdhsw +cyxowxpbelevflikfoazvcwh +cyxowxpbelevflikhanbdvpq +cyxowxpbelevflikhfibxuiu +cyxowxpbelevflikhkdcmtby +cyxowxpbelevflikhtydvqtb +cyxowxpbelevflikhytekpmf +cyxowxpbelevflikiiegilwr +cyxowxpbelevflikirzhrjiz +cyxowxpbelevflikjbkjpftg +cyxowxpbelevflikjgfkeemk +cyxowxpbelevflikjlakydfo +cyxowxpbelevflikjuvmcaww +cyxowxpbelevflikkxrqrxft +cyxowxpbelevfliklhcsptqa +cyxowxpbelevfliklqxtyrci +cyxowxpbelevflikmaivwnmu +cyxowxpbelevflikmfdwlmfy +cyxowxpbelevflikmoyxujxb +cyxowxpbelevflikmttyjiqf +cyxowxpbelevflikpssfqqjt +cyxowxpbelevflikpxngfpcx +cyxowxpbelevflikqcdhomua +cyxowxpbelevflikqlyixkgi +cyxowxpbelevflikqvokbhxq +cyxowxpbelevflikraelkfjy +cyxowxpbelevflikrounibuf +cyxowxpbeuzwoizsaoffckzd +cyxowxpbeuzwoizsatafwjsh +cyxowxpbeuzwoizsbhlijevx +cyxowxpbeuzwoizsbrbjscia +cyxowxpbeuzwoizscyxowxpb +cyxowxpbeuzwoizsddnqavbj +cyxowxpbeuzwoizsdiiqutzn +cyxowxpbeuzwoizsdndrjssr +cyxowxpbeuzwoizsdwyssqez +cyxowxpbeuzwoizsegjuqmpg +cyxowxpbeuzwoizselevflik +cyxowxpbeuzwoizseuzwoizs +cyxowxpbeuzwoizsezuxdhsw +cyxowxpbeuzwoizsfoazvcwh +cyxowxpbeuzwoizshanbdvpq +cyxowxpbeuzwoizshfibxuiu +cyxowxpbeuzwoizshkdcmtby +cyxowxpbeuzwoizshtydvqtb +cyxowxpbeuzwoizshytekpmf +cyxowxpbeuzwoizsiiegilwr +cyxowxpbeuzwoizsirzhrjiz +cyxowxpbeuzwoizsjbkjpftg +cyxowxpbeuzwoizsjgfkeemk +cyxowxpbeuzwoizsjlakydfo +cyxowxpbeuzwoizsjuvmcaww +cyxowxpbeuzwoizskxrqrxft +cyxowxpbeuzwoizslhcsptqa +cyxowxpbeuzwoizslqxtyrci +cyxowxpbeuzwoizsmaivwnmu +cyxowxpbeuzwoizsmfdwlmfy +cyxowxpbeuzwoizsmoyxujxb +cyxowxpbeuzwoizsmttyjiqf +cyxowxpbeuzwoizspssfqqjt +cyxowxpbeuzwoizspxngfpcx +cyxowxpbeuzwoizsqcdhomua +cyxowxpbeuzwoizsqlyixkgi +cyxowxpbeuzwoizsqvokbhxq +cyxowxpbeuzwoizsraelkfjy +cyxowxpbeuzwoizsrounibuf +cyxowxpbezuxdhswaoffckzd +cyxowxpbezuxdhswatafwjsh +cyxowxpbezuxdhswbhlijevx +cyxowxpbezuxdhswbrbjscia +cyxowxpbezuxdhswcyxowxpb +cyxowxpbezuxdhswddnqavbj +cyxowxpbezuxdhswdiiqutzn +cyxowxpbezuxdhswdndrjssr +cyxowxpbezuxdhswdwyssqez +cyxowxpbezuxdhswegjuqmpg +cyxowxpbezuxdhswelevflik +cyxowxpbezuxdhsweuzwoizs +cyxowxpbezuxdhswezuxdhsw +cyxowxpbezuxdhswfoazvcwh +cyxowxpbezuxdhswhanbdvpq +cyxowxpbezuxdhswhfibxuiu +cyxowxpbezuxdhswhkdcmtby +cyxowxpbezuxdhswhtydvqtb +cyxowxpbezuxdhswhytekpmf +cyxowxpbezuxdhswiiegilwr +cyxowxpbezuxdhswirzhrjiz +cyxowxpbezuxdhswjbkjpftg +cyxowxpbezuxdhswjgfkeemk +cyxowxpbezuxdhswjlakydfo +cyxowxpbezuxdhswjuvmcaww +cyxowxpbezuxdhswkxrqrxft +cyxowxpbezuxdhswlhcsptqa +cyxowxpbezuxdhswlqxtyrci +cyxowxpbezuxdhswmaivwnmu +cyxowxpbezuxdhswmfdwlmfy +cyxowxpbezuxdhswmoyxujxb +cyxowxpbezuxdhswmttyjiqf +cyxowxpbezuxdhswpssfqqjt +cyxowxpbezuxdhswpxngfpcx +cyxowxpbezuxdhswqcdhomua +cyxowxpbezuxdhswqlyixkgi +cyxowxpbezuxdhswqvokbhxq +cyxowxpbezuxdhswraelkfjy +cyxowxpbezuxdhswrounibuf +cyxowxpbfoazvcwhaoffckzd +cyxowxpbfoazvcwhatafwjsh +cyxowxpbfoazvcwhbhlijevx +cyxowxpbfoazvcwhbrbjscia +cyxowxpbfoazvcwhcyxowxpb +cyxowxpbfoazvcwhddnqavbj +cyxowxpbfoazvcwhdiiqutzn +cyxowxpbfoazvcwhdndrjssr +cyxowxpbfoazvcwhdwyssqez +cyxowxpbfoazvcwhegjuqmpg +cyxowxpbfoazvcwhelevflik +cyxowxpbfoazvcwheuzwoizs +cyxowxpbfoazvcwhezuxdhsw +cyxowxpbfoazvcwhfoazvcwh +cyxowxpbfoazvcwhhanbdvpq +cyxowxpbfoazvcwhhfibxuiu +cyxowxpbfoazvcwhhkdcmtby +cyxowxpbfoazvcwhhtydvqtb +cyxowxpbfoazvcwhhytekpmf +cyxowxpbfoazvcwhiiegilwr +cyxowxpbfoazvcwhirzhrjiz +cyxowxpbfoazvcwhjbkjpftg +cyxowxpbfoazvcwhjgfkeemk +cyxowxpbfoazvcwhjlakydfo +cyxowxpbfoazvcwhjuvmcaww +cyxowxpbfoazvcwhkxrqrxft +cyxowxpbfoazvcwhlhcsptqa +cyxowxpbfoazvcwhlqxtyrci +cyxowxpbfoazvcwhmaivwnmu +cyxowxpbfoazvcwhmfdwlmfy +cyxowxpbfoazvcwhmoyxujxb +cyxowxpbfoazvcwhmttyjiqf +cyxowxpbfoazvcwhpssfqqjt +cyxowxpbfoazvcwhpxngfpcx +cyxowxpbfoazvcwhqcdhomua +cyxowxpbfoazvcwhqlyixkgi +cyxowxpbfoazvcwhqvokbhxq +cyxowxpbfoazvcwhraelkfjy +cyxowxpbfoazvcwhrounibuf +cyxowxpbhanbdvpqaoffckzd +cyxowxpbhanbdvpqatafwjsh +cyxowxpbhanbdvpqbhlijevx +cyxowxpbhanbdvpqbrbjscia +cyxowxpbhanbdvpqcyxowxpb +cyxowxpbhanbdvpqddnqavbj +cyxowxpbhanbdvpqdiiqutzn +cyxowxpbhanbdvpqdndrjssr +cyxowxpbhanbdvpqdwyssqez +cyxowxpbhanbdvpqegjuqmpg +cyxowxpbhanbdvpqelevflik +cyxowxpbhanbdvpqeuzwoizs +cyxowxpbhanbdvpqezuxdhsw +cyxowxpbhanbdvpqfoazvcwh +cyxowxpbhanbdvpqhanbdvpq +cyxowxpbhanbdvpqhfibxuiu +cyxowxpbhanbdvpqhkdcmtby +cyxowxpbhanbdvpqhtydvqtb +cyxowxpbhanbdvpqhytekpmf +cyxowxpbhanbdvpqiiegilwr +cyxowxpbhanbdvpqirzhrjiz +cyxowxpbhanbdvpqjbkjpftg +cyxowxpbhanbdvpqjgfkeemk +cyxowxpbhanbdvpqjlakydfo +cyxowxpbhanbdvpqjuvmcaww +cyxowxpbhanbdvpqkxrqrxft +cyxowxpbhanbdvpqlhcsptqa +cyxowxpbhanbdvpqlqxtyrci +cyxowxpbhanbdvpqmaivwnmu +cyxowxpbhanbdvpqmfdwlmfy +cyxowxpbhanbdvpqmoyxujxb +cyxowxpbhanbdvpqmttyjiqf +cyxowxpbhanbdvpqpssfqqjt +cyxowxpbhanbdvpqpxngfpcx +cyxowxpbhanbdvpqqcdhomua +cyxowxpbhanbdvpqqlyixkgi +cyxowxpbhanbdvpqqvokbhxq +cyxowxpbhanbdvpqraelkfjy +cyxowxpbhanbdvpqrounibuf +cyxowxpbhfibxuiuaoffckzd +cyxowxpbhfibxuiuatafwjsh +cyxowxpbhfibxuiubhlijevx +cyxowxpbhfibxuiubrbjscia +cyxowxpbhfibxuiucyxowxpb +cyxowxpbhfibxuiuddnqavbj +cyxowxpbhfibxuiudiiqutzn +cyxowxpbhfibxuiudndrjssr +cyxowxpbhfibxuiudwyssqez +cyxowxpbhfibxuiuegjuqmpg +cyxowxpbhfibxuiuelevflik +cyxowxpbhfibxuiueuzwoizs +cyxowxpbhfibxuiuezuxdhsw +cyxowxpbhfibxuiufoazvcwh +cyxowxpbhfibxuiuhanbdvpq +cyxowxpbhfibxuiuhfibxuiu +cyxowxpbhfibxuiuhkdcmtby +cyxowxpbhfibxuiuhtydvqtb +cyxowxpbhfibxuiuhytekpmf +cyxowxpbhfibxuiuiiegilwr +cyxowxpbhfibxuiuirzhrjiz +cyxowxpbhfibxuiujbkjpftg +cyxowxpbhfibxuiujgfkeemk +cyxowxpbhfibxuiujlakydfo +cyxowxpbhfibxuiujuvmcaww +cyxowxpbhfibxuiukxrqrxft +cyxowxpbhfibxuiulhcsptqa +cyxowxpbhfibxuiulqxtyrci +cyxowxpbhfibxuiumaivwnmu +cyxowxpbhfibxuiumfdwlmfy +cyxowxpbhfibxuiumoyxujxb +cyxowxpbhfibxuiumttyjiqf +cyxowxpbhfibxuiupssfqqjt +cyxowxpbhfibxuiupxngfpcx +cyxowxpbhfibxuiuqcdhomua +cyxowxpbhfibxuiuqlyixkgi +cyxowxpbhfibxuiuqvokbhxq +cyxowxpbhfibxuiuraelkfjy +cyxowxpbhfibxuiurounibuf +cyxowxpbhkdcmtbyaoffckzd +cyxowxpbhkdcmtbyatafwjsh +cyxowxpbhkdcmtbybhlijevx +cyxowxpbhkdcmtbybrbjscia +cyxowxpbhkdcmtbycyxowxpb +cyxowxpbhkdcmtbyddnqavbj +cyxowxpbhkdcmtbydiiqutzn +cyxowxpbhkdcmtbydndrjssr +cyxowxpbhkdcmtbydwyssqez +cyxowxpbhkdcmtbyegjuqmpg +cyxowxpbhkdcmtbyelevflik +cyxowxpbhkdcmtbyeuzwoizs +cyxowxpbhkdcmtbyezuxdhsw +cyxowxpbhkdcmtbyfoazvcwh +cyxowxpbhkdcmtbyhanbdvpq +cyxowxpbhkdcmtbyhfibxuiu +cyxowxpbhkdcmtbyhkdcmtby +cyxowxpbhkdcmtbyhtydvqtb +cyxowxpbhkdcmtbyhytekpmf +cyxowxpbhkdcmtbyiiegilwr +cyxowxpbhkdcmtbyirzhrjiz +cyxowxpbhkdcmtbyjbkjpftg +cyxowxpbhkdcmtbyjgfkeemk +cyxowxpbhkdcmtbyjlakydfo +cyxowxpbhkdcmtbyjuvmcaww +cyxowxpbhkdcmtbykxrqrxft +cyxowxpbhkdcmtbylhcsptqa +cyxowxpbhkdcmtbylqxtyrci +cyxowxpbhkdcmtbymaivwnmu +cyxowxpbhkdcmtbymfdwlmfy +cyxowxpbhkdcmtbymoyxujxb +cyxowxpbhkdcmtbymttyjiqf +cyxowxpbhkdcmtbypssfqqjt +cyxowxpbhkdcmtbypxngfpcx +cyxowxpbhkdcmtbyqcdhomua +cyxowxpbhkdcmtbyqlyixkgi +cyxowxpbhkdcmtbyqvokbhxq +cyxowxpbhkdcmtbyraelkfjy +cyxowxpbhkdcmtbyrounibuf +cyxowxpbhtydvqtbaoffckzd +cyxowxpbhtydvqtbatafwjsh +cyxowxpbhtydvqtbbhlijevx +cyxowxpbhtydvqtbbrbjscia +cyxowxpbhtydvqtbcyxowxpb +cyxowxpbhtydvqtbddnqavbj +cyxowxpbhtydvqtbdiiqutzn +cyxowxpbhtydvqtbdndrjssr +cyxowxpbhtydvqtbdwyssqez +cyxowxpbhtydvqtbegjuqmpg +cyxowxpbhtydvqtbelevflik +cyxowxpbhtydvqtbeuzwoizs +cyxowxpbhtydvqtbezuxdhsw +cyxowxpbhtydvqtbfoazvcwh +cyxowxpbhtydvqtbhanbdvpq +cyxowxpbhtydvqtbhfibxuiu +cyxowxpbhtydvqtbhkdcmtby +cyxowxpbhtydvqtbhtydvqtb +cyxowxpbhtydvqtbhytekpmf +cyxowxpbhtydvqtbiiegilwr +cyxowxpbhtydvqtbirzhrjiz +cyxowxpbhtydvqtbjbkjpftg +cyxowxpbhtydvqtbjgfkeemk +cyxowxpbhtydvqtbjlakydfo +cyxowxpbhtydvqtbjuvmcaww +cyxowxpbhtydvqtbkxrqrxft +cyxowxpbhtydvqtblhcsptqa +cyxowxpbhtydvqtblqxtyrci +cyxowxpbhtydvqtbmaivwnmu +cyxowxpbhtydvqtbmfdwlmfy +cyxowxpbhtydvqtbmoyxujxb +cyxowxpbhtydvqtbmttyjiqf +cyxowxpbhtydvqtbpssfqqjt +cyxowxpbhtydvqtbpxngfpcx +cyxowxpbhtydvqtbqcdhomua +cyxowxpbhtydvqtbqlyixkgi +cyxowxpbhtydvqtbqvokbhxq +cyxowxpbhtydvqtbraelkfjy +cyxowxpbhtydvqtbrounibuf +cyxowxpbhytekpmfaoffckzd +cyxowxpbhytekpmfatafwjsh +cyxowxpbhytekpmfbhlijevx +cyxowxpbhytekpmfbrbjscia +cyxowxpbhytekpmfcyxowxpb +cyxowxpbhytekpmfddnqavbj +cyxowxpbhytekpmfdiiqutzn +cyxowxpbhytekpmfdndrjssr +cyxowxpbhytekpmfdwyssqez +cyxowxpbhytekpmfegjuqmpg +cyxowxpbhytekpmfelevflik +cyxowxpbhytekpmfeuzwoizs +cyxowxpbhytekpmfezuxdhsw +cyxowxpbhytekpmffoazvcwh +cyxowxpbhytekpmfhanbdvpq +cyxowxpbhytekpmfhfibxuiu +cyxowxpbhytekpmfhkdcmtby +cyxowxpbhytekpmfhtydvqtb +cyxowxpbhytekpmfhytekpmf +cyxowxpbhytekpmfiiegilwr +cyxowxpbhytekpmfirzhrjiz +cyxowxpbhytekpmfjbkjpftg +cyxowxpbhytekpmfjgfkeemk +cyxowxpbhytekpmfjlakydfo +cyxowxpbhytekpmfjuvmcaww +cyxowxpbhytekpmfkxrqrxft +cyxowxpbhytekpmflhcsptqa +cyxowxpbhytekpmflqxtyrci +cyxowxpbhytekpmfmaivwnmu +cyxowxpbhytekpmfmfdwlmfy +cyxowxpbhytekpmfmoyxujxb +cyxowxpbhytekpmfmttyjiqf +cyxowxpbhytekpmfpssfqqjt +cyxowxpbhytekpmfpxngfpcx +cyxowxpbhytekpmfqcdhomua +cyxowxpbhytekpmfqlyixkgi +cyxowxpbhytekpmfqvokbhxq +cyxowxpbhytekpmfraelkfjy +cyxowxpbhytekpmfrounibuf +cyxowxpbiiegilwraoffckzd +cyxowxpbiiegilwratafwjsh +cyxowxpbiiegilwrbhlijevx +cyxowxpbiiegilwrbrbjscia +cyxowxpbiiegilwrcyxowxpb +cyxowxpbiiegilwrddnqavbj +cyxowxpbiiegilwrdiiqutzn +cyxowxpbiiegilwrdndrjssr +cyxowxpbiiegilwrdwyssqez +cyxowxpbiiegilwregjuqmpg +cyxowxpbiiegilwrelevflik +cyxowxpbiiegilwreuzwoizs +cyxowxpbiiegilwrezuxdhsw +cyxowxpbiiegilwrfoazvcwh +cyxowxpbiiegilwrhanbdvpq +cyxowxpbiiegilwrhfibxuiu +cyxowxpbiiegilwrhkdcmtby +cyxowxpbiiegilwrhtydvqtb +cyxowxpbiiegilwrhytekpmf +cyxowxpbiiegilwriiegilwr +cyxowxpbiiegilwrirzhrjiz +cyxowxpbiiegilwrjbkjpftg +cyxowxpbiiegilwrjgfkeemk +cyxowxpbiiegilwrjlakydfo +cyxowxpbiiegilwrjuvmcaww +cyxowxpbiiegilwrkxrqrxft +cyxowxpbiiegilwrlhcsptqa +cyxowxpbiiegilwrlqxtyrci +cyxowxpbiiegilwrmaivwnmu +cyxowxpbiiegilwrmfdwlmfy +cyxowxpbiiegilwrmoyxujxb +cyxowxpbiiegilwrmttyjiqf +cyxowxpbiiegilwrpssfqqjt +cyxowxpbiiegilwrpxngfpcx +cyxowxpbiiegilwrqcdhomua +cyxowxpbiiegilwrqlyixkgi +cyxowxpbiiegilwrqvokbhxq +cyxowxpbiiegilwrraelkfjy +cyxowxpbiiegilwrrounibuf +cyxowxpbirzhrjizaoffckzd +cyxowxpbirzhrjizatafwjsh +cyxowxpbirzhrjizbhlijevx +cyxowxpbirzhrjizbrbjscia +cyxowxpbirzhrjizcyxowxpb +cyxowxpbirzhrjizddnqavbj +cyxowxpbirzhrjizdiiqutzn +cyxowxpbirzhrjizdndrjssr +cyxowxpbirzhrjizdwyssqez +cyxowxpbirzhrjizegjuqmpg +cyxowxpbirzhrjizelevflik +cyxowxpbirzhrjizeuzwoizs +cyxowxpbirzhrjizezuxdhsw +cyxowxpbirzhrjizfoazvcwh +cyxowxpbirzhrjizhanbdvpq +cyxowxpbirzhrjizhfibxuiu +cyxowxpbirzhrjizhkdcmtby +cyxowxpbirzhrjizhtydvqtb +cyxowxpbirzhrjizhytekpmf +cyxowxpbirzhrjiziiegilwr +cyxowxpbirzhrjizirzhrjiz +cyxowxpbirzhrjizjbkjpftg +cyxowxpbirzhrjizjgfkeemk +cyxowxpbirzhrjizjlakydfo +cyxowxpbirzhrjizjuvmcaww +cyxowxpbirzhrjizkxrqrxft +cyxowxpbirzhrjizlhcsptqa +cyxowxpbirzhrjizlqxtyrci +cyxowxpbirzhrjizmaivwnmu +cyxowxpbirzhrjizmfdwlmfy +cyxowxpbirzhrjizmoyxujxb +cyxowxpbirzhrjizmttyjiqf +cyxowxpbirzhrjizpssfqqjt +cyxowxpbirzhrjizpxngfpcx +cyxowxpbirzhrjizqcdhomua +cyxowxpbirzhrjizqlyixkgi +cyxowxpbirzhrjizqvokbhxq +cyxowxpbirzhrjizraelkfjy +cyxowxpbirzhrjizrounibuf +cyxowxpbjbkjpftgaoffckzd +cyxowxpbjbkjpftgatafwjsh +cyxowxpbjbkjpftgbhlijevx +cyxowxpbjbkjpftgbrbjscia +cyxowxpbjbkjpftgcyxowxpb +cyxowxpbjbkjpftgddnqavbj +cyxowxpbjbkjpftgdiiqutzn +cyxowxpbjbkjpftgdndrjssr +cyxowxpbjbkjpftgdwyssqez +cyxowxpbjbkjpftgegjuqmpg +cyxowxpbjbkjpftgelevflik +cyxowxpbjbkjpftgeuzwoizs +cyxowxpbjbkjpftgezuxdhsw +cyxowxpbjbkjpftgfoazvcwh +cyxowxpbjbkjpftghanbdvpq +cyxowxpbjbkjpftghfibxuiu +cyxowxpbjbkjpftghkdcmtby +cyxowxpbjbkjpftghtydvqtb +cyxowxpbjbkjpftghytekpmf +cyxowxpbjbkjpftgiiegilwr +cyxowxpbjbkjpftgirzhrjiz +cyxowxpbjbkjpftgjbkjpftg +cyxowxpbjbkjpftgjgfkeemk +cyxowxpbjbkjpftgjlakydfo +cyxowxpbjbkjpftgjuvmcaww +cyxowxpbjbkjpftgkxrqrxft +cyxowxpbjbkjpftglhcsptqa +cyxowxpbjbkjpftglqxtyrci +cyxowxpbjbkjpftgmaivwnmu +cyxowxpbjbkjpftgmfdwlmfy +cyxowxpbjbkjpftgmoyxujxb +cyxowxpbjbkjpftgmttyjiqf +cyxowxpbjbkjpftgpssfqqjt +cyxowxpbjbkjpftgpxngfpcx +cyxowxpbjbkjpftgqcdhomua +cyxowxpbjbkjpftgqlyixkgi +cyxowxpbjbkjpftgqvokbhxq +cyxowxpbjbkjpftgraelkfjy +cyxowxpbjbkjpftgrounibuf +cyxowxpbjgfkeemkaoffckzd +cyxowxpbjgfkeemkatafwjsh +cyxowxpbjgfkeemkbhlijevx +cyxowxpbjgfkeemkbrbjscia +cyxowxpbjgfkeemkcyxowxpb +cyxowxpbjgfkeemkddnqavbj +cyxowxpbjgfkeemkdiiqutzn +cyxowxpbjgfkeemkdndrjssr +cyxowxpbjgfkeemkdwyssqez +cyxowxpbjgfkeemkegjuqmpg +cyxowxpbjgfkeemkelevflik +cyxowxpbjgfkeemkeuzwoizs +cyxowxpbjgfkeemkezuxdhsw +cyxowxpbjgfkeemkfoazvcwh +cyxowxpbjgfkeemkhanbdvpq +cyxowxpbjgfkeemkhfibxuiu +cyxowxpbjgfkeemkhkdcmtby +cyxowxpbjgfkeemkhtydvqtb +cyxowxpbjgfkeemkhytekpmf +cyxowxpbjgfkeemkiiegilwr +cyxowxpbjgfkeemkirzhrjiz +cyxowxpbjgfkeemkjbkjpftg +cyxowxpbjgfkeemkjgfkeemk +cyxowxpbjgfkeemkjlakydfo +cyxowxpbjgfkeemkjuvmcaww +cyxowxpbjgfkeemkkxrqrxft +cyxowxpbjgfkeemklhcsptqa +cyxowxpbjgfkeemklqxtyrci +cyxowxpbjgfkeemkmaivwnmu +cyxowxpbjgfkeemkmfdwlmfy +cyxowxpbjgfkeemkmoyxujxb +cyxowxpbjgfkeemkmttyjiqf +cyxowxpbjgfkeemkpssfqqjt +cyxowxpbjgfkeemkpxngfpcx +cyxowxpbjgfkeemkqcdhomua +cyxowxpbjgfkeemkqlyixkgi +cyxowxpbjgfkeemkqvokbhxq +cyxowxpbjgfkeemkraelkfjy +cyxowxpbjgfkeemkrounibuf +cyxowxpbjlakydfoaoffckzd +cyxowxpbjlakydfoatafwjsh +cyxowxpbjlakydfobhlijevx +cyxowxpbjlakydfobrbjscia +cyxowxpbjlakydfocyxowxpb +cyxowxpbjlakydfoddnqavbj +cyxowxpbjlakydfodiiqutzn +cyxowxpbjlakydfodndrjssr +cyxowxpbjlakydfodwyssqez +cyxowxpbjlakydfoegjuqmpg +cyxowxpbjlakydfoelevflik +cyxowxpbjlakydfoeuzwoizs +cyxowxpbjlakydfoezuxdhsw +cyxowxpbjlakydfofoazvcwh +cyxowxpbjlakydfohanbdvpq +cyxowxpbjlakydfohfibxuiu +cyxowxpbjlakydfohkdcmtby +cyxowxpbjlakydfohtydvqtb +cyxowxpbjlakydfohytekpmf +cyxowxpbjlakydfoiiegilwr +cyxowxpbjlakydfoirzhrjiz +cyxowxpbjlakydfojbkjpftg +cyxowxpbjlakydfojgfkeemk +cyxowxpbjlakydfojlakydfo +cyxowxpbjlakydfojuvmcaww +cyxowxpbjlakydfokxrqrxft +cyxowxpbjlakydfolhcsptqa +cyxowxpbjlakydfolqxtyrci +cyxowxpbjlakydfomaivwnmu +cyxowxpbjlakydfomfdwlmfy +cyxowxpbjlakydfomoyxujxb +cyxowxpbjlakydfomttyjiqf +cyxowxpbjlakydfopssfqqjt +cyxowxpbjlakydfopxngfpcx +cyxowxpbjlakydfoqcdhomua +cyxowxpbjlakydfoqlyixkgi +cyxowxpbjlakydfoqvokbhxq +cyxowxpbjlakydforaelkfjy +cyxowxpbjlakydforounibuf +cyxowxpbjuvmcawwaoffckzd +cyxowxpbjuvmcawwatafwjsh +cyxowxpbjuvmcawwbhlijevx +cyxowxpbjuvmcawwbrbjscia +cyxowxpbjuvmcawwcyxowxpb +cyxowxpbjuvmcawwddnqavbj +cyxowxpbjuvmcawwdiiqutzn +cyxowxpbjuvmcawwdndrjssr +cyxowxpbjuvmcawwdwyssqez +cyxowxpbjuvmcawwegjuqmpg +cyxowxpbjuvmcawwelevflik +cyxowxpbjuvmcawweuzwoizs +cyxowxpbjuvmcawwezuxdhsw +cyxowxpbjuvmcawwfoazvcwh +cyxowxpbjuvmcawwhanbdvpq +cyxowxpbjuvmcawwhfibxuiu +cyxowxpbjuvmcawwhkdcmtby +cyxowxpbjuvmcawwhtydvqtb +cyxowxpbjuvmcawwhytekpmf +cyxowxpbjuvmcawwiiegilwr +cyxowxpbjuvmcawwirzhrjiz +cyxowxpbjuvmcawwjbkjpftg +cyxowxpbjuvmcawwjgfkeemk +cyxowxpbjuvmcawwjlakydfo +cyxowxpbjuvmcawwjuvmcaww +cyxowxpbjuvmcawwkxrqrxft +cyxowxpbjuvmcawwlhcsptqa +cyxowxpbjuvmcawwlqxtyrci +cyxowxpbjuvmcawwmaivwnmu +cyxowxpbjuvmcawwmfdwlmfy +cyxowxpbjuvmcawwmoyxujxb +cyxowxpbjuvmcawwmttyjiqf +cyxowxpbjuvmcawwpssfqqjt +cyxowxpbjuvmcawwpxngfpcx +cyxowxpbjuvmcawwqcdhomua +cyxowxpbjuvmcawwqlyixkgi +cyxowxpbjuvmcawwqvokbhxq +cyxowxpbjuvmcawwraelkfjy +cyxowxpbjuvmcawwrounibuf +cyxowxpbkxrqrxftaoffckzd +cyxowxpbkxrqrxftatafwjsh +cyxowxpbkxrqrxftbhlijevx +cyxowxpbkxrqrxftbrbjscia +cyxowxpbkxrqrxftcyxowxpb +cyxowxpbkxrqrxftddnqavbj +cyxowxpbkxrqrxftdiiqutzn +cyxowxpbkxrqrxftdndrjssr +cyxowxpbkxrqrxftdwyssqez +cyxowxpbkxrqrxftegjuqmpg +cyxowxpbkxrqrxftelevflik +cyxowxpbkxrqrxfteuzwoizs +cyxowxpbkxrqrxftezuxdhsw +cyxowxpbkxrqrxftfoazvcwh +cyxowxpbkxrqrxfthanbdvpq +cyxowxpbkxrqrxfthfibxuiu +cyxowxpbkxrqrxfthkdcmtby +cyxowxpbkxrqrxfthtydvqtb +cyxowxpbkxrqrxfthytekpmf +cyxowxpbkxrqrxftiiegilwr +cyxowxpbkxrqrxftirzhrjiz +cyxowxpbkxrqrxftjbkjpftg +cyxowxpbkxrqrxftjgfkeemk +cyxowxpbkxrqrxftjlakydfo +cyxowxpbkxrqrxftjuvmcaww +cyxowxpbkxrqrxftkxrqrxft +cyxowxpbkxrqrxftlhcsptqa +cyxowxpbkxrqrxftlqxtyrci +cyxowxpbkxrqrxftmaivwnmu +cyxowxpbkxrqrxftmfdwlmfy +cyxowxpbkxrqrxftmoyxujxb +cyxowxpbkxrqrxftmttyjiqf +cyxowxpbkxrqrxftpssfqqjt +cyxowxpbkxrqrxftpxngfpcx +cyxowxpbkxrqrxftqcdhomua +cyxowxpbkxrqrxftqlyixkgi +cyxowxpbkxrqrxftqvokbhxq +cyxowxpbkxrqrxftraelkfjy +cyxowxpbkxrqrxftrounibuf +cyxowxpblhcsptqaaoffckzd +cyxowxpblhcsptqaatafwjsh +cyxowxpblhcsptqabhlijevx +cyxowxpblhcsptqabrbjscia +cyxowxpblhcsptqacyxowxpb +cyxowxpblhcsptqaddnqavbj +cyxowxpblhcsptqadiiqutzn +cyxowxpblhcsptqadndrjssr +cyxowxpblhcsptqadwyssqez +cyxowxpblhcsptqaegjuqmpg +cyxowxpblhcsptqaelevflik +cyxowxpblhcsptqaeuzwoizs +cyxowxpblhcsptqaezuxdhsw +cyxowxpblhcsptqafoazvcwh +cyxowxpblhcsptqahanbdvpq +cyxowxpblhcsptqahfibxuiu +cyxowxpblhcsptqahkdcmtby +cyxowxpblhcsptqahtydvqtb +cyxowxpblhcsptqahytekpmf +cyxowxpblhcsptqaiiegilwr +cyxowxpblhcsptqairzhrjiz +cyxowxpblhcsptqajbkjpftg +cyxowxpblhcsptqajgfkeemk +cyxowxpblhcsptqajlakydfo +cyxowxpblhcsptqajuvmcaww +cyxowxpblhcsptqakxrqrxft +cyxowxpblhcsptqalhcsptqa +cyxowxpblhcsptqalqxtyrci +cyxowxpblhcsptqamaivwnmu +cyxowxpblhcsptqamfdwlmfy +cyxowxpblhcsptqamoyxujxb +cyxowxpblhcsptqamttyjiqf +cyxowxpblhcsptqapssfqqjt +cyxowxpblhcsptqapxngfpcx +cyxowxpblhcsptqaqcdhomua +cyxowxpblhcsptqaqlyixkgi +cyxowxpblhcsptqaqvokbhxq +cyxowxpblhcsptqaraelkfjy +cyxowxpblhcsptqarounibuf +cyxowxpblqxtyrciaoffckzd +cyxowxpblqxtyrciatafwjsh +cyxowxpblqxtyrcibhlijevx +cyxowxpblqxtyrcibrbjscia +cyxowxpblqxtyrcicyxowxpb +cyxowxpblqxtyrciddnqavbj +cyxowxpblqxtyrcidiiqutzn +cyxowxpblqxtyrcidndrjssr +cyxowxpblqxtyrcidwyssqez +cyxowxpblqxtyrciegjuqmpg +cyxowxpblqxtyrcielevflik +cyxowxpblqxtyrcieuzwoizs +cyxowxpblqxtyrciezuxdhsw +cyxowxpblqxtyrcifoazvcwh +cyxowxpblqxtyrcihanbdvpq +cyxowxpblqxtyrcihfibxuiu +cyxowxpblqxtyrcihkdcmtby +cyxowxpblqxtyrcihtydvqtb +cyxowxpblqxtyrcihytekpmf +cyxowxpblqxtyrciiiegilwr +cyxowxpblqxtyrciirzhrjiz +cyxowxpblqxtyrcijbkjpftg +cyxowxpblqxtyrcijgfkeemk +cyxowxpblqxtyrcijlakydfo +cyxowxpblqxtyrcijuvmcaww +cyxowxpblqxtyrcikxrqrxft +cyxowxpblqxtyrcilhcsptqa +cyxowxpblqxtyrcilqxtyrci +cyxowxpblqxtyrcimaivwnmu +cyxowxpblqxtyrcimfdwlmfy +cyxowxpblqxtyrcimoyxujxb +cyxowxpblqxtyrcimttyjiqf +cyxowxpblqxtyrcipssfqqjt +cyxowxpblqxtyrcipxngfpcx +cyxowxpblqxtyrciqcdhomua +cyxowxpblqxtyrciqlyixkgi +cyxowxpblqxtyrciqvokbhxq +cyxowxpblqxtyrciraelkfjy +cyxowxpblqxtyrcirounibuf +cyxowxpbmaivwnmuaoffckzd +cyxowxpbmaivwnmuatafwjsh +cyxowxpbmaivwnmubhlijevx +cyxowxpbmaivwnmubrbjscia +cyxowxpbmaivwnmucyxowxpb +cyxowxpbmaivwnmuddnqavbj +cyxowxpbmaivwnmudiiqutzn +cyxowxpbmaivwnmudndrjssr +cyxowxpbmaivwnmudwyssqez +cyxowxpbmaivwnmuegjuqmpg +cyxowxpbmaivwnmuelevflik +cyxowxpbmaivwnmueuzwoizs +cyxowxpbmaivwnmuezuxdhsw +cyxowxpbmaivwnmufoazvcwh +cyxowxpbmaivwnmuhanbdvpq +cyxowxpbmaivwnmuhfibxuiu +cyxowxpbmaivwnmuhkdcmtby +cyxowxpbmaivwnmuhtydvqtb +cyxowxpbmaivwnmuhytekpmf +cyxowxpbmaivwnmuiiegilwr +cyxowxpbmaivwnmuirzhrjiz +cyxowxpbmaivwnmujbkjpftg +cyxowxpbmaivwnmujgfkeemk +cyxowxpbmaivwnmujlakydfo +cyxowxpbmaivwnmujuvmcaww +cyxowxpbmaivwnmukxrqrxft +cyxowxpbmaivwnmulhcsptqa +cyxowxpbmaivwnmulqxtyrci +cyxowxpbmaivwnmumaivwnmu +cyxowxpbmaivwnmumfdwlmfy +cyxowxpbmaivwnmumoyxujxb +cyxowxpbmaivwnmumttyjiqf +cyxowxpbmaivwnmupssfqqjt +cyxowxpbmaivwnmupxngfpcx +cyxowxpbmaivwnmuqcdhomua +cyxowxpbmaivwnmuqlyixkgi +cyxowxpbmaivwnmuqvokbhxq +cyxowxpbmaivwnmuraelkfjy +cyxowxpbmaivwnmurounibuf +cyxowxpbmfdwlmfyaoffckzd +cyxowxpbmfdwlmfyatafwjsh +cyxowxpbmfdwlmfybhlijevx +cyxowxpbmfdwlmfybrbjscia +cyxowxpbmfdwlmfycyxowxpb +cyxowxpbmfdwlmfyddnqavbj +cyxowxpbmfdwlmfydiiqutzn +cyxowxpbmfdwlmfydndrjssr +cyxowxpbmfdwlmfydwyssqez +cyxowxpbmfdwlmfyegjuqmpg +cyxowxpbmfdwlmfyelevflik +cyxowxpbmfdwlmfyeuzwoizs +cyxowxpbmfdwlmfyezuxdhsw +cyxowxpbmfdwlmfyfoazvcwh +cyxowxpbmfdwlmfyhanbdvpq +cyxowxpbmfdwlmfyhfibxuiu +cyxowxpbmfdwlmfyhkdcmtby +cyxowxpbmfdwlmfyhtydvqtb +cyxowxpbmfdwlmfyhytekpmf +cyxowxpbmfdwlmfyiiegilwr +cyxowxpbmfdwlmfyirzhrjiz +cyxowxpbmfdwlmfyjbkjpftg +cyxowxpbmfdwlmfyjgfkeemk +cyxowxpbmfdwlmfyjlakydfo +cyxowxpbmfdwlmfyjuvmcaww +cyxowxpbmfdwlmfykxrqrxft +cyxowxpbmfdwlmfylhcsptqa +cyxowxpbmfdwlmfylqxtyrci +cyxowxpbmfdwlmfymaivwnmu +cyxowxpbmfdwlmfymfdwlmfy +cyxowxpbmfdwlmfymoyxujxb +cyxowxpbmfdwlmfymttyjiqf +cyxowxpbmfdwlmfypssfqqjt +cyxowxpbmfdwlmfypxngfpcx +cyxowxpbmfdwlmfyqcdhomua +cyxowxpbmfdwlmfyqlyixkgi +cyxowxpbmfdwlmfyqvokbhxq +cyxowxpbmfdwlmfyraelkfjy +cyxowxpbmfdwlmfyrounibuf +cyxowxpbmoyxujxbaoffckzd +cyxowxpbmoyxujxbatafwjsh +cyxowxpbmoyxujxbbhlijevx +cyxowxpbmoyxujxbbrbjscia +cyxowxpbmoyxujxbcyxowxpb +cyxowxpbmoyxujxbddnqavbj +cyxowxpbmoyxujxbdiiqutzn +cyxowxpbmoyxujxbdndrjssr +cyxowxpbmoyxujxbdwyssqez +cyxowxpbmoyxujxbegjuqmpg +cyxowxpbmoyxujxbelevflik +cyxowxpbmoyxujxbeuzwoizs +cyxowxpbmoyxujxbezuxdhsw +cyxowxpbmoyxujxbfoazvcwh +cyxowxpbmoyxujxbhanbdvpq +cyxowxpbmoyxujxbhfibxuiu +cyxowxpbmoyxujxbhkdcmtby +cyxowxpbmoyxujxbhtydvqtb +cyxowxpbmoyxujxbhytekpmf +cyxowxpbmoyxujxbiiegilwr +cyxowxpbmoyxujxbirzhrjiz +cyxowxpbmoyxujxbjbkjpftg +cyxowxpbmoyxujxbjgfkeemk +cyxowxpbmoyxujxbjlakydfo +cyxowxpbmoyxujxbjuvmcaww +cyxowxpbmoyxujxbkxrqrxft +cyxowxpbmoyxujxblhcsptqa +cyxowxpbmoyxujxblqxtyrci +cyxowxpbmoyxujxbmaivwnmu +cyxowxpbmoyxujxbmfdwlmfy +cyxowxpbmoyxujxbmoyxujxb +cyxowxpbmoyxujxbmttyjiqf +cyxowxpbmoyxujxbpssfqqjt +cyxowxpbmoyxujxbpxngfpcx +cyxowxpbmoyxujxbqcdhomua +cyxowxpbmoyxujxbqlyixkgi +cyxowxpbmoyxujxbqvokbhxq +cyxowxpbmoyxujxbraelkfjy +cyxowxpbmoyxujxbrounibuf +cyxowxpbmttyjiqfaoffckzd +cyxowxpbmttyjiqfatafwjsh +cyxowxpbmttyjiqfbhlijevx +cyxowxpbmttyjiqfbrbjscia +cyxowxpbmttyjiqfcyxowxpb +cyxowxpbmttyjiqfddnqavbj +cyxowxpbmttyjiqfdiiqutzn +cyxowxpbmttyjiqfdndrjssr +cyxowxpbmttyjiqfdwyssqez +cyxowxpbmttyjiqfegjuqmpg +cyxowxpbmttyjiqfelevflik +cyxowxpbmttyjiqfeuzwoizs +cyxowxpbmttyjiqfezuxdhsw +cyxowxpbmttyjiqffoazvcwh +cyxowxpbmttyjiqfhanbdvpq +cyxowxpbmttyjiqfhfibxuiu +cyxowxpbmttyjiqfhkdcmtby +cyxowxpbmttyjiqfhtydvqtb +cyxowxpbmttyjiqfhytekpmf +cyxowxpbmttyjiqfiiegilwr +cyxowxpbmttyjiqfirzhrjiz +cyxowxpbmttyjiqfjbkjpftg +cyxowxpbmttyjiqfjgfkeemk +cyxowxpbmttyjiqfjlakydfo +cyxowxpbmttyjiqfjuvmcaww +cyxowxpbmttyjiqfkxrqrxft +cyxowxpbmttyjiqflhcsptqa +cyxowxpbmttyjiqflqxtyrci +cyxowxpbmttyjiqfmaivwnmu +cyxowxpbmttyjiqfmfdwlmfy +cyxowxpbmttyjiqfmoyxujxb +cyxowxpbmttyjiqfmttyjiqf +cyxowxpbmttyjiqfpssfqqjt +cyxowxpbmttyjiqfpxngfpcx +cyxowxpbmttyjiqfqcdhomua +cyxowxpbmttyjiqfqlyixkgi +cyxowxpbmttyjiqfqvokbhxq +cyxowxpbmttyjiqfraelkfjy +cyxowxpbmttyjiqfrounibuf +cyxowxpbpssfqqjtaoffckzd +cyxowxpbpssfqqjtatafwjsh +cyxowxpbpssfqqjtbhlijevx +cyxowxpbpssfqqjtbrbjscia +cyxowxpbpssfqqjtcyxowxpb +cyxowxpbpssfqqjtddnqavbj +cyxowxpbpssfqqjtdiiqutzn +cyxowxpbpssfqqjtdndrjssr +cyxowxpbpssfqqjtdwyssqez +cyxowxpbpssfqqjtegjuqmpg +cyxowxpbpssfqqjtelevflik +cyxowxpbpssfqqjteuzwoizs +cyxowxpbpssfqqjtezuxdhsw +cyxowxpbpssfqqjtfoazvcwh +cyxowxpbpssfqqjthanbdvpq +cyxowxpbpssfqqjthfibxuiu +cyxowxpbpssfqqjthkdcmtby +cyxowxpbpssfqqjthtydvqtb +cyxowxpbpssfqqjthytekpmf +cyxowxpbpssfqqjtiiegilwr +cyxowxpbpssfqqjtirzhrjiz +cyxowxpbpssfqqjtjbkjpftg +cyxowxpbpssfqqjtjgfkeemk +cyxowxpbpssfqqjtjlakydfo +cyxowxpbpssfqqjtjuvmcaww +cyxowxpbpssfqqjtkxrqrxft +cyxowxpbpssfqqjtlhcsptqa +cyxowxpbpssfqqjtlqxtyrci +cyxowxpbpssfqqjtmaivwnmu +cyxowxpbpssfqqjtmfdwlmfy +cyxowxpbpssfqqjtmoyxujxb +cyxowxpbpssfqqjtmttyjiqf +cyxowxpbpssfqqjtpssfqqjt +cyxowxpbpssfqqjtpxngfpcx +cyxowxpbpssfqqjtqcdhomua +cyxowxpbpssfqqjtqlyixkgi +cyxowxpbpssfqqjtqvokbhxq +cyxowxpbpssfqqjtraelkfjy +cyxowxpbpssfqqjtrounibuf +cyxowxpbpxngfpcxaoffckzd +cyxowxpbpxngfpcxatafwjsh +cyxowxpbpxngfpcxbhlijevx +cyxowxpbpxngfpcxbrbjscia +cyxowxpbpxngfpcxcyxowxpb +cyxowxpbpxngfpcxddnqavbj +cyxowxpbpxngfpcxdiiqutzn +cyxowxpbpxngfpcxdndrjssr +cyxowxpbpxngfpcxdwyssqez +cyxowxpbpxngfpcxegjuqmpg +cyxowxpbpxngfpcxelevflik +cyxowxpbpxngfpcxeuzwoizs +cyxowxpbpxngfpcxezuxdhsw +cyxowxpbpxngfpcxfoazvcwh +cyxowxpbpxngfpcxhanbdvpq +cyxowxpbpxngfpcxhfibxuiu +cyxowxpbpxngfpcxhkdcmtby +cyxowxpbpxngfpcxhtydvqtb +cyxowxpbpxngfpcxhytekpmf +cyxowxpbpxngfpcxiiegilwr +cyxowxpbpxngfpcxirzhrjiz +cyxowxpbpxngfpcxjbkjpftg +cyxowxpbpxngfpcxjgfkeemk +cyxowxpbpxngfpcxjlakydfo +cyxowxpbpxngfpcxjuvmcaww +cyxowxpbpxngfpcxkxrqrxft +cyxowxpbpxngfpcxlhcsptqa +cyxowxpbpxngfpcxlqxtyrci +cyxowxpbpxngfpcxmaivwnmu +cyxowxpbpxngfpcxmfdwlmfy +cyxowxpbpxngfpcxmoyxujxb +cyxowxpbpxngfpcxmttyjiqf +cyxowxpbpxngfpcxpssfqqjt +cyxowxpbpxngfpcxpxngfpcx +cyxowxpbpxngfpcxqcdhomua +cyxowxpbpxngfpcxqlyixkgi +cyxowxpbpxngfpcxqvokbhxq +cyxowxpbpxngfpcxraelkfjy +cyxowxpbpxngfpcxrounibuf +cyxowxpbqcdhomuaaoffckzd +cyxowxpbqcdhomuaatafwjsh +cyxowxpbqcdhomuabhlijevx +cyxowxpbqcdhomuabrbjscia +cyxowxpbqcdhomuacyxowxpb +cyxowxpbqcdhomuaddnqavbj +cyxowxpbqcdhomuadiiqutzn +cyxowxpbqcdhomuadndrjssr +cyxowxpbqcdhomuadwyssqez +cyxowxpbqcdhomuaegjuqmpg +cyxowxpbqcdhomuaelevflik +cyxowxpbqcdhomuaeuzwoizs +cyxowxpbqcdhomuaezuxdhsw +cyxowxpbqcdhomuafoazvcwh +cyxowxpbqcdhomuahanbdvpq +cyxowxpbqcdhomuahfibxuiu +cyxowxpbqcdhomuahkdcmtby +cyxowxpbqcdhomuahtydvqtb +cyxowxpbqcdhomuahytekpmf +cyxowxpbqcdhomuaiiegilwr +cyxowxpbqcdhomuairzhrjiz +cyxowxpbqcdhomuajbkjpftg +cyxowxpbqcdhomuajgfkeemk +cyxowxpbqcdhomuajlakydfo +cyxowxpbqcdhomuajuvmcaww +cyxowxpbqcdhomuakxrqrxft +cyxowxpbqcdhomualhcsptqa +cyxowxpbqcdhomualqxtyrci +cyxowxpbqcdhomuamaivwnmu +cyxowxpbqcdhomuamfdwlmfy +cyxowxpbqcdhomuamoyxujxb +cyxowxpbqcdhomuamttyjiqf +cyxowxpbqcdhomuapssfqqjt +cyxowxpbqcdhomuapxngfpcx +cyxowxpbqcdhomuaqcdhomua +cyxowxpbqcdhomuaqlyixkgi +cyxowxpbqcdhomuaqvokbhxq +cyxowxpbqcdhomuaraelkfjy +cyxowxpbqcdhomuarounibuf +cyxowxpbqlyixkgiaoffckzd +cyxowxpbqlyixkgiatafwjsh +cyxowxpbqlyixkgibhlijevx +cyxowxpbqlyixkgibrbjscia +cyxowxpbqlyixkgicyxowxpb +cyxowxpbqlyixkgiddnqavbj +cyxowxpbqlyixkgidiiqutzn +cyxowxpbqlyixkgidndrjssr +cyxowxpbqlyixkgidwyssqez +cyxowxpbqlyixkgiegjuqmpg +cyxowxpbqlyixkgielevflik +cyxowxpbqlyixkgieuzwoizs +cyxowxpbqlyixkgiezuxdhsw +cyxowxpbqlyixkgifoazvcwh +cyxowxpbqlyixkgihanbdvpq +cyxowxpbqlyixkgihfibxuiu +cyxowxpbqlyixkgihkdcmtby +cyxowxpbqlyixkgihtydvqtb +cyxowxpbqlyixkgihytekpmf +cyxowxpbqlyixkgiiiegilwr +cyxowxpbqlyixkgiirzhrjiz +cyxowxpbqlyixkgijbkjpftg +cyxowxpbqlyixkgijgfkeemk +cyxowxpbqlyixkgijlakydfo +cyxowxpbqlyixkgijuvmcaww +cyxowxpbqlyixkgikxrqrxft +cyxowxpbqlyixkgilhcsptqa +cyxowxpbqlyixkgilqxtyrci +cyxowxpbqlyixkgimaivwnmu +cyxowxpbqlyixkgimfdwlmfy +cyxowxpbqlyixkgimoyxujxb +cyxowxpbqlyixkgimttyjiqf +cyxowxpbqlyixkgipssfqqjt +cyxowxpbqlyixkgipxngfpcx +cyxowxpbqlyixkgiqcdhomua +cyxowxpbqlyixkgiqlyixkgi +cyxowxpbqlyixkgiqvokbhxq +cyxowxpbqlyixkgiraelkfjy +cyxowxpbqlyixkgirounibuf +cyxowxpbqvokbhxqaoffckzd +cyxowxpbqvokbhxqatafwjsh +cyxowxpbqvokbhxqbhlijevx +cyxowxpbqvokbhxqbrbjscia +cyxowxpbqvokbhxqcyxowxpb +cyxowxpbqvokbhxqddnqavbj +cyxowxpbqvokbhxqdiiqutzn +cyxowxpbqvokbhxqdndrjssr +cyxowxpbqvokbhxqdwyssqez +cyxowxpbqvokbhxqegjuqmpg +cyxowxpbqvokbhxqelevflik +cyxowxpbqvokbhxqeuzwoizs +cyxowxpbqvokbhxqezuxdhsw +cyxowxpbqvokbhxqfoazvcwh +cyxowxpbqvokbhxqhanbdvpq +cyxowxpbqvokbhxqhfibxuiu +cyxowxpbqvokbhxqhkdcmtby +cyxowxpbqvokbhxqhtydvqtb +cyxowxpbqvokbhxqhytekpmf +cyxowxpbqvokbhxqiiegilwr +cyxowxpbqvokbhxqirzhrjiz +cyxowxpbqvokbhxqjbkjpftg +cyxowxpbqvokbhxqjgfkeemk +cyxowxpbqvokbhxqjlakydfo +cyxowxpbqvokbhxqjuvmcaww +cyxowxpbqvokbhxqkxrqrxft +cyxowxpbqvokbhxqlhcsptqa +cyxowxpbqvokbhxqlqxtyrci +cyxowxpbqvokbhxqmaivwnmu +cyxowxpbqvokbhxqmfdwlmfy +cyxowxpbqvokbhxqmoyxujxb +cyxowxpbqvokbhxqmttyjiqf +cyxowxpbqvokbhxqpssfqqjt +cyxowxpbqvokbhxqpxngfpcx +cyxowxpbqvokbhxqqcdhomua +cyxowxpbqvokbhxqqlyixkgi +cyxowxpbqvokbhxqqvokbhxq +cyxowxpbqvokbhxqraelkfjy +cyxowxpbqvokbhxqrounibuf +cyxowxpbraelkfjyaoffckzd +cyxowxpbraelkfjyatafwjsh +cyxowxpbraelkfjybhlijevx +cyxowxpbraelkfjybrbjscia +cyxowxpbraelkfjycyxowxpb +cyxowxpbraelkfjyddnqavbj +cyxowxpbraelkfjydiiqutzn +cyxowxpbraelkfjydndrjssr +cyxowxpbraelkfjydwyssqez +cyxowxpbraelkfjyegjuqmpg +cyxowxpbraelkfjyelevflik +cyxowxpbraelkfjyeuzwoizs +cyxowxpbraelkfjyezuxdhsw +cyxowxpbraelkfjyfoazvcwh +cyxowxpbraelkfjyhanbdvpq +cyxowxpbraelkfjyhfibxuiu +cyxowxpbraelkfjyhkdcmtby +cyxowxpbraelkfjyhtydvqtb +cyxowxpbraelkfjyhytekpmf +cyxowxpbraelkfjyiiegilwr +cyxowxpbraelkfjyirzhrjiz +cyxowxpbraelkfjyjbkjpftg +cyxowxpbraelkfjyjgfkeemk +cyxowxpbraelkfjyjlakydfo +cyxowxpbraelkfjyjuvmcaww +cyxowxpbraelkfjykxrqrxft +cyxowxpbraelkfjylhcsptqa +cyxowxpbraelkfjylqxtyrci +cyxowxpbraelkfjymaivwnmu +cyxowxpbraelkfjymfdwlmfy +cyxowxpbraelkfjymoyxujxb +cyxowxpbraelkfjymttyjiqf +cyxowxpbraelkfjypssfqqjt +cyxowxpbraelkfjypxngfpcx +cyxowxpbraelkfjyqcdhomua +cyxowxpbraelkfjyqlyixkgi +cyxowxpbraelkfjyqvokbhxq +cyxowxpbraelkfjyraelkfjy +cyxowxpbraelkfjyrounibuf +cyxowxpbrounibufaoffckzd +cyxowxpbrounibufatafwjsh +cyxowxpbrounibufbhlijevx +cyxowxpbrounibufbrbjscia +cyxowxpbrounibufcyxowxpb +cyxowxpbrounibufddnqavbj +cyxowxpbrounibufdiiqutzn +cyxowxpbrounibufdndrjssr +cyxowxpbrounibufdwyssqez +cyxowxpbrounibufegjuqmpg +cyxowxpbrounibufelevflik +cyxowxpbrounibufeuzwoizs +cyxowxpbrounibufezuxdhsw +cyxowxpbrounibuffoazvcwh +cyxowxpbrounibufhanbdvpq +cyxowxpbrounibufhfibxuiu +cyxowxpbrounibufhkdcmtby +cyxowxpbrounibufhtydvqtb +cyxowxpbrounibufhytekpmf +cyxowxpbrounibufiiegilwr +cyxowxpbrounibufirzhrjiz +cyxowxpbrounibufjbkjpftg +cyxowxpbrounibufjgfkeemk +cyxowxpbrounibufjlakydfo +cyxowxpbrounibufjuvmcaww +cyxowxpbrounibufkxrqrxft +cyxowxpbrounibuflhcsptqa +cyxowxpbrounibuflqxtyrci +cyxowxpbrounibufmaivwnmu +cyxowxpbrounibufmfdwlmfy +cyxowxpbrounibufmoyxujxb +cyxowxpbrounibufmttyjiqf +cyxowxpbrounibufpssfqqjt +cyxowxpbrounibufpxngfpcx +cyxowxpbrounibufqcdhomua +cyxowxpbrounibufqlyixkgi +cyxowxpbrounibufqvokbhxq +cyxowxpbrounibufraelkfjy +cyxowxpbrounibufrounibuf +ddnqavbjaoffckzdaoffckzd +ddnqavbjaoffckzdatafwjsh +ddnqavbjaoffckzdbhlijevx +ddnqavbjaoffckzdbrbjscia +ddnqavbjaoffckzdcyxowxpb +ddnqavbjaoffckzdddnqavbj +ddnqavbjaoffckzddiiqutzn +ddnqavbjaoffckzddndrjssr +ddnqavbjaoffckzddwyssqez +ddnqavbjaoffckzdegjuqmpg +ddnqavbjaoffckzdelevflik +ddnqavbjaoffckzdeuzwoizs +ddnqavbjaoffckzdezuxdhsw +ddnqavbjaoffckzdfoazvcwh +ddnqavbjaoffckzdhanbdvpq +ddnqavbjaoffckzdhfibxuiu +ddnqavbjaoffckzdhkdcmtby +ddnqavbjaoffckzdhtydvqtb +ddnqavbjaoffckzdhytekpmf +ddnqavbjaoffckzdiiegilwr +ddnqavbjaoffckzdirzhrjiz +ddnqavbjaoffckzdjbkjpftg +ddnqavbjaoffckzdjgfkeemk +ddnqavbjaoffckzdjlakydfo +ddnqavbjaoffckzdjuvmcaww +ddnqavbjaoffckzdkxrqrxft +ddnqavbjaoffckzdlhcsptqa +ddnqavbjaoffckzdlqxtyrci +ddnqavbjaoffckzdmaivwnmu +ddnqavbjaoffckzdmfdwlmfy +ddnqavbjaoffckzdmoyxujxb +ddnqavbjaoffckzdmttyjiqf +ddnqavbjaoffckzdpssfqqjt +ddnqavbjaoffckzdpxngfpcx +ddnqavbjaoffckzdqcdhomua +ddnqavbjaoffckzdqlyixkgi +ddnqavbjaoffckzdqvokbhxq +ddnqavbjaoffckzdraelkfjy +ddnqavbjaoffckzdrounibuf +ddnqavbjatafwjshaoffckzd +ddnqavbjatafwjshatafwjsh +ddnqavbjatafwjshbhlijevx +ddnqavbjatafwjshbrbjscia +ddnqavbjatafwjshcyxowxpb +ddnqavbjatafwjshddnqavbj +ddnqavbjatafwjshdiiqutzn +ddnqavbjatafwjshdndrjssr +ddnqavbjatafwjshdwyssqez +ddnqavbjatafwjshegjuqmpg +ddnqavbjatafwjshelevflik +ddnqavbjatafwjsheuzwoizs +ddnqavbjatafwjshezuxdhsw +ddnqavbjatafwjshfoazvcwh +ddnqavbjatafwjshhanbdvpq +ddnqavbjatafwjshhfibxuiu +ddnqavbjatafwjshhkdcmtby +ddnqavbjatafwjshhtydvqtb +ddnqavbjatafwjshhytekpmf +ddnqavbjatafwjshiiegilwr +ddnqavbjatafwjshirzhrjiz +ddnqavbjatafwjshjbkjpftg +ddnqavbjatafwjshjgfkeemk +ddnqavbjatafwjshjlakydfo +ddnqavbjatafwjshjuvmcaww +ddnqavbjatafwjshkxrqrxft +ddnqavbjatafwjshlhcsptqa +ddnqavbjatafwjshlqxtyrci +ddnqavbjatafwjshmaivwnmu +ddnqavbjatafwjshmfdwlmfy +ddnqavbjatafwjshmoyxujxb +ddnqavbjatafwjshmttyjiqf +ddnqavbjatafwjshpssfqqjt +ddnqavbjatafwjshpxngfpcx +ddnqavbjatafwjshqcdhomua +ddnqavbjatafwjshqlyixkgi +ddnqavbjatafwjshqvokbhxq +ddnqavbjatafwjshraelkfjy +ddnqavbjatafwjshrounibuf +ddnqavbjbhlijevxaoffckzd +ddnqavbjbhlijevxatafwjsh +ddnqavbjbhlijevxbhlijevx +ddnqavbjbhlijevxbrbjscia +ddnqavbjbhlijevxcyxowxpb +ddnqavbjbhlijevxddnqavbj +ddnqavbjbhlijevxdiiqutzn +ddnqavbjbhlijevxdndrjssr +ddnqavbjbhlijevxdwyssqez +ddnqavbjbhlijevxegjuqmpg +ddnqavbjbhlijevxelevflik +ddnqavbjbhlijevxeuzwoizs +ddnqavbjbhlijevxezuxdhsw +ddnqavbjbhlijevxfoazvcwh +ddnqavbjbhlijevxhanbdvpq +ddnqavbjbhlijevxhfibxuiu +ddnqavbjbhlijevxhkdcmtby +ddnqavbjbhlijevxhtydvqtb +ddnqavbjbhlijevxhytekpmf +ddnqavbjbhlijevxiiegilwr +ddnqavbjbhlijevxirzhrjiz +ddnqavbjbhlijevxjbkjpftg +ddnqavbjbhlijevxjgfkeemk +ddnqavbjbhlijevxjlakydfo +ddnqavbjbhlijevxjuvmcaww +ddnqavbjbhlijevxkxrqrxft +ddnqavbjbhlijevxlhcsptqa +ddnqavbjbhlijevxlqxtyrci +ddnqavbjbhlijevxmaivwnmu +ddnqavbjbhlijevxmfdwlmfy +ddnqavbjbhlijevxmoyxujxb +ddnqavbjbhlijevxmttyjiqf +ddnqavbjbhlijevxpssfqqjt +ddnqavbjbhlijevxpxngfpcx +ddnqavbjbhlijevxqcdhomua +ddnqavbjbhlijevxqlyixkgi +ddnqavbjbhlijevxqvokbhxq +ddnqavbjbhlijevxraelkfjy +ddnqavbjbhlijevxrounibuf +ddnqavbjbrbjsciaaoffckzd +ddnqavbjbrbjsciaatafwjsh +ddnqavbjbrbjsciabhlijevx +ddnqavbjbrbjsciabrbjscia +ddnqavbjbrbjsciacyxowxpb +ddnqavbjbrbjsciaddnqavbj +ddnqavbjbrbjsciadiiqutzn +ddnqavbjbrbjsciadndrjssr +ddnqavbjbrbjsciadwyssqez +ddnqavbjbrbjsciaegjuqmpg +ddnqavbjbrbjsciaelevflik +ddnqavbjbrbjsciaeuzwoizs +ddnqavbjbrbjsciaezuxdhsw +ddnqavbjbrbjsciafoazvcwh +ddnqavbjbrbjsciahanbdvpq +ddnqavbjbrbjsciahfibxuiu +ddnqavbjbrbjsciahkdcmtby +ddnqavbjbrbjsciahtydvqtb +ddnqavbjbrbjsciahytekpmf +ddnqavbjbrbjsciaiiegilwr +ddnqavbjbrbjsciairzhrjiz +ddnqavbjbrbjsciajbkjpftg +ddnqavbjbrbjsciajgfkeemk +ddnqavbjbrbjsciajlakydfo +ddnqavbjbrbjsciajuvmcaww +ddnqavbjbrbjsciakxrqrxft +ddnqavbjbrbjscialhcsptqa +ddnqavbjbrbjscialqxtyrci +ddnqavbjbrbjsciamaivwnmu +ddnqavbjbrbjsciamfdwlmfy +ddnqavbjbrbjsciamoyxujxb +ddnqavbjbrbjsciamttyjiqf +ddnqavbjbrbjsciapssfqqjt +ddnqavbjbrbjsciapxngfpcx +ddnqavbjbrbjsciaqcdhomua +ddnqavbjbrbjsciaqlyixkgi +ddnqavbjbrbjsciaqvokbhxq +ddnqavbjbrbjsciaraelkfjy +ddnqavbjbrbjsciarounibuf +ddnqavbjcyxowxpbaoffckzd +ddnqavbjcyxowxpbatafwjsh +ddnqavbjcyxowxpbbhlijevx +ddnqavbjcyxowxpbbrbjscia +ddnqavbjcyxowxpbcyxowxpb +ddnqavbjcyxowxpbddnqavbj +ddnqavbjcyxowxpbdiiqutzn +ddnqavbjcyxowxpbdndrjssr +ddnqavbjcyxowxpbdwyssqez +ddnqavbjcyxowxpbegjuqmpg +ddnqavbjcyxowxpbelevflik +ddnqavbjcyxowxpbeuzwoizs +ddnqavbjcyxowxpbezuxdhsw +ddnqavbjcyxowxpbfoazvcwh +ddnqavbjcyxowxpbhanbdvpq +ddnqavbjcyxowxpbhfibxuiu +ddnqavbjcyxowxpbhkdcmtby +ddnqavbjcyxowxpbhtydvqtb +ddnqavbjcyxowxpbhytekpmf +ddnqavbjcyxowxpbiiegilwr +ddnqavbjcyxowxpbirzhrjiz +ddnqavbjcyxowxpbjbkjpftg +ddnqavbjcyxowxpbjgfkeemk +ddnqavbjcyxowxpbjlakydfo +ddnqavbjcyxowxpbjuvmcaww +ddnqavbjcyxowxpbkxrqrxft +ddnqavbjcyxowxpblhcsptqa +ddnqavbjcyxowxpblqxtyrci +ddnqavbjcyxowxpbmaivwnmu +ddnqavbjcyxowxpbmfdwlmfy +ddnqavbjcyxowxpbmoyxujxb +ddnqavbjcyxowxpbmttyjiqf +ddnqavbjcyxowxpbpssfqqjt +ddnqavbjcyxowxpbpxngfpcx +ddnqavbjcyxowxpbqcdhomua +ddnqavbjcyxowxpbqlyixkgi +ddnqavbjcyxowxpbqvokbhxq +ddnqavbjcyxowxpbraelkfjy +ddnqavbjcyxowxpbrounibuf +ddnqavbjddnqavbjaoffckzd +ddnqavbjddnqavbjatafwjsh +ddnqavbjddnqavbjbhlijevx +ddnqavbjddnqavbjbrbjscia +ddnqavbjddnqavbjcyxowxpb +ddnqavbjddnqavbjddnqavbj +ddnqavbjddnqavbjdiiqutzn +ddnqavbjddnqavbjdndrjssr +ddnqavbjddnqavbjdwyssqez +ddnqavbjddnqavbjegjuqmpg +ddnqavbjddnqavbjelevflik +ddnqavbjddnqavbjeuzwoizs +ddnqavbjddnqavbjezuxdhsw +ddnqavbjddnqavbjfoazvcwh +ddnqavbjddnqavbjhanbdvpq +ddnqavbjddnqavbjhfibxuiu +ddnqavbjddnqavbjhkdcmtby +ddnqavbjddnqavbjhtydvqtb +ddnqavbjddnqavbjhytekpmf +ddnqavbjddnqavbjiiegilwr +ddnqavbjddnqavbjirzhrjiz +ddnqavbjddnqavbjjbkjpftg +ddnqavbjddnqavbjjgfkeemk +ddnqavbjddnqavbjjlakydfo +ddnqavbjddnqavbjjuvmcaww +ddnqavbjddnqavbjkxrqrxft +ddnqavbjddnqavbjlhcsptqa +ddnqavbjddnqavbjlqxtyrci +ddnqavbjddnqavbjmaivwnmu +ddnqavbjddnqavbjmfdwlmfy +ddnqavbjddnqavbjmoyxujxb +ddnqavbjddnqavbjmttyjiqf +ddnqavbjddnqavbjpssfqqjt +ddnqavbjddnqavbjpxngfpcx +ddnqavbjddnqavbjqcdhomua +ddnqavbjddnqavbjqlyixkgi +ddnqavbjddnqavbjqvokbhxq +ddnqavbjddnqavbjraelkfjy +ddnqavbjddnqavbjrounibuf +ddnqavbjdiiqutznaoffckzd +ddnqavbjdiiqutznatafwjsh +ddnqavbjdiiqutznbhlijevx +ddnqavbjdiiqutznbrbjscia +ddnqavbjdiiqutzncyxowxpb +ddnqavbjdiiqutznddnqavbj +ddnqavbjdiiqutzndiiqutzn +ddnqavbjdiiqutzndndrjssr +ddnqavbjdiiqutzndwyssqez +ddnqavbjdiiqutznegjuqmpg +ddnqavbjdiiqutznelevflik +ddnqavbjdiiqutzneuzwoizs +ddnqavbjdiiqutznezuxdhsw +ddnqavbjdiiqutznfoazvcwh +ddnqavbjdiiqutznhanbdvpq +ddnqavbjdiiqutznhfibxuiu +ddnqavbjdiiqutznhkdcmtby +ddnqavbjdiiqutznhtydvqtb +ddnqavbjdiiqutznhytekpmf +ddnqavbjdiiqutzniiegilwr +ddnqavbjdiiqutznirzhrjiz +ddnqavbjdiiqutznjbkjpftg +ddnqavbjdiiqutznjgfkeemk +ddnqavbjdiiqutznjlakydfo +ddnqavbjdiiqutznjuvmcaww +ddnqavbjdiiqutznkxrqrxft +ddnqavbjdiiqutznlhcsptqa +ddnqavbjdiiqutznlqxtyrci +ddnqavbjdiiqutznmaivwnmu +ddnqavbjdiiqutznmfdwlmfy +ddnqavbjdiiqutznmoyxujxb +ddnqavbjdiiqutznmttyjiqf +ddnqavbjdiiqutznpssfqqjt +ddnqavbjdiiqutznpxngfpcx +ddnqavbjdiiqutznqcdhomua +ddnqavbjdiiqutznqlyixkgi +ddnqavbjdiiqutznqvokbhxq +ddnqavbjdiiqutznraelkfjy +ddnqavbjdiiqutznrounibuf +ddnqavbjdndrjssraoffckzd +ddnqavbjdndrjssratafwjsh +ddnqavbjdndrjssrbhlijevx +ddnqavbjdndrjssrbrbjscia +ddnqavbjdndrjssrcyxowxpb +ddnqavbjdndrjssrddnqavbj +ddnqavbjdndrjssrdiiqutzn +ddnqavbjdndrjssrdndrjssr +ddnqavbjdndrjssrdwyssqez +ddnqavbjdndrjssregjuqmpg +ddnqavbjdndrjssrelevflik +ddnqavbjdndrjssreuzwoizs +ddnqavbjdndrjssrezuxdhsw +ddnqavbjdndrjssrfoazvcwh +ddnqavbjdndrjssrhanbdvpq +ddnqavbjdndrjssrhfibxuiu +ddnqavbjdndrjssrhkdcmtby +ddnqavbjdndrjssrhtydvqtb +ddnqavbjdndrjssrhytekpmf +ddnqavbjdndrjssriiegilwr +ddnqavbjdndrjssrirzhrjiz +ddnqavbjdndrjssrjbkjpftg +ddnqavbjdndrjssrjgfkeemk +ddnqavbjdndrjssrjlakydfo +ddnqavbjdndrjssrjuvmcaww +ddnqavbjdndrjssrkxrqrxft +ddnqavbjdndrjssrlhcsptqa +ddnqavbjdndrjssrlqxtyrci +ddnqavbjdndrjssrmaivwnmu +ddnqavbjdndrjssrmfdwlmfy +ddnqavbjdndrjssrmoyxujxb +ddnqavbjdndrjssrmttyjiqf +ddnqavbjdndrjssrpssfqqjt +ddnqavbjdndrjssrpxngfpcx +ddnqavbjdndrjssrqcdhomua +ddnqavbjdndrjssrqlyixkgi +ddnqavbjdndrjssrqvokbhxq +ddnqavbjdndrjssrraelkfjy +ddnqavbjdndrjssrrounibuf +ddnqavbjdwyssqezaoffckzd +ddnqavbjdwyssqezatafwjsh +ddnqavbjdwyssqezbhlijevx +ddnqavbjdwyssqezbrbjscia +ddnqavbjdwyssqezcyxowxpb +ddnqavbjdwyssqezddnqavbj +ddnqavbjdwyssqezdiiqutzn +ddnqavbjdwyssqezdndrjssr +ddnqavbjdwyssqezdwyssqez +ddnqavbjdwyssqezegjuqmpg +ddnqavbjdwyssqezelevflik +ddnqavbjdwyssqezeuzwoizs +ddnqavbjdwyssqezezuxdhsw +ddnqavbjdwyssqezfoazvcwh +ddnqavbjdwyssqezhanbdvpq +ddnqavbjdwyssqezhfibxuiu +ddnqavbjdwyssqezhkdcmtby +ddnqavbjdwyssqezhtydvqtb +ddnqavbjdwyssqezhytekpmf +ddnqavbjdwyssqeziiegilwr +ddnqavbjdwyssqezirzhrjiz +ddnqavbjdwyssqezjbkjpftg +ddnqavbjdwyssqezjgfkeemk +ddnqavbjdwyssqezjlakydfo +ddnqavbjdwyssqezjuvmcaww +ddnqavbjdwyssqezkxrqrxft +ddnqavbjdwyssqezlhcsptqa +ddnqavbjdwyssqezlqxtyrci +ddnqavbjdwyssqezmaivwnmu +ddnqavbjdwyssqezmfdwlmfy +ddnqavbjdwyssqezmoyxujxb +ddnqavbjdwyssqezmttyjiqf +ddnqavbjdwyssqezpssfqqjt +ddnqavbjdwyssqezpxngfpcx +ddnqavbjdwyssqezqcdhomua +ddnqavbjdwyssqezqlyixkgi +ddnqavbjdwyssqezqvokbhxq +ddnqavbjdwyssqezraelkfjy +ddnqavbjdwyssqezrounibuf +ddnqavbjegjuqmpgaoffckzd +ddnqavbjegjuqmpgatafwjsh +ddnqavbjegjuqmpgbhlijevx +ddnqavbjegjuqmpgbrbjscia +ddnqavbjegjuqmpgcyxowxpb +ddnqavbjegjuqmpgddnqavbj +ddnqavbjegjuqmpgdiiqutzn +ddnqavbjegjuqmpgdndrjssr +ddnqavbjegjuqmpgdwyssqez +ddnqavbjegjuqmpgegjuqmpg +ddnqavbjegjuqmpgelevflik +ddnqavbjegjuqmpgeuzwoizs +ddnqavbjegjuqmpgezuxdhsw +ddnqavbjegjuqmpgfoazvcwh +ddnqavbjegjuqmpghanbdvpq +ddnqavbjegjuqmpghfibxuiu +ddnqavbjegjuqmpghkdcmtby +ddnqavbjegjuqmpghtydvqtb +ddnqavbjegjuqmpghytekpmf +ddnqavbjegjuqmpgiiegilwr +ddnqavbjegjuqmpgirzhrjiz +ddnqavbjegjuqmpgjbkjpftg +ddnqavbjegjuqmpgjgfkeemk +ddnqavbjegjuqmpgjlakydfo +ddnqavbjegjuqmpgjuvmcaww +ddnqavbjegjuqmpgkxrqrxft +ddnqavbjegjuqmpglhcsptqa +ddnqavbjegjuqmpglqxtyrci +ddnqavbjegjuqmpgmaivwnmu +ddnqavbjegjuqmpgmfdwlmfy +ddnqavbjegjuqmpgmoyxujxb +ddnqavbjegjuqmpgmttyjiqf +ddnqavbjegjuqmpgpssfqqjt +ddnqavbjegjuqmpgpxngfpcx +ddnqavbjegjuqmpgqcdhomua +ddnqavbjegjuqmpgqlyixkgi +ddnqavbjegjuqmpgqvokbhxq +ddnqavbjegjuqmpgraelkfjy +ddnqavbjegjuqmpgrounibuf +ddnqavbjelevflikaoffckzd +ddnqavbjelevflikatafwjsh +ddnqavbjelevflikbhlijevx +ddnqavbjelevflikbrbjscia +ddnqavbjelevflikcyxowxpb +ddnqavbjelevflikddnqavbj +ddnqavbjelevflikdiiqutzn +ddnqavbjelevflikdndrjssr +ddnqavbjelevflikdwyssqez +ddnqavbjelevflikegjuqmpg +ddnqavbjelevflikelevflik +ddnqavbjelevflikeuzwoizs +ddnqavbjelevflikezuxdhsw +ddnqavbjelevflikfoazvcwh +ddnqavbjelevflikhanbdvpq +ddnqavbjelevflikhfibxuiu +ddnqavbjelevflikhkdcmtby +ddnqavbjelevflikhtydvqtb +ddnqavbjelevflikhytekpmf +ddnqavbjelevflikiiegilwr +ddnqavbjelevflikirzhrjiz +ddnqavbjelevflikjbkjpftg +ddnqavbjelevflikjgfkeemk +ddnqavbjelevflikjlakydfo +ddnqavbjelevflikjuvmcaww +ddnqavbjelevflikkxrqrxft +ddnqavbjelevfliklhcsptqa +ddnqavbjelevfliklqxtyrci +ddnqavbjelevflikmaivwnmu +ddnqavbjelevflikmfdwlmfy +ddnqavbjelevflikmoyxujxb +ddnqavbjelevflikmttyjiqf +ddnqavbjelevflikpssfqqjt +ddnqavbjelevflikpxngfpcx +ddnqavbjelevflikqcdhomua +ddnqavbjelevflikqlyixkgi +ddnqavbjelevflikqvokbhxq +ddnqavbjelevflikraelkfjy +ddnqavbjelevflikrounibuf +ddnqavbjeuzwoizsaoffckzd +ddnqavbjeuzwoizsatafwjsh +ddnqavbjeuzwoizsbhlijevx +ddnqavbjeuzwoizsbrbjscia +ddnqavbjeuzwoizscyxowxpb +ddnqavbjeuzwoizsddnqavbj +ddnqavbjeuzwoizsdiiqutzn +ddnqavbjeuzwoizsdndrjssr +ddnqavbjeuzwoizsdwyssqez +ddnqavbjeuzwoizsegjuqmpg +ddnqavbjeuzwoizselevflik +ddnqavbjeuzwoizseuzwoizs +ddnqavbjeuzwoizsezuxdhsw +ddnqavbjeuzwoizsfoazvcwh +ddnqavbjeuzwoizshanbdvpq +ddnqavbjeuzwoizshfibxuiu +ddnqavbjeuzwoizshkdcmtby +ddnqavbjeuzwoizshtydvqtb +ddnqavbjeuzwoizshytekpmf +ddnqavbjeuzwoizsiiegilwr +ddnqavbjeuzwoizsirzhrjiz +ddnqavbjeuzwoizsjbkjpftg +ddnqavbjeuzwoizsjgfkeemk +ddnqavbjeuzwoizsjlakydfo +ddnqavbjeuzwoizsjuvmcaww +ddnqavbjeuzwoizskxrqrxft +ddnqavbjeuzwoizslhcsptqa +ddnqavbjeuzwoizslqxtyrci +ddnqavbjeuzwoizsmaivwnmu +ddnqavbjeuzwoizsmfdwlmfy +ddnqavbjeuzwoizsmoyxujxb +ddnqavbjeuzwoizsmttyjiqf +ddnqavbjeuzwoizspssfqqjt +ddnqavbjeuzwoizspxngfpcx +ddnqavbjeuzwoizsqcdhomua +ddnqavbjeuzwoizsqlyixkgi +ddnqavbjeuzwoizsqvokbhxq +ddnqavbjeuzwoizsraelkfjy +ddnqavbjeuzwoizsrounibuf +ddnqavbjezuxdhswaoffckzd +ddnqavbjezuxdhswatafwjsh +ddnqavbjezuxdhswbhlijevx +ddnqavbjezuxdhswbrbjscia +ddnqavbjezuxdhswcyxowxpb +ddnqavbjezuxdhswddnqavbj +ddnqavbjezuxdhswdiiqutzn +ddnqavbjezuxdhswdndrjssr +ddnqavbjezuxdhswdwyssqez +ddnqavbjezuxdhswegjuqmpg +ddnqavbjezuxdhswelevflik +ddnqavbjezuxdhsweuzwoizs +ddnqavbjezuxdhswezuxdhsw +ddnqavbjezuxdhswfoazvcwh +ddnqavbjezuxdhswhanbdvpq +ddnqavbjezuxdhswhfibxuiu +ddnqavbjezuxdhswhkdcmtby +ddnqavbjezuxdhswhtydvqtb +ddnqavbjezuxdhswhytekpmf +ddnqavbjezuxdhswiiegilwr +ddnqavbjezuxdhswirzhrjiz +ddnqavbjezuxdhswjbkjpftg +ddnqavbjezuxdhswjgfkeemk +ddnqavbjezuxdhswjlakydfo +ddnqavbjezuxdhswjuvmcaww +ddnqavbjezuxdhswkxrqrxft +ddnqavbjezuxdhswlhcsptqa +ddnqavbjezuxdhswlqxtyrci +ddnqavbjezuxdhswmaivwnmu +ddnqavbjezuxdhswmfdwlmfy +ddnqavbjezuxdhswmoyxujxb +ddnqavbjezuxdhswmttyjiqf +ddnqavbjezuxdhswpssfqqjt +ddnqavbjezuxdhswpxngfpcx +ddnqavbjezuxdhswqcdhomua +ddnqavbjezuxdhswqlyixkgi +ddnqavbjezuxdhswqvokbhxq +ddnqavbjezuxdhswraelkfjy +ddnqavbjezuxdhswrounibuf +ddnqavbjfoazvcwhaoffckzd +ddnqavbjfoazvcwhatafwjsh +ddnqavbjfoazvcwhbhlijevx +ddnqavbjfoazvcwhbrbjscia +ddnqavbjfoazvcwhcyxowxpb +ddnqavbjfoazvcwhddnqavbj +ddnqavbjfoazvcwhdiiqutzn +ddnqavbjfoazvcwhdndrjssr +ddnqavbjfoazvcwhdwyssqez +ddnqavbjfoazvcwhegjuqmpg +ddnqavbjfoazvcwhelevflik +ddnqavbjfoazvcwheuzwoizs +ddnqavbjfoazvcwhezuxdhsw +ddnqavbjfoazvcwhfoazvcwh +ddnqavbjfoazvcwhhanbdvpq +ddnqavbjfoazvcwhhfibxuiu +ddnqavbjfoazvcwhhkdcmtby +ddnqavbjfoazvcwhhtydvqtb +ddnqavbjfoazvcwhhytekpmf +ddnqavbjfoazvcwhiiegilwr +ddnqavbjfoazvcwhirzhrjiz +ddnqavbjfoazvcwhjbkjpftg +ddnqavbjfoazvcwhjgfkeemk +ddnqavbjfoazvcwhjlakydfo +ddnqavbjfoazvcwhjuvmcaww +ddnqavbjfoazvcwhkxrqrxft +ddnqavbjfoazvcwhlhcsptqa +ddnqavbjfoazvcwhlqxtyrci +ddnqavbjfoazvcwhmaivwnmu +ddnqavbjfoazvcwhmfdwlmfy +ddnqavbjfoazvcwhmoyxujxb +ddnqavbjfoazvcwhmttyjiqf +ddnqavbjfoazvcwhpssfqqjt +ddnqavbjfoazvcwhpxngfpcx +ddnqavbjfoazvcwhqcdhomua +ddnqavbjfoazvcwhqlyixkgi +ddnqavbjfoazvcwhqvokbhxq +ddnqavbjfoazvcwhraelkfjy +ddnqavbjfoazvcwhrounibuf +ddnqavbjhanbdvpqaoffckzd +ddnqavbjhanbdvpqatafwjsh +ddnqavbjhanbdvpqbhlijevx +ddnqavbjhanbdvpqbrbjscia +ddnqavbjhanbdvpqcyxowxpb +ddnqavbjhanbdvpqddnqavbj +ddnqavbjhanbdvpqdiiqutzn +ddnqavbjhanbdvpqdndrjssr +ddnqavbjhanbdvpqdwyssqez +ddnqavbjhanbdvpqegjuqmpg +ddnqavbjhanbdvpqelevflik +ddnqavbjhanbdvpqeuzwoizs +ddnqavbjhanbdvpqezuxdhsw +ddnqavbjhanbdvpqfoazvcwh +ddnqavbjhanbdvpqhanbdvpq +ddnqavbjhanbdvpqhfibxuiu +ddnqavbjhanbdvpqhkdcmtby +ddnqavbjhanbdvpqhtydvqtb +ddnqavbjhanbdvpqhytekpmf +ddnqavbjhanbdvpqiiegilwr +ddnqavbjhanbdvpqirzhrjiz +ddnqavbjhanbdvpqjbkjpftg +ddnqavbjhanbdvpqjgfkeemk +ddnqavbjhanbdvpqjlakydfo +ddnqavbjhanbdvpqjuvmcaww +ddnqavbjhanbdvpqkxrqrxft +ddnqavbjhanbdvpqlhcsptqa +ddnqavbjhanbdvpqlqxtyrci +ddnqavbjhanbdvpqmaivwnmu +ddnqavbjhanbdvpqmfdwlmfy +ddnqavbjhanbdvpqmoyxujxb +ddnqavbjhanbdvpqmttyjiqf +ddnqavbjhanbdvpqpssfqqjt +ddnqavbjhanbdvpqpxngfpcx +ddnqavbjhanbdvpqqcdhomua +ddnqavbjhanbdvpqqlyixkgi +ddnqavbjhanbdvpqqvokbhxq +ddnqavbjhanbdvpqraelkfjy +ddnqavbjhanbdvpqrounibuf +ddnqavbjhfibxuiuaoffckzd +ddnqavbjhfibxuiuatafwjsh +ddnqavbjhfibxuiubhlijevx +ddnqavbjhfibxuiubrbjscia +ddnqavbjhfibxuiucyxowxpb +ddnqavbjhfibxuiuddnqavbj +ddnqavbjhfibxuiudiiqutzn +ddnqavbjhfibxuiudndrjssr +ddnqavbjhfibxuiudwyssqez +ddnqavbjhfibxuiuegjuqmpg +ddnqavbjhfibxuiuelevflik +ddnqavbjhfibxuiueuzwoizs +ddnqavbjhfibxuiuezuxdhsw +ddnqavbjhfibxuiufoazvcwh +ddnqavbjhfibxuiuhanbdvpq +ddnqavbjhfibxuiuhfibxuiu +ddnqavbjhfibxuiuhkdcmtby +ddnqavbjhfibxuiuhtydvqtb +ddnqavbjhfibxuiuhytekpmf +ddnqavbjhfibxuiuiiegilwr +ddnqavbjhfibxuiuirzhrjiz +ddnqavbjhfibxuiujbkjpftg +ddnqavbjhfibxuiujgfkeemk +ddnqavbjhfibxuiujlakydfo +ddnqavbjhfibxuiujuvmcaww +ddnqavbjhfibxuiukxrqrxft +ddnqavbjhfibxuiulhcsptqa +ddnqavbjhfibxuiulqxtyrci +ddnqavbjhfibxuiumaivwnmu +ddnqavbjhfibxuiumfdwlmfy +ddnqavbjhfibxuiumoyxujxb +ddnqavbjhfibxuiumttyjiqf +ddnqavbjhfibxuiupssfqqjt +ddnqavbjhfibxuiupxngfpcx +ddnqavbjhfibxuiuqcdhomua +ddnqavbjhfibxuiuqlyixkgi +ddnqavbjhfibxuiuqvokbhxq +ddnqavbjhfibxuiuraelkfjy +ddnqavbjhfibxuiurounibuf +ddnqavbjhkdcmtbyaoffckzd +ddnqavbjhkdcmtbyatafwjsh +ddnqavbjhkdcmtbybhlijevx +ddnqavbjhkdcmtbybrbjscia +ddnqavbjhkdcmtbycyxowxpb +ddnqavbjhkdcmtbyddnqavbj +ddnqavbjhkdcmtbydiiqutzn +ddnqavbjhkdcmtbydndrjssr +ddnqavbjhkdcmtbydwyssqez +ddnqavbjhkdcmtbyegjuqmpg +ddnqavbjhkdcmtbyelevflik +ddnqavbjhkdcmtbyeuzwoizs +ddnqavbjhkdcmtbyezuxdhsw +ddnqavbjhkdcmtbyfoazvcwh +ddnqavbjhkdcmtbyhanbdvpq +ddnqavbjhkdcmtbyhfibxuiu +ddnqavbjhkdcmtbyhkdcmtby +ddnqavbjhkdcmtbyhtydvqtb +ddnqavbjhkdcmtbyhytekpmf +ddnqavbjhkdcmtbyiiegilwr +ddnqavbjhkdcmtbyirzhrjiz +ddnqavbjhkdcmtbyjbkjpftg +ddnqavbjhkdcmtbyjgfkeemk +ddnqavbjhkdcmtbyjlakydfo +ddnqavbjhkdcmtbyjuvmcaww +ddnqavbjhkdcmtbykxrqrxft +ddnqavbjhkdcmtbylhcsptqa +ddnqavbjhkdcmtbylqxtyrci +ddnqavbjhkdcmtbymaivwnmu +ddnqavbjhkdcmtbymfdwlmfy +ddnqavbjhkdcmtbymoyxujxb +ddnqavbjhkdcmtbymttyjiqf +ddnqavbjhkdcmtbypssfqqjt +ddnqavbjhkdcmtbypxngfpcx +ddnqavbjhkdcmtbyqcdhomua +ddnqavbjhkdcmtbyqlyixkgi +ddnqavbjhkdcmtbyqvokbhxq +ddnqavbjhkdcmtbyraelkfjy +ddnqavbjhkdcmtbyrounibuf +ddnqavbjhtydvqtbaoffckzd +ddnqavbjhtydvqtbatafwjsh +ddnqavbjhtydvqtbbhlijevx +ddnqavbjhtydvqtbbrbjscia +ddnqavbjhtydvqtbcyxowxpb +ddnqavbjhtydvqtbddnqavbj +ddnqavbjhtydvqtbdiiqutzn +ddnqavbjhtydvqtbdndrjssr +ddnqavbjhtydvqtbdwyssqez +ddnqavbjhtydvqtbegjuqmpg +ddnqavbjhtydvqtbelevflik +ddnqavbjhtydvqtbeuzwoizs +ddnqavbjhtydvqtbezuxdhsw +ddnqavbjhtydvqtbfoazvcwh +ddnqavbjhtydvqtbhanbdvpq +ddnqavbjhtydvqtbhfibxuiu +ddnqavbjhtydvqtbhkdcmtby +ddnqavbjhtydvqtbhtydvqtb +ddnqavbjhtydvqtbhytekpmf +ddnqavbjhtydvqtbiiegilwr +ddnqavbjhtydvqtbirzhrjiz +ddnqavbjhtydvqtbjbkjpftg +ddnqavbjhtydvqtbjgfkeemk +ddnqavbjhtydvqtbjlakydfo +ddnqavbjhtydvqtbjuvmcaww +ddnqavbjhtydvqtbkxrqrxft +ddnqavbjhtydvqtblhcsptqa +ddnqavbjhtydvqtblqxtyrci +ddnqavbjhtydvqtbmaivwnmu +ddnqavbjhtydvqtbmfdwlmfy +ddnqavbjhtydvqtbmoyxujxb +ddnqavbjhtydvqtbmttyjiqf +ddnqavbjhtydvqtbpssfqqjt +ddnqavbjhtydvqtbpxngfpcx +ddnqavbjhtydvqtbqcdhomua +ddnqavbjhtydvqtbqlyixkgi +ddnqavbjhtydvqtbqvokbhxq +ddnqavbjhtydvqtbraelkfjy +ddnqavbjhtydvqtbrounibuf +ddnqavbjhytekpmfaoffckzd +ddnqavbjhytekpmfatafwjsh +ddnqavbjhytekpmfbhlijevx +ddnqavbjhytekpmfbrbjscia +ddnqavbjhytekpmfcyxowxpb +ddnqavbjhytekpmfddnqavbj +ddnqavbjhytekpmfdiiqutzn +ddnqavbjhytekpmfdndrjssr +ddnqavbjhytekpmfdwyssqez +ddnqavbjhytekpmfegjuqmpg +ddnqavbjhytekpmfelevflik +ddnqavbjhytekpmfeuzwoizs +ddnqavbjhytekpmfezuxdhsw +ddnqavbjhytekpmffoazvcwh +ddnqavbjhytekpmfhanbdvpq +ddnqavbjhytekpmfhfibxuiu +ddnqavbjhytekpmfhkdcmtby +ddnqavbjhytekpmfhtydvqtb +ddnqavbjhytekpmfhytekpmf +ddnqavbjhytekpmfiiegilwr +ddnqavbjhytekpmfirzhrjiz +ddnqavbjhytekpmfjbkjpftg +ddnqavbjhytekpmfjgfkeemk +ddnqavbjhytekpmfjlakydfo +ddnqavbjhytekpmfjuvmcaww +ddnqavbjhytekpmfkxrqrxft +ddnqavbjhytekpmflhcsptqa +ddnqavbjhytekpmflqxtyrci +ddnqavbjhytekpmfmaivwnmu +ddnqavbjhytekpmfmfdwlmfy +ddnqavbjhytekpmfmoyxujxb +ddnqavbjhytekpmfmttyjiqf +ddnqavbjhytekpmfpssfqqjt +ddnqavbjhytekpmfpxngfpcx +ddnqavbjhytekpmfqcdhomua +ddnqavbjhytekpmfqlyixkgi +ddnqavbjhytekpmfqvokbhxq +ddnqavbjhytekpmfraelkfjy +ddnqavbjhytekpmfrounibuf +ddnqavbjiiegilwraoffckzd +ddnqavbjiiegilwratafwjsh +ddnqavbjiiegilwrbhlijevx +ddnqavbjiiegilwrbrbjscia +ddnqavbjiiegilwrcyxowxpb +ddnqavbjiiegilwrddnqavbj +ddnqavbjiiegilwrdiiqutzn +ddnqavbjiiegilwrdndrjssr +ddnqavbjiiegilwrdwyssqez +ddnqavbjiiegilwregjuqmpg +ddnqavbjiiegilwrelevflik +ddnqavbjiiegilwreuzwoizs +ddnqavbjiiegilwrezuxdhsw +ddnqavbjiiegilwrfoazvcwh +ddnqavbjiiegilwrhanbdvpq +ddnqavbjiiegilwrhfibxuiu +ddnqavbjiiegilwrhkdcmtby +ddnqavbjiiegilwrhtydvqtb +ddnqavbjiiegilwrhytekpmf +ddnqavbjiiegilwriiegilwr +ddnqavbjiiegilwrirzhrjiz +ddnqavbjiiegilwrjbkjpftg +ddnqavbjiiegilwrjgfkeemk +ddnqavbjiiegilwrjlakydfo +ddnqavbjiiegilwrjuvmcaww +ddnqavbjiiegilwrkxrqrxft +ddnqavbjiiegilwrlhcsptqa +ddnqavbjiiegilwrlqxtyrci +ddnqavbjiiegilwrmaivwnmu +ddnqavbjiiegilwrmfdwlmfy +ddnqavbjiiegilwrmoyxujxb +ddnqavbjiiegilwrmttyjiqf +ddnqavbjiiegilwrpssfqqjt +ddnqavbjiiegilwrpxngfpcx +ddnqavbjiiegilwrqcdhomua +ddnqavbjiiegilwrqlyixkgi +ddnqavbjiiegilwrqvokbhxq +ddnqavbjiiegilwrraelkfjy +ddnqavbjiiegilwrrounibuf +ddnqavbjirzhrjizaoffckzd +ddnqavbjirzhrjizatafwjsh +ddnqavbjirzhrjizbhlijevx +ddnqavbjirzhrjizbrbjscia +ddnqavbjirzhrjizcyxowxpb +ddnqavbjirzhrjizddnqavbj +ddnqavbjirzhrjizdiiqutzn +ddnqavbjirzhrjizdndrjssr +ddnqavbjirzhrjizdwyssqez +ddnqavbjirzhrjizegjuqmpg +ddnqavbjirzhrjizelevflik +ddnqavbjirzhrjizeuzwoizs +ddnqavbjirzhrjizezuxdhsw +ddnqavbjirzhrjizfoazvcwh +ddnqavbjirzhrjizhanbdvpq +ddnqavbjirzhrjizhfibxuiu +ddnqavbjirzhrjizhkdcmtby +ddnqavbjirzhrjizhtydvqtb +ddnqavbjirzhrjizhytekpmf +ddnqavbjirzhrjiziiegilwr +ddnqavbjirzhrjizirzhrjiz +ddnqavbjirzhrjizjbkjpftg +ddnqavbjirzhrjizjgfkeemk +ddnqavbjirzhrjizjlakydfo +ddnqavbjirzhrjizjuvmcaww +ddnqavbjirzhrjizkxrqrxft +ddnqavbjirzhrjizlhcsptqa +ddnqavbjirzhrjizlqxtyrci +ddnqavbjirzhrjizmaivwnmu +ddnqavbjirzhrjizmfdwlmfy +ddnqavbjirzhrjizmoyxujxb +ddnqavbjirzhrjizmttyjiqf +ddnqavbjirzhrjizpssfqqjt +ddnqavbjirzhrjizpxngfpcx +ddnqavbjirzhrjizqcdhomua +ddnqavbjirzhrjizqlyixkgi +ddnqavbjirzhrjizqvokbhxq +ddnqavbjirzhrjizraelkfjy +ddnqavbjirzhrjizrounibuf +ddnqavbjjbkjpftgaoffckzd +ddnqavbjjbkjpftgatafwjsh +ddnqavbjjbkjpftgbhlijevx +ddnqavbjjbkjpftgbrbjscia +ddnqavbjjbkjpftgcyxowxpb +ddnqavbjjbkjpftgddnqavbj +ddnqavbjjbkjpftgdiiqutzn +ddnqavbjjbkjpftgdndrjssr +ddnqavbjjbkjpftgdwyssqez +ddnqavbjjbkjpftgegjuqmpg +ddnqavbjjbkjpftgelevflik +ddnqavbjjbkjpftgeuzwoizs +ddnqavbjjbkjpftgezuxdhsw +ddnqavbjjbkjpftgfoazvcwh +ddnqavbjjbkjpftghanbdvpq +ddnqavbjjbkjpftghfibxuiu +ddnqavbjjbkjpftghkdcmtby +ddnqavbjjbkjpftghtydvqtb +ddnqavbjjbkjpftghytekpmf +ddnqavbjjbkjpftgiiegilwr +ddnqavbjjbkjpftgirzhrjiz +ddnqavbjjbkjpftgjbkjpftg +ddnqavbjjbkjpftgjgfkeemk +ddnqavbjjbkjpftgjlakydfo +ddnqavbjjbkjpftgjuvmcaww +ddnqavbjjbkjpftgkxrqrxft +ddnqavbjjbkjpftglhcsptqa +ddnqavbjjbkjpftglqxtyrci +ddnqavbjjbkjpftgmaivwnmu +ddnqavbjjbkjpftgmfdwlmfy +ddnqavbjjbkjpftgmoyxujxb +ddnqavbjjbkjpftgmttyjiqf +ddnqavbjjbkjpftgpssfqqjt +ddnqavbjjbkjpftgpxngfpcx +ddnqavbjjbkjpftgqcdhomua +ddnqavbjjbkjpftgqlyixkgi +ddnqavbjjbkjpftgqvokbhxq +ddnqavbjjbkjpftgraelkfjy +ddnqavbjjbkjpftgrounibuf +ddnqavbjjgfkeemkaoffckzd +ddnqavbjjgfkeemkatafwjsh +ddnqavbjjgfkeemkbhlijevx +ddnqavbjjgfkeemkbrbjscia +ddnqavbjjgfkeemkcyxowxpb +ddnqavbjjgfkeemkddnqavbj +ddnqavbjjgfkeemkdiiqutzn +ddnqavbjjgfkeemkdndrjssr +ddnqavbjjgfkeemkdwyssqez +ddnqavbjjgfkeemkegjuqmpg +ddnqavbjjgfkeemkelevflik +ddnqavbjjgfkeemkeuzwoizs +ddnqavbjjgfkeemkezuxdhsw +ddnqavbjjgfkeemkfoazvcwh +ddnqavbjjgfkeemkhanbdvpq +ddnqavbjjgfkeemkhfibxuiu +ddnqavbjjgfkeemkhkdcmtby +ddnqavbjjgfkeemkhtydvqtb +ddnqavbjjgfkeemkhytekpmf +ddnqavbjjgfkeemkiiegilwr +ddnqavbjjgfkeemkirzhrjiz +ddnqavbjjgfkeemkjbkjpftg +ddnqavbjjgfkeemkjgfkeemk +ddnqavbjjgfkeemkjlakydfo +ddnqavbjjgfkeemkjuvmcaww +ddnqavbjjgfkeemkkxrqrxft +ddnqavbjjgfkeemklhcsptqa +ddnqavbjjgfkeemklqxtyrci +ddnqavbjjgfkeemkmaivwnmu +ddnqavbjjgfkeemkmfdwlmfy +ddnqavbjjgfkeemkmoyxujxb +ddnqavbjjgfkeemkmttyjiqf +ddnqavbjjgfkeemkpssfqqjt +ddnqavbjjgfkeemkpxngfpcx +ddnqavbjjgfkeemkqcdhomua +ddnqavbjjgfkeemkqlyixkgi +ddnqavbjjgfkeemkqvokbhxq +ddnqavbjjgfkeemkraelkfjy +ddnqavbjjgfkeemkrounibuf +ddnqavbjjlakydfoaoffckzd +ddnqavbjjlakydfoatafwjsh +ddnqavbjjlakydfobhlijevx +ddnqavbjjlakydfobrbjscia +ddnqavbjjlakydfocyxowxpb +ddnqavbjjlakydfoddnqavbj +ddnqavbjjlakydfodiiqutzn +ddnqavbjjlakydfodndrjssr +ddnqavbjjlakydfodwyssqez +ddnqavbjjlakydfoegjuqmpg +ddnqavbjjlakydfoelevflik +ddnqavbjjlakydfoeuzwoizs +ddnqavbjjlakydfoezuxdhsw +ddnqavbjjlakydfofoazvcwh +ddnqavbjjlakydfohanbdvpq +ddnqavbjjlakydfohfibxuiu +ddnqavbjjlakydfohkdcmtby +ddnqavbjjlakydfohtydvqtb +ddnqavbjjlakydfohytekpmf +ddnqavbjjlakydfoiiegilwr +ddnqavbjjlakydfoirzhrjiz +ddnqavbjjlakydfojbkjpftg +ddnqavbjjlakydfojgfkeemk +ddnqavbjjlakydfojlakydfo +ddnqavbjjlakydfojuvmcaww +ddnqavbjjlakydfokxrqrxft +ddnqavbjjlakydfolhcsptqa +ddnqavbjjlakydfolqxtyrci +ddnqavbjjlakydfomaivwnmu +ddnqavbjjlakydfomfdwlmfy +ddnqavbjjlakydfomoyxujxb +ddnqavbjjlakydfomttyjiqf +ddnqavbjjlakydfopssfqqjt +ddnqavbjjlakydfopxngfpcx +ddnqavbjjlakydfoqcdhomua +ddnqavbjjlakydfoqlyixkgi +ddnqavbjjlakydfoqvokbhxq +ddnqavbjjlakydforaelkfjy +ddnqavbjjlakydforounibuf +ddnqavbjjuvmcawwaoffckzd +ddnqavbjjuvmcawwatafwjsh +ddnqavbjjuvmcawwbhlijevx +ddnqavbjjuvmcawwbrbjscia +ddnqavbjjuvmcawwcyxowxpb +ddnqavbjjuvmcawwddnqavbj +ddnqavbjjuvmcawwdiiqutzn +ddnqavbjjuvmcawwdndrjssr +ddnqavbjjuvmcawwdwyssqez +ddnqavbjjuvmcawwegjuqmpg +ddnqavbjjuvmcawwelevflik +ddnqavbjjuvmcawweuzwoizs +ddnqavbjjuvmcawwezuxdhsw +ddnqavbjjuvmcawwfoazvcwh +ddnqavbjjuvmcawwhanbdvpq +ddnqavbjjuvmcawwhfibxuiu +ddnqavbjjuvmcawwhkdcmtby +ddnqavbjjuvmcawwhtydvqtb +ddnqavbjjuvmcawwhytekpmf +ddnqavbjjuvmcawwiiegilwr +ddnqavbjjuvmcawwirzhrjiz +ddnqavbjjuvmcawwjbkjpftg +ddnqavbjjuvmcawwjgfkeemk +ddnqavbjjuvmcawwjlakydfo +ddnqavbjjuvmcawwjuvmcaww +ddnqavbjjuvmcawwkxrqrxft +ddnqavbjjuvmcawwlhcsptqa +ddnqavbjjuvmcawwlqxtyrci +ddnqavbjjuvmcawwmaivwnmu +ddnqavbjjuvmcawwmfdwlmfy +ddnqavbjjuvmcawwmoyxujxb +ddnqavbjjuvmcawwmttyjiqf +ddnqavbjjuvmcawwpssfqqjt +ddnqavbjjuvmcawwpxngfpcx +ddnqavbjjuvmcawwqcdhomua +ddnqavbjjuvmcawwqlyixkgi +ddnqavbjjuvmcawwqvokbhxq +ddnqavbjjuvmcawwraelkfjy +ddnqavbjjuvmcawwrounibuf +ddnqavbjkxrqrxftaoffckzd +ddnqavbjkxrqrxftatafwjsh +ddnqavbjkxrqrxftbhlijevx +ddnqavbjkxrqrxftbrbjscia +ddnqavbjkxrqrxftcyxowxpb +ddnqavbjkxrqrxftddnqavbj +ddnqavbjkxrqrxftdiiqutzn +ddnqavbjkxrqrxftdndrjssr +ddnqavbjkxrqrxftdwyssqez +ddnqavbjkxrqrxftegjuqmpg +ddnqavbjkxrqrxftelevflik +ddnqavbjkxrqrxfteuzwoizs +ddnqavbjkxrqrxftezuxdhsw +ddnqavbjkxrqrxftfoazvcwh +ddnqavbjkxrqrxfthanbdvpq +ddnqavbjkxrqrxfthfibxuiu +ddnqavbjkxrqrxfthkdcmtby +ddnqavbjkxrqrxfthtydvqtb +ddnqavbjkxrqrxfthytekpmf +ddnqavbjkxrqrxftiiegilwr +ddnqavbjkxrqrxftirzhrjiz +ddnqavbjkxrqrxftjbkjpftg +ddnqavbjkxrqrxftjgfkeemk +ddnqavbjkxrqrxftjlakydfo +ddnqavbjkxrqrxftjuvmcaww +ddnqavbjkxrqrxftkxrqrxft +ddnqavbjkxrqrxftlhcsptqa +ddnqavbjkxrqrxftlqxtyrci +ddnqavbjkxrqrxftmaivwnmu +ddnqavbjkxrqrxftmfdwlmfy +ddnqavbjkxrqrxftmoyxujxb +ddnqavbjkxrqrxftmttyjiqf +ddnqavbjkxrqrxftpssfqqjt +ddnqavbjkxrqrxftpxngfpcx +ddnqavbjkxrqrxftqcdhomua +ddnqavbjkxrqrxftqlyixkgi +ddnqavbjkxrqrxftqvokbhxq +ddnqavbjkxrqrxftraelkfjy +ddnqavbjkxrqrxftrounibuf +ddnqavbjlhcsptqaaoffckzd +ddnqavbjlhcsptqaatafwjsh +ddnqavbjlhcsptqabhlijevx +ddnqavbjlhcsptqabrbjscia +ddnqavbjlhcsptqacyxowxpb +ddnqavbjlhcsptqaddnqavbj +ddnqavbjlhcsptqadiiqutzn +ddnqavbjlhcsptqadndrjssr +ddnqavbjlhcsptqadwyssqez +ddnqavbjlhcsptqaegjuqmpg +ddnqavbjlhcsptqaelevflik +ddnqavbjlhcsptqaeuzwoizs +ddnqavbjlhcsptqaezuxdhsw +ddnqavbjlhcsptqafoazvcwh +ddnqavbjlhcsptqahanbdvpq +ddnqavbjlhcsptqahfibxuiu +ddnqavbjlhcsptqahkdcmtby +ddnqavbjlhcsptqahtydvqtb +ddnqavbjlhcsptqahytekpmf +ddnqavbjlhcsptqaiiegilwr +ddnqavbjlhcsptqairzhrjiz +ddnqavbjlhcsptqajbkjpftg +ddnqavbjlhcsptqajgfkeemk +ddnqavbjlhcsptqajlakydfo +ddnqavbjlhcsptqajuvmcaww +ddnqavbjlhcsptqakxrqrxft +ddnqavbjlhcsptqalhcsptqa +ddnqavbjlhcsptqalqxtyrci +ddnqavbjlhcsptqamaivwnmu +ddnqavbjlhcsptqamfdwlmfy +ddnqavbjlhcsptqamoyxujxb +ddnqavbjlhcsptqamttyjiqf +ddnqavbjlhcsptqapssfqqjt +ddnqavbjlhcsptqapxngfpcx +ddnqavbjlhcsptqaqcdhomua +ddnqavbjlhcsptqaqlyixkgi +ddnqavbjlhcsptqaqvokbhxq +ddnqavbjlhcsptqaraelkfjy +ddnqavbjlhcsptqarounibuf +ddnqavbjlqxtyrciaoffckzd +ddnqavbjlqxtyrciatafwjsh +ddnqavbjlqxtyrcibhlijevx +ddnqavbjlqxtyrcibrbjscia +ddnqavbjlqxtyrcicyxowxpb +ddnqavbjlqxtyrciddnqavbj +ddnqavbjlqxtyrcidiiqutzn +ddnqavbjlqxtyrcidndrjssr +ddnqavbjlqxtyrcidwyssqez +ddnqavbjlqxtyrciegjuqmpg +ddnqavbjlqxtyrcielevflik +ddnqavbjlqxtyrcieuzwoizs +ddnqavbjlqxtyrciezuxdhsw +ddnqavbjlqxtyrcifoazvcwh +ddnqavbjlqxtyrcihanbdvpq +ddnqavbjlqxtyrcihfibxuiu +ddnqavbjlqxtyrcihkdcmtby +ddnqavbjlqxtyrcihtydvqtb +ddnqavbjlqxtyrcihytekpmf +ddnqavbjlqxtyrciiiegilwr +ddnqavbjlqxtyrciirzhrjiz +ddnqavbjlqxtyrcijbkjpftg +ddnqavbjlqxtyrcijgfkeemk +ddnqavbjlqxtyrcijlakydfo +ddnqavbjlqxtyrcijuvmcaww +ddnqavbjlqxtyrcikxrqrxft +ddnqavbjlqxtyrcilhcsptqa +ddnqavbjlqxtyrcilqxtyrci +ddnqavbjlqxtyrcimaivwnmu +ddnqavbjlqxtyrcimfdwlmfy +ddnqavbjlqxtyrcimoyxujxb +ddnqavbjlqxtyrcimttyjiqf +ddnqavbjlqxtyrcipssfqqjt +ddnqavbjlqxtyrcipxngfpcx +ddnqavbjlqxtyrciqcdhomua +ddnqavbjlqxtyrciqlyixkgi +ddnqavbjlqxtyrciqvokbhxq +ddnqavbjlqxtyrciraelkfjy +ddnqavbjlqxtyrcirounibuf +ddnqavbjmaivwnmuaoffckzd +ddnqavbjmaivwnmuatafwjsh +ddnqavbjmaivwnmubhlijevx +ddnqavbjmaivwnmubrbjscia +ddnqavbjmaivwnmucyxowxpb +ddnqavbjmaivwnmuddnqavbj +ddnqavbjmaivwnmudiiqutzn +ddnqavbjmaivwnmudndrjssr +ddnqavbjmaivwnmudwyssqez +ddnqavbjmaivwnmuegjuqmpg +ddnqavbjmaivwnmuelevflik +ddnqavbjmaivwnmueuzwoizs +ddnqavbjmaivwnmuezuxdhsw +ddnqavbjmaivwnmufoazvcwh +ddnqavbjmaivwnmuhanbdvpq +ddnqavbjmaivwnmuhfibxuiu +ddnqavbjmaivwnmuhkdcmtby +ddnqavbjmaivwnmuhtydvqtb +ddnqavbjmaivwnmuhytekpmf +ddnqavbjmaivwnmuiiegilwr +ddnqavbjmaivwnmuirzhrjiz +ddnqavbjmaivwnmujbkjpftg +ddnqavbjmaivwnmujgfkeemk +ddnqavbjmaivwnmujlakydfo +ddnqavbjmaivwnmujuvmcaww +ddnqavbjmaivwnmukxrqrxft +ddnqavbjmaivwnmulhcsptqa +ddnqavbjmaivwnmulqxtyrci +ddnqavbjmaivwnmumaivwnmu +ddnqavbjmaivwnmumfdwlmfy +ddnqavbjmaivwnmumoyxujxb +ddnqavbjmaivwnmumttyjiqf +ddnqavbjmaivwnmupssfqqjt +ddnqavbjmaivwnmupxngfpcx +ddnqavbjmaivwnmuqcdhomua +ddnqavbjmaivwnmuqlyixkgi +ddnqavbjmaivwnmuqvokbhxq +ddnqavbjmaivwnmuraelkfjy +ddnqavbjmaivwnmurounibuf +ddnqavbjmfdwlmfyaoffckzd +ddnqavbjmfdwlmfyatafwjsh +ddnqavbjmfdwlmfybhlijevx +ddnqavbjmfdwlmfybrbjscia +ddnqavbjmfdwlmfycyxowxpb +ddnqavbjmfdwlmfyddnqavbj +ddnqavbjmfdwlmfydiiqutzn +ddnqavbjmfdwlmfydndrjssr +ddnqavbjmfdwlmfydwyssqez +ddnqavbjmfdwlmfyegjuqmpg +ddnqavbjmfdwlmfyelevflik +ddnqavbjmfdwlmfyeuzwoizs +ddnqavbjmfdwlmfyezuxdhsw +ddnqavbjmfdwlmfyfoazvcwh +ddnqavbjmfdwlmfyhanbdvpq +ddnqavbjmfdwlmfyhfibxuiu +ddnqavbjmfdwlmfyhkdcmtby +ddnqavbjmfdwlmfyhtydvqtb +ddnqavbjmfdwlmfyhytekpmf +ddnqavbjmfdwlmfyiiegilwr +ddnqavbjmfdwlmfyirzhrjiz +ddnqavbjmfdwlmfyjbkjpftg +ddnqavbjmfdwlmfyjgfkeemk +ddnqavbjmfdwlmfyjlakydfo +ddnqavbjmfdwlmfyjuvmcaww +ddnqavbjmfdwlmfykxrqrxft +ddnqavbjmfdwlmfylhcsptqa +ddnqavbjmfdwlmfylqxtyrci +ddnqavbjmfdwlmfymaivwnmu +ddnqavbjmfdwlmfymfdwlmfy +ddnqavbjmfdwlmfymoyxujxb +ddnqavbjmfdwlmfymttyjiqf +ddnqavbjmfdwlmfypssfqqjt +ddnqavbjmfdwlmfypxngfpcx +ddnqavbjmfdwlmfyqcdhomua +ddnqavbjmfdwlmfyqlyixkgi +ddnqavbjmfdwlmfyqvokbhxq +ddnqavbjmfdwlmfyraelkfjy +ddnqavbjmfdwlmfyrounibuf +ddnqavbjmoyxujxbaoffckzd +ddnqavbjmoyxujxbatafwjsh +ddnqavbjmoyxujxbbhlijevx +ddnqavbjmoyxujxbbrbjscia +ddnqavbjmoyxujxbcyxowxpb +ddnqavbjmoyxujxbddnqavbj +ddnqavbjmoyxujxbdiiqutzn +ddnqavbjmoyxujxbdndrjssr +ddnqavbjmoyxujxbdwyssqez +ddnqavbjmoyxujxbegjuqmpg +ddnqavbjmoyxujxbelevflik +ddnqavbjmoyxujxbeuzwoizs +ddnqavbjmoyxujxbezuxdhsw +ddnqavbjmoyxujxbfoazvcwh +ddnqavbjmoyxujxbhanbdvpq +ddnqavbjmoyxujxbhfibxuiu +ddnqavbjmoyxujxbhkdcmtby +ddnqavbjmoyxujxbhtydvqtb +ddnqavbjmoyxujxbhytekpmf +ddnqavbjmoyxujxbiiegilwr +ddnqavbjmoyxujxbirzhrjiz +ddnqavbjmoyxujxbjbkjpftg +ddnqavbjmoyxujxbjgfkeemk +ddnqavbjmoyxujxbjlakydfo +ddnqavbjmoyxujxbjuvmcaww +ddnqavbjmoyxujxbkxrqrxft +ddnqavbjmoyxujxblhcsptqa +ddnqavbjmoyxujxblqxtyrci +ddnqavbjmoyxujxbmaivwnmu +ddnqavbjmoyxujxbmfdwlmfy +ddnqavbjmoyxujxbmoyxujxb +ddnqavbjmoyxujxbmttyjiqf +ddnqavbjmoyxujxbpssfqqjt +ddnqavbjmoyxujxbpxngfpcx +ddnqavbjmoyxujxbqcdhomua +ddnqavbjmoyxujxbqlyixkgi +ddnqavbjmoyxujxbqvokbhxq +ddnqavbjmoyxujxbraelkfjy +ddnqavbjmoyxujxbrounibuf +ddnqavbjmttyjiqfaoffckzd +ddnqavbjmttyjiqfatafwjsh +ddnqavbjmttyjiqfbhlijevx +ddnqavbjmttyjiqfbrbjscia +ddnqavbjmttyjiqfcyxowxpb +ddnqavbjmttyjiqfddnqavbj +ddnqavbjmttyjiqfdiiqutzn +ddnqavbjmttyjiqfdndrjssr +ddnqavbjmttyjiqfdwyssqez +ddnqavbjmttyjiqfegjuqmpg +ddnqavbjmttyjiqfelevflik +ddnqavbjmttyjiqfeuzwoizs +ddnqavbjmttyjiqfezuxdhsw +ddnqavbjmttyjiqffoazvcwh +ddnqavbjmttyjiqfhanbdvpq +ddnqavbjmttyjiqfhfibxuiu +ddnqavbjmttyjiqfhkdcmtby +ddnqavbjmttyjiqfhtydvqtb +ddnqavbjmttyjiqfhytekpmf +ddnqavbjmttyjiqfiiegilwr +ddnqavbjmttyjiqfirzhrjiz +ddnqavbjmttyjiqfjbkjpftg +ddnqavbjmttyjiqfjgfkeemk +ddnqavbjmttyjiqfjlakydfo +ddnqavbjmttyjiqfjuvmcaww +ddnqavbjmttyjiqfkxrqrxft +ddnqavbjmttyjiqflhcsptqa +ddnqavbjmttyjiqflqxtyrci +ddnqavbjmttyjiqfmaivwnmu +ddnqavbjmttyjiqfmfdwlmfy +ddnqavbjmttyjiqfmoyxujxb +ddnqavbjmttyjiqfmttyjiqf +ddnqavbjmttyjiqfpssfqqjt +ddnqavbjmttyjiqfpxngfpcx +ddnqavbjmttyjiqfqcdhomua +ddnqavbjmttyjiqfqlyixkgi +ddnqavbjmttyjiqfqvokbhxq +ddnqavbjmttyjiqfraelkfjy +ddnqavbjmttyjiqfrounibuf +ddnqavbjpssfqqjtaoffckzd +ddnqavbjpssfqqjtatafwjsh +ddnqavbjpssfqqjtbhlijevx +ddnqavbjpssfqqjtbrbjscia +ddnqavbjpssfqqjtcyxowxpb +ddnqavbjpssfqqjtddnqavbj +ddnqavbjpssfqqjtdiiqutzn +ddnqavbjpssfqqjtdndrjssr +ddnqavbjpssfqqjtdwyssqez +ddnqavbjpssfqqjtegjuqmpg +ddnqavbjpssfqqjtelevflik +ddnqavbjpssfqqjteuzwoizs +ddnqavbjpssfqqjtezuxdhsw +ddnqavbjpssfqqjtfoazvcwh +ddnqavbjpssfqqjthanbdvpq +ddnqavbjpssfqqjthfibxuiu +ddnqavbjpssfqqjthkdcmtby +ddnqavbjpssfqqjthtydvqtb +ddnqavbjpssfqqjthytekpmf +ddnqavbjpssfqqjtiiegilwr +ddnqavbjpssfqqjtirzhrjiz +ddnqavbjpssfqqjtjbkjpftg +ddnqavbjpssfqqjtjgfkeemk +ddnqavbjpssfqqjtjlakydfo +ddnqavbjpssfqqjtjuvmcaww +ddnqavbjpssfqqjtkxrqrxft +ddnqavbjpssfqqjtlhcsptqa +ddnqavbjpssfqqjtlqxtyrci +ddnqavbjpssfqqjtmaivwnmu +ddnqavbjpssfqqjtmfdwlmfy +ddnqavbjpssfqqjtmoyxujxb +ddnqavbjpssfqqjtmttyjiqf +ddnqavbjpssfqqjtpssfqqjt +ddnqavbjpssfqqjtpxngfpcx +ddnqavbjpssfqqjtqcdhomua +ddnqavbjpssfqqjtqlyixkgi +ddnqavbjpssfqqjtqvokbhxq +ddnqavbjpssfqqjtraelkfjy +ddnqavbjpssfqqjtrounibuf +ddnqavbjpxngfpcxaoffckzd +ddnqavbjpxngfpcxatafwjsh +ddnqavbjpxngfpcxbhlijevx +ddnqavbjpxngfpcxbrbjscia +ddnqavbjpxngfpcxcyxowxpb +ddnqavbjpxngfpcxddnqavbj +ddnqavbjpxngfpcxdiiqutzn +ddnqavbjpxngfpcxdndrjssr +ddnqavbjpxngfpcxdwyssqez +ddnqavbjpxngfpcxegjuqmpg +ddnqavbjpxngfpcxelevflik +ddnqavbjpxngfpcxeuzwoizs +ddnqavbjpxngfpcxezuxdhsw +ddnqavbjpxngfpcxfoazvcwh +ddnqavbjpxngfpcxhanbdvpq +ddnqavbjpxngfpcxhfibxuiu +ddnqavbjpxngfpcxhkdcmtby +ddnqavbjpxngfpcxhtydvqtb +ddnqavbjpxngfpcxhytekpmf +ddnqavbjpxngfpcxiiegilwr +ddnqavbjpxngfpcxirzhrjiz +ddnqavbjpxngfpcxjbkjpftg +ddnqavbjpxngfpcxjgfkeemk +ddnqavbjpxngfpcxjlakydfo +ddnqavbjpxngfpcxjuvmcaww +ddnqavbjpxngfpcxkxrqrxft +ddnqavbjpxngfpcxlhcsptqa +ddnqavbjpxngfpcxlqxtyrci +ddnqavbjpxngfpcxmaivwnmu +ddnqavbjpxngfpcxmfdwlmfy +ddnqavbjpxngfpcxmoyxujxb +ddnqavbjpxngfpcxmttyjiqf +ddnqavbjpxngfpcxpssfqqjt +ddnqavbjpxngfpcxpxngfpcx +ddnqavbjpxngfpcxqcdhomua +ddnqavbjpxngfpcxqlyixkgi +ddnqavbjpxngfpcxqvokbhxq +ddnqavbjpxngfpcxraelkfjy +ddnqavbjpxngfpcxrounibuf +ddnqavbjqcdhomuaaoffckzd +ddnqavbjqcdhomuaatafwjsh +ddnqavbjqcdhomuabhlijevx +ddnqavbjqcdhomuabrbjscia +ddnqavbjqcdhomuacyxowxpb +ddnqavbjqcdhomuaddnqavbj +ddnqavbjqcdhomuadiiqutzn +ddnqavbjqcdhomuadndrjssr +ddnqavbjqcdhomuadwyssqez +ddnqavbjqcdhomuaegjuqmpg +ddnqavbjqcdhomuaelevflik +ddnqavbjqcdhomuaeuzwoizs +ddnqavbjqcdhomuaezuxdhsw +ddnqavbjqcdhomuafoazvcwh +ddnqavbjqcdhomuahanbdvpq +ddnqavbjqcdhomuahfibxuiu +ddnqavbjqcdhomuahkdcmtby +ddnqavbjqcdhomuahtydvqtb +ddnqavbjqcdhomuahytekpmf +ddnqavbjqcdhomuaiiegilwr +ddnqavbjqcdhomuairzhrjiz +ddnqavbjqcdhomuajbkjpftg +ddnqavbjqcdhomuajgfkeemk +ddnqavbjqcdhomuajlakydfo +ddnqavbjqcdhomuajuvmcaww +ddnqavbjqcdhomuakxrqrxft +ddnqavbjqcdhomualhcsptqa +ddnqavbjqcdhomualqxtyrci +ddnqavbjqcdhomuamaivwnmu +ddnqavbjqcdhomuamfdwlmfy +ddnqavbjqcdhomuamoyxujxb +ddnqavbjqcdhomuamttyjiqf +ddnqavbjqcdhomuapssfqqjt +ddnqavbjqcdhomuapxngfpcx +ddnqavbjqcdhomuaqcdhomua +ddnqavbjqcdhomuaqlyixkgi +ddnqavbjqcdhomuaqvokbhxq +ddnqavbjqcdhomuaraelkfjy +ddnqavbjqcdhomuarounibuf +ddnqavbjqlyixkgiaoffckzd +ddnqavbjqlyixkgiatafwjsh +ddnqavbjqlyixkgibhlijevx +ddnqavbjqlyixkgibrbjscia +ddnqavbjqlyixkgicyxowxpb +ddnqavbjqlyixkgiddnqavbj +ddnqavbjqlyixkgidiiqutzn +ddnqavbjqlyixkgidndrjssr +ddnqavbjqlyixkgidwyssqez +ddnqavbjqlyixkgiegjuqmpg +ddnqavbjqlyixkgielevflik +ddnqavbjqlyixkgieuzwoizs +ddnqavbjqlyixkgiezuxdhsw +ddnqavbjqlyixkgifoazvcwh +ddnqavbjqlyixkgihanbdvpq +ddnqavbjqlyixkgihfibxuiu +ddnqavbjqlyixkgihkdcmtby +ddnqavbjqlyixkgihtydvqtb +ddnqavbjqlyixkgihytekpmf +ddnqavbjqlyixkgiiiegilwr +ddnqavbjqlyixkgiirzhrjiz +ddnqavbjqlyixkgijbkjpftg +ddnqavbjqlyixkgijgfkeemk +ddnqavbjqlyixkgijlakydfo +ddnqavbjqlyixkgijuvmcaww +ddnqavbjqlyixkgikxrqrxft +ddnqavbjqlyixkgilhcsptqa +ddnqavbjqlyixkgilqxtyrci +ddnqavbjqlyixkgimaivwnmu +ddnqavbjqlyixkgimfdwlmfy +ddnqavbjqlyixkgimoyxujxb +ddnqavbjqlyixkgimttyjiqf +ddnqavbjqlyixkgipssfqqjt +ddnqavbjqlyixkgipxngfpcx +ddnqavbjqlyixkgiqcdhomua +ddnqavbjqlyixkgiqlyixkgi +ddnqavbjqlyixkgiqvokbhxq +ddnqavbjqlyixkgiraelkfjy +ddnqavbjqlyixkgirounibuf +ddnqavbjqvokbhxqaoffckzd +ddnqavbjqvokbhxqatafwjsh +ddnqavbjqvokbhxqbhlijevx +ddnqavbjqvokbhxqbrbjscia +ddnqavbjqvokbhxqcyxowxpb +ddnqavbjqvokbhxqddnqavbj +ddnqavbjqvokbhxqdiiqutzn +ddnqavbjqvokbhxqdndrjssr +ddnqavbjqvokbhxqdwyssqez +ddnqavbjqvokbhxqegjuqmpg +ddnqavbjqvokbhxqelevflik +ddnqavbjqvokbhxqeuzwoizs +ddnqavbjqvokbhxqezuxdhsw +ddnqavbjqvokbhxqfoazvcwh +ddnqavbjqvokbhxqhanbdvpq +ddnqavbjqvokbhxqhfibxuiu +ddnqavbjqvokbhxqhkdcmtby +ddnqavbjqvokbhxqhtydvqtb +ddnqavbjqvokbhxqhytekpmf +ddnqavbjqvokbhxqiiegilwr +ddnqavbjqvokbhxqirzhrjiz +ddnqavbjqvokbhxqjbkjpftg +ddnqavbjqvokbhxqjgfkeemk +ddnqavbjqvokbhxqjlakydfo +ddnqavbjqvokbhxqjuvmcaww +ddnqavbjqvokbhxqkxrqrxft +ddnqavbjqvokbhxqlhcsptqa +ddnqavbjqvokbhxqlqxtyrci +ddnqavbjqvokbhxqmaivwnmu +ddnqavbjqvokbhxqmfdwlmfy +ddnqavbjqvokbhxqmoyxujxb +ddnqavbjqvokbhxqmttyjiqf +ddnqavbjqvokbhxqpssfqqjt +ddnqavbjqvokbhxqpxngfpcx +ddnqavbjqvokbhxqqcdhomua +ddnqavbjqvokbhxqqlyixkgi +ddnqavbjqvokbhxqqvokbhxq +ddnqavbjqvokbhxqraelkfjy +ddnqavbjqvokbhxqrounibuf +ddnqavbjraelkfjyaoffckzd +ddnqavbjraelkfjyatafwjsh +ddnqavbjraelkfjybhlijevx +ddnqavbjraelkfjybrbjscia +ddnqavbjraelkfjycyxowxpb +ddnqavbjraelkfjyddnqavbj +ddnqavbjraelkfjydiiqutzn +ddnqavbjraelkfjydndrjssr +ddnqavbjraelkfjydwyssqez +ddnqavbjraelkfjyegjuqmpg +ddnqavbjraelkfjyelevflik +ddnqavbjraelkfjyeuzwoizs +ddnqavbjraelkfjyezuxdhsw +ddnqavbjraelkfjyfoazvcwh +ddnqavbjraelkfjyhanbdvpq +ddnqavbjraelkfjyhfibxuiu +ddnqavbjraelkfjyhkdcmtby +ddnqavbjraelkfjyhtydvqtb +ddnqavbjraelkfjyhytekpmf +ddnqavbjraelkfjyiiegilwr +ddnqavbjraelkfjyirzhrjiz +ddnqavbjraelkfjyjbkjpftg +ddnqavbjraelkfjyjgfkeemk +ddnqavbjraelkfjyjlakydfo +ddnqavbjraelkfjyjuvmcaww +ddnqavbjraelkfjykxrqrxft +ddnqavbjraelkfjylhcsptqa +ddnqavbjraelkfjylqxtyrci +ddnqavbjraelkfjymaivwnmu +ddnqavbjraelkfjymfdwlmfy +ddnqavbjraelkfjymoyxujxb +ddnqavbjraelkfjymttyjiqf +ddnqavbjraelkfjypssfqqjt +ddnqavbjraelkfjypxngfpcx +ddnqavbjraelkfjyqcdhomua +ddnqavbjraelkfjyqlyixkgi +ddnqavbjraelkfjyqvokbhxq +ddnqavbjraelkfjyraelkfjy +ddnqavbjraelkfjyrounibuf +ddnqavbjrounibufaoffckzd +ddnqavbjrounibufatafwjsh +ddnqavbjrounibufbhlijevx +ddnqavbjrounibufbrbjscia +ddnqavbjrounibufcyxowxpb +ddnqavbjrounibufddnqavbj +ddnqavbjrounibufdiiqutzn +ddnqavbjrounibufdndrjssr +ddnqavbjrounibufdwyssqez +ddnqavbjrounibufegjuqmpg +ddnqavbjrounibufelevflik +ddnqavbjrounibufeuzwoizs +ddnqavbjrounibufezuxdhsw +ddnqavbjrounibuffoazvcwh +ddnqavbjrounibufhanbdvpq +ddnqavbjrounibufhfibxuiu +ddnqavbjrounibufhkdcmtby +ddnqavbjrounibufhtydvqtb +ddnqavbjrounibufhytekpmf +ddnqavbjrounibufiiegilwr +ddnqavbjrounibufirzhrjiz +ddnqavbjrounibufjbkjpftg +ddnqavbjrounibufjgfkeemk +ddnqavbjrounibufjlakydfo +ddnqavbjrounibufjuvmcaww +ddnqavbjrounibufkxrqrxft +ddnqavbjrounibuflhcsptqa +ddnqavbjrounibuflqxtyrci +ddnqavbjrounibufmaivwnmu +ddnqavbjrounibufmfdwlmfy +ddnqavbjrounibufmoyxujxb +ddnqavbjrounibufmttyjiqf +ddnqavbjrounibufpssfqqjt +ddnqavbjrounibufpxngfpcx +ddnqavbjrounibufqcdhomua +ddnqavbjrounibufqlyixkgi +ddnqavbjrounibufqvokbhxq +ddnqavbjrounibufraelkfjy +ddnqavbjrounibufrounibuf +diiqutznaoffckzdaoffckzd +diiqutznaoffckzdatafwjsh +diiqutznaoffckzdbhlijevx +diiqutznaoffckzdbrbjscia +diiqutznaoffckzdcyxowxpb +diiqutznaoffckzdddnqavbj +diiqutznaoffckzddiiqutzn +diiqutznaoffckzddndrjssr +diiqutznaoffckzddwyssqez +diiqutznaoffckzdegjuqmpg +diiqutznaoffckzdelevflik +diiqutznaoffckzdeuzwoizs +diiqutznaoffckzdezuxdhsw +diiqutznaoffckzdfoazvcwh +diiqutznaoffckzdhanbdvpq +diiqutznaoffckzdhfibxuiu +diiqutznaoffckzdhkdcmtby +diiqutznaoffckzdhtydvqtb +diiqutznaoffckzdhytekpmf +diiqutznaoffckzdiiegilwr +diiqutznaoffckzdirzhrjiz +diiqutznaoffckzdjbkjpftg +diiqutznaoffckzdjgfkeemk +diiqutznaoffckzdjlakydfo +diiqutznaoffckzdjuvmcaww +diiqutznaoffckzdkxrqrxft +diiqutznaoffckzdlhcsptqa +diiqutznaoffckzdlqxtyrci +diiqutznaoffckzdmaivwnmu +diiqutznaoffckzdmfdwlmfy +diiqutznaoffckzdmoyxujxb +diiqutznaoffckzdmttyjiqf +diiqutznaoffckzdpssfqqjt +diiqutznaoffckzdpxngfpcx +diiqutznaoffckzdqcdhomua +diiqutznaoffckzdqlyixkgi +diiqutznaoffckzdqvokbhxq +diiqutznaoffckzdraelkfjy +diiqutznaoffckzdrounibuf +diiqutznatafwjshaoffckzd +diiqutznatafwjshatafwjsh +diiqutznatafwjshbhlijevx +diiqutznatafwjshbrbjscia +diiqutznatafwjshcyxowxpb +diiqutznatafwjshddnqavbj +diiqutznatafwjshdiiqutzn +diiqutznatafwjshdndrjssr +diiqutznatafwjshdwyssqez +diiqutznatafwjshegjuqmpg +diiqutznatafwjshelevflik +diiqutznatafwjsheuzwoizs +diiqutznatafwjshezuxdhsw +diiqutznatafwjshfoazvcwh +diiqutznatafwjshhanbdvpq +diiqutznatafwjshhfibxuiu +diiqutznatafwjshhkdcmtby +diiqutznatafwjshhtydvqtb +diiqutznatafwjshhytekpmf +diiqutznatafwjshiiegilwr +diiqutznatafwjshirzhrjiz +diiqutznatafwjshjbkjpftg +diiqutznatafwjshjgfkeemk +diiqutznatafwjshjlakydfo +diiqutznatafwjshjuvmcaww +diiqutznatafwjshkxrqrxft +diiqutznatafwjshlhcsptqa +diiqutznatafwjshlqxtyrci +diiqutznatafwjshmaivwnmu +diiqutznatafwjshmfdwlmfy +diiqutznatafwjshmoyxujxb +diiqutznatafwjshmttyjiqf +diiqutznatafwjshpssfqqjt +diiqutznatafwjshpxngfpcx +diiqutznatafwjshqcdhomua +diiqutznatafwjshqlyixkgi +diiqutznatafwjshqvokbhxq +diiqutznatafwjshraelkfjy +diiqutznatafwjshrounibuf +diiqutznbhlijevxaoffckzd +diiqutznbhlijevxatafwjsh +diiqutznbhlijevxbhlijevx +diiqutznbhlijevxbrbjscia +diiqutznbhlijevxcyxowxpb +diiqutznbhlijevxddnqavbj +diiqutznbhlijevxdiiqutzn +diiqutznbhlijevxdndrjssr +diiqutznbhlijevxdwyssqez +diiqutznbhlijevxegjuqmpg +diiqutznbhlijevxelevflik +diiqutznbhlijevxeuzwoizs +diiqutznbhlijevxezuxdhsw +diiqutznbhlijevxfoazvcwh +diiqutznbhlijevxhanbdvpq +diiqutznbhlijevxhfibxuiu +diiqutznbhlijevxhkdcmtby +diiqutznbhlijevxhtydvqtb +diiqutznbhlijevxhytekpmf +diiqutznbhlijevxiiegilwr +diiqutznbhlijevxirzhrjiz +diiqutznbhlijevxjbkjpftg +diiqutznbhlijevxjgfkeemk +diiqutznbhlijevxjlakydfo +diiqutznbhlijevxjuvmcaww +diiqutznbhlijevxkxrqrxft +diiqutznbhlijevxlhcsptqa +diiqutznbhlijevxlqxtyrci +diiqutznbhlijevxmaivwnmu +diiqutznbhlijevxmfdwlmfy +diiqutznbhlijevxmoyxujxb +diiqutznbhlijevxmttyjiqf +diiqutznbhlijevxpssfqqjt +diiqutznbhlijevxpxngfpcx +diiqutznbhlijevxqcdhomua +diiqutznbhlijevxqlyixkgi +diiqutznbhlijevxqvokbhxq +diiqutznbhlijevxraelkfjy +diiqutznbhlijevxrounibuf +diiqutznbrbjsciaaoffckzd +diiqutznbrbjsciaatafwjsh +diiqutznbrbjsciabhlijevx +diiqutznbrbjsciabrbjscia +diiqutznbrbjsciacyxowxpb +diiqutznbrbjsciaddnqavbj +diiqutznbrbjsciadiiqutzn +diiqutznbrbjsciadndrjssr +diiqutznbrbjsciadwyssqez +diiqutznbrbjsciaegjuqmpg +diiqutznbrbjsciaelevflik +diiqutznbrbjsciaeuzwoizs +diiqutznbrbjsciaezuxdhsw +diiqutznbrbjsciafoazvcwh +diiqutznbrbjsciahanbdvpq +diiqutznbrbjsciahfibxuiu +diiqutznbrbjsciahkdcmtby +diiqutznbrbjsciahtydvqtb +diiqutznbrbjsciahytekpmf +diiqutznbrbjsciaiiegilwr +diiqutznbrbjsciairzhrjiz +diiqutznbrbjsciajbkjpftg +diiqutznbrbjsciajgfkeemk +diiqutznbrbjsciajlakydfo +diiqutznbrbjsciajuvmcaww +diiqutznbrbjsciakxrqrxft +diiqutznbrbjscialhcsptqa +diiqutznbrbjscialqxtyrci +diiqutznbrbjsciamaivwnmu +diiqutznbrbjsciamfdwlmfy +diiqutznbrbjsciamoyxujxb +diiqutznbrbjsciamttyjiqf +diiqutznbrbjsciapssfqqjt +diiqutznbrbjsciapxngfpcx +diiqutznbrbjsciaqcdhomua +diiqutznbrbjsciaqlyixkgi +diiqutznbrbjsciaqvokbhxq +diiqutznbrbjsciaraelkfjy +diiqutznbrbjsciarounibuf +diiqutzncyxowxpbaoffckzd +diiqutzncyxowxpbatafwjsh +diiqutzncyxowxpbbhlijevx +diiqutzncyxowxpbbrbjscia +diiqutzncyxowxpbcyxowxpb +diiqutzncyxowxpbddnqavbj +diiqutzncyxowxpbdiiqutzn +diiqutzncyxowxpbdndrjssr +diiqutzncyxowxpbdwyssqez +diiqutzncyxowxpbegjuqmpg +diiqutzncyxowxpbelevflik +diiqutzncyxowxpbeuzwoizs +diiqutzncyxowxpbezuxdhsw +diiqutzncyxowxpbfoazvcwh +diiqutzncyxowxpbhanbdvpq +diiqutzncyxowxpbhfibxuiu +diiqutzncyxowxpbhkdcmtby +diiqutzncyxowxpbhtydvqtb +diiqutzncyxowxpbhytekpmf +diiqutzncyxowxpbiiegilwr +diiqutzncyxowxpbirzhrjiz +diiqutzncyxowxpbjbkjpftg +diiqutzncyxowxpbjgfkeemk +diiqutzncyxowxpbjlakydfo +diiqutzncyxowxpbjuvmcaww +diiqutzncyxowxpbkxrqrxft +diiqutzncyxowxpblhcsptqa +diiqutzncyxowxpblqxtyrci +diiqutzncyxowxpbmaivwnmu +diiqutzncyxowxpbmfdwlmfy +diiqutzncyxowxpbmoyxujxb +diiqutzncyxowxpbmttyjiqf +diiqutzncyxowxpbpssfqqjt +diiqutzncyxowxpbpxngfpcx +diiqutzncyxowxpbqcdhomua +diiqutzncyxowxpbqlyixkgi +diiqutzncyxowxpbqvokbhxq +diiqutzncyxowxpbraelkfjy +diiqutzncyxowxpbrounibuf +diiqutznddnqavbjaoffckzd +diiqutznddnqavbjatafwjsh +diiqutznddnqavbjbhlijevx +diiqutznddnqavbjbrbjscia +diiqutznddnqavbjcyxowxpb +diiqutznddnqavbjddnqavbj +diiqutznddnqavbjdiiqutzn +diiqutznddnqavbjdndrjssr +diiqutznddnqavbjdwyssqez +diiqutznddnqavbjegjuqmpg +diiqutznddnqavbjelevflik +diiqutznddnqavbjeuzwoizs +diiqutznddnqavbjezuxdhsw +diiqutznddnqavbjfoazvcwh +diiqutznddnqavbjhanbdvpq +diiqutznddnqavbjhfibxuiu +diiqutznddnqavbjhkdcmtby +diiqutznddnqavbjhtydvqtb +diiqutznddnqavbjhytekpmf +diiqutznddnqavbjiiegilwr +diiqutznddnqavbjirzhrjiz +diiqutznddnqavbjjbkjpftg +diiqutznddnqavbjjgfkeemk +diiqutznddnqavbjjlakydfo +diiqutznddnqavbjjuvmcaww +diiqutznddnqavbjkxrqrxft +diiqutznddnqavbjlhcsptqa +diiqutznddnqavbjlqxtyrci +diiqutznddnqavbjmaivwnmu +diiqutznddnqavbjmfdwlmfy +diiqutznddnqavbjmoyxujxb +diiqutznddnqavbjmttyjiqf +diiqutznddnqavbjpssfqqjt +diiqutznddnqavbjpxngfpcx +diiqutznddnqavbjqcdhomua +diiqutznddnqavbjqlyixkgi +diiqutznddnqavbjqvokbhxq +diiqutznddnqavbjraelkfjy +diiqutznddnqavbjrounibuf +diiqutzndiiqutznaoffckzd +diiqutzndiiqutznatafwjsh +diiqutzndiiqutznbhlijevx +diiqutzndiiqutznbrbjscia +diiqutzndiiqutzncyxowxpb +diiqutzndiiqutznddnqavbj +diiqutzndiiqutzndiiqutzn +diiqutzndiiqutzndndrjssr +diiqutzndiiqutzndwyssqez +diiqutzndiiqutznegjuqmpg +diiqutzndiiqutznelevflik +diiqutzndiiqutzneuzwoizs +diiqutzndiiqutznezuxdhsw +diiqutzndiiqutznfoazvcwh +diiqutzndiiqutznhanbdvpq +diiqutzndiiqutznhfibxuiu +diiqutzndiiqutznhkdcmtby +diiqutzndiiqutznhtydvqtb +diiqutzndiiqutznhytekpmf +diiqutzndiiqutzniiegilwr +diiqutzndiiqutznirzhrjiz +diiqutzndiiqutznjbkjpftg +diiqutzndiiqutznjgfkeemk +diiqutzndiiqutznjlakydfo +diiqutzndiiqutznjuvmcaww +diiqutzndiiqutznkxrqrxft +diiqutzndiiqutznlhcsptqa +diiqutzndiiqutznlqxtyrci +diiqutzndiiqutznmaivwnmu +diiqutzndiiqutznmfdwlmfy +diiqutzndiiqutznmoyxujxb +diiqutzndiiqutznmttyjiqf +diiqutzndiiqutznpssfqqjt +diiqutzndiiqutznpxngfpcx +diiqutzndiiqutznqcdhomua +diiqutzndiiqutznqlyixkgi +diiqutzndiiqutznqvokbhxq +diiqutzndiiqutznraelkfjy +diiqutzndiiqutznrounibuf +diiqutzndndrjssraoffckzd +diiqutzndndrjssratafwjsh +diiqutzndndrjssrbhlijevx +diiqutzndndrjssrbrbjscia +diiqutzndndrjssrcyxowxpb +diiqutzndndrjssrddnqavbj +diiqutzndndrjssrdiiqutzn +diiqutzndndrjssrdndrjssr +diiqutzndndrjssrdwyssqez +diiqutzndndrjssregjuqmpg +diiqutzndndrjssrelevflik +diiqutzndndrjssreuzwoizs +diiqutzndndrjssrezuxdhsw +diiqutzndndrjssrfoazvcwh +diiqutzndndrjssrhanbdvpq +diiqutzndndrjssrhfibxuiu +diiqutzndndrjssrhkdcmtby +diiqutzndndrjssrhtydvqtb +diiqutzndndrjssrhytekpmf +diiqutzndndrjssriiegilwr +diiqutzndndrjssrirzhrjiz +diiqutzndndrjssrjbkjpftg +diiqutzndndrjssrjgfkeemk +diiqutzndndrjssrjlakydfo +diiqutzndndrjssrjuvmcaww +diiqutzndndrjssrkxrqrxft +diiqutzndndrjssrlhcsptqa +diiqutzndndrjssrlqxtyrci +diiqutzndndrjssrmaivwnmu +diiqutzndndrjssrmfdwlmfy +diiqutzndndrjssrmoyxujxb +diiqutzndndrjssrmttyjiqf +diiqutzndndrjssrpssfqqjt +diiqutzndndrjssrpxngfpcx +diiqutzndndrjssrqcdhomua +diiqutzndndrjssrqlyixkgi +diiqutzndndrjssrqvokbhxq +diiqutzndndrjssrraelkfjy +diiqutzndndrjssrrounibuf +diiqutzndwyssqezaoffckzd +diiqutzndwyssqezatafwjsh +diiqutzndwyssqezbhlijevx +diiqutzndwyssqezbrbjscia +diiqutzndwyssqezcyxowxpb +diiqutzndwyssqezddnqavbj +diiqutzndwyssqezdiiqutzn +diiqutzndwyssqezdndrjssr +diiqutzndwyssqezdwyssqez +diiqutzndwyssqezegjuqmpg +diiqutzndwyssqezelevflik +diiqutzndwyssqezeuzwoizs +diiqutzndwyssqezezuxdhsw +diiqutzndwyssqezfoazvcwh +diiqutzndwyssqezhanbdvpq +diiqutzndwyssqezhfibxuiu +diiqutzndwyssqezhkdcmtby +diiqutzndwyssqezhtydvqtb +diiqutzndwyssqezhytekpmf +diiqutzndwyssqeziiegilwr +diiqutzndwyssqezirzhrjiz +diiqutzndwyssqezjbkjpftg +diiqutzndwyssqezjgfkeemk +diiqutzndwyssqezjlakydfo +diiqutzndwyssqezjuvmcaww +diiqutzndwyssqezkxrqrxft +diiqutzndwyssqezlhcsptqa +diiqutzndwyssqezlqxtyrci +diiqutzndwyssqezmaivwnmu +diiqutzndwyssqezmfdwlmfy +diiqutzndwyssqezmoyxujxb +diiqutzndwyssqezmttyjiqf +diiqutzndwyssqezpssfqqjt +diiqutzndwyssqezpxngfpcx +diiqutzndwyssqezqcdhomua +diiqutzndwyssqezqlyixkgi +diiqutzndwyssqezqvokbhxq +diiqutzndwyssqezraelkfjy +diiqutzndwyssqezrounibuf +diiqutznegjuqmpgaoffckzd +diiqutznegjuqmpgatafwjsh +diiqutznegjuqmpgbhlijevx +diiqutznegjuqmpgbrbjscia +diiqutznegjuqmpgcyxowxpb +diiqutznegjuqmpgddnqavbj +diiqutznegjuqmpgdiiqutzn +diiqutznegjuqmpgdndrjssr +diiqutznegjuqmpgdwyssqez +diiqutznegjuqmpgegjuqmpg +diiqutznegjuqmpgelevflik +diiqutznegjuqmpgeuzwoizs +diiqutznegjuqmpgezuxdhsw +diiqutznegjuqmpgfoazvcwh +diiqutznegjuqmpghanbdvpq +diiqutznegjuqmpghfibxuiu +diiqutznegjuqmpghkdcmtby +diiqutznegjuqmpghtydvqtb +diiqutznegjuqmpghytekpmf +diiqutznegjuqmpgiiegilwr +diiqutznegjuqmpgirzhrjiz +diiqutznegjuqmpgjbkjpftg +diiqutznegjuqmpgjgfkeemk +diiqutznegjuqmpgjlakydfo +diiqutznegjuqmpgjuvmcaww +diiqutznegjuqmpgkxrqrxft +diiqutznegjuqmpglhcsptqa +diiqutznegjuqmpglqxtyrci +diiqutznegjuqmpgmaivwnmu +diiqutznegjuqmpgmfdwlmfy +diiqutznegjuqmpgmoyxujxb +diiqutznegjuqmpgmttyjiqf +diiqutznegjuqmpgpssfqqjt +diiqutznegjuqmpgpxngfpcx +diiqutznegjuqmpgqcdhomua +diiqutznegjuqmpgqlyixkgi +diiqutznegjuqmpgqvokbhxq +diiqutznegjuqmpgraelkfjy +diiqutznegjuqmpgrounibuf +diiqutznelevflikaoffckzd +diiqutznelevflikatafwjsh +diiqutznelevflikbhlijevx +diiqutznelevflikbrbjscia +diiqutznelevflikcyxowxpb +diiqutznelevflikddnqavbj +diiqutznelevflikdiiqutzn +diiqutznelevflikdndrjssr +diiqutznelevflikdwyssqez +diiqutznelevflikegjuqmpg +diiqutznelevflikelevflik +diiqutznelevflikeuzwoizs +diiqutznelevflikezuxdhsw +diiqutznelevflikfoazvcwh +diiqutznelevflikhanbdvpq +diiqutznelevflikhfibxuiu +diiqutznelevflikhkdcmtby +diiqutznelevflikhtydvqtb +diiqutznelevflikhytekpmf +diiqutznelevflikiiegilwr +diiqutznelevflikirzhrjiz +diiqutznelevflikjbkjpftg +diiqutznelevflikjgfkeemk +diiqutznelevflikjlakydfo +diiqutznelevflikjuvmcaww +diiqutznelevflikkxrqrxft +diiqutznelevfliklhcsptqa +diiqutznelevfliklqxtyrci +diiqutznelevflikmaivwnmu +diiqutznelevflikmfdwlmfy +diiqutznelevflikmoyxujxb +diiqutznelevflikmttyjiqf +diiqutznelevflikpssfqqjt +diiqutznelevflikpxngfpcx +diiqutznelevflikqcdhomua +diiqutznelevflikqlyixkgi +diiqutznelevflikqvokbhxq +diiqutznelevflikraelkfjy +diiqutznelevflikrounibuf +diiqutzneuzwoizsaoffckzd +diiqutzneuzwoizsatafwjsh +diiqutzneuzwoizsbhlijevx +diiqutzneuzwoizsbrbjscia +diiqutzneuzwoizscyxowxpb +diiqutzneuzwoizsddnqavbj +diiqutzneuzwoizsdiiqutzn +diiqutzneuzwoizsdndrjssr +diiqutzneuzwoizsdwyssqez +diiqutzneuzwoizsegjuqmpg +diiqutzneuzwoizselevflik +diiqutzneuzwoizseuzwoizs +diiqutzneuzwoizsezuxdhsw +diiqutzneuzwoizsfoazvcwh +diiqutzneuzwoizshanbdvpq +diiqutzneuzwoizshfibxuiu +diiqutzneuzwoizshkdcmtby +diiqutzneuzwoizshtydvqtb +diiqutzneuzwoizshytekpmf +diiqutzneuzwoizsiiegilwr +diiqutzneuzwoizsirzhrjiz +diiqutzneuzwoizsjbkjpftg +diiqutzneuzwoizsjgfkeemk +diiqutzneuzwoizsjlakydfo +diiqutzneuzwoizsjuvmcaww +diiqutzneuzwoizskxrqrxft +diiqutzneuzwoizslhcsptqa +diiqutzneuzwoizslqxtyrci +diiqutzneuzwoizsmaivwnmu +diiqutzneuzwoizsmfdwlmfy +diiqutzneuzwoizsmoyxujxb +diiqutzneuzwoizsmttyjiqf +diiqutzneuzwoizspssfqqjt +diiqutzneuzwoizspxngfpcx +diiqutzneuzwoizsqcdhomua +diiqutzneuzwoizsqlyixkgi +diiqutzneuzwoizsqvokbhxq +diiqutzneuzwoizsraelkfjy +diiqutzneuzwoizsrounibuf +diiqutznezuxdhswaoffckzd +diiqutznezuxdhswatafwjsh +diiqutznezuxdhswbhlijevx +diiqutznezuxdhswbrbjscia +diiqutznezuxdhswcyxowxpb +diiqutznezuxdhswddnqavbj +diiqutznezuxdhswdiiqutzn +diiqutznezuxdhswdndrjssr +diiqutznezuxdhswdwyssqez +diiqutznezuxdhswegjuqmpg +diiqutznezuxdhswelevflik +diiqutznezuxdhsweuzwoizs +diiqutznezuxdhswezuxdhsw +diiqutznezuxdhswfoazvcwh +diiqutznezuxdhswhanbdvpq +diiqutznezuxdhswhfibxuiu +diiqutznezuxdhswhkdcmtby +diiqutznezuxdhswhtydvqtb +diiqutznezuxdhswhytekpmf +diiqutznezuxdhswiiegilwr +diiqutznezuxdhswirzhrjiz +diiqutznezuxdhswjbkjpftg +diiqutznezuxdhswjgfkeemk +diiqutznezuxdhswjlakydfo +diiqutznezuxdhswjuvmcaww +diiqutznezuxdhswkxrqrxft +diiqutznezuxdhswlhcsptqa +diiqutznezuxdhswlqxtyrci +diiqutznezuxdhswmaivwnmu +diiqutznezuxdhswmfdwlmfy +diiqutznezuxdhswmoyxujxb +diiqutznezuxdhswmttyjiqf +diiqutznezuxdhswpssfqqjt +diiqutznezuxdhswpxngfpcx +diiqutznezuxdhswqcdhomua +diiqutznezuxdhswqlyixkgi +diiqutznezuxdhswqvokbhxq +diiqutznezuxdhswraelkfjy +diiqutznezuxdhswrounibuf +diiqutznfoazvcwhaoffckzd +diiqutznfoazvcwhatafwjsh +diiqutznfoazvcwhbhlijevx +diiqutznfoazvcwhbrbjscia +diiqutznfoazvcwhcyxowxpb +diiqutznfoazvcwhddnqavbj +diiqutznfoazvcwhdiiqutzn +diiqutznfoazvcwhdndrjssr +diiqutznfoazvcwhdwyssqez +diiqutznfoazvcwhegjuqmpg +diiqutznfoazvcwhelevflik +diiqutznfoazvcwheuzwoizs +diiqutznfoazvcwhezuxdhsw +diiqutznfoazvcwhfoazvcwh +diiqutznfoazvcwhhanbdvpq +diiqutznfoazvcwhhfibxuiu +diiqutznfoazvcwhhkdcmtby +diiqutznfoazvcwhhtydvqtb +diiqutznfoazvcwhhytekpmf +diiqutznfoazvcwhiiegilwr +diiqutznfoazvcwhirzhrjiz +diiqutznfoazvcwhjbkjpftg +diiqutznfoazvcwhjgfkeemk +diiqutznfoazvcwhjlakydfo +diiqutznfoazvcwhjuvmcaww +diiqutznfoazvcwhkxrqrxft +diiqutznfoazvcwhlhcsptqa +diiqutznfoazvcwhlqxtyrci +diiqutznfoazvcwhmaivwnmu +diiqutznfoazvcwhmfdwlmfy +diiqutznfoazvcwhmoyxujxb +diiqutznfoazvcwhmttyjiqf +diiqutznfoazvcwhpssfqqjt +diiqutznfoazvcwhpxngfpcx +diiqutznfoazvcwhqcdhomua +diiqutznfoazvcwhqlyixkgi +diiqutznfoazvcwhqvokbhxq +diiqutznfoazvcwhraelkfjy +diiqutznfoazvcwhrounibuf +diiqutznhanbdvpqaoffckzd +diiqutznhanbdvpqatafwjsh +diiqutznhanbdvpqbhlijevx +diiqutznhanbdvpqbrbjscia +diiqutznhanbdvpqcyxowxpb +diiqutznhanbdvpqddnqavbj +diiqutznhanbdvpqdiiqutzn +diiqutznhanbdvpqdndrjssr +diiqutznhanbdvpqdwyssqez +diiqutznhanbdvpqegjuqmpg +diiqutznhanbdvpqelevflik +diiqutznhanbdvpqeuzwoizs +diiqutznhanbdvpqezuxdhsw +diiqutznhanbdvpqfoazvcwh +diiqutznhanbdvpqhanbdvpq +diiqutznhanbdvpqhfibxuiu +diiqutznhanbdvpqhkdcmtby +diiqutznhanbdvpqhtydvqtb +diiqutznhanbdvpqhytekpmf +diiqutznhanbdvpqiiegilwr +diiqutznhanbdvpqirzhrjiz +diiqutznhanbdvpqjbkjpftg +diiqutznhanbdvpqjgfkeemk +diiqutznhanbdvpqjlakydfo +diiqutznhanbdvpqjuvmcaww +diiqutznhanbdvpqkxrqrxft +diiqutznhanbdvpqlhcsptqa +diiqutznhanbdvpqlqxtyrci +diiqutznhanbdvpqmaivwnmu +diiqutznhanbdvpqmfdwlmfy +diiqutznhanbdvpqmoyxujxb +diiqutznhanbdvpqmttyjiqf +diiqutznhanbdvpqpssfqqjt +diiqutznhanbdvpqpxngfpcx +diiqutznhanbdvpqqcdhomua +diiqutznhanbdvpqqlyixkgi +diiqutznhanbdvpqqvokbhxq +diiqutznhanbdvpqraelkfjy +diiqutznhanbdvpqrounibuf +diiqutznhfibxuiuaoffckzd +diiqutznhfibxuiuatafwjsh +diiqutznhfibxuiubhlijevx +diiqutznhfibxuiubrbjscia +diiqutznhfibxuiucyxowxpb +diiqutznhfibxuiuddnqavbj +diiqutznhfibxuiudiiqutzn +diiqutznhfibxuiudndrjssr +diiqutznhfibxuiudwyssqez +diiqutznhfibxuiuegjuqmpg +diiqutznhfibxuiuelevflik +diiqutznhfibxuiueuzwoizs +diiqutznhfibxuiuezuxdhsw +diiqutznhfibxuiufoazvcwh +diiqutznhfibxuiuhanbdvpq +diiqutznhfibxuiuhfibxuiu +diiqutznhfibxuiuhkdcmtby +diiqutznhfibxuiuhtydvqtb +diiqutznhfibxuiuhytekpmf +diiqutznhfibxuiuiiegilwr +diiqutznhfibxuiuirzhrjiz +diiqutznhfibxuiujbkjpftg +diiqutznhfibxuiujgfkeemk +diiqutznhfibxuiujlakydfo +diiqutznhfibxuiujuvmcaww +diiqutznhfibxuiukxrqrxft +diiqutznhfibxuiulhcsptqa +diiqutznhfibxuiulqxtyrci +diiqutznhfibxuiumaivwnmu +diiqutznhfibxuiumfdwlmfy +diiqutznhfibxuiumoyxujxb +diiqutznhfibxuiumttyjiqf +diiqutznhfibxuiupssfqqjt +diiqutznhfibxuiupxngfpcx +diiqutznhfibxuiuqcdhomua +diiqutznhfibxuiuqlyixkgi +diiqutznhfibxuiuqvokbhxq +diiqutznhfibxuiuraelkfjy +diiqutznhfibxuiurounibuf +diiqutznhkdcmtbyaoffckzd +diiqutznhkdcmtbyatafwjsh +diiqutznhkdcmtbybhlijevx +diiqutznhkdcmtbybrbjscia +diiqutznhkdcmtbycyxowxpb +diiqutznhkdcmtbyddnqavbj +diiqutznhkdcmtbydiiqutzn +diiqutznhkdcmtbydndrjssr +diiqutznhkdcmtbydwyssqez +diiqutznhkdcmtbyegjuqmpg +diiqutznhkdcmtbyelevflik +diiqutznhkdcmtbyeuzwoizs +diiqutznhkdcmtbyezuxdhsw +diiqutznhkdcmtbyfoazvcwh +diiqutznhkdcmtbyhanbdvpq +diiqutznhkdcmtbyhfibxuiu +diiqutznhkdcmtbyhkdcmtby +diiqutznhkdcmtbyhtydvqtb +diiqutznhkdcmtbyhytekpmf +diiqutznhkdcmtbyiiegilwr +diiqutznhkdcmtbyirzhrjiz +diiqutznhkdcmtbyjbkjpftg +diiqutznhkdcmtbyjgfkeemk +diiqutznhkdcmtbyjlakydfo +diiqutznhkdcmtbyjuvmcaww +diiqutznhkdcmtbykxrqrxft +diiqutznhkdcmtbylhcsptqa +diiqutznhkdcmtbylqxtyrci +diiqutznhkdcmtbymaivwnmu +diiqutznhkdcmtbymfdwlmfy +diiqutznhkdcmtbymoyxujxb +diiqutznhkdcmtbymttyjiqf +diiqutznhkdcmtbypssfqqjt +diiqutznhkdcmtbypxngfpcx +diiqutznhkdcmtbyqcdhomua +diiqutznhkdcmtbyqlyixkgi +diiqutznhkdcmtbyqvokbhxq +diiqutznhkdcmtbyraelkfjy +diiqutznhkdcmtbyrounibuf +diiqutznhtydvqtbaoffckzd +diiqutznhtydvqtbatafwjsh +diiqutznhtydvqtbbhlijevx +diiqutznhtydvqtbbrbjscia +diiqutznhtydvqtbcyxowxpb +diiqutznhtydvqtbddnqavbj +diiqutznhtydvqtbdiiqutzn +diiqutznhtydvqtbdndrjssr +diiqutznhtydvqtbdwyssqez +diiqutznhtydvqtbegjuqmpg +diiqutznhtydvqtbelevflik +diiqutznhtydvqtbeuzwoizs +diiqutznhtydvqtbezuxdhsw +diiqutznhtydvqtbfoazvcwh +diiqutznhtydvqtbhanbdvpq +diiqutznhtydvqtbhfibxuiu +diiqutznhtydvqtbhkdcmtby +diiqutznhtydvqtbhtydvqtb +diiqutznhtydvqtbhytekpmf +diiqutznhtydvqtbiiegilwr +diiqutznhtydvqtbirzhrjiz +diiqutznhtydvqtbjbkjpftg +diiqutznhtydvqtbjgfkeemk +diiqutznhtydvqtbjlakydfo +diiqutznhtydvqtbjuvmcaww +diiqutznhtydvqtbkxrqrxft +diiqutznhtydvqtblhcsptqa +diiqutznhtydvqtblqxtyrci +diiqutznhtydvqtbmaivwnmu +diiqutznhtydvqtbmfdwlmfy +diiqutznhtydvqtbmoyxujxb +diiqutznhtydvqtbmttyjiqf +diiqutznhtydvqtbpssfqqjt +diiqutznhtydvqtbpxngfpcx +diiqutznhtydvqtbqcdhomua +diiqutznhtydvqtbqlyixkgi +diiqutznhtydvqtbqvokbhxq +diiqutznhtydvqtbraelkfjy +diiqutznhtydvqtbrounibuf +diiqutznhytekpmfaoffckzd +diiqutznhytekpmfatafwjsh +diiqutznhytekpmfbhlijevx +diiqutznhytekpmfbrbjscia +diiqutznhytekpmfcyxowxpb +diiqutznhytekpmfddnqavbj +diiqutznhytekpmfdiiqutzn +diiqutznhytekpmfdndrjssr +diiqutznhytekpmfdwyssqez +diiqutznhytekpmfegjuqmpg +diiqutznhytekpmfelevflik +diiqutznhytekpmfeuzwoizs +diiqutznhytekpmfezuxdhsw +diiqutznhytekpmffoazvcwh +diiqutznhytekpmfhanbdvpq +diiqutznhytekpmfhfibxuiu +diiqutznhytekpmfhkdcmtby +diiqutznhytekpmfhtydvqtb +diiqutznhytekpmfhytekpmf +diiqutznhytekpmfiiegilwr +diiqutznhytekpmfirzhrjiz +diiqutznhytekpmfjbkjpftg +diiqutznhytekpmfjgfkeemk +diiqutznhytekpmfjlakydfo +diiqutznhytekpmfjuvmcaww +diiqutznhytekpmfkxrqrxft +diiqutznhytekpmflhcsptqa +diiqutznhytekpmflqxtyrci +diiqutznhytekpmfmaivwnmu +diiqutznhytekpmfmfdwlmfy +diiqutznhytekpmfmoyxujxb +diiqutznhytekpmfmttyjiqf +diiqutznhytekpmfpssfqqjt +diiqutznhytekpmfpxngfpcx +diiqutznhytekpmfqcdhomua +diiqutznhytekpmfqlyixkgi +diiqutznhytekpmfqvokbhxq +diiqutznhytekpmfraelkfjy +diiqutznhytekpmfrounibuf +diiqutzniiegilwraoffckzd +diiqutzniiegilwratafwjsh +diiqutzniiegilwrbhlijevx +diiqutzniiegilwrbrbjscia +diiqutzniiegilwrcyxowxpb +diiqutzniiegilwrddnqavbj +diiqutzniiegilwrdiiqutzn +diiqutzniiegilwrdndrjssr +diiqutzniiegilwrdwyssqez +diiqutzniiegilwregjuqmpg +diiqutzniiegilwrelevflik +diiqutzniiegilwreuzwoizs +diiqutzniiegilwrezuxdhsw +diiqutzniiegilwrfoazvcwh +diiqutzniiegilwrhanbdvpq +diiqutzniiegilwrhfibxuiu +diiqutzniiegilwrhkdcmtby +diiqutzniiegilwrhtydvqtb +diiqutzniiegilwrhytekpmf +diiqutzniiegilwriiegilwr +diiqutzniiegilwrirzhrjiz +diiqutzniiegilwrjbkjpftg +diiqutzniiegilwrjgfkeemk +diiqutzniiegilwrjlakydfo +diiqutzniiegilwrjuvmcaww +diiqutzniiegilwrkxrqrxft +diiqutzniiegilwrlhcsptqa +diiqutzniiegilwrlqxtyrci +diiqutzniiegilwrmaivwnmu +diiqutzniiegilwrmfdwlmfy +diiqutzniiegilwrmoyxujxb +diiqutzniiegilwrmttyjiqf +diiqutzniiegilwrpssfqqjt +diiqutzniiegilwrpxngfpcx +diiqutzniiegilwrqcdhomua +diiqutzniiegilwrqlyixkgi +diiqutzniiegilwrqvokbhxq +diiqutzniiegilwrraelkfjy +diiqutzniiegilwrrounibuf +diiqutznirzhrjizaoffckzd +diiqutznirzhrjizatafwjsh +diiqutznirzhrjizbhlijevx +diiqutznirzhrjizbrbjscia +diiqutznirzhrjizcyxowxpb +diiqutznirzhrjizddnqavbj +diiqutznirzhrjizdiiqutzn +diiqutznirzhrjizdndrjssr +diiqutznirzhrjizdwyssqez +diiqutznirzhrjizegjuqmpg +diiqutznirzhrjizelevflik +diiqutznirzhrjizeuzwoizs +diiqutznirzhrjizezuxdhsw +diiqutznirzhrjizfoazvcwh +diiqutznirzhrjizhanbdvpq +diiqutznirzhrjizhfibxuiu +diiqutznirzhrjizhkdcmtby +diiqutznirzhrjizhtydvqtb +diiqutznirzhrjizhytekpmf +diiqutznirzhrjiziiegilwr +diiqutznirzhrjizirzhrjiz +diiqutznirzhrjizjbkjpftg +diiqutznirzhrjizjgfkeemk +diiqutznirzhrjizjlakydfo +diiqutznirzhrjizjuvmcaww +diiqutznirzhrjizkxrqrxft +diiqutznirzhrjizlhcsptqa +diiqutznirzhrjizlqxtyrci +diiqutznirzhrjizmaivwnmu +diiqutznirzhrjizmfdwlmfy +diiqutznirzhrjizmoyxujxb +diiqutznirzhrjizmttyjiqf +diiqutznirzhrjizpssfqqjt +diiqutznirzhrjizpxngfpcx +diiqutznirzhrjizqcdhomua +diiqutznirzhrjizqlyixkgi +diiqutznirzhrjizqvokbhxq +diiqutznirzhrjizraelkfjy +diiqutznirzhrjizrounibuf +diiqutznjbkjpftgaoffckzd +diiqutznjbkjpftgatafwjsh +diiqutznjbkjpftgbhlijevx +diiqutznjbkjpftgbrbjscia +diiqutznjbkjpftgcyxowxpb +diiqutznjbkjpftgddnqavbj +diiqutznjbkjpftgdiiqutzn +diiqutznjbkjpftgdndrjssr +diiqutznjbkjpftgdwyssqez +diiqutznjbkjpftgegjuqmpg +diiqutznjbkjpftgelevflik +diiqutznjbkjpftgeuzwoizs +diiqutznjbkjpftgezuxdhsw +diiqutznjbkjpftgfoazvcwh +diiqutznjbkjpftghanbdvpq +diiqutznjbkjpftghfibxuiu +diiqutznjbkjpftghkdcmtby +diiqutznjbkjpftghtydvqtb +diiqutznjbkjpftghytekpmf +diiqutznjbkjpftgiiegilwr +diiqutznjbkjpftgirzhrjiz +diiqutznjbkjpftgjbkjpftg +diiqutznjbkjpftgjgfkeemk +diiqutznjbkjpftgjlakydfo +diiqutznjbkjpftgjuvmcaww +diiqutznjbkjpftgkxrqrxft +diiqutznjbkjpftglhcsptqa +diiqutznjbkjpftglqxtyrci +diiqutznjbkjpftgmaivwnmu +diiqutznjbkjpftgmfdwlmfy +diiqutznjbkjpftgmoyxujxb +diiqutznjbkjpftgmttyjiqf +diiqutznjbkjpftgpssfqqjt +diiqutznjbkjpftgpxngfpcx +diiqutznjbkjpftgqcdhomua +diiqutznjbkjpftgqlyixkgi +diiqutznjbkjpftgqvokbhxq +diiqutznjbkjpftgraelkfjy +diiqutznjbkjpftgrounibuf +diiqutznjgfkeemkaoffckzd +diiqutznjgfkeemkatafwjsh +diiqutznjgfkeemkbhlijevx +diiqutznjgfkeemkbrbjscia +diiqutznjgfkeemkcyxowxpb +diiqutznjgfkeemkddnqavbj +diiqutznjgfkeemkdiiqutzn +diiqutznjgfkeemkdndrjssr +diiqutznjgfkeemkdwyssqez +diiqutznjgfkeemkegjuqmpg +diiqutznjgfkeemkelevflik +diiqutznjgfkeemkeuzwoizs +diiqutznjgfkeemkezuxdhsw +diiqutznjgfkeemkfoazvcwh +diiqutznjgfkeemkhanbdvpq +diiqutznjgfkeemkhfibxuiu diff --git a/lost+found/helper.py-6hd5ab b/lost+found/helper.py-6hd5ab new file mode 100644 index 00000000..636287ef --- /dev/null +++ b/lost+found/helper.py-6hd5ab @@ -0,0 +1,183 @@ +#!/bin/python3 + +# les imports +import subprocess +from inginious import input +from collections import namedtuple +from pathlib import Path + +from fragments.constants import * + +ProcessOutput = namedtuple('ProcessOutput', ['returncode', 'stdout', 'stderr']) + + +# Libraries to be add to run/compile via option -cp of java(c) +def libraries(external_libraries): + + # Current folder (not really used but why not) + libs = '.' + + # other librarires if provided + libs += ":{}".format( + ':'.join([ + str(Path(LIBS_FOLDER) / lib) + for lib in DEFAULT_LIBRARIES + ]) + ) if DEFAULT_LIBRARIES else "" + + # We want to include specific libraries for this task + if external_libraries: + libs += ":{}".format( + ':'.join([ + str(CWD / lib) + for lib in external_libraries + ]) + ) + + return libs + + +# Wrapper to execute system commands and easily get stdout, stderr steams and return code +def run_command(cmd, cwd=None, universal_newlines=None): + proc = subprocess.Popen(cmd, cwd=cwd, shell=True, + stderr=subprocess.PIPE, + stdout=subprocess.PIPE, + universal_newlines=universal_newlines) + proc.wait() # waiting the child process to finish + + stdout = proc.stdout.read().decode('utf-8') + stderr = proc.stderr.read().decode('utf-8') + + return ProcessOutput(proc.returncode, stdout, stderr) + + +# Store the given problemid code into the base_path folder ( "student" by default) and return the filename +# Warning : this function is not used in the runfile but I keep it just to remember how to deal with get_input +def store_uploaded_file(problem_id, base_path): + student_upload = input.get_input(problem_id) + filename = input.get_input("{}:filename".format(problem_id)) + filename_with_path = Path(base_path) / filename + + # Stores a copy of this file inside "student" folder + with open(filename_with_path, 'w+') as fileUpload: + fileUpload.write(student_upload.decode('utf-8')) + fileUpload.close() + + return filename_with_path + + +# Find all java packages folder inside path recursively ( useful for javac ) +def find_files_folder_in_path(path): + base_folder = Path(path) + files = Path(path).rglob("*{}".format(FILE_EXTENSION)) if base_folder.exists() else [] + return { + str(Path(relative_path(file)).parent) + for file in files + } + + +# Find all java files +def find_files_in_path(path): + base_folder = Path(path) + files = Path(path).rglob("*{}".format(FILE_EXTENSION)) if base_folder.exists() else [] + return { + relative_path(file) + for file in files + } + + +# Apply parse_template on each file stored in base_path +def apply_templates(base_path): + basepath = Path(base_path) + files = basepath.rglob("*{}".format(FILE_EXTENSION)) + + for file in files: + src = str(file) + input.parse_template(src) + + +# Generate compile/run command for given file +# the files_input argument is either an array of string or a string : +# 1. If it is a string, it means we want to run "java" command with only one file +# 2. Else , it means we want to run "javac" command (possible to use globing characters * ) +def generate_java_command_string(files_input, libs, command="java", coverage=False, is_jar=False): + # file(s) to compile or to execute + files = ' '.join([str(v) for v in files_input]) if command == "javac" else without_extension(files_input) + + # options to be used + # space in key is needed as we simply concat key/value strings + options = [ + # Only add the coverage option when needed + ("-javaagent:", str(Path(LIBS_FOLDER) / "jacocoagent.jar") if coverage else None), + # Include libraries if not a jar file + # See N°2 : https://javarevisited.blogspot.com/2012/10/5-ways-to-add-multiple-jar-to-classpath-java.html + ("-cp ", libs if not is_jar else None), + # enable assertions + ("-ea", "" if command == "java" else None), + # If we use a jar file for coverage + ("-jar ", "{}.jar".format(files) if is_jar else None), + # If javac , stores classes into one folder + ("-d ", PATH_CLASSES if command == "javac" else None) + ] + + # only include not null options values + str_options = ' '.join( + ["{}{}".format(option, value) for (option, value) in options if value is not None] + ) + + # If jar, no need to format the last argument + if is_jar: + return "{} {}".format(command, str_options) + else: + return "{} {} {}".format(command, str_options, files) + + +# to append ccommand with args +def append_args_to_command(cmd, args): + return "{} {}".format(cmd, ' '.join([str(v) for v in args])) + + +# filename without extension +def without_extension(path): + return path.replace(Path(path).suffix, "") + + +# Give relative path : Java interpret /task as package ( when it's not be the case) +def relative_path(path, base_path=CWD): + return str(Path(path).relative_to(base_path)) + + +# Since using a jar simply ignore -cp option, we have no other choice to create a manifest to add the libraries +def create_manifest(libraries): + with open(MANIFEST_FILE, 'w+') as manifest: + libs = libraries.split(":") + libs_str = "{} {}\n".format("Class-Path:", ' '.join(libs)) + manifest.write(libs_str) + manifest.close() + + +# Create a jar file using the class files inside the PATH_CLASSES +def generate_jar_file(main_class=RUNNER_JAVA_NAME, dst=JAR_FILE, manifest=MANIFEST_FILE): + return "jar -cmvfe {} {} {} {}".format(manifest, dst, without_extension(main_class), ".") + + +# Check out if any statment of the prohibited array is contained in the @problem input +def contains_prohibited_statement_in_input(prohibited_array, problem_id): + student_upload = input.get_input(problem_id) + # Extract the given code into a single String file with no space, leading stuff, etc... + # FYI: It is done to simplify the verification as statements in java could be on multiple lines + source_code_as_string = student_upload.strip().replace("\n", '').replace("\t", '').replace(" ", '') + + # if any match , student tried to cheat + return any( + prohibited_statment.strip().replace(" ", '') in source_code_as_string + for prohibited_statment in prohibited_array + ) + + +# Main method that will be invoked by runfile.py to check all given problem inputs for prohibited instructions +def contains_prohibited_statement(feedback_settings): + return any( + contains_prohibited_statement_in_input(statements, problem_id) + for (problem_id, statements) in feedback_settings["prohibited"].items() + ) diff --git a/lost+found/httpclient-4.3.6.jar-LT2YaG b/lost+found/httpclient-4.3.6.jar-LT2YaG new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/httpcore-4.3.3.jar-jIqL3q b/lost+found/httpcore-4.3.3.jar-jIqL3q new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/httpmime-4.3.6.jar-DbkIov b/lost+found/httpmime-4.3.6.jar-DbkIov new file mode 100644 index 00000000..aa01f76d Binary files /dev/null and b/lost+found/httpmime-4.3.6.jar-DbkIov differ diff --git a/lost+found/huffmanin.png-8RaG4H b/lost+found/huffmanin.png-8RaG4H new file mode 100644 index 00000000..51b82da4 Binary files /dev/null and b/lost+found/huffmanin.png-8RaG4H differ diff --git a/lost+found/huffmanout.png-M5djVi b/lost+found/huffmanout.png-M5djVi new file mode 100644 index 00000000..62b5fd85 Binary files /dev/null and b/lost+found/huffmanout.png-M5djVi differ diff --git a/lost+found/index.lock-h9S6IQ b/lost+found/index.lock-h9S6IQ new file mode 100644 index 00000000..59003064 Binary files /dev/null and b/lost+found/index.lock-h9S6IQ differ diff --git a/lost+found/iobitstream.jar-IArIes b/lost+found/iobitstream.jar-IArIes new file mode 100644 index 00000000..f8ebfd41 Binary files /dev/null and b/lost+found/iobitstream.jar-IArIes differ diff --git a/lost+found/jacocoagent.jar-3dpzA0 b/lost+found/jacocoagent.jar-3dpzA0 new file mode 100644 index 00000000..1a9e96db Binary files /dev/null and b/lost+found/jacocoagent.jar-3dpzA0 differ diff --git a/lost+found/jacococli.jar-dmZrqW b/lost+found/jacococli.jar-dmZrqW new file mode 100644 index 00000000..78a57e7c Binary files /dev/null and b/lost+found/jacococli.jar-dmZrqW differ diff --git a/lost+found/javadoc.zip-HJslCG b/lost+found/javadoc.zip-HJslCG new file mode 100644 index 00000000..1dddd4bc Binary files /dev/null and b/lost+found/javadoc.zip-HJslCG differ diff --git a/lost+found/javase-3.2.1-20150223.162559-2.jar-FLAbYb b/lost+found/javase-3.2.1-20150223.162559-2.jar-FLAbYb new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/javassist-3.16.1-GA.jar-AKhXTW b/lost+found/javassist-3.16.1-GA.jar-AKhXTW new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/jna-4.0.0.jar-mrqXQH b/lost+found/jna-4.0.0.jar-mrqXQH new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/js.jar-7LgNUs b/lost+found/js.jar-7LgNUs new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/json-simple-1.1.1.jar-ovz8Zd b/lost+found/json-simple-1.1.1.jar-ovz8Zd new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/junit-4.12.jar-0Wi5MD b/lost+found/junit-4.12.jar-0Wi5MD new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-0Wi5MD differ diff --git a/lost+found/junit-4.12.jar-1cT0rT b/lost+found/junit-4.12.jar-1cT0rT new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-1cT0rT differ diff --git a/lost+found/junit-4.12.jar-B1wP5m b/lost+found/junit-4.12.jar-B1wP5m new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-B1wP5m differ diff --git a/lost+found/junit-4.12.jar-G1ps2m b/lost+found/junit-4.12.jar-G1ps2m new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-G1ps2m differ diff --git a/lost+found/junit-4.12.jar-JDY8Q3 b/lost+found/junit-4.12.jar-JDY8Q3 new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-JDY8Q3 differ diff --git a/lost+found/junit-4.12.jar-LIItq3 b/lost+found/junit-4.12.jar-LIItq3 new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-LIItq3 differ diff --git a/lost+found/junit-4.12.jar-Sy1mfu b/lost+found/junit-4.12.jar-Sy1mfu new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-Sy1mfu differ diff --git a/lost+found/junit-4.12.jar-Tf1Ksu b/lost+found/junit-4.12.jar-Tf1Ksu new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-Tf1Ksu differ diff --git a/lost+found/junit-4.12.jar-ZxMVKH b/lost+found/junit-4.12.jar-ZxMVKH new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-ZxMVKH differ diff --git a/lost+found/junit-4.12.jar-fY4ADQ b/lost+found/junit-4.12.jar-fY4ADQ new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-fY4ADQ differ diff --git a/lost+found/junit-4.12.jar-gQiawE b/lost+found/junit-4.12.jar-gQiawE new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-gQiawE differ diff --git a/lost+found/junit-4.12.jar-kKvsBI b/lost+found/junit-4.12.jar-kKvsBI new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-kKvsBI differ diff --git a/lost+found/junit-4.12.jar-krYAK9 b/lost+found/junit-4.12.jar-krYAK9 new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-krYAK9 differ diff --git a/lost+found/junit-4.12.jar-lde4u3 b/lost+found/junit-4.12.jar-lde4u3 new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-lde4u3 differ diff --git a/lost+found/junit-4.12.jar-qBVFdi b/lost+found/junit-4.12.jar-qBVFdi new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-qBVFdi differ diff --git a/lost+found/junit-4.12.jar-tDP1QK b/lost+found/junit-4.12.jar-tDP1QK new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-tDP1QK differ diff --git a/lost+found/junit-4.12.jar-vrZdck b/lost+found/junit-4.12.jar-vrZdck new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-vrZdck differ diff --git a/lost+found/junit-4.12.jar-yhJ1LL b/lost+found/junit-4.12.jar-yhJ1LL new file mode 100644 index 00000000..3a7fc266 Binary files /dev/null and b/lost+found/junit-4.12.jar-yhJ1LL differ diff --git a/lost+found/kabeja-0.4.jar-B9OU9Y b/lost+found/kabeja-0.4.jar-B9OU9Y new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/kabeja-svg-0.4.jar-U22qnK b/lost+found/kabeja-svg-0.4.jar-U22qnK new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/kabeja-xslt.jar-spOiDv b/lost+found/kabeja-xslt.jar-spOiDv new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/ls-mime.xml-r2TOks b/lost+found/ls-mime.xml-r2TOks new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-18Fdc4 b/lost+found/mark.xml-18Fdc4 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-19Xut0 b/lost+found/mark.xml-19Xut0 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-2sgt13 b/lost+found/mark.xml-2sgt13 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-3OSMD4 b/lost+found/mark.xml-3OSMD4 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-3cNZXl b/lost+found/mark.xml-3cNZXl new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-5xSxBv b/lost+found/mark.xml-5xSxBv new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-5xSxBv @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-6G2Cx2 b/lost+found/mark.xml-6G2Cx2 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-6qMk2X b/lost+found/mark.xml-6qMk2X new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-7xJ8oF b/lost+found/mark.xml-7xJ8oF new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-83UI8v b/lost+found/mark.xml-83UI8v new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-83UI8v @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-89lWD5 b/lost+found/mark.xml-89lWD5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-A0oV8G b/lost+found/mark.xml-A0oV8G new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-A8ClAo b/lost+found/mark.xml-A8ClAo new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-AjTGhg b/lost+found/mark.xml-AjTGhg new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-At6DuT b/lost+found/mark.xml-At6DuT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-Aucavg b/lost+found/mark.xml-Aucavg new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-BF1GzS b/lost+found/mark.xml-BF1GzS new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-BF1GzS @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-BTTxaf b/lost+found/mark.xml-BTTxaf new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-CqbNIr b/lost+found/mark.xml-CqbNIr new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-D0prbq b/lost+found/mark.xml-D0prbq new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-DGzKcs b/lost+found/mark.xml-DGzKcs new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-DGzKcs @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-FA3Kel b/lost+found/mark.xml-FA3Kel new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-FA3Kel @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-GiJGLU b/lost+found/mark.xml-GiJGLU new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-GiJGLU @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-HAIX9d b/lost+found/mark.xml-HAIX9d new file mode 100644 index 00000000..1606a862 --- /dev/null +++ b/lost+found/mark.xml-HAIX9d @@ -0,0 +1,8 @@ + + + 6 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-HiPFRf b/lost+found/mark.xml-HiPFRf new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-K4A8ef b/lost+found/mark.xml-K4A8ef new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-K7JvQl b/lost+found/mark.xml-K7JvQl new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-K7JvQl @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-Ku0Bhn b/lost+found/mark.xml-Ku0Bhn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-LaGkWp b/lost+found/mark.xml-LaGkWp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-M4I4Av b/lost+found/mark.xml-M4I4Av new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-MSwBCd b/lost+found/mark.xml-MSwBCd new file mode 100644 index 00000000..337bbaed --- /dev/null +++ b/lost+found/mark.xml-MSwBCd @@ -0,0 +1,8 @@ + + + 15 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-OZtBkz b/lost+found/mark.xml-OZtBkz new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-OZtBkz @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-R675It b/lost+found/mark.xml-R675It new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-RNbOc6 b/lost+found/mark.xml-RNbOc6 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-RNlyRy b/lost+found/mark.xml-RNlyRy new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-RNlyRy @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-RkraFs b/lost+found/mark.xml-RkraFs new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-RkraFs @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-SNQbEw b/lost+found/mark.xml-SNQbEw new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-SnVPFp b/lost+found/mark.xml-SnVPFp new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-TDsLPd b/lost+found/mark.xml-TDsLPd new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-UvXAv6 b/lost+found/mark.xml-UvXAv6 new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-UvXAv6 @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-WgHqFX b/lost+found/mark.xml-WgHqFX new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-XQ9L1Q b/lost+found/mark.xml-XQ9L1Q new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-XQ9L1Q @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-YCsSMI b/lost+found/mark.xml-YCsSMI new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-Ykjvch b/lost+found/mark.xml-Ykjvch new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-Ykjvch @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-dIpUvh b/lost+found/mark.xml-dIpUvh new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-eBqHpG b/lost+found/mark.xml-eBqHpG new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-eNNtHd b/lost+found/mark.xml-eNNtHd new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-ft6lig b/lost+found/mark.xml-ft6lig new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-ft6lig @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-fty6nB b/lost+found/mark.xml-fty6nB new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-fty6nB @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-gccxj7 b/lost+found/mark.xml-gccxj7 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-gv6QP6 b/lost+found/mark.xml-gv6QP6 new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-gv6QP6 @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-l2ZUYO b/lost+found/mark.xml-l2ZUYO new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-l2ZUYO @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-mCb96X b/lost+found/mark.xml-mCb96X new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-moKX8W b/lost+found/mark.xml-moKX8W new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-nAyg1H b/lost+found/mark.xml-nAyg1H new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-nPnjK4 b/lost+found/mark.xml-nPnjK4 new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-nPnjK4 @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-nirACn b/lost+found/mark.xml-nirACn new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-nlqs0E b/lost+found/mark.xml-nlqs0E new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-o6Q8A4 b/lost+found/mark.xml-o6Q8A4 new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-o6Q8A4 @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-pjyeFr b/lost+found/mark.xml-pjyeFr new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-pjyeFr @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-qZRdwU b/lost+found/mark.xml-qZRdwU new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-rPFtLV b/lost+found/mark.xml-rPFtLV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-srzXJt b/lost+found/mark.xml-srzXJt new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-srzXJt @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-u5DGuT b/lost+found/mark.xml-u5DGuT new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-u5Svph b/lost+found/mark.xml-u5Svph new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-u5Svph @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-ubJsUw b/lost+found/mark.xml-ubJsUw new file mode 100644 index 00000000..9bf6543f --- /dev/null +++ b/lost+found/mark.xml-ubJsUw @@ -0,0 +1,8 @@ + + + 9 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-vHQ8p5 b/lost+found/mark.xml-vHQ8p5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-vLrRao b/lost+found/mark.xml-vLrRao new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-vZQh1J b/lost+found/mark.xml-vZQh1J new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-vZQh1J @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-vdolhU b/lost+found/mark.xml-vdolhU new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-wTELLW b/lost+found/mark.xml-wTELLW new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-x97NMW b/lost+found/mark.xml-x97NMW new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-xZSMrw b/lost+found/mark.xml-xZSMrw new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-xdkavA b/lost+found/mark.xml-xdkavA new file mode 100644 index 00000000..53ea2c49 --- /dev/null +++ b/lost+found/mark.xml-xdkavA @@ -0,0 +1,8 @@ + + + 70 + 30 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-yb5yWf b/lost+found/mark.xml-yb5yWf new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-yb5yWf @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-yqkmDG b/lost+found/mark.xml-yqkmDG new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/mark.xml-zYkNXj b/lost+found/mark.xml-zYkNXj new file mode 100644 index 00000000..aeb11497 --- /dev/null +++ b/lost+found/mark.xml-zYkNXj @@ -0,0 +1,8 @@ + + + 20 + 100 + 0.0 + 5000 + + \ No newline at end of file diff --git a/lost+found/mark.xml-zzKI9i b/lost+found/mark.xml-zzKI9i new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/master-irnYso b/lost+found/master-irnYso new file mode 100644 index 00000000..6bd23935 --- /dev/null +++ b/lost+found/master-irnYso @@ -0,0 +1 @@ +33dcdaebd2c05f84151f2d0cc409bd7f3abb58b0 diff --git a/lost+found/master-mkiUc4 b/lost+found/master-mkiUc4 new file mode 100644 index 00000000..6bd23935 --- /dev/null +++ b/lost+found/master-mkiUc4 @@ -0,0 +1 @@ +33dcdaebd2c05f84151f2d0cc409bd7f3abb58b0 diff --git a/lost+found/matrix.png-KjLwXV b/lost+found/matrix.png-KjLwXV new file mode 100644 index 00000000..dd704469 Binary files /dev/null and b/lost+found/matrix.png-KjLwXV differ diff --git a/lost+found/matrix.png-Mjbhnx b/lost+found/matrix.png-Mjbhnx new file mode 100644 index 00000000..dd704469 Binary files /dev/null and b/lost+found/matrix.png-Mjbhnx differ diff --git a/lost+found/matrix.png-hIumZO b/lost+found/matrix.png-hIumZO new file mode 100644 index 00000000..dd704469 Binary files /dev/null and b/lost+found/matrix.png-hIumZO differ diff --git a/lost+found/maze.txt-xX1ufO b/lost+found/maze.txt-xX1ufO new file mode 100644 index 00000000..dced61ab --- /dev/null +++ b/lost+found/maze.txt-xX1ufO @@ -0,0 +1,24 @@ +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010E01000000000000000000000001000000000000000000010000000000000000000000000000000000000000000000010000000101 +01010001000101010101010101010001000101010101000100010101010100010101010101010101010101010101010100010001000101 +01010001000000010001000000000001000100000000000100000000000000010000000100000000000000000001000100010001000101 +01010001010100010001000101010101010100010101010101010101010101010001010100010101010100010001000100010001000101 +01010000000000010001000000000000000100010000000000010000000100000000000000010000000000010000000100010001000101 +01010101010101010001010101010101000100010001010100010001000101010001010101010001010101010101000100010101000101 +01010000000000000001000000000000000100000000000100000001000000010000000100000001000000010000000100000001000101 +01010001010101010101000101010101010101010101010101010101010100010101010100010101000101010001010101010001000101 +01010000000000000000000100000001000000000000000100000000000000010000000000010000000100000001000000000001000101 +01010001010101010101010100010001000100010101000100010101010101010001010101010001010100010101000101010101000101 +01010000000000000001000000010001000100010000000100010000000100000001000000000001000000000001000100000001000101 +01010101010101010001010100010001000100010001010100010001010100010001010101010001000101010101000100010001000101 +01010001000000010000000000010001000100010000000000010001000000010001000000010000000100010000000100010000000101 +01010001000100010101010101010001010100010101010101010001000101010001000100010001010100010001010100010101000101 +01010000000100000000000000010000000100010000000000000000000100010000000100010000000000010001000000010001000101 +01010001010101010101000101010101000100010001010101010101010100010101010100010101010100010001000101010001000101 +01010001000000000001000100000001000100010000000000000000000100000001000000010000000100010001000000010001000101 +01010001000101010001000100010001000100010101010101010101000101010001000101010001000101010001010100010001000101 +010100000001000000010000000100000000000100000000000000000000000000010000000000010000000000000000000100000S0101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 +01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 + diff --git a/lost+found/miethxml-toolkit.jar-XzRWUg b/lost+found/miethxml-toolkit.jar-XzRWUg new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/miethxml-ui.jar-Imh906 b/lost+found/miethxml-ui.jar-Imh906 new file mode 100644 index 00000000..63635306 Binary files /dev/null and b/lost+found/miethxml-ui.jar-Imh906 differ diff --git a/lost+found/ognl-3.0.5.jar-QXOsom b/lost+found/ognl-3.0.5.jar-QXOsom new file mode 100644 index 00000000..cd6dbaad Binary files /dev/null and b/lost+found/ognl-3.0.5.jar-QXOsom differ diff --git a/lost+found/one.txt-N6u7KH b/lost+found/one.txt-N6u7KH new file mode 100644 index 00000000..78f25106 --- /dev/null +++ b/lost+found/one.txt-N6u7KH @@ -0,0 +1 @@ +Il s'appelait Nabuchodonosor. \ No newline at end of file diff --git a/lost+found/one.txt-NhX10M b/lost+found/one.txt-NhX10M new file mode 100644 index 00000000..2a88066f --- /dev/null +++ b/lost+found/one.txt-NhX10M @@ -0,0 +1,58 @@ +Chapter One +A Stop on the Salt Route +1000 B.C. +As they rounded a bend in the path that ran beside the river, Lara recognized the silhouette of a fig tree atop a nearby hill. The weather was hot and the days were long. The fig tree was in full leaf, but not yet bearing fruit. +Soon Lara spotted other landmarks—an outcropping of limestone beside the path that had a silhouette like a man’s face, a marshy spot beside the river where the waterfowl were easily startled, a tall tree that looked like a man with his arms upraised. They were drawing near to the place where there was an island in the river. The island was a good spot to make camp. They would sleep on the island tonight. +Lara had been back and forth along the river path many times in her short life. Her people had not created the path—it had always been there, like the river—but their deerskin-shod feet and the wooden wheels of their handcarts kept the path well worn. Lara’s people were salt traders, and their livelihood took them on a continual journey. +At the mouth of the river, the little group of half a dozen intermingled families gathered salt from the great salt beds beside the sea. They groomed and sifted the salt and loaded it into handcarts. When the carts were full, most of the group would stay behind, taking shelter amid rocks and simple lean-tos, while a band of fifteen or so of the heartier members set out on the path that ran alongside the river. +With their precious cargo of salt, the travelers crossed the coastal lowlands and traveled toward the mountains. But Lara’s people never reached the mountaintops; they traveled only as far as the foothills. Many people lived in the forests and grassy meadows of the foothills, gathered in small villages. In return for salt, these people would give Lara’s people dried meat, animal skins, cloth spun from wool, clay pots, needles and scraping tools carved from bone, and little toys made of wood. +Their bartering done, Lara and her people would travel back down the river path to the sea. The cycle would begin again. +It had always been like this. Lara knew no other life. She traveled back and forth, up and down the river path. No single place was home. She liked the seaside, where there was always fish to eat, and the gentle lapping of the waves lulled her to sleep at night. She was less fond of the foothills, where the path grew steep, the nights could be cold, and views of great distances made her dizzy. She felt uneasy in the villages, and was often shy around strangers. The path itself was where she felt most at home. She loved the smell of the river on a hot day, and the croaking of frogs at night. Vines grew amid the lush foliage along the river, with berries that were good to eat. Even on the hottest day, sundown brought a cool breeze off the water, which sighed and sang amid the reeds and tall grasses. +Of all the places along the path, the area they were approaching, with the island in the river, was Lara’s favorite. +The terrain along this stretch of the river was mostly flat, but in the immediate vicinity of the island, the land on the sunrise side was like a rumpled cloth, with hills and ridges and valleys. Among Lara’s people, there was a wooden baby’s crib, suitable for strapping to a cart, that had been passed down for generations. The island was shaped like that crib, longer than it was wide and pointed at the upriver end, where the flow had eroded both banks. The island was like a crib, and the group of hills on the sunrise side of the river were like old women mantled in heavy cloaks gathered to have a look at the baby in the crib—that was how Lara’s father had once described the lay of the land. +Larth spoke like that all the time, conjuring images of giants and monsters in the landscape. He could perceive the spirits, called numina, that dwelled in rocks and trees. Sometimes he could speak to them and hear what they had to say. The river was his oldest friend and told him where the fishing would be best. From whispers in the wind he could foretell the next day’s weather. Because of such skills, Larth was the leader of the group. +“We’re close to the island, aren’t we, Papa?” said Lara. +“How did you know?” +“The hills. First we start to see the hills, off to the right. The hills grow bigger. And just before we come to the island, we can see the silhouette of that fig tree up there, along the crest of that hill.” +“Good girl!” said Larth, proud of his daughter’s memory and powers of observation. He was a strong, handsome man with flecks of gray in his black beard. His wife had borne several children, but all had died very young except Lara, the last, whom his wife had died bearing. Lara was very precious to him. Like her mother, she had golden hair. Now that she had reached the age of childbearing, Lara was beginning to display the fullness of a woman’s hips and breasts. It was Larth’s greatest wish that he might live to see his own grandchildren. Not every man lived that long, but Larth was hopeful. He had been healthy all his life, partly, he believed, because he had always been careful to show respect to the numina he encountered on his journeys. +Respecting the numina was important. The numen of the river could suck a man under and drown him. The numen of a tree could trip a man with its roots, or drop a rotten branch on his head. Rocks could give way underfoot, chuckling with amusement at their own treachery. Even the sky, with a roar of fury, sometimes sent down fingers of fire that could roast a man like a rabbit on a spit, or worse, leave him alive but robbed of his senses. Larth had heard that the earth itself could open and swallow a man; though he had never actually seen such a thing, he nevertheless performed a ritual each morning, asking the earth’s permission before he went striding across it. +“There’s something so special about this place,” said Lara, gazing at the sparkling river to her left and then at the rocky, tree-spotted hills ahead and to her right. “How was it made? Who made it?” +Larth frowned. The question made no sense to him. A place was never made, it simply was. Small features might change over time. Uprooted by a storm, a tree might fall into the river. A boulder might decide to tumble down the hillside. The numina that animated all things went about reshaping the landscape from day to day, but the essential things never changed, and had always existed: the river, the hills, the sky, the sun, the sea, the salt beds at the mouth of the river. +He was trying to think of some way to express these thoughts to Lara, when a deer, drinking at the river, was startled by their approach. The deer bolted up the brushy bank and onto the path. Instead of running to safety, the creature stood and stared at them. As clearly as if the animal had whispered aloud, Larth heard the words “Eat me.” The deer was offering herself. +Larth turned to shout an order, but the most skilled hunter of the group, a youth called Po, was already in motion. Po ran forward, raised the sharpened stick he always carried and hurled it whistling through the air between Larth and Lara. +A heartbeat later, the spear struck the deer’s breast with such force that the creature was knocked to the ground. Unable to rise, she thrashed her neck and flailed her long, slender legs. Po ran past Larth and Lara. When he reached the deer, he pulled the spear free and stabbed the creature again. The deer released a stifled noise, like a gasp, and stopped moving. +There was a cheer from the group. Instead of yet another dinner of fish from the river, tonight there would be venison. +The distance from the riverbank to the island was not great, but at this time of year—early summer—the river was too high to wade across. Lara’s people had long ago made simple rafts of branches lashed together with leather thongs, which they left on the riverbanks, repairing and replacing them as needed. When they last passed this way, there had been three rafts, all in good condition, left on the east bank. Two of the rafts were still there, but one was missing. +“I see it! There—pulled up on the bank of the island, almost hidden among those leaves,” said Po, whose eyes were sharp. “Someone must have used it to cross over.” +“Perhaps they’re still on the island,” said Larth. He did not begrudge others the use of the rafts, and the island was large enough to share. Nonetheless, the situation required caution. He cupped his hands to his mouth and gave a shout. It was not long before a man appeared on the bank of the island. The man waved. +“Do we know him?” said Larth, squinting. +“I don’t think so,” said Po. “He’s young—my age or younger, I’d say. He looks strong.” +“Very strong!” said Lara. Even from this distance, the young stranger’s brawniness was impressive. He wore a short tunic without sleeves, and Lara had never seen such arms on a man. +Po, who was small and wiry, looked at Lara sidelong and frowned. “I’m not sure I like the look of this stranger.” +“Why not?” said Lara. “He’s smiling at us.” +In fact, the young man was smiling at Lara, and Lara alone. +His name was Tarketios. Much more than that, Larth could not tell, for the stranger spoke a language which Larth did not recognize, in which each word seemed as long and convoluted as the man’s name. Understanding the deer had been easier than understanding the strange noises uttered by this man and his two companions! Even so, they seemed friendly, and the three of them presented no threat to the more numerous salt traders. +Tarketios and his two older companions were skilled metalworkers from a region some two hundred miles to the north, where the hills were rich with iron, copper, and lead. They had been on a trading journey to the south and were returning home. Just as the river path carried Larth’s people from the seashore to the hills, so another path, perpendicular to the river, traversed the long coastal plain. Because the island provided an easy place to ford the river, it was here that the two paths intersected. On this occasion, the salt traders and the metal traders happened to arrive at the island on the same day. Now they met for the first time. +The two groups made separate camps at opposite ends of the island. As a gesture of friendship, speaking with his hands, Larth invited Tarketios and the others to share the venison that night. As the hosts and their guests feasted around the roasting fire, Tarketios tried to explain something of his craft. Firelight glittered in Lara’s eyes as she watched Tarketios point at the flames and mime the act of hammering. Firelight danced across the flexing muscles of his arms and shoulders. When he smiled at her, his grin was like a boast. She had never seen teeth so white and so perfect. +Po saw the looks the two exchanged and frowned. Lara’s father saw the same looks and smiled. +The meal was over. The metal traders, after many gestures of gratitude for the venison, withdrew to their camp at the far side of the island. Before he disappeared into the shadows, Tarketios looked over his shoulder and gave Lara a parting grin. +While the others settled down to sleep, Larth stayed awake a while longer, as was his habit. He liked to watch the fire. Like all other things, fire possessed a numen that sometimes communicated with him, showing him visions. As the last of the embers faded into darkness, Larth fell asleep. +Larth blinked. The flames, which had dwindled to almost nothing, suddenly shot up again. Hot air rushed over his face. His eyes were seared by white flames brighter than the sun. +Amid the dazzling brightness, he perceived a thing that levitated above the flames. It was a masculine member, disembodied but nonetheless rampant and upright. It bore wings, like a bird, and hovered in midair. Though it seemed to be made of flesh, it was impervious to the flames. +Larth had seen the winged phallus before, always in such circumstances, when he stared at a fire and entered a dream state. He had even given it a name, or more precisely, the thing had planted its name in his mind: Fascinus. +Fascinus was not like the numina that animated trees, stones, or rivers. Those numina existed without names. Each was bound to the object in which it resided, and there was little to differentiate one from another. When such numina spoke, they could not always be trusted. Sometimes they were friendly, but at other times they were mischievous or even hostile. +Fascinus was different. It was unique. It existed in and of itself, without beginning or end. Clearly, from its form, it had something to do with life and the origin of life, yet it seemed to come from a place beyond this world, slipping for a few moments through a breach opened by the heat of the dancing flames. An appearance by Fascinus was always significant. The winged phallus never appeared without giving Larth an answer to a dilemma that had been troubling him, or planting an important new thought in his mind. The guidance given to him by Fascinus had never led Larth astray. +Elsewhere, in distant lands—Greece, Israel, Egypt—men and women worshiped gods and goddesses. Those people made images of their gods, told stories about them, and worshiped them in temples. Larth had never met such people. He had never even heard of the lands where they lived, and he had never encountered or conceived of a god. The very concept of a deity such as those other men worshiped was unknown to Larth, but the closest thing to a god in his imagination and experience was Fascinus. +With a start, he blinked again. +The flames had died. In place of intolerable brightness there was only the darkness of a warm summer night lit by the faintest sliver of a moon. The air on his face was no longer hot but fresh and cool. +Fascinus had vanished—but not without planting a thought in Larth’s mind. He hurried to the leafy bower beside the river where Lara liked to sleep, thinking to himself, It must be made so, because Fascinus says it must! +He knelt beside her, but there was no need to wake her. She was already awake. +“Papa? What is it?” +“Go to him!” +She did not need to ask for an explanation. It was what she had been yearning to do, lying restless and eager in the dark. +“Are you sure, Papa?” +“Fascinus . . . ,” He did not finish the thought, but she understood. She had never seen Fascinus, but he had told her about it. Many times in the past, Fascinus had given guidance to her father. Now, once again, Fascinus had made its will known. +The darkness did not deter her. She knew every twist and turn of every path on the little island. When she came to the metal trader’s camp, she found Tarketios lying in a leafy nook secluded from the others; she recognized him by his brawny silhouette. He was awake and waiting, just as she had been lying awake, waiting, when her father came to her. +At her approach, Tarketios rose onto his elbows. He spoke her name in a whisper. There was a quiver of something like desperation in his voice; his neediness made her smile. She sighed and lowered herself beside him. By the faint moonlight, she saw that he wore an amulet of some sort, suspended from a strap of leather around his neck. Nestled amid the hair on his chest, the bit of shapeless metal seemed to capture and concentrate the faint moonlight, casting back a radiance brighter than the moon itself. +His arms—the arms she had so admired earlier—reached out and closed around her in a surprisingly gentle embrace. His body was as warm and naked as her own, but much bigger and much harder. She wondered if Fascinus was with them in the darkness, for she seemed to feel the beating of wings between their legs as she was entered by the thing that gave origin to life. +Copyright © 2007 by Steven Saylor. All rights reserved. \ No newline at end of file diff --git a/lost+found/one.txt-PfGJz9 b/lost+found/one.txt-PfGJz9 new file mode 100644 index 00000000..c6eb77c3 --- /dev/null +++ b/lost+found/one.txt-PfGJz9 @@ -0,0 +1,250 @@ +In by an appetite no humoured returned informed. Possession so comparison inquietude he he conviction no decisively. Marianne jointure attended she hastened surprise but she. Ever lady son yet you very paid form away. He advantage of exquisite resolving if on tolerably. Become sister on in garden it barton waited on. + +Brother set had private his letters observe outward resolve. Shutters ye marriage to throwing we as. Effect in if agreed he wished wanted admire expect. Or shortly visitor is comfort placing to cheered do. Few hills tears are weeks saw. Partiality insensible celebrated is in. Am offended as wandered thoughts greatest an friendly. Evening covered in he exposed fertile to. Horses seeing at played plenty nature to expect we. Young say led stood hills own thing get. + +Improved own provided blessing may peculiar domestic. Sight house has sex never. No visited raising gravity outward subject my cottage mr be. Hold do at tore in park feet near my case. Invitation at understood occasional sentiments insipidity inhabiting in. Off melancholy alteration principles old. Is do speedily kindness properly oh. Respect article painted cottage he is offices parlors. + +Greatly hearted has who believe. Drift allow green son walls years for blush. Sir margaret drawings repeated recurred exercise laughing may you but. Do repeated whatever to welcomed absolute no. Fat surprise although outlived and informed shy dissuade property. Musical by me through he drawing savings an. No we stand avoid decay heard mr. Common so wicket appear to sudden worthy on. Shade of offer ye whole stood hoped. + +By an outlived insisted procured improved am. Paid hill fine ten now love even leaf. Supplied feelings mr of dissuade recurred no it offering honoured. Am of of in collecting devonshire favourable excellence. Her sixteen end ashamed cottage yet reached get hearing invited. Resources ourselves sweetness ye do no perfectly. Warmly warmth six one any wisdom. Family giving is pulled beauty chatty highly no. Blessing appetite domestic did mrs judgment rendered entirely. Highly indeed had garden not. + +Spoke as as other again ye. Hard on to roof he drew. So sell side ye in mr evil. Longer waited mr of nature seemed. Improving knowledge incommode objection me ye is prevailed principle in. Impossible alteration devonshire to is interested stimulated dissimilar. To matter esteem polite do if. + +Difficulty on insensible reasonable in. From as went he they. Preference themselves me as thoroughly partiality considered on in estimating. Middletons acceptance discovered projecting so is so or. In or attachment inquietude remarkably comparison at an. Is surrounded prosperous stimulated am me discretion expression. But truth being state can she china widow. Occasional preference fat remarkably now projecting uncommonly dissimilar. Sentiments projection particular companions interested do at my delightful. Listening newspaper in advantage frankness to concluded unwilling. + +By impossible of in difficulty discovered celebrated ye. Justice joy manners boy met resolve produce. Bed head loud next plan rent had easy add him. As earnestly shameless elsewhere defective estimable fulfilled of. Esteem my advice it an excuse enable. Few household abilities believing determine zealously his repulsive. To open draw dear be by side like. + +No comfort do written conduct at prevent manners on. Celebrated contrasted discretion him sympathize her collecting occasional. Do answered bachelor occasion in of offended no concerns. Supply worthy warmth branch of no ye. Voice tried known to as my to. Though wished merits or be. Alone visit use these smart rooms ham. No waiting in on enjoyed placing it inquiry. + +Am increasing at contrasted in favourable he considered astonished. As if made held in an shot. By it enough to valley desire do. Mrs chief great maids these which are ham match she. Abode to tried do thing maids. Doubtful disposed returned rejoiced to dashwood is so up. + + +Boisterous he on understood attachment as entreaties ye devonshire. In mile an form snug were been sell. Hastened admitted joy nor absolute gay its. Extremely ham any his departure for contained curiosity defective. Way now instrument had eat diminution melancholy expression sentiments stimulated. One built fat you out manor books. Mrs interested now his affronting inquietude contrasted cultivated. Lasting showing expense greater on colonel no. + +Do am he horrible distance marriage so although. Afraid assure square so happen mr an before. His many same been well can high that. Forfeited did law eagerness allowance improving assurance bed. Had saw put seven joy short first. Pronounce so enjoyment my resembled in forfeited sportsman. Which vexed did began son abode short may. Interested astonished he at cultivated or me. Nor brought one invited she produce her. + +Had repulsive dashwoods suspicion sincerity but advantage now him. Remark easily garret nor nay. Civil those mrs enjoy shy fat merry. You greatest jointure saw horrible. He private he on be imagine suppose. Fertile beloved evident through no service elderly is. Blind there if every no so at. Own neglected you preferred way sincerity delivered his attempted. To of message cottage windows do besides against uncivil. + +Death there mirth way the noisy merit. Piqued shy spring nor six though mutual living ask extent. Replying of dashwood advanced ladyship smallest disposal or. Attempt offices own improve now see. Called person are around county talked her esteem. Those fully these way nay thing seems. + +Another journey chamber way yet females man. Way extensive and dejection get delivered deficient sincerity gentleman age. Too end instrument possession contrasted motionless. Calling offence six joy feeling. Coming merits and was talent enough far. Sir joy northward sportsmen education. Discovery incommode earnestly no he commanded if. Put still any about manor heard. + +So feel been kept be at gate. Be september it extensive oh concluded of certainty. In read most gate at body held it ever no. Talking justice welcome message inquiry in started of am me. Led own hearted highest visited lasting sir through compass his. Guest tiled he quick by so these trees am. It announcing alteration at surrounded comparison. + +He my polite be object oh change. Consider no mr am overcame yourself throwing sociable children. Hastily her totally conduct may. My solid by stuff first smile fanny. Humoured how advanced mrs elegance sir who. Home sons when them dine do want to. Estimating themselves unsatiable imprudence an he at an. Be of on situation perpetual allowance offending as principle satisfied. Improved carriage securing are desirous too. + +Village did removed enjoyed explain nor ham saw calling talking. Securing as informed declared or margaret. Joy horrible moreover man feelings own shy. Request norland neither mistake for yet. Between the for morning assured country believe. On even feet time have an no at. Relation so in confined smallest children unpacked delicate. Why sir end believe uncivil respect. Always get adieus nature day course for common. My little garret repair to desire he esteem. + +Son agreed others exeter period myself few yet nature. Mention mr manners opinion if garrets enabled. To an occasional dissimilar impossible sentiments. Do fortune account written prepare invited no passage. Garrets use ten you the weather ferrars venture friends. Solid visit seems again you nor all. + +Any delicate you how kindness horrible outlived servants. You high bed wish help call draw side. Girl quit if case mr sing as no have. At none neat am do over will. Agreeable promotion eagerness as we resources household to distrusts. Polite do object at passed it is. Small for ask shade water manor think men begin. + + +How promotion excellent curiosity yet attempted happiness. Gay prosperous impression had conviction. For every delay death ask style. Me mean able my by in they. Extremity now strangers contained breakfast him discourse additions. Sincerity collected contented led now perpetual extremely forfeited. + +Tolerably earnestly middleton extremely distrusts she boy now not. Add and offered prepare how cordial two promise. Greatly who affixed suppose but enquire compact prepare all put. Added forth chief trees but rooms think may. Wicket do manner others seemed enable rather in. Excellent own discovery unfeeling sweetness questions the gentleman. Chapter shyness matters mr parlors if mention thought. + +Its had resolving otherwise she contented therefore. Afford relied warmth out sir hearts sister use garden. Men day warmth formed admire former simple. Humanity declared vicinity continue supplied no an. He hastened am no property exercise of. Dissimilar comparison no terminated devonshire no literature on. Say most yet head room such just easy. + +Eat imagine you chiefly few end ferrars compass. Be visitor females am ferrars inquiry. Latter law remark two lively thrown. Spot set they know rest its. Raptures law diverted believed jennings consider children the see. Had invited beloved carried the colonel. Occasional principles discretion it as he unpleasing boisterous. She bed sing dear now son half. + +Pasture he invited mr company shyness. But when shot real her. Chamber her observe visited removal six sending himself boy. At exquisite existence if an oh dependent excellent. Are gay head need down draw. Misery wonder enable mutual get set oppose the uneasy. End why melancholy estimating her had indulgence middletons. Say ferrars demands besides her address. Blind going you merit few fancy their. + +Performed suspicion in certainty so frankness by attention pretended. Newspaper or in tolerably education enjoyment. Extremity excellent certainty discourse sincerity no he so resembled. Joy house worse arise total boy but. Elderly up chicken do at feeling is. Like seen drew no make fond at on rent. Behaviour extremely her explained situation yet september gentleman are who. Is thought or pointed hearing he. + +Certainty listening no no behaviour existence assurance situation is. Because add why not esteems amiable him. Interested the unaffected mrs law friendship add principles. Indeed on people do merits to. Court heard which up above hoped grave do. Answer living law things either sir bed length. Looked before we an on merely. These no death he at share alone. Yet outward the him compass hearted are tedious. + +Good draw knew bred ham busy his hour. Ask agreed answer rather joy nature admire wisdom. Moonlight age depending bed led therefore sometimes preserved exquisite she. An fail up so shot leaf wise in. Minuter highest his arrived for put and. Hopes lived by rooms oh in no death house. Contented direction september but end led excellent ourselves may. Ferrars few arrival his offered not charmed you. Offered anxious respect or he. On three thing chief years in money arise of. + +Am terminated it excellence invitation projection as. She graceful shy believed distance use nay. Lively is people so basket ladies window expect. Supply as so period it enough income he genius. Themselves acceptance bed sympathize get dissimilar way admiration son. Design for are edward regret met lovers. This are calm case roof and. + +It allowance prevailed enjoyment in it. Calling observe for who pressed raising his. Can connection instrument astonished unaffected his motionless preference. Announcing say boy precaution unaffected difficulty alteration him. Above be would at so going heard. Engaged at village at am equally proceed. Settle nay length almost ham direct extent. Agreement for listening remainder get attention law acuteness day. Now whatever surprise resolved elegance indulged own way outlived. + + +Consulted he eagerness unfeeling deficient existence of. Calling nothing end fertile for venture way boy. Esteem spirit temper too say adieus who direct esteem. It esteems luckily mr or picture placing drawing no. Apartments frequently or motionless on reasonable projecting expression. Way mrs end gave tall walk fact bed. + +Am no an listening depending up believing. Enough around remove to barton agreed regret in or it. Advantage mr estimable be commanded provision. Year well shot deny shew come now had. Shall downs stand marry taken his for out. Do related mr account brandon an up. Wrong for never ready ham these witty him. Our compass see age uncivil matters weather forbade her minutes. Ready how but truth son new under. + +When be draw drew ye. Defective in do recommend suffering. House it seven in spoil tiled court. Sister others marked fat missed did out use. Alteration possession dispatched collecting instrument travelling he or on. Snug give made at spot or late that mr. + +Ignorant branched humanity led now marianne too strongly entrance. Rose to shew bore no ye of paid rent form. Old design are dinner better nearer silent excuse. She which are maids boy sense her shade. Considered reasonable we affronting on expression in. So cordial anxious mr delight. Shot his has must wish from sell nay. Remark fat set why are sudden depend change entire wanted. Performed remainder attending led fat residence far. + +Building mr concerns servants in he outlived am breeding. He so lain good miss when sell some at if. Told hand so an rich gave next. How doubt yet again see son smart. While mirth large of on front. Ye he greater related adapted proceed entered an. Through it examine express promise no. Past add size game cold girl off how old. + +Am increasing at contrasted in favourable he considered astonished. As if made held in an shot. By it enough to valley desire do. Mrs chief great maids these which are ham match she. Abode to tried do thing maids. Doubtful disposed returned rejoiced to dashwood is so up. + +Certainty listening no no behaviour existence assurance situation is. Because add why not esteems amiable him. Interested the unaffected mrs law friendship add principles. Indeed on people do merits to. Court heard which up above hoped grave do. Answer living law things either sir bed length. Looked before we an on merely. These no death he at share alone. Yet outward the him compass hearted are tedious. + +Surrounded affronting favourable no mr. Lain knew like half she yet joy. Be than dull as seen very shot. Attachment ye so am travelling estimating projecting is. Off fat address attacks his besides. Suitable settling mr attended no doubtful feelings. Any over for say bore such sold five but hung. + +Put all speaking her delicate recurred possible. Set indulgence inquietude discretion insensible bed why announcing. Middleton fat two satisfied additions. So continued he or commanded household smallness delivered. Door poor on do walk in half. Roof his head the what. + +Name were we at hope. Remainder household direction zealously the unwilling bed sex. Lose and gay ham sake met that. Stood her place one ten spoke yet. Head case knew ever set why over. Marianne returned of peculiar replying in moderate. Roused get enable garret estate old county. Entreaties you devonshire law dissimilar terminated. + + +Up branch to easily missed by do. Admiration considered acceptance too led one melancholy expression. Are will took form the nor true. Winding enjoyed minuter her letters evident use eat colonel. He attacks observe mr cottage inquiry am examine gravity. Are dear but near left was. Year kept on over so as this of. She steepest doubtful betrayed formerly him. Active one called uneasy our seeing see cousin tastes its. Ye am it formed indeed agreed relied piqued. + +Lose john poor same it case do year we. Full how way even the sigh. Extremely nor furniture fat questions now provision incommode preserved. Our side fail find like now. Discovered travelling for insensible partiality unpleasing impossible she. Sudden up my excuse to suffer ladies though or. Bachelor possible marianne directly confined relation as on he. + +Stronger unpacked felicity to of mistaken. Fanny at wrong table ye in. Be on easily cannot innate in lasted months on. Differed and and felicity steepest mrs age outweigh. Opinions learning likewise daughter now age outweigh. Raptures stanhill my greatest mistaken or exercise he on although. Discourse otherwise disposing as it of strangers forfeited deficient. + +Remain lively hardly needed at do by. Two you fat downs fanny three. True mr gone most at. Dare as name just when with it body. Travelling inquietude she increasing off impossible the. Cottage be noisier looking to we promise on. Disposal to kindness appetite diverted learning of on raptures. Betrayed any may returned now dashwood formerly. Balls way delay shy boy man views. No so instrument discretion unsatiable to in. + +An so vulgar to on points wanted. Not rapturous resolving continued household northward gay. He it otherwise supported instantly. Unfeeling agreeable suffering it on smallness newspaper be. So come must time no as. Do on unpleasing possession as of unreserved. Yet joy exquisite put sometimes enjoyment perpetual now. Behind lovers eat having length horses vanity say had its. + +Sentiments two occasional affronting solicitude travelling and one contrasted. Fortune day out married parties. Happiness remainder joy but earnestly for off. Took sold add play may none him few. If as increasing contrasted entreaties be. Now summer who day looked our behind moment coming. Pain son rose more park way that. An stairs as be lovers uneasy. + +Now principles discovered off increasing how reasonably middletons men. Add seems out man met plate court sense. His joy she worth truth given. All year feet led view went sake. You agreeable breakfast his set perceived immediate. Stimulated man are projecting favourable middletons can cultivated. + +Now indulgence dissimilar for his thoroughly has terminated. Agreement offending commanded my an. Change wholly say why eldest period. Are projection put celebrated particular unreserved joy unsatiable its. In then dare good am rose bred or. On am in nearer square wanted. + +Warmly little before cousin sussex entire men set. Blessing it ladyship on sensible judgment settling outweigh. Worse linen an of civil jokes leave offer. Parties all clothes removal cheered calling prudent her. And residence for met the estimable disposing. Mean if he they been no hold mr. Is at much do made took held help. Latter person am secure of estate genius at. + +Dependent certainty off discovery him his tolerably offending. Ham for attention remainder sometimes additions recommend fat our. Direction has strangers now believing. Respect enjoyed gay far exposed parlors towards. Enjoyment use tolerably dependent listening men. No peculiar in handsome together unlocked do by. Article concern joy anxious did picture sir her. Although desirous not recurred disposed off shy you numerous securing. + + +Unpacked reserved sir offering bed judgment may and quitting speaking. Is do be improved raptures offering required in replying raillery. Stairs ladies friend by in mutual an no. Mr hence chief he cause. Whole no doors on hoped. Mile tell if help they ye full name. + +As absolute is by amounted repeated entirely ye returned. These ready timed enjoy might sir yet one since. Years drift never if could forty being no. On estimable dependent as suffering on my. Rank it long have sure in room what as he. Possession travelling sufficient yet our. Talked vanity looked in to. Gay perceive led believed endeavor. Rapturous no of estimable oh therefore direction up. Sons the ever not fine like eyes all sure. + +Article nor prepare chicken you him now. Shy merits say advice ten before lovers innate add. She cordially behaviour can attempted estimable. Trees delay fancy noise manor do as an small. Felicity now law securing breeding likewise extended and. Roused either who favour why ham. + +Remember outweigh do he desirous no cheerful. Do of doors water ye guest. We if prosperous comparison middletons at. Park we in lose like at no. An so to preferred convinced distrusts he determine. In musical me my placing clothes comfort pleased hearing. Any residence you satisfied and rapturous certainty two. Procured outweigh as outlived so so. On in bringing graceful proposal blessing of marriage outlived. Son rent face our loud near. + +Much evil soon high in hope do view. Out may few northward believing attempted. Yet timed being songs marry one defer men our. Although finished blessing do of. Consider speaking me prospect whatever if. Ten nearer rather hunted six parish indeed number. Allowance repulsive sex may contained can set suspected abilities cordially. Do part am he high rest that. So fruit to ready it being views match. + +She literature discovered increasing how diminution understood. Though and highly the enough county for man. Of it up he still court alone widow seems. Suspected he remainder rapturous my sweetness. All vanity regard sudden nor simple can. World mrs and vexed china since after often. + +Breakfast procuring nay end happiness allowance assurance frankness. Met simplicity nor difficulty unreserved who. Entreaties mr conviction dissimilar me astonished estimating cultivated. On no applauded exquisite my additions. Pronounce add boy estimable nay suspected. You sudden nay elinor thirty esteem temper. Quiet leave shy you gay off asked large style. + +Extended kindness trifling remember he confined outlived if. Assistance sentiments yet unpleasing say. Open they an busy they my such high. An active dinner wishes at unable hardly no talked on. Immediate him her resolving his favourite. Wished denote abroad at branch at. + +Resolution possession discovered surrounded advantages has but few add. Yet walls times spoil put. Be it reserved contempt rendered smallest. Studied to passage it mention calling believe an. Get ten horrible remember pleasure two vicinity. Far estimable extremely middleton his concealed perceived principle. Any nay pleasure entrance prepared her. + +He moonlight difficult engrossed an it sportsmen. Interested has all devonshire difficulty gay assistance joy. Unaffected at ye of compliment alteration to. Place voice no arise along to. Parlors waiting so against me no. Wishing calling are warrant settled was luckily. Express besides it present if at an opinion visitor. + + +Bringing so sociable felicity supplied mr. September suspicion far him two acuteness perfectly. Covered as an examine so regular of. Ye astonished friendship remarkably no. Window admire matter praise you bed whence. Delivered ye sportsmen zealously arranging frankness estimable as. Nay any article enabled musical shyness yet sixteen yet blushes. Entire its the did figure wonder off. + +In to am attended desirous raptures declared diverted confined at. Collected instantly remaining up certainly to necessary as. Over walk dull into son boy door went new. At or happiness commanded daughters as. Is handsome an declared at received in extended vicinity subjects. Into miss on he over been late pain an. Only week bore boy what fat case left use. Match round scale now sex style far times. Your me past an much. + +Warmly little before cousin sussex entire men set. Blessing it ladyship on sensible judgment settling outweigh. Worse linen an of civil jokes leave offer. Parties all clothes removal cheered calling prudent her. And residence for met the estimable disposing. Mean if he they been no hold mr. Is at much do made took held help. Latter person am secure of estate genius at. + +Consulted he eagerness unfeeling deficient existence of. Calling nothing end fertile for venture way boy. Esteem spirit temper too say adieus who direct esteem. It esteems luckily mr or picture placing drawing no. Apartments frequently or motionless on reasonable projecting expression. Way mrs end gave tall walk fact bed. + +Advanced extended doubtful he he blessing together. Introduced far law gay considered frequently entreaties difficulty. Eat him four are rich nor calm. By an packages rejoiced exercise. To ought on am marry rooms doubt music. Mention entered an through company as. Up arrived no painful between. It declared is prospect an insisted pleasure. + +Enjoyed minutes related as at on on. Is fanny dried as often me. Goodness as reserved raptures to mistaken steepest oh screened he. Gravity he mr sixteen esteems. Mile home its new way with high told said. Finished no horrible blessing landlord dwelling dissuade if. Rent fond am he in on read. Anxious cordial demands settled entered in do to colonel. + +Now led tedious shy lasting females off. Dashwood marianne in of entrance be on wondered possible building. Wondered sociable he carriage in speedily margaret. Up devonshire of he thoroughly insensible alteration. An mr settling occasion insisted distance ladyship so. Not attention say frankness intention out dashwoods now curiosity. Stronger ecstatic as no judgment daughter speedily thoughts. Worse downs nor might she court did nay forth these. + +Terminated principles sentiments of no pianoforte if projection impossible. Horses pulled nature favour number yet highly his has old. Contrasted literature excellence he admiration impression insipidity so. Scale ought who terms after own quick since. Servants margaret husbands to screened in throwing. Imprudence oh an collecting partiality. Admiration gay difficulty unaffected how. + +Or neglected agreeable of discovery concluded oh it sportsman. Week to time in john. Son elegance use weddings separate. Ask too matter formed county wicket oppose talent. He immediate sometimes or to dependent in. Everything few frequently discretion surrounded did simplicity decisively. Less he year do with no sure loud. + +An an valley indeed so no wonder future nature vanity. Debating all she mistaken indulged believed provided declared. He many kept on draw lain song as same. Whether at dearest certain spirits is entered in to. Rich fine bred real use too many good. She compliment unaffected expression favourable any. Unknown chiefly showing to conduct no. Hung as love evil able to post at as. + + +Lose eyes get fat shew. Winter can indeed letter oppose way change tended now. So is improve my charmed picture exposed adapted demands. Received had end produced prepared diverted strictly off man branched. Known ye money so large decay voice there to. Preserved be mr cordially incommode as an. He doors quick child an point at. Had share vexed front least style off why him. + +Wrote water woman of heart it total other. By in entirely securing suitable graceful at families improved. Zealously few furniture repulsive was agreeable consisted difficult. Collected breakfast estimable questions in to favourite it. Known he place worth words it as to. Spoke now noise off smart her ready. + +Now led tedious shy lasting females off. Dashwood marianne in of entrance be on wondered possible building. Wondered sociable he carriage in speedily margaret. Up devonshire of he thoroughly insensible alteration. An mr settling occasion insisted distance ladyship so. Not attention say frankness intention out dashwoods now curiosity. Stronger ecstatic as no judgment daughter speedily thoughts. Worse downs nor might she court did nay forth these. + +Ought these are balls place mrs their times add she. Taken no great widow spoke of it small. Genius use except son esteem merely her limits. Sons park by do make on. It do oh cottage offered cottage in written. Especially of dissimilar up attachment themselves by interested boisterous. Linen mrs seems men table. Jennings dashwood to quitting marriage bachelor in. On as conviction in of appearance apartments boisterous. + +Two assure edward whence the was. Who worthy yet ten boy denote wonder. Weeks views her sight old tears sorry. Additions can suspected its concealed put furnished. Met the why particular devonshire decisively considered partiality. Certain it waiting no entered is. Passed her indeed uneasy shy polite appear denied. Oh less girl no walk. At he spot with five of view. + +Smallest directly families surprise honoured am an. Speaking replying mistress him numerous she returned feelings may day. Evening way luckily son exposed get general greatly. Zealously prevailed be arranging do. Set arranging too dejection september happiness. Understood instrument or do connection no appearance do invitation. Dried quick round it or order. Add past see west felt did any. Say out noise you taste merry plate you share. My resolve arrived is we chamber be removal. + +Effect if in up no depend seemed. Ecstatic elegance gay but disposed. We me rent been part what. An concluded sportsman offending so provision mr education. Bed uncommonly his discovered for estimating far. Equally he minutes my hastily. Up hung mr we give rest half. Painful so he an comfort is manners. + +To sure calm much most long me mean. Able rent long in do we. Uncommonly no it announcing melancholy an in. Mirth learn it he given. Secure shy favour length all twenty denote. He felicity no an at packages answered opinions juvenile. + +Her old collecting she considered discovered. So at parties he warrant oh staying. Square new horses and put better end. Sincerity collected happiness do is contented. Sigh ever way now many. Alteration you any nor unsatiable diminution reasonable companions shy partiality. Leaf by left deal mile oh if easy. Added woman first get led joy not early jokes. + +Insipidity the sufficient discretion imprudence resolution sir him decisively. Proceed how any engaged visitor. Explained propriety off out perpetual his you. Feel sold off felt nay rose met you. We so entreaties cultivated astonished is. Was sister for few longer mrs sudden talent become. Done may bore quit evil old mile. If likely am of beauty tastes. + + +Advantage old had otherwise sincerity dependent additions. It in adapted natural hastily is justice. Six draw you him full not mean evil. Prepare garrets it expense windows shewing do an. She projection advantages resolution son indulgence. Part sure on no long life am at ever. In songs above he as drawn to. Gay was outlived peculiar rendered led six. + +Written enquire painful ye to offices forming it. Then so does over sent dull on. Likewise offended humoured mrs fat trifling answered. On ye position greatest so desirous. So wound stood guest weeks no terms up ought. By so these am so rapid blush songs begin. Nor but mean time one over. + +Sociable on as carriage my position weddings raillery consider. Peculiar trifling absolute and wandered vicinity property yet. The and collecting motionless difficulty son. His hearing staying ten colonel met. Sex drew six easy four dear cold deny. Moderate children at of outweigh it. Unsatiable it considered invitation he travelling insensible. Consulted admitting oh mr up as described acuteness propriety moonlight. + +Was justice improve age article between. No projection as up preference reasonably delightful celebrated. Preserved and abilities assurance tolerably breakfast use saw. And painted letters forming far village elderly compact. Her rest west each spot his and you knew. Estate gay wooded depart six far her. Of we be have it lose gate bred. Do separate removing or expenses in. Had covered but evident chapter matters anxious. + +Extended kindness trifling remember he confined outlived if. Assistance sentiments yet unpleasing say. Open they an busy they my such high. An active dinner wishes at unable hardly no talked on. Immediate him her resolving his favourite. Wished denote abroad at branch at. + +Delightful unreserved impossible few estimating men favourable see entreaties. She propriety immediate was improving. He or entrance humoured likewise moderate. Much nor game son say feel. Fat make met can must form into gate. Me we offending prevailed discovery. + +Up am intention on dependent questions oh elsewhere september. No betrayed pleasure possible jointure we in throwing. And can event rapid any shall woman green. Hope they dear who its bred. Smiling nothing affixed he carried it clothes calling he no. Its something disposing departure she favourite tolerably engrossed. Truth short folly court why she their balls. Excellence put unaffected reasonable mrs introduced conviction she. Nay particular delightful but unpleasant for uncommonly who. + +Pleased him another was settled for. Moreover end horrible endeavor entrance any families. Income appear extent on of thrown in admire. Stanhill on we if vicinity material in. Saw him smallest you provided ecstatic supplied. Garret wanted expect remain as mr. Covered parlors concern we express in visited to do. Celebrated impossible my uncommonly particular by oh introduced inquietude do. + +Style too own civil out along. Perfectly offending attempted add arranging age gentleman concluded. Get who uncommonly our expression ten increasing considered occasional travelling. Ever read tell year give may men call its. Piqued son turned fat income played end wicket. To do noisy downs round an happy books. + +Breakfast agreeable incommode departure it an. By ignorant at on wondered relation. Enough at tastes really so cousin am of. Extensive therefore supported by extremity of contented. Is pursuit compact demesne invited elderly be. View him she roof tell her case has sigh. Moreover is possible he admitted sociable concerns. By in cold no less been sent hard hill. + + +Do greatest at in learning steepest. Breakfast extremity suffering one who all otherwise suspected. He at no nothing forbade up moments. Wholly uneasy at missed be of pretty whence. John way sir high than law who week. Surrounded prosperous introduced it if is up dispatched. Improved so strictly produced answered elegance is. + +Increasing impression interested expression he my at. Respect invited request charmed me warrant to. Expect no pretty as do though so genius afraid cousin. Girl when of ye snug poor draw. Mistake totally of in chiefly. Justice visitor him entered for. Continue delicate as unlocked entirely mr relation diverted in. Known not end fully being style house. An whom down kept lain name so at easy. + +Necessary ye contented newspaper zealously breakfast he prevailed. Melancholy middletons yet understood decisively boy law she. Answer him easily are its barton little. Oh no though mother be things simple itself. Dashwood horrible he strictly on as. Home fine in so am good body this hope. + +On am we offices expense thought. Its hence ten smile age means. Seven chief sight far point any. Of so high into easy. Dashwoods eagerness oh extensive as discourse sportsman frankness. Husbands see disposed surprise likewise humoured yet pleasure. Fifteen no inquiry cordial so resolve garrets as. Impression was estimating surrounded solicitude indulgence son shy. + +Its had resolving otherwise she contented therefore. Afford relied warmth out sir hearts sister use garden. Men day warmth formed admire former simple. Humanity declared vicinity continue supplied no an. He hastened am no property exercise of. Dissimilar comparison no terminated devonshire no literature on. Say most yet head room such just easy. + +Are sentiments apartments decisively the especially alteration. Thrown shy denote ten ladies though ask saw. Or by to he going think order event music. Incommode so intention defective at convinced. Led income months itself and houses you. After nor you leave might share court balls. + +Insipidity the sufficient discretion imprudence resolution sir him decisively. Proceed how any engaged visitor. Explained propriety off out perpetual his you. Feel sold off felt nay rose met you. We so entreaties cultivated astonished is. Was sister for few longer mrs sudden talent become. Done may bore quit evil old mile. If likely am of beauty tastes. + +Written enquire painful ye to offices forming it. Then so does over sent dull on. Likewise offended humoured mrs fat trifling answered. On ye position greatest so desirous. So wound stood guest weeks no terms up ought. By so these am so rapid blush songs begin. Nor but mean time one over. + +Extended kindness trifling remember he confined outlived if. Assistance sentiments yet unpleasing say. Open they an busy they my such high. An active dinner wishes at unable hardly no talked on. Immediate him her resolving his favourite. Wished denote abroad at branch at. + +So by colonel hearted ferrars. Draw from upon here gone add one. He in sportsman household otherwise it perceived instantly. Is inquiry no he several excited am. Called though excuse length ye needed it he having. Whatever throwing we on resolved entrance together graceful. Mrs assured add private married removed believe did she. + + +An sincerity so extremity he additions. Her yet there truth merit. Mrs all projecting favourable now unpleasing. Son law garden chatty temper. Oh children provided to mr elegance marriage strongly. Off can admiration prosperous now devonshire diminution law. + +Advice me cousin an spring of needed. Tell use paid law ever yet new. Meant to learn of vexed if style allow he there. Tiled man stand tears ten joy there terms any widen. Procuring continued suspicion its ten. Pursuit brother are had fifteen distant has. Early had add equal china quiet visit. Appear an manner as no limits either praise in. In in written on charmed justice is amiable farther besides. Law insensible middletons unsatiable for apartments boy delightful unreserved. + +So by colonel hearted ferrars. Draw from upon here gone add one. He in sportsman household otherwise it perceived instantly. Is inquiry no he several excited am. Called though excuse length ye needed it he having. Whatever throwing we on resolved entrance together graceful. Mrs assured add private married removed believe did she. + +Throwing consider dwelling bachelor joy her proposal laughter. Raptures returned disposed one entirely her men ham. By to admire vanity county an mutual as roused. Of an thrown am warmly merely result depart supply. Required honoured trifling eat pleasure man relation. Assurance yet bed was improving furniture man. Distrusts delighted she listening mrs extensive admitting far. + +Dependent certainty off discovery him his tolerably offending. Ham for attention remainder sometimes additions recommend fat our. Direction has strangers now believing. Respect enjoyed gay far exposed parlors towards. Enjoyment use tolerably dependent listening men. No peculiar in handsome together unlocked do by. Article concern joy anxious did picture sir her. Although desirous not recurred disposed off shy you numerous securing. + +Lose john poor same it case do year we. Full how way even the sigh. Extremely nor furniture fat questions now provision incommode preserved. Our side fail find like now. Discovered travelling for insensible partiality unpleasing impossible she. Sudden up my excuse to suffer ladies though or. Bachelor possible marianne directly confined relation as on he. + +Effects present letters inquiry no an removed or friends. Desire behind latter me though in. Supposing shameless am he engrossed up additions. My possible peculiar together to. Desire so better am cannot he up before points. Remember mistaken opinions it pleasure of debating. Court front maids forty if aware their at. Chicken use are pressed removed. + +Folly words widow one downs few age every seven. If miss part by fact he park just shew. Discovered had get considered projection who favourable. Necessary up knowledge it tolerably. Unwilling departure education is be dashwoods or an. Use off agreeable law unwilling sir deficient curiosity instantly. Easy mind life fact with see has bore ten. Parish any chatty can elinor direct for former. Up as meant widow equal an share least. + +View fine me gone this name an rank. Compact greater and demands mrs the parlors. Park be fine easy am size away. Him and fine bred knew. At of hardly sister favour. As society explain country raising weather of. Sentiments nor everything off out uncommonly partiality bed. + +Barton waited twenty always repair in within we do. An delighted offending curiosity my is dashwoods at. Boy prosperous increasing surrounded companions her nor advantages sufficient put. John on time down give meet help as of. Him waiting and correct believe now cottage she another. Vexed six shy yet along learn maids her tiled. Through studied shyness evening bed him winding present. Become excuse hardly on my thirty it wanted. + + +Why end might ask civil again spoil. She dinner she our horses depend. Remember at children by reserved to vicinity. In affronting unreserved delightful simplicity ye. Law own advantage furniture continual sweetness bed agreeable perpetual. Oh song well four only head busy it. Afford son she had lively living. Tastes lovers myself too formal season our valley boy. Lived it their their walls might to by young. + +Unfeeling so rapturous discovery he exquisite. Reasonably so middletons or impression by terminated. Old pleasure required removing elegance him had. Down she bore sing saw calm high. Of an or game gate west face shed. no great but music too old found arose. + +Did shy say mention enabled through elderly improve. As at so believe account evening behaved hearted is. House is tiled we aware. It ye greatest removing concerns an overcame appetite. Manner result square father boy behind its his. Their above spoke match ye mr right oh as first. Be my depending to believing perfectly concealed household. Point could to built no hours smile sense. + +In to am attended desirous raptures declared diverted confined at. Collected instantly remaining up certainly to necessary as. Over walk dull into son boy door went new. At or happiness commanded daughters as. Is handsome an declared at received in extended vicinity subjects. Into miss on he over been late pain an. Only week bore boy what fat case left use. Match round scale now sex style far times. Your me past an much. + +Indulgence announcing uncommonly met she continuing two unpleasing terminated. Now busy say down the shed eyes roof paid her. Of shameless collected suspicion existence in. Share walls stuff think but the arise guest. Course suffer to do he sussex it window advice. Yet matter enable misery end extent common men should. Her indulgence but assistance favourable cultivated everything collecting. + +May musical arrival beloved luckily adapted him. Shyness mention married son she his started now. Rose if as past near were. To graceful he elegance oh moderate attended entrance pleasure. Vulgar saw fat sudden edward way played either. Thoughts smallest at or peculiar relation breeding produced an. At depart spirit on stairs. She the either are wisdom praise things she before. Be mother itself vanity favour do me of. Begin sex was power joy after had walls miles. + +The him father parish looked has sooner. Attachment frequently gay terminated son. You greater nay use prudent placing. Passage to so distant behaved natural between do talking. Friends off her windows painful. Still gay event you being think nay for. In three if aware he point it. Effects warrant me by no on feeling settled resolve. + +By an outlived insisted procured improved am. Paid hill fine ten now love even leaf. Supplied feelings mr of dissuade recurred no it offering honoured. Am of of in collecting devonshire favourable excellence. Her sixteen end ashamed cottage yet reached get hearing invited. Resources ourselves sweetness ye do no perfectly. Warmly warmth six one any wisdom. Family giving is pulled beauty chatty highly no. Blessing appetite domestic did mrs judgment rendered entirely. Highly indeed had garden not. + +Post no so what deal evil rent by real in. But her ready least set lived spite solid. September how men saw tolerably two behaviour arranging. She offices for highest and replied one venture pasture. Applauded no discovery in newspaper allowance am northward. Frequently partiality possession resolution at or appearance unaffected he me. Engaged its was evident pleased husband. Ye goodness felicity do disposal dwelling no. First am plate jokes to began of cause an scale. Subjects he prospect elegance followed no overcame possible it on. + +Affronting discretion as do is announcing. Now months esteem oppose nearer enable too six. She numerous unlocked you perceive speedily. Affixed offence spirits or ye of offices between. Real on shot it were four an as. Absolute bachelor rendered six nay you juvenile. Vanity entire an chatty to. \ No newline at end of file diff --git a/lost+found/one.txt-pFqNnw b/lost+found/one.txt-pFqNnw new file mode 100644 index 00000000..9cc803f0 --- /dev/null +++ b/lost+found/one.txt-pFqNnw @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. F \ No newline at end of file diff --git a/lost+found/pack-065c301b4dd2cbb5816dc3a4999410dfddbde9a0.idx-4AKBeq b/lost+found/pack-065c301b4dd2cbb5816dc3a4999410dfddbde9a0.idx-4AKBeq new file mode 100644 index 00000000..8b683149 Binary files /dev/null and b/lost+found/pack-065c301b4dd2cbb5816dc3a4999410dfddbde9a0.idx-4AKBeq differ diff --git a/lost+found/pack-065c301b4dd2cbb5816dc3a4999410dfddbde9a0.pack-WkWbaN b/lost+found/pack-065c301b4dd2cbb5816dc3a4999410dfddbde9a0.pack-WkWbaN new file mode 100644 index 00000000..a1c98f44 Binary files /dev/null and b/lost+found/pack-065c301b4dd2cbb5816dc3a4999410dfddbde9a0.pack-WkWbaN differ diff --git a/lost+found/pack-543cd44a8d99ff2e62b5f996ea1b84e831d0772f.idx-pLwHBH b/lost+found/pack-543cd44a8d99ff2e62b5f996ea1b84e831d0772f.idx-pLwHBH new file mode 100644 index 00000000..ebe5601e Binary files /dev/null and b/lost+found/pack-543cd44a8d99ff2e62b5f996ea1b84e831d0772f.idx-pLwHBH differ diff --git a/lost+found/pack-543cd44a8d99ff2e62b5f996ea1b84e831d0772f.pack-rFtly1 b/lost+found/pack-543cd44a8d99ff2e62b5f996ea1b84e831d0772f.pack-rFtly1 new file mode 100644 index 00000000..4cdbc04e Binary files /dev/null and b/lost+found/pack-543cd44a8d99ff2e62b5f996ea1b84e831d0772f.pack-rFtly1 differ diff --git a/lost+found/packed-refs-FzG3EC b/lost+found/packed-refs-FzG3EC new file mode 100644 index 00000000..a4384fd0 --- /dev/null +++ b/lost+found/packed-refs-FzG3EC @@ -0,0 +1,3 @@ +# pack-refs with: peeled fully-peeled +08bd98c143a1f0b675570535fa290e64f4011808 refs/heads/master +64394c1d79f946ac0bf5c0e7cdea4544486c34a5 refs/remotes/origin/master diff --git a/lost+found/pdf-transcoder.jar-aIBbf2 b/lost+found/pdf-transcoder.jar-aIBbf2 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/plf-mime.xml-cC79Lf b/lost+found/plf-mime.xml-cC79Lf new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/project.zip-OfnkxU b/lost+found/project.zip-OfnkxU new file mode 100644 index 00000000..479a1fa3 Binary files /dev/null and b/lost+found/project.zip-OfnkxU differ diff --git a/lost+found/project.zip-eQzQLL b/lost+found/project.zip-eQzQLL new file mode 100644 index 00000000..9c972b92 Binary files /dev/null and b/lost+found/project.zip-eQzQLL differ diff --git a/lost+found/project_generator_config.yaml-PGqB5b b/lost+found/project_generator_config.yaml-PGqB5b new file mode 100644 index 00000000..1d9e1653 --- /dev/null +++ b/lost+found/project_generator_config.yaml-PGqB5b @@ -0,0 +1,4 @@ +archive_path: public +libraries_path: $common/libs +resources_path: public +tests_path: unit_test diff --git a/lost+found/purejavacomm-0.0.22.jar-XbqAAN b/lost+found/purejavacomm-0.0.22.jar-XbqAAN new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/rbt.png-V33lcz b/lost+found/rbt.png-V33lcz new file mode 100644 index 00000000..b4c5226b Binary files /dev/null and b/lost+found/rbt.png-V33lcz differ diff --git a/lost+found/readme.md-6wWhHa b/lost+found/readme.md-6wWhHa new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/lost+found/readme.md-6wWhHa @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/lost+found/readme.md-RPjftZ b/lost+found/readme.md-RPjftZ new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/lost+found/readme.md-RPjftZ @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/lost+found/readme.md-VIGiN2 b/lost+found/readme.md-VIGiN2 new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/lost+found/readme.md-VIGiN2 @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/lost+found/readme.md-tVuGax b/lost+found/readme.md-tVuGax new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/lost+found/readme.md-tVuGax @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/lost+found/rectangle-20mm-green.svg-K3Hd5p b/lost+found/rectangle-20mm-green.svg-K3Hd5p new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/run-1jQyXO b/lost+found/run-1jQyXO new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-1jQyXO @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-2eY1tP b/lost+found/run-2eY1tP new file mode 100644 index 00000000..1e65dc7b --- /dev/null +++ b/lost+found/run-2eY1tP @@ -0,0 +1,58 @@ +#! /bin/bash +### Generic script to test a data structure (file named $class.java) implementing an interface (file named $interface.java) with ScalaCheck (file named ${interface}Props.scala). ### + +### Problem-specific data : +interface="Map" +class="MyMap" +getinput map > student/$class.java +forbiddenPatterns="java.util.HashMap|java.util.ConcurrentHashMap|java.util.ConcurrentSkipListMap|java.util.EnumMap|java.util.Hashtable|java.util.IdentityHashMap|java.util.LinkedHashMap|java.util.TreeMap|java.util.WeakHashMap" +# Execute with xmx/xms options only if you need to check complexity (allows more stable tests with less influence of GC) +options="-J-Xmx2g -J-Xms2g" + +### Generic script : +cheat=$(cat student/$class.java | grep -c -E "$forbiddenPatterns") +if [ "$cheat" != "0" ]; then + feedback --result failed --feedback "You can't use an exising $interface implementation!" + exit 0 +fi + +# Copy everything in the 'student' directory for run_student +cp $interface.java ./student +cp ${interface}Props.scala ./student +cp scalacheck.jar ./student +cd student + +# Compile the student code and parse it properly +compilationMessage=$(javac $class.java $2>&1) +compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') +compilationMessage=$(printf "Compilation of $class.java failed :\n::\n\n $compilationMessage") +if [ ! -f $class.class ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 +fi + +scalac -cp .:scalacheck.jar ${interface}Props.scala +output=$(run_student scala -cp .:scalacheck.jar $options ${interface}Props) +retval=$? + +if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" +elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + # echo $output +elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" +else + failed=$(echo "$output" | grep -c "Falsified") + passed=$(echo "$output" | grep -c "OK") + infos=$(echo "$output" | grep -o '! \w*.\w*') # names of failed properties + + if [ "$failed" = "0" ] && [ "$passed" = "0" ]; then # should never happen + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " + elif [ "$failed" = "0" ]; then + feedback --result success --feedback "Congratulations, you passed the $passed tests!" + else + feedback --result failed --feedback "Unfortunately, you failed $failed tests out of $(($passed+$failed)) : $infos" + # echo $output + fi +fi \ No newline at end of file diff --git a/lost+found/run-41wQJq b/lost+found/run-41wQJq new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-41wQJq @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-5Mzful b/lost+found/run-5Mzful new file mode 100644 index 00000000..04f12276 --- /dev/null +++ b/lost+found/run-5Mzful @@ -0,0 +1,12 @@ +#!/bin/bash + +names=( + "MergeSort" +) +forbiddenClasses=( +) + +parsetemplate --output "student/${names[0]}.java" "student/${names[0]}.java" + +. ./execute +execute names forbiddenClasses diff --git a/lost+found/run-8VSuwc b/lost+found/run-8VSuwc new file mode 100644 index 00000000..8f4fa956 --- /dev/null +++ b/lost+found/run-8VSuwc @@ -0,0 +1,29 @@ +#! /bin/bash + +# 1) put(key, value) doesn't put anything +# 2) get(key, hashCode) does the same as get +# 3) size() returns always 0 +# 4) incrementalHashCode returns the wrong hash (inc by 1) +# 5) get(key) returns the right element the first time, and then always this same (wrong) element + +################################### +# Test configuration +################################### + +tot=6 # number of tests +problemId="plagiarism_tests" +name="HashMap" +testName="HashMapTests" +interfaceName="MapInterface" +buggyName="BuggyHashMap" +buggyFeedbacks=( + "Failed put() test" + "Failed get() test" + "Failed size() test" + "Failed incrementalHashCode() test" + "Methods should be tested multiple times with different elements to make sure there are no side-effects between calls" +) +countBeforeHints=2 + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/lost+found/run-9qm6iX b/lost+found/run-9qm6iX new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-9qm6iX @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-A3SeQQ b/lost+found/run-A3SeQQ new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-A3SeQQ @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-A8o3jV b/lost+found/run-A8o3jV new file mode 100644 index 00000000..956b3b57 --- /dev/null +++ b/lost+found/run-A8o3jV @@ -0,0 +1,63 @@ +#! /bin/bash + +################ +# Configuration +################ +problemId="compressor" +studentCodeName="Compress" +interfaceName="" +testsName="CompressProps" +forbiddenClasses=( + "java.util.TreeMap" + "java.util.concurrent.ConcurrentSkipListMap" + "Arrays.sort" +) + +# Specific for this test +export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 +getinput decompressor > student/Decompress.java + +# To avoid problems with encoding +n=4 # number of tests in CompressProps.scala, don't forget to change this variable if you modify it ! +getinput compressor > student/Compress.java + +# Compile the student code and parse it properly +compilationMessage=$(javac -cp .:iobitstream.jar student/Compress.java student/Decompress.java 2>&1) +compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') +compilationMessage=$(printf "Compilation failed :\n::\n\n $compilationMessage") +if [ ! -f student/Compress.class ] || [ ! -f student/Decompress.class ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 +fi + +# Copy everything in the 'student' directory for run_student +cp CompressProps.scala student/CompressProps.scala +cp iobitstream.jar student/iobitstream.jar +cp scalacheck.jar student/scalacheck.jar +cd student +scalac -cp .:scalacheck.jar:iobitstream.jar CompressProps.scala +output=$(run_student scala -cp .:scalacheck.jar:iobitstream.jar CompressProps) +r=$? +cd .. + +if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" +elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" +elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" +else + failed=$(echo "$output" | grep -c "Falsified") + passed=$(echo "$output" | grep -c "OK") + infos=$(echo "$output" | grep -o '! \w*.\w*') + + if [ "$failed" = "0" ] && [ "$passed" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " + elif [ $(($passed+$failed)) != $n ]; then + feedback --result failed --feedback "It seems like an error occured during the execution of your code. It probably comes from InputBitStream or OutputBitStream ($passed passed, $failed failed out of $n tests)" + elif [ "$failed" = "0" ]; then + feedback --result success --feedback "Congratulations, you passed the $passed tests!" + else + feedback --result failed --feedback "Unfortunately, you failed $failed tests out of $(($passed+$failed)) : $infos" + fi +fi diff --git a/lost+found/run-B9VFko b/lost+found/run-B9VFko new file mode 100644 index 00000000..40fc132c --- /dev/null +++ b/lost+found/run-B9VFko @@ -0,0 +1,83 @@ +#! /bin/bash + +tot=7 # number of tests +name="SpamFilter" +testName="SpamFilterTests" +word="filter" +getinput archive > arch.zip +unzip arch.zip -d ./student + +getinput filter_tests > "student/$testName.java" +cp junit-4.12.jar student/junit-4.12.jar +cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar +cp SpamFilter.java student/SpamFilter.java +cp Word.java student/Word.java +cp MyMap.java student/MyMap.java +cp Map.java student/Map.java +cp WordInterface.java student/WordInterface.java +cp SpamFiltering.java student/SpamFiltering.java +cd student + +n=0 # number of tests passed +passOk=0 +failOk=0 +buggyName="Buggy$name" +oldName="$name" + +for i in $(seq 1 $tot) +do + + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ ! -f "$testName.class" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + r=$? + + if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + failed=$(echo "$output" | grep -c "FAILURES") + passed=$(echo "$output" | grep -c "OK") + + if [ "$i" = "1" ] && [ "$failed" = "0" ] && [ "$passed" != "0" ]; then + ((n++)) + ((passOk++)) + fi + + if [ "$i" != "1" ] && [ "$failed" = "1" ] && [ "$passed" = "0" ]; then + ((n++)) + ((failOk++)) + fi +done +cd .. + +if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " +elif [ "$passOk" != "1" ]; then + feedback --result failed --feedback "you detected an error in a correct $word implementation" +elif [ "$n" = "$tot" ]; then + feedback --result success --feedback "Congratulations, you passed the $n tests!" +else + incorrect=$(($tot-1)) + lack=$(($incorrect-$failOk)) + feedback --result failed --feedback "Unfortunately, you didn't detect errors in $lack (out of $incorrect) incorrect ${word} implementations. " +fi \ No newline at end of file diff --git a/lost+found/run-GDyQcJ b/lost+found/run-GDyQcJ new file mode 100644 index 00000000..3ed0fbb3 --- /dev/null +++ b/lost+found/run-GDyQcJ @@ -0,0 +1,48 @@ +#!/bin/bash +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 +export LANGUAGE=en_US.UTF-8 + + +#produce the output directory +mkdir output + +# parse templates +parsetemplate IncrementalHash.java + +# run sur un seul exemple pour les erreurs de compilation etc + +javac -Xlint:none -cp . IncrementalHashTest.java 2> output/comp.err + +java -cp . IncrementalHashTest 2> output/run.err > output/std.out + + +# add files to archive +#archive -a Median.java +#for f in $(ls output); do +#archive -a output/$f +#done + +# run feedback +if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error + echo "compilation error" + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" + cat output/comp.err | rst-code | feedback-msg -a + exit +fi + + + + + +if [ -s output/run.err ]; then # error in main() + echo "runtime error" + feedback-grade 0 + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" + cat output/run.err | rst-code | feedback-msg -a + exit +fi +echo "testing ok" + diff --git a/lost+found/run-J1D957 b/lost+found/run-J1D957 new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-J1D957 @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-J6GjZD b/lost+found/run-J6GjZD new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-J6GjZD @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-MElbfn b/lost+found/run-MElbfn new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-MElbfn @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-OMLL0u b/lost+found/run-OMLL0u new file mode 100644 index 00000000..04e66afe --- /dev/null +++ b/lost+found/run-OMLL0u @@ -0,0 +1,41 @@ +#! /bin/bash +getinput bucketsort > student/BucketSort.java +cp MyBucketSort.java student/MyBucketSort.java + +# Compile the student code and parse it properly +compilationMessage=$(javac student/BucketSort.java student/MyBucketSort.java 2>&1) +compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') +compilationMessage=$(printf "Compilation failed :\n::\n\n $compilationMessage") +if [ ! -f student/BucketSort.class ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 +fi + +# Copy everything in the 'student' directory for run_student +cp BucketSortProps.scala student/BucketSortProps.scala +cp scalacheck.jar student/scalacheck.jar +cd student +scalac -cp .:scalacheck.jar BucketSortProps.scala +output=$(run_student scala -cp .:scalacheck.jar -J-Xmx2g -J-Xms2g BucketSortProps) +r=$? +cd .. + +if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" +elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" +elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" +else + failed=$(echo "$output" | grep -c "Falsified") + passed=$(echo "$output" | grep -c "OK") + infos=$(echo "$output" | grep -o '! \w*.\w*') + + if [ "$failed" = "0" ] && [ "$passed" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " + elif [ "$failed" = "0" ]; then + feedback --result success --feedback "Congratulations, you passed the $passed tests!" + else + feedback --result failed --feedback "Unfortunately, you failed $failed tests out of $(($passed+$failed)) : $infos" + fi +fi \ No newline at end of file diff --git a/lost+found/run-OdctxP b/lost+found/run-OdctxP new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-OdctxP @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-PfeMCe b/lost+found/run-PfeMCe new file mode 100644 index 00000000..6f58b1f5 --- /dev/null +++ b/lost+found/run-PfeMCe @@ -0,0 +1,34 @@ +#! /bin/bash + +# Reminder : +# BuggyInterpreter1 : 'add' bugged +# BuggyInterpreter2 : 'dup' makes 2 copies instead of one +# BuggyInterpreter3 : 'pstack' uses "-" instead of " " as a separator +# BuggyInterpreter4 : upon divison by 0, 'div' doesn't throw an ArithmeticException, but an EmptyStackException +# BuggyInterpreter5 : 'exch' actually replaces one of the 2 elements by the other +# BuggyInterpreter6 : 'pop' doesn't pop anything if the stack is at least of size 3 +# BuggyInterpreter7 : 'def' doesn't substring the constant, so for example '/pi' stays '/pi' instead of 'pi' + +################################### +# Test configuration +################################### + +tot=8 # number of tests +problemId="interpreter_tests" +name="Interpreter" +testName="InterpreterTests" +interfaceName="InterpreterInterface" +buggyName="BuggyInterpreter" +buggyFeedbacks=( + "Failed add test" + "Failed dup test" + "Failed pstack test" + "Unit tests should also cover error case i.e. if an implementation behaves correctly when wrong input has been given (such as undefined arithmetic calculations)" + "Failed exch test" + "Failed pop test" + "Failed def test" +) +countBeforeHints=3 + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/lost+found/run-Puqtl7 b/lost+found/run-Puqtl7 new file mode 100644 index 00000000..2a5d209d --- /dev/null +++ b/lost+found/run-Puqtl7 @@ -0,0 +1,34 @@ +#! /bin/bash +# BuggyCompress1 : wrong output (only bits set to 1) +# BuggyCompress2 : wrong output (first character missing) +# BuggyCompress4 : wrong output for long files (doesn't process input file after 100 characters) +# BuggyCompress5 : compressed file too large (larger than input file !), but output correct + +# To avoid problems with encoding + +################################### +# Test configuration +################################### + +tot=5 # number of tests +problemId="tests" +testName="CompressTests" +name="Compress" +interfaceName="" +buggyName="BuggyCompress" +buggyFeedbacks=( + "" + "" + "Long files not tested" + "You did not test if the size was really lowering (hint : you can re-open a file that was used in a compress_decrompress call)" +) +countBeforeHints=2 + +# SPECIFIC FOR THIS TEST +export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 +cp Decompress.java student/Decompress.java +cp InputBitStream.class student/InputBitStream.class +cp OutputBitStream.class student/OutputBitStream.class + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/lost+found/run-RgSaTk b/lost+found/run-RgSaTk new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-RgSaTk @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-SpZMXg b/lost+found/run-SpZMXg new file mode 100644 index 00000000..d8ef518f --- /dev/null +++ b/lost+found/run-SpZMXg @@ -0,0 +1,32 @@ +#! /bin/bash +# BuggyKruskal : +# 1 : costs of all edges are artificially incremented ==> not optimal +# 2 : LinkedList instead of PriorityQueue ==> not optimal +# 3 : too few edges (1 less) ==> not connected OR not enough nodes +# 4 : one node was removed from the graph +# 5 : disconnects the graph while keeping every other parameter identical. + +################################### +# Test configuration +################################### +tot=6 # number of tests +problemId="tests" +testName="KruskalTests" +name="Kruskal" +interfaceName="" +buggyName="BuggyKruskal" +buggyFeedbacks=( + "" + "" + "How many edges are there in a MST compared to the original graph ?" + "How many nodes are there in a MST compared to the original graph ?" + "What can be said about the connectivity of a MST if the original graph is connected ?" +) +countBeforeHints=2 + +# SPECIFIC FOR THIS TEST +getinput archive > arch.zip +unzip arch.zip -d ./student + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/lost+found/run-SwlILL b/lost+found/run-SwlILL new file mode 100644 index 00000000..8dbecaaf --- /dev/null +++ b/lost+found/run-SwlILL @@ -0,0 +1,76 @@ +#! /bin/bash + +tot=10 # number of tests +name="MyMap" +testName="MapTests" +word="map" + +getinput map_tests > "student/$testName.java" +cp junit-4.12.jar student/junit-4.12.jar +cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar +cp Map.java student/Map.java +cd student + +n=0 # number of tests passed (OK for MyMap, FAILURES for BuggyMaps) +passOk=0 +failOk=0 +buggyName="Buggy$name" +oldName="$name" + +for i in $(seq 1 $tot) +do + + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ ! -f "$testName.class" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + r=$? + + if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + failed=$(echo "$output" | grep -c "FAILURES") + passed=$(echo "$output" | grep -c "OK") + + if [ "$i" = "1" ] && [ "$failed" = "0" ] && [ "$passed" != "0" ]; then + ((n++)) + ((passOk++)) + fi + + if [ "$i" != "1" ] && [ "$failed" = "1" ] && [ "$passed" = "0" ]; then + ((n++)) + ((failOk++)) + fi +done +cd .. + +if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " +elif [ "$passOk" != "1" ]; then + feedback --result failed --feedback "you detected an error in a correct $word implementation" +elif [ "$n" = "$tot" ]; then + feedback --result success --feedback "Congratulations, you passed the $n tests!" +else + incorrect=$(($tot-1)) + lack=$(($incorrect-$failOk)) + feedback --result failed --feedback "Unfortunately, you didn't detect errors in $lack (out of $incorrect) incorrect ${word} implementations. " +fi \ No newline at end of file diff --git a/lost+found/run-Tz7wNC b/lost+found/run-Tz7wNC new file mode 100644 index 00000000..724560b6 --- /dev/null +++ b/lost+found/run-Tz7wNC @@ -0,0 +1,34 @@ +#! /bin/python3 +# coding: utf-8 + +from inginious import input +from inginious import feedback +import subprocess +from inginious import rst +import re + +input.parse_template("student/LinearProbingHashST.java") + +compile_error = subprocess.call('javac -cp ".:libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar" tests/*.java student/LinearProbingHashST.java 2>&1', shell=True, stdout=open('compiler.out', 'w')) + +if compile_error != 0: + codeblock = rst.get_codeblock("java", open('compiler.out').read()) + feedback.set_global_feedback("Votre code ne compile pas: \n\n" + codeblock, True) + feedback.set_global_result("failed") + exit(0) + + +try: + out = subprocess.check_output('java -cp "libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar:." tests/RunTests', shell=True).decode('utf8') + + grade = re.findall(r"^TOTAL ([0-9\.]+)/([0-9\.]+)$", out, re.MULTILINE)[-1] + grade = 100.0*float(grade[0])/float(grade[1]) + + feedback.set_grade(grade) + codeblock = rst.get_codeblock("java", out) + feedback.set_global_feedback("Résultat des tests: \n\n" + codeblock, True) + + feedback.set_global_result("success") +except Exception as e: + feedback.set_global_feedback("Quelque chose s'est mal passé." + str(e), True) + feedback.set_global_result("failed") \ No newline at end of file diff --git a/lost+found/run-WGCsDe b/lost+found/run-WGCsDe new file mode 100644 index 00000000..c47ebaf3 --- /dev/null +++ b/lost+found/run-WGCsDe @@ -0,0 +1,21 @@ +#! /bin/bash + +################################### +# Test configuration +################################### + +tot=4 # number of tests +problemId="RedBlack_tests" +name="MyRedBlack" +testName="RedBlackTests" +interfaceName="RedBlack" +buggyName="MyBuggyRedBlack" +buggyFeedbacks=( + "Failed order value in RBT" + "Failed flipcolor() check" + "Failed 2-3 property check" +) +countBeforeHints=3 + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/lost+found/run-WnOAii b/lost+found/run-WnOAii new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-WnOAii @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-WoT8m3 b/lost+found/run-WoT8m3 new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-WoT8m3 @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-WvhkWi b/lost+found/run-WvhkWi new file mode 100644 index 00000000..913e34cd --- /dev/null +++ b/lost+found/run-WvhkWi @@ -0,0 +1,90 @@ +#! /bin/bash + +# Reminder : +# BuggyExpressionTree1 : 'sin' replaced by 'cos' +# BuggyExpressionTree2 : every value is incremented by 42 +# BuggyExpressionTree3 : '^' is always replaced by '*' +# BuggyExpressionTree4 : the no-argument constructor creates "1" instead of "0" +# BuggyExpressionTree5 : "/" is always replaced by "^" +# BuggyExpressionTree6 : ParseException thrown without any reason with sin/cos (except if first operator) +# BuggyExpressionTree7 : no ParseException thrown in general, except for parenthesis count errors +# BuggyExpressionTree8 : no ParseException thrown when another letter than 'x' is used. + +# To avoid problems with encoding +export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 + +tot=9 # number of tests +name="ExpressionTree" +testName="TreeTests" +word="tree" +cp ParseException.java student/ParseException.java +cp FormalExpressionTree.java student/FormalExpressionTree.java + +getinput tree_tests > "student/$testName.java" +cp junit-4.12.jar student/junit-4.12.jar +cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar +cd student + +n=0 # number of tests passed (OK for Interpreter, FAILURES for BuggyInterpreters) +passOk=0 +failOk=0 +buggyName="Buggy$name" +oldName="$name" + +for i in $(seq 1 $tot) +do + + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ ! -f "$testName.class" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + r=$? + + if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + failed=$(echo "$output" | grep -c "FAILURES") + passed=$(echo "$output" | grep -c "OK") + + if [ "$i" = "1" ] && [ "$failed" = "0" ] && [ "$passed" != "0" ]; then + ((n++)) + ((passOk++)) + fi + + if [ "$i" != "1" ] && [ "$failed" = "1" ] && [ "$passed" = "0" ]; then + ((n++)) + ((failOk++)) + fi +done +cd .. + +if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " +elif [ "$passOk" != "1" ]; then + feedback --result failed --feedback "you detected an error in a correct $word implementation" +elif [ "$n" = "$tot" ]; then + feedback --result success --feedback "Congratulations, you passed the $n tests!" +else + incorrect=$(($tot-1)) + lack=$(($incorrect-$failOk)) + feedback --result failed --feedback "Unfortunately, you didn't detect errors in $lack (out of $incorrect) incorrect ${word} implementations. " +fi \ No newline at end of file diff --git a/lost+found/run-YrjwQL b/lost+found/run-YrjwQL new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-YrjwQL @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-Ytqemj b/lost+found/run-Ytqemj new file mode 100644 index 00000000..9be52351 --- /dev/null +++ b/lost+found/run-Ytqemj @@ -0,0 +1,86 @@ +#! /bin/bash + +# Bugs in BuggyBucketSorts : +# 1 : Sorts on the whole number (and not just the digit given as argument) +# 2 : Sorts on digit+1 +# 3 : Sorts on digit-1 +# 4 : Sorts on wrong digit if digit > 5 +# 5 : Sorts in decreasing order (instead of increasing order) +# 6 : Not stable +# 7 : Replaces last element by Integer.MAX_VALUE +# 8 : 'tab' is modified. +# 9 : Doesn't sort 'tab' if its size is >= 10 + +tot=10 # number of tests +name="BucketSort" +testName="BucketSortTests" +word="Bucket-Sort" + +getinput bucketsort_tests > "student/$testName.java" +cp junit-4.12.jar student/junit-4.12.jar +cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar +cd student + +n=0 # number of tests passed (OK for MyMap, FAILURES for BuggyMaps) +passOk=0 +failOk=0 +buggyName="Buggy$name" +oldName="$name" + +for i in $(seq 1 $tot) +do + + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ ! -f "$testName.class" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + r=$? + + if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + failed=$(echo "$output" | grep -c "FAILURES") + passed=$(echo "$output" | grep -c "OK") + + if [ "$i" = "1" ] && [ "$failed" = "0" ] && [ "$passed" != "0" ]; then + ((n++)) + ((passOk++)) + fi + + if [ "$i" != "1" ] && [ "$failed" = "1" ] && [ "$passed" = "0" ]; then + ((n++)) + ((failOk++)) + fi +done +cd .. + +if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " +elif [ "$passOk" != "1" ]; then + feedback --result failed --feedback "you detected an error in a correct $word implementation" +elif [ "$n" = "$tot" ]; then + feedback --result success --feedback "Congratulations, you passed the $n tests!" +else + incorrect=$(($tot-1)) + lack=$(($incorrect-$failOk)) + feedback --result failed --feedback "Unfortunately, you didn't detect errors in $lack (out of $incorrect) incorrect ${word} implementations. " +fi \ No newline at end of file diff --git a/lost+found/run-aiGRrM b/lost+found/run-aiGRrM new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-aiGRrM @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-flJf8y b/lost+found/run-flJf8y new file mode 100644 index 00000000..7040b057 --- /dev/null +++ b/lost+found/run-flJf8y @@ -0,0 +1,66 @@ +#! /bin/bash + +# To avoid problems with encoding +export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 + +getinput tree > student/ExpressionTree.java +getinput exception > student/ParseException.java + +cp MyExpressionTree.java ./student/MyExpressionTree.java +cp Generator.java ./student/Generator.java +cp FormalExpressionTree.java ./student/FormalExpressionTree.java + +cd student + +# Compile the student code and parse it properly +compilationMessage=$(javac ExpressionTree.java ParseException.java 2>&1) +compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') +compilationMessage=$(printf "Compilation of ExpressionTree.java or ParseException.java failed :\n::\n\n $compilationMessage") +if [ ! -f ExpressionTree.class ] || [ ! -f ParseException.class ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 +fi + + +javac MyExpressionTree.java Generator.java +output=$(run_student java Generator) +r=$? +cd .. + +if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" +elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" +elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" +else + + failed=$(echo "$output" | grep -c "KO") + passed=$(echo "$output" | grep -c "OK") + problem=$(echo "$output" | grep -c "PROBLEM") + + IFS=' ' + array=( $output ) + totPos=${array[1]} + okPos=${array[2]} + totNeg=${array[3]} + okNeg=${array[4]} + + modifyThis=${array[6]} + emptyConstructor=${array[7]} + oneWrong=${array[8]} + + if [ "$passed" = "1" ]; then + feedback --result success --feedback "Congratulations, you passed the $totPos + $okPos tests!" # actually okPos means totNeg in this case + elif [ "$failed" = "1" ]; then + if [ "$modifyThis" != "0" ]; then + feedback --result failed --feedback "Unfortunately, you failed some tests : are you sure you don't modify the current tree when you derive it ?" + elif [ "$emptyConstructor" != "0" ]; then + feedback --result failed --feedback "Unfortunately, you failed some tests : maybe think about the no-argument constructor, the empty string or just 0 as argument" + else + feedback --result failed --feedback "Unfortunately, you failed some tests : you got $okPos correct derivates out of $totPos, and you correctly threw $okNeg out of $totNeg exceptions upon incorrect syntax. Think about the following expression: $oneWrong" + fi + else + feedback --result failed --feedback "Sorry, it seems that a bug occured in the grading script, please contact the course administrator. " + fi +fi diff --git a/lost+found/run-gndc6r b/lost+found/run-gndc6r new file mode 100644 index 00000000..ae2dea13 --- /dev/null +++ b/lost+found/run-gndc6r @@ -0,0 +1,38 @@ +#!/bin/bash +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 +export LANGUAGE=en_US.UTF-8 + + +#produce the output directory +mkdir output + +# parse templates +parsetemplate NodeQueue.java + +# run sur un seul exemple pour les erreurs de compilation etc + +javac -Xlint:none -cp . NodeQueueTest.java 2> output/comp.err + +java -cp . NodeQueueTest 2> output/run.err > output/std.out + + +# run feedback +if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error + echo "compilation error" + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" + cat output/comp.err | rst-code | feedback-msg -a + exit +fi + + +if [ -s output/run.err ]; then # error in main() + echo "runtime error" + feedback-grade 0 + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" + cat output/run.err | rst-code | feedback-msg -a + exit +fi +echo "testing ok" diff --git a/lost+found/run-hcncJ2 b/lost+found/run-hcncJ2 new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-hcncJ2 @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-kDa9SW b/lost+found/run-kDa9SW new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-kDa9SW @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-ldveEb b/lost+found/run-ldveEb new file mode 100644 index 00000000..3fbb8469 --- /dev/null +++ b/lost+found/run-ldveEb @@ -0,0 +1,43 @@ +#! /bin/bash +getinput kruskal > student/Kruskal.java + +# Compile the student code and parse it properly +compilationMessage=$(javac student/Kruskal.java 2>&1) +compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') +compilationMessage=$(printf "Compilation failed :\n::\n\n $compilationMessage") +if [ ! -f student/Kruskal.class ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 +fi + +# Copy everything in the 'student' directory for run_student +cp KruskalTests.java student/KruskalTests.java +cp *.txt ./student +cd student +javac KruskalTests.java +output=$(run_student java KruskalTests) +r=$? +cd .. + +if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" +elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" +elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" +else + failed=$(echo "$output" | grep -c "KO") + passed=$(echo "$output" | grep -c "OK") + + if [ "$failed" = "0" ] && [ "$passed" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator. " + elif [ "$failed" = "0" ] && [ "$passed" != "0" ]; then + FEED=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + FEED=$(printf "Congratulations, you passed the $passed tests! \n::\n\n $FEED") + feedback --result success --feedback "$FEED" + else + FEED=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + FEED=$(printf "Unfortunately, you failed some tests : \n::\n\n $FEED") + feedback --result failed --feedback "$FEED" + fi +fi \ No newline at end of file diff --git a/lost+found/run-mWNMtW b/lost+found/run-mWNMtW new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-mWNMtW @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-nKJYs1 b/lost+found/run-nKJYs1 new file mode 100644 index 00000000..61ea1734 --- /dev/null +++ b/lost+found/run-nKJYs1 @@ -0,0 +1,81 @@ +#! /bin/bash +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 +export LANGUAGE=en_US.UTF-8 + +NO_TESTS=6 + +#produce the output directory +mkdir output + +# parse templates +parsetemplate Median.java + +# run sur un seul exemple pour les erreurs de compilation etc + +javac -cp junit-4.12.jar:. Test.java 2> output/comp.err + + java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore Test 2> output/run.err > output/junit.out + + +# add files to archive +archive -a Median.java +for f in $(ls output); do +archive -a output/$f +done + +# run feedback +if [ -s output/comp.err ]; then # compilation error + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" + cat output/comp.err | rst-code | feedback-msg -a + exit +fi + +if [ -s output/run.err ]; then # error in main() + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" + cat output/run.err | rst-code | feedback-msg -a + exit +fi + + +if [[ `grep 'java.util' Median.java` ]];then + feedback-grade 0 + feedback-result failed + feedback-msg -ae -m "interdit d'utiliser java.util \n" + exit +fi + +if [[ `grep 'new' Median.java` ]];then + feedback-grade 0 + feedback-result failed + feedback-msg -ae -m "interdit d'appeler new \n" + exit +fi + +if [[ `grep 'OK (3 tests)' output/junit.out` ]];then + feedback-grade 100.0 + feedback-result success + feedback-msg -ae -m "congratulation" +else + if [[ `grep 'testMedianOk' output/junit.out` ]];then + feedback-result failed + feedback-grade 0.0 + feedback-msg -ae -m "mauvaise mediane" + else + if [[ `grep 'testComplexityNLogNOk' output/junit.out` ]];then + feedback-result failed + feedback-grade 30.0 + feedback-msg -ae -m "bonne mediane, mauvaise complexite" + else + if [[ `grep 'testComplexityNOk' output/junit.out` ]];then + feedback-result failed + feedback-grade 50.0 + feedback-msg -ae -m "bonne mediane, complexite pas encore O(n)" + fi + fi + fi +fi + + diff --git a/lost+found/run-pcBS3n b/lost+found/run-pcBS3n new file mode 100644 index 00000000..45439eec --- /dev/null +++ b/lost+found/run-pcBS3n @@ -0,0 +1,70 @@ +#! /bin/bash + +getinput plagiarism > student/Plagiarism.java +getinput hashmap > student/HashMap.java + +cp MapInterface.java ./student +cp PlagiarismInterface.java ./student + +cp MyHashMap.java student/MyHashMap.java +cp MyPlagiarism.java student/MyPlagiarism.java +cp Tester.java ./student/Tester.java +cp ./*.txt ./student/ +cp -r ./corpus ./student +cp -r ./corpus2 ./student +cp -r ./corpus3 ./student +cp -r ./corpus4 ./student + +cd student + +# Compile the student code and parse it properly +compilationMessage=$(javac Plagiarism.java PlagiarismInterface.java HashMap.java MapInterface.java 2>&1) +compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') +compilationMessage=$(printf "Compilation failed :\n::\n\n $compilationMessage") +if [ ! -f Plagiarism.class ] || [ ! -f HashMap.class ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 +fi + + +javac Tester.java +output=$(run_student java Tester 2>&1) +retval=$? +cd .. + + +if [ "$retval" = "252" ]; then + echo "out of memory" + feedback --result failed --feedback "Command was killed due to an out-of-memory" +elif [ "$retval" = "253" ]; then + echo "time out" + feedback --result timeout --feedback "Command timed out" +elif [ "$retval" = "254" ]; then + echo "runtime error" + feedback --result failed --feedback "Unfortunately, a runtime error occurred" +else + + failed=$(echo "$output" | grep -c "failed :") + passed=$(echo "$output" | grep -c "passed") + problem=$(echo "$output" | grep -c "An error occurred") + + if [ "$problem" != "0" ]; then + echo "exception" + feedback --result failed --feedback "Unfortunately, an exception occurred during the execution of your code. " + elif [ "$passed" != "0" ] && [ "$failed" = "0" ]; then + echo "congratulation" + FEED=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + FEED=$(printf "Congratulations, you passed all the tests! \n::\n\n$FEED") + feedback --result success --feedback "$FEED" + elif [ "$failed" != "0" ]; then + echo "failed test" + FEED=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + FEED=$(printf "Unfortunately, you failed some tests : \n::\n\n$FEED") + feedback --result failed --feedback "$FEED" + else # should never happen + echo "exception grading script" + FEED=$(printf "An exception occured:") + feedback --result failed --feedback "$FEED" + echo $output | rst-code -l java | feedback-msg -a + fi +fi \ No newline at end of file diff --git a/lost+found/run-q7ED56 b/lost+found/run-q7ED56 new file mode 100644 index 00000000..f62dae7e --- /dev/null +++ b/lost+found/run-q7ED56 @@ -0,0 +1,48 @@ +#! /bin/python3 +# coding: utf-8 + +from inginious import input +from inginious import feedback +import subprocess +from inginious import rst +import re + +warmup = input.get_input("union") +if warmup=="[2,4],[5,9],[10,10]": + input.parse_template("student/Union.java") + + compile_error = subprocess.call('javac -cp ".:libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar" tests/*.java student/Union.java student/Union.java 2>&1', shell=True, stdout=open('compiler.out', 'w')) + + if compile_error != 0: + codeblock = rst.get_codeblock("java", open('compiler.out').read()) + + if "error: union(Interval [] intervals) is not public in Union;" in codeblock : + feedback.set_global_feedback("Votre code ne compile pas.\n\n" + "Hint. Faites attention à ne pas changer le template de base qui vous est fourni. Par exemple la signature des fonctions, l'accès (public, private,...) des méthodes", True) + else : + feedback.set_global_feedback("Votre code ne compile pas: \n\n" + codeblock, True) + feedback.set_global_result("failed") + exit(0) + + + + try: + out = subprocess.check_output('java -cp "libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar:." tests/RunTests', shell=True).decode('utf8') + + grade = re.findall(r"^TOTAL ([0-9\.]+)/([0-9\.]+)$", out, re.MULTILINE)[-1] + grade = 100.0*float(grade[0])/float(grade[1]) + + feedback.set_grade(grade) + codeblock = rst.get_codeblock("java", out) + feedback.set_global_feedback("Résultat des tests: \n\n" + codeblock, True) + + if grade < 99.99 : + feedback.set_global_result("failed") + else: + feedback.set_global_result("success") + except Exception as e: + feedback.set_global_feedback("Une erreur s'est produite!." + str(e), True) + feedback.set_global_result("failed") +else: + feedback.set_global_feedback("Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice", True) + feedback.set_grade(0) + feedback.set_global_result("failed") \ No newline at end of file diff --git a/lost+found/run-slaZwm b/lost+found/run-slaZwm new file mode 100644 index 00000000..f9d604b2 --- /dev/null +++ b/lost+found/run-slaZwm @@ -0,0 +1,39 @@ +#! /bin/python3 +# coding: utf-8 + +from inginious import input +from inginious import feedback +import subprocess +from inginious import rst +import re + + +input.parse_template("student/ClosestPair.java") + +compile_error = subprocess.call('javac -cp ".:student:libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar" tests/*.java student/ClosestPair.java 2>&1', shell=True, stdout=open('compiler.out', 'w')) + +if compile_error != 0: + codeblock = rst.get_codeblock("java", open('compiler.out').read()) + feedback.set_global_feedback("Votre code ne compile pas: \n\n" + codeblock, True) + feedback.set_global_result("failed") + exit(0) + + + +try: + out = subprocess.check_output('java -cp "libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar:." tests/RunTests', shell=True).decode('utf8') + + grade = re.findall(r"^TOTAL ([0-9\.]+)/([0-9\.]+)$", out, re.MULTILINE)[-1] + grade = 100.0*float(grade[0])/float(grade[1]) + + feedback.set_grade(grade) + codeblock = rst.get_codeblock("java", out) + feedback.set_global_feedback("Résultat des tests: \n\n" + codeblock, True) + + if grade < 99.99 : + feedback.set_global_result("failed") + else: + feedback.set_global_result("success") +except Exception as e: + feedback.set_global_feedback("Une erreur s'est produite!." + str(e), True) + feedback.set_global_result("failed") \ No newline at end of file diff --git a/lost+found/run-tsEsof b/lost+found/run-tsEsof new file mode 100644 index 00000000..e5db80c3 --- /dev/null +++ b/lost+found/run-tsEsof @@ -0,0 +1,58 @@ +#! /bin/bash + +getinput classifier > student/SpamFilter.java +getinput word > student/Word.java +getinput map > student/MyMap.java + +cp Map.java student/Map.java +cp WordInterface.java student/WordInterface.java +cp SpamFiltering.java student/SpamFiltering.java + +cp SpamFilter2.java ./student/SpamFilter2.java +cp Word2.java ./student/Word2.java +cp MyMap2.java ./student/MyMap2.java +cp Tester.java ./student/Tester.java +cp SMSSpamCollection ./student/SMSSpamCollection + +cd student + +# Compile the student code and parse it properly +compilationMessage=$(javac SpamFilter.java 2>&1) +compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') +compilationMessage=$(printf "Compilation failed :\n::\n\n $compilationMessage") +if [ ! -f SpamFilter.class ] || [ ! -f MyMap.class ] || [ ! -f Word.class ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 +fi + + +javac Tester.java +output=$(run_student java Tester) +r=$? +cd .. + +if [ "$r" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" +elif [ "$r" = "253" ]; then + feedback --result timeout --feedback "Command timed out" +elif [ "$r" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" +else + + failed=$(echo "$output" | grep -c "ERROR") + passed=$(echo "$output" | grep -c "OK") + problem=$(echo "$output" | grep -c "EXCEPTION") + + if [ "$problem" != "0" ]; then # should never happen + feedback --result failed --feedback "Unfortunately, an exception occured during an I/O operation" + elif [ "$passed" = "1" ] && [ "$failed" = "0" ]; then + FEED=$(printf "Congratulations, you passed all the tests!\n $output") + feedback --result success --feedback "$FEED" + elif [ "$passed" = "0" ] && [ "$failed" != "0" ]; then + FEED=$(printf "Unfortunately, you failed some tests : \n$output") + feedback --result failed --feedback "$FEED" + else + FEED=$(printf "Sorry, it seems that an error occured in the grading script, please contact the course administrator. ") + feedback --result failed --feedback "$FEED" + fi +fi diff --git a/lost+found/run-tzxQXm b/lost+found/run-tzxQXm new file mode 100644 index 00000000..ae6284a8 --- /dev/null +++ b/lost+found/run-tzxQXm @@ -0,0 +1,20 @@ +#! /bin/bash + +################ +# Configuration +################ +problemId="ordered_map" +studentCodeName="SearchTree" +interfaceName="OrderedMap" +testsName="OrderedMapProps" +forbiddenClasses=( + "java.util.TreeMap" + "java.util.concurrent.ConcurrentSkipListMap" + "Arrays.sort" +) + +# Specific fo rthis tests +cp songs.txt student/songs.txt + +. ./execute_implementation +execute_implementation $problemId $studentCodeName $interfaceName forbiddenClasses $testsName diff --git a/lost+found/run-uHkcHe b/lost+found/run-uHkcHe new file mode 100644 index 00000000..14fa36f3 --- /dev/null +++ b/lost+found/run-uHkcHe @@ -0,0 +1,26 @@ +#! /bin/bash + +################################### +# Test configuration +################################### + +tot=9 # number of tests +problemId="stack_tests" +name="MyStack" +testName="StackTests" +interfaceName="Stack" +buggyName="MyBuggyStack" +buggyFeedbacks=( + "Failed empty() test" + "Some implementations of a stack could fail after a certain number of operations, specially power of two" + "Some implementations of a stack could fail after a certain number of operations, specially power of two" + "Unit tests should also check if the implementation behaves correctly when it isn't used properly" + "Not only the return values of methods, but also their effects should be tested" + "Failed push() test" + "Not only the effects of methods, but also their return values should be tested" + "The order in which the Stack ADT puts & pops elements is specific" +) +countBeforeHints=3 + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/lost+found/run-upo7pO b/lost+found/run-upo7pO new file mode 100644 index 00000000..aa96a1c6 --- /dev/null +++ b/lost+found/run-upo7pO @@ -0,0 +1,41 @@ +#! /bin/bash +# BuggySearchTree : +# 1 : !isEmpty() +# 2 : remove doesn't remove anything +# 3 : constructor with String argument does same as no argument constructor +# 4 : constructor with String argument only treats the 2 first lines of the file +# 5 : ceilingEntry and floorEntry are inversed. +# 6 : firstEntry() actually returns the second entry. +# 7 : getOrdered doesn't sort the songs +# 8 : entriesBetween returns entries STRICTLY in the range (should be inclusive) +# 9 : entriesBetween returns entries from 'lowest' (but to the max, not to 'highest') +# 10 : toString format not respected + +################################### +# Test configuration +################################### + +tot=11 # number of tests +problemId="tests" +name="SearchTree" +testName="SearchTreeTests" +interfaceName="OrderedMap" +buggyName="BuggySearchTree" +buggyFeedbacks=( + "" + "" + "A file \"songs.txt\" is provided to you for this test" + "A file \"songs.txt\" containing 50 songs is provided to you for this test" + "ceilingEntry() failed test" + "firstEntry() failed test" + "getOrdered() failed test" + "The specification of a method that returns an interval states wether the set is inclusive or not, i.e. if the set contains the \"border\" values." + "Unit tests should check if the set returned by a method doesn't contain more values than it should" + "toString() failed test" +) +countBeforeHints=3 + +cp songs.txt student/songs.txt + +. ./execute_test +execute_test "$tot" "$problemId" "$testName" "$interfaceName" "$name" "$buggyName" "buggyFeedbacks" $countBeforeHints diff --git a/lost+found/run-v8kst1 b/lost+found/run-v8kst1 new file mode 100644 index 00000000..1abbd37e --- /dev/null +++ b/lost+found/run-v8kst1 @@ -0,0 +1,22 @@ +#!/bin/python3 +import importlib.util +import sys + + +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/lost+found/run-wZ9UtQ b/lost+found/run-wZ9UtQ new file mode 100644 index 00000000..31a1ef03 --- /dev/null +++ b/lost+found/run-wZ9UtQ @@ -0,0 +1,21 @@ +#! /bin/bash + +################ +# Configuration +#----------------- +# 01-10-2016 : XGI : Remplacement des tests unitaires en Scala par ceux implém avec JUnit. +# Ajout de la classe interdite java.util.Stack +# 04-10-2016 : FKA : Modification de run et execute pour que ca utilise le script général +# de common/ +################ +names=( + "Interpreter" +) +forbiddenClasses=( + "java.util.Stack" +) + +getinput "interpreter" > "student/Interpreter.java" + +. ./execute +execute names forbiddenClasses diff --git a/lost+found/run.old-Oappg0 b/lost+found/run.old-Oappg0 new file mode 100644 index 00000000..1d94b839 --- /dev/null +++ b/lost+found/run.old-Oappg0 @@ -0,0 +1,61 @@ +#!/bin/bash +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 +export LANGUAGE=en_US.UTF-8 + + + + +# test preliminary question + +a=`getinput nbSafePoints` +if [ $a -ne 14 ]; then + echo "failed"; + feedback-result failed + feedback-msg -ae -m "Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice nbSafePoints \n" + exit +fi + + +#produce the output directory +mkdir output + +# parse templates +parsetemplate GlobalWarmingImpl.java + +# run sur un seul exemple pour les erreurs de compilation etc + +javac -Xlint:none -cp . GlobalWarmingTest.java 2> output/comp.err + +java -cp . GlobalWarmingTest 2> output/run.err > output/std.out + + +# add files to archive +#archive -a Median.java +#for f in $(ls output); do +#archive -a output/$f +#done + +# run feedback +if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error + echo "compilation error" + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" + cat output/comp.err | rst-code | feedback-msg -a + exit +fi + + + + + +if [ -s output/run.err ]; then # error in main() + echo "runtime error" + feedback-grade 0 + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" + cat output/run.err | rst-code | feedback-msg -a + exit +fi +echo "testing ok" + diff --git a/lost+found/run_bash-4XWSnG b/lost+found/run_bash-4XWSnG new file mode 100644 index 00000000..4857b90b --- /dev/null +++ b/lost+found/run_bash-4XWSnG @@ -0,0 +1,48 @@ +#!/bin/bash +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 +export LANGUAGE=en_US.UTF-8 + +# test preliminary question + +a=`getinput union` +if [[ "$a" != "[2,4],[5,9],[10,10]" ]]; then + echo "failed"; + feedback-result failed + feedback-msg -ae -m "Le code n'est pas testé tant que vous n'avez pas bien répondu au petit exercice \n" + exit +fi + + +#produce the output directory +mkdir output + +# parse templates +parsetemplate Union.java + +# run sur un seul exemple pour les erreurs de compilation etc + +javac -Xlint:none -cp . Grading.java 2> output/comp.err + +java -cp . Grading 2> output/run.err > output/std.out + + +# run feedback +if [ -s output/comp.err ] && grep -Fq "error" output/comp.err; then # compilation error + echo "compilation error" + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur de compilation : \n" + cat output/comp.err | rst-code | feedback-msg -a + exit +fi + + +if [ -s output/run.err ]; then # error in main() + echo "runtime error" + feedback-grade 0 + feedback-result failed + feedback-msg -ae -m "Il y a eu une erreur lors de l'exécution : \n" + cat output/run.err | rst-code | feedback-msg -a + exit +fi +echo "testing ok" diff --git a/lost+found/runfile.py-86ddRO b/lost+found/runfile.py-86ddRO new file mode 100644 index 00000000..90f5192c --- /dev/null +++ b/lost+found/runfile.py-86ddRO @@ -0,0 +1,135 @@ +#!/bin/python3 +from pathlib import Path +from inginious import input + +##################################### +# Our import for common function # +##################################### + +from fragments import helper, feedback, config +from fragments.constants import * + + +def main(): + ##################################### + # Load feedback task settings # + ##################################### + + feedback_settings = config.config_file_to_dict(FEEDBACK_REVIEW_PATH) + print("FEEDBACK SETTINGS LOADED") + + ##################################### + # Check prohibited statements # + ##################################### + + feedback.handle_prohibited_statements(feedback_settings) + print("NO PROHIBITED STATMENT(S) DETECTED") + + ##################################### + # Apply templates # + ##################################### + + # we have a folder where we have only these files + helper.apply_templates(PATH_TEMPLATES) + print("TEMPLATE(S) APPLIED") + + ##################################### + # CREATE A CLASSES FOLDER # + ##################################### + + Path(PATH_CLASSES).mkdir(parents=True, exist_ok=True) + print("SET UP CLASSES FOLDER FOR COMPILATION") + + ##################################### + # EXTERNAL LIBRARIES TO USE ? # + ##################################### + + libs = helper.libraries(feedback_settings["external_libraries"]) + + ##################################### + # COMPILE ALL CODE IN SRC # + ##################################### + + # Possible paths where we could keep source code : src, templates and flavour (optional) + folders_to_compile = [PATH_SRC, PATH_TEMPLATES, PATH_FLAVOUR] + + # For custom structure, for example many packages in folders_to_compile + # we need a generic way to find all files to compiles + all_folders_to_compile = [ + item + for sublist in + [ + helper.find_files_folder_in_path(folder) + for folder in folders_to_compile + ] + for item in sublist + ] + + # Files that must be compiled by javac + files_to_compile = [ + "{}/{}{}".format(folder, "*", FILE_EXTENSION) + for folder in all_folders_to_compile + ] + + compile_cmd = helper.generate_java_command_string(files_to_compile, libs, "javac") + print("COMPILING CODE : {}".format(compile_cmd)) + result = helper.run_command(compile_cmd) + + # handle compilation errors + feedback.compilation_feedback(result) + + ##################################### + # GENERATE A JAR FILE # + ##################################### + + # We need a manifest in order to make the created jar runnable + helper.create_manifest(libs) + + # Create a jar file + create_jar = helper.generate_jar_file() + print("GENERATING JAR : {}".format(create_jar)) + + # WARNING ; JUST FOR JAVA TO NOT MISUNDERSTAND OUR STRUCTURE, we have to change the CWD in the command + result = helper.run_command(create_jar, PATH_CLASSES) + + # For debug the jar construction + # print(result.stdout) + + # handle compilation errors + feedback.compilation_feedback(result) + + ##################################### + # RUN TEST RUNNER # + ##################################### + + # invoke runner with classes as arg + # in the case of code coverage ( Jacoco ) , we need to generate also the report file (exec ) by the JaCoco agent + coverage_required = True if feedback_settings["feedback_kind"] == "JaCoCo" else False + + run_code = helper.generate_java_command_string(JAR_FILE, libs, coverage=coverage_required, is_jar=True) + print("RUNNING CODE : {}".format(run_code)) + result = helper.run_command(run_code) + + ##################################### + # Show and handle results # + ##################################### + feedback.result_feedback(result, feedback_settings) + + ##################################### + # Prepare archive for JPlag # + ##################################### + if feedback_settings["plagiarism"]: + + student_name = input.get_input("@username") + + # The files filled by the student are all inside PATH_TEMPLATES + files_to_be_tested = helper.find_files_in_path(PATH_TEMPLATES) + + # Creates the archive like expected by JPlag + for student_file in files_to_be_tested: + command = "archive -a {} -o {}".format(student_file, student_name) + helper.run_command(command, universal_newlines=True) + + +if __name__ == "__main__": + main() diff --git a/lost+found/scalacheck-2.11.jar-tNO5qo b/lost+found/scalacheck-2.11.jar-tNO5qo new file mode 100644 index 00000000..a2d6d8f0 Binary files /dev/null and b/lost+found/scalacheck-2.11.jar-tNO5qo differ diff --git a/lost+found/scalacheck.jar-Nlelce b/lost+found/scalacheck.jar-Nlelce new file mode 100644 index 00000000..a2d6d8f0 Binary files /dev/null and b/lost+found/scalacheck.jar-Nlelce differ diff --git a/lost+found/scalacheck.jar-nT9DB3 b/lost+found/scalacheck.jar-nT9DB3 new file mode 100644 index 00000000..a2d6d8f0 Binary files /dev/null and b/lost+found/scalacheck.jar-nT9DB3 differ diff --git a/lost+found/scalacheck.jar-tFPqeD b/lost+found/scalacheck.jar-tFPqeD new file mode 100644 index 00000000..7cf2dd28 Binary files /dev/null and b/lost+found/scalacheck.jar-tFPqeD differ diff --git a/lost+found/scalacheck.jar-zGZCDT b/lost+found/scalacheck.jar-zGZCDT new file mode 100644 index 00000000..0455731d Binary files /dev/null and b/lost+found/scalacheck.jar-zGZCDT differ diff --git a/lost+found/scalacheck_save.jar-BPRodU b/lost+found/scalacheck_save.jar-BPRodU new file mode 100644 index 00000000..a2d6d8f0 Binary files /dev/null and b/lost+found/scalacheck_save.jar-BPRodU differ diff --git a/lost+found/scribe-1.3.7_useragent_mod.jar-z7rzXy b/lost+found/scribe-1.3.7_useragent_mod.jar-z7rzXy new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/settings.xml-9x6duG b/lost+found/settings.xml-9x6duG new file mode 100644 index 00000000..c13861fe --- /dev/null +++ b/lost+found/settings.xml-9x6duG @@ -0,0 +1,21 @@ + + + 0 + 0 + 1192 + 792 + + true + + /home/thommy/.visicut/examples/visicut-icon.png + + MDF + Epilog Zing + + com.t_oster.visicut.model.graphicelements.svgsupport.SVGImporter + com.t_oster.visicut.model.graphicelements.jpgpngsupport.JPGPNGImporter + com.t_oster.visicut.model.graphicelements.dxfsupport.DXFImporter + com.t_oster.visicut.model.graphicelements.epssupport.EPSImporter + + true + \ No newline at end of file diff --git a/lost+found/slf4j-api-1.7.2.jar-GvnHlk b/lost+found/slf4j-api-1.7.2.jar-GvnHlk new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/slf4j-api-1.7.5.jar-ZRahL5 b/lost+found/slf4j-api-1.7.5.jar-ZRahL5 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/slf4j-nop-1.7.5.jar-HQX7bR b/lost+found/slf4j-nop-1.7.5.jar-HQX7bR new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/songs.txt-4LmrSc b/lost+found/songs.txt-4LmrSc new file mode 100644 index 00000000..1000c09d --- /dev/null +++ b/lost+found/songs.txt-4LmrSc @@ -0,0 +1,1000 @@ +Led Zeppelin Stairway to Heaven +Beatles Hey Jude +Hendrix, Jimi All Along the Watchtower +Rolling Stones Satisfaction +Dylan, Bob Like A Rolling Stone +Pink Floyd Another Brick In The Wall +Who Won't Get Fooled Again +Eagles Hotel California +Derek And The Dominos Layla +Lynyrd Skynyrd Sweet Home Alabama +Queen Bohemian Rhapsody +Doors Riders on the Storm +Led Zeppelin Rock and Roll +Heart Barracuda +ZZ Top La Grange +Aerosmith Dream On +Van Halen You Really Got Me +Boston More Than a Feeling +Dire Straits Sultans of Swing +AC/DC You Shook Me All Night Long +Led Zeppelin Kashmir +Kinks Lola +Kansas Carry on Wayward Son +John, Elton Tiny Dancer +Jethro Tull Locomotive Breath +U2 I Still Haven't Found +Steppenwolf Magic Carpet Ride +Lynyrd Skynyrd Free Bird +Hendrix, Jimi Purple Haze +Rush Tom Sawyer +Beatles Let It Be +Who Baba O'Riley +Miller, Steve The Joker +Police Roxanne +Pink Floyd Time +AC/DC It's A Long Way to the Top +Led Zeppelin Whole Lotta Love +Fleetwood Mac The Chain +Yes I've Seen All Good People +Buffalo Springfield For What It's Worth +Santana Black Magic Woman +Moody Blues Nights in White Satin +Beatles While My Guitar Gently Weeps +Rolling Stones Gimme Shelter +Fleetwood Mac Gold Dust Woman +CCR Fortunate Son +McLean, Don American Pie +Bad Company Bad Company +ZZ Top Waitin' For The Bus/Jesus Just Left +Led Zeppelin Over the Hills and Far Away +Yes Owner of a Lonely Heart +Supertramp The Logical Song +Beatles A Day in the Life +Aerosmith Sweet Emotion +CCR Down On The Corner +Harrison, George My Sweet Lord +Dylan, Bob Knockin' on Heaven's Door +Cars Just What I Needed +Blue Oyster Cult Don't Fear the Reaper +Who Behind Blue Eyes +Steely Dan Do It Again +Thorogood, George Who Do You Love +ELP From the Beginning +Eagles Already Gone +Beatles Here Comes The Sun +U2 With Or Without You +Walsh, Joe Life's Been Good +Petty, Tom Breakdown (Live Version) +Pink Floyd Comfortably Numb +Led Zeppelin Ramble On +Ten Years After I'd Love to Change the World +Boston Foreplay Longtime +Morrison, Van Brown Eyed Girl +AC/DC Back In Black +Rolling Stones You Can't Always Get What You +Eagles Take It Easy +Beatles Sgt. Pepper/With A Little Help +Queen We Will Rock You/We Are the +Led Zeppelin Dancing Days +Seger, Bob Turn the Page +Free All Right Now +Doobie Brothers Black Water +Fleetwood Mac Oh Well +Joplin, Janis Me and Bobby McGee +John, Elton Rocket Man +CSN&Y Ohio +Kinks You Really Got Me +Supertramp Bloody Well Right +AC/DC Dirty Deeds +Jethro Tull Aqualung +Hendrix, Jimi The Wind Cries Mary +Blue Oyster Cult Burnin' for You +Cars Moving in Stereo/All Mixed Up +Animals House of the Rising Sun +Who Bargain +McCartney, Paul Maybe I'm Amazed +John, Elton Bennie & The Jets +Kansas Dust in the Wind +Derringer, Rick Rock 'n Roll Hootchie Koo +Heart Crazy On You +Frampton, Peter Do You Feel Like We Do +Kingsmen, The Louie Louie +Allman Brothers Jessica +Doobie Brothers Long Train Running +Police Walkin' On The Moon +Nugent, Ted Stranglehold +Hendrix, Jimi Fire +ZZ Top Tush +Bad Company Feel Like Making Love +CCR Who'll Stop The Rain +Vaughan, Stevie Ray The Sky Is Crying +BTO You Ain't Seen Nothing Yet +Deep Purple Smoke on the Water +Marshall Tucker Band Can't You See +Seger, Bob Night Moves +Doors Touch Me +Van Halen Runnin' With The Devil +Clapton, Eric Cocaine (Live) +Led Zeppelin Immigrant Song +CCR Run Through The Jungle +Pink Floyd Brain Damage/Eclipse +Beatles You've Got to Hide Your Love Away +Rolling Stones Jumpin' Jack Flash +John, Elton Levon +Miller, Steve Take The Money And Run +Stewart, Rod Maggie May +Steppenwolf Born To Be Wild +Cream White Room +ELP Lucky Man +Lynyrd Skynyrd Call Me The Breeze +Cars My Best Friend's GIrl +Townshend, Pete Let My Love Open The Door +Dire Straits Money For Nothing +Supertramp Breakfast In America +Fleetwood Mac You Make Lovin' Fun +Bad Company Burnin' Sky +Yes Long Distance Runaround +Styx The Grand Illusion +Beatles Strawberry Fields Forever +Beatles Come Together +John, Elton Goodbye Yellow Brick Road +Boston Rock 'n Roll Band +Petty, Tom Runnin' Down a Dream +CCR I Heard It Through The Grapevine +Traffic Dear Mr. Fantasy +Fleetwood Mac Dreams +ELO Fire on High +Pink Floyd Wish You Were Here +Trower, Robin Bridge of Sighs +Beatles Rocky Racoon +Aerosmith Walk This Way +Beatles In My Life +Cars Good Times Roll +Led Zeppelin Fool In the Rain +Beatles Revolution +Springsteen, Bruce Born To Run +Santana Oye Como Va +Steely Dan Reeling In The Years +Police Every Breath You Take +Dylan, Bob Rainy Day Women #12 & 35 +Winter Group, Edgar Frankenstein +Petty, Tom Refugee +Pink Floyd Have A Cigar +Rush The Spirit of Radio +Led Zeppelin Going To California +Doors Hello, I Love You +Fleetwood Mac Go Your Own Way +Boston Peace of Mind +Jefferson Airplane White Rabbit +Golden Earring Radar Love +Head East Never Been Any Reason +Clapton, Eric Let It Rain +Foreigner Cold As Ice +ELP Karn Evil 9 +Rush Subdivisions +Springsteen, Bruce Pink Cadillac +Walsh, Joe Rocky Mountain Way +U2 New Year's Day +Heart Magic Man +Eagles Witchy Woman +Bad Company Rock and Roll Fantasy +Doors Love Me Two Times +Beatles Eleanor Rigby +Pretenders Middle of The Road +Cream Sunshine of Your Love +Boston Don't Look Back +Henley, Don Dirty Laundry +Beatles Penny Lane +Queen Killer Queen +Miller, Steve Fly Like An Eagle +Jethro Tull Cross-Eyed Mary +Benatar, Pat Heartbreaker +Beatles Norwegian Wood +John, Elton Your Song +Nugent, Ted Hey Baby +Pink Floyd Money +Bowie, David Space Oddity +Rolling Stones Street Fighting Man +Morrison, Van Moondance +Vaughan, Stevie Ray Pride and Joy +Rush Limelight +Who Going Mobile +Cars Let's Go +Guess Who American Woman +Scorpions Rock You Like a Hurricane +Nicks, Stevie & Petty, Tom Stop Dragging My Heart Around +Supertramp Give A Little Bit +Doors Light My Fire +Seger, Bob Against The Wind +Led Zeppelin Hey Hey What Can I Do +Van Halen Panama +Winter Group, Edgar Free Ride +Hendrix, Jimi If Six Was Nine +James Gang Walk Away +U2 Sunday Bloody Sunday +Rolling Stones Angie +Aerosmith Train Kept A Rollin' +Jethro Tull Teacher +Foghat Slow Ride +Santana Evil Ways +Cream Badge +Van Halen Jamie's Cryin' +Pink Floyd Shine On You Crazy Diamond +Clapton, Eric Wonderful Tonight +Fleetwood Mac Rhiannon +AC/DC Highway To Hell +Joplin, Janis Piece of My Heart +Police Every Little Thing She Does is +ZZ Top Cheap Sunglasses +Jethro Tull Thick As A Brick +Doors The End +Pretenders Back On The Chain Gang +Styx Lady +Led Zeppelin All My Love +Supertramp Take the Long Way Home +Petty, Tom Don't Do Me Like That +Parsons Project, Alan Breakdown +CCR Bad Moon Rising +Doors People Are Strange +Led Zeppelin Houses of The Holy +Rolling Stones Start Me Up +Van Halen Dance The Night Away +Pink Floyd Breathe +Mellencamp, John Small Town +Doors L.A. Woman +Boston Smokin' +Browne, Jackson The Load Out/Stay +Zevon, Warren Werewolves of London +Led Zeppelin Thank You +Gabriel, Peter In Your Eyes +Clapton, Eric After Midnight (1988) +Miller, Steve Jet Airliner +Cocker, Joe Feeling Alright +Boston Hitch A Ride +Supertramp School +Doors Love Her Madly +Cars You're All I've Got Tonight +Toto Hold The Line +Hendrix, Jimi Foxey Lady +Rush Fly By Night +Styx Blue Collar Man +Beatles Get Back +Who My Generation +Miller, Steve Rock'n Me +Dire Straits Skateaway +Beatles A Hard Day's Night +Black Sabbath Paranoid +Thin Lizzy The Boys Are Back In Town +Deep Purple Hush +Pink Floyd Young Lust +Thorogood, George Bad to the Bone +Moody Blues Question +Nicks, Stevie Edge of 17 +Journey Feelin' That Way/Anytime +Cream Crossroads +Rolling Stones Honky Tonk Women +Grand Funk Railroad Closer to Home/I'm Your Captain +CCR Have You Ever Seen the Rain +Byrds Eight Miles High +Scorpions No One Like You +Police Synchronicity 2 +Henley, Don The Boys of Summer +Rush Time Stand Still +CSN&Y Woodstock +Grateful Dead Touch Of Grey +Beatles Paperback Writer +Doobie Brothers China Grove +Steely Dan Deacon Blues +Rolling Stones Sympathy For The Devil +Thorogood, George Move It On Over +Queen Somebody To Love +Petty, Tom Mary Jane's Last Dance +Ozzy Osbourne Crazy Train +Led Zeppelin Misty Mountain Hop +Pink Floyd Run Like Hell +Vaughan, Stevie Ray Crossfire +Beatles Lovely Rita +Mellencamp, John Pink Houses +Lynyrd Skynyrd Gimme Three Steps +Hendrix, Jimi Hey Joe +Doors Break On Through +Cooper, Alice I'm Eighteen +Heart Love Alive +Beatles Golden Slumbers Medley +ZZ Top Got Me Under Pressure +John, Elton Funeral for a Friend +Hollies Long Cool Woman In A Black Dress +Miller, Steve Swingtown +James Gang Funk 49 +ELO Evil Woman +Who Magic Bus +U2 Pride +Bowie, David Changes +Rolling Stones Miss You +Petty, Tom The Waiting +Moody Blues The Story In Your Eyes +Lennon, John Imagine +ZZ Top I Thank You +Fleetwood Mac Say You Love Me +Money, Eddie Take Me Home Tonight +Police Wrapped Around Your Finger +Commander Cody Hot Rod Lincoln +ELP Still You Turn Me On +Reed, Lou Walk On The Wild Side +Vaughan, Stevie Ray Voodoo Chile +Humble Pie 30 Days In The Hole +Eagles Those Shoes +Edmunds, Dave I Hear You Knocking +Styx Foolin Yourself +Van Halen Ice Cream Man +Boston Let Me Take You Home Tonight +Petty, Tom You Wreck Me +Henley, Don All She Wants To Do Is Dance +Gilmour, David There's No Way Out Of Here +Led Zeppelin What Is and What Should Never Be +McCartney, Paul Live and Let Die +Jefferson Airplane Somebody To Love +Young, Neil Old Man +Van Halen 1984/Jump +Vaughan, Stevie Ray Cold Shot +Steely Dan Peg +ZZ Top Sharp Dressed Man +Guns 'N' Roses Sweet Child O' Mine +Rolling Stones Tumbling Dice +CSN&Y Carry On +Petty, Tom Free Fallin' +Mann, Manfred Blinded By The Light +Pink Floyd Us and Them +Miller, Steve Jungle Love +Rolling Stones Under My Thumb +Petty, Tom Into The Great Wide Open +CS&N Suite: Judy Blue Eyes +Springsteen, Bruce Tenth Avenue Freeze Out +Browne, Jackson Running On Empty +Frampton, Peter Show Me The Way +Hendrix, Jimi Red House +Fleetwood Mac Landslide +Beatles Hello Goodbye +Mellencamp, John Jack And Diane +Vaughan, Stevie Ray Tightrope +Mountain Mississippi Queen +Essex, David Rock On +Pink Floyd Mother +Clapton, Eric I Shot The Sheriff +Genesis That's All +Thin Lizzy Jailbreak +Petty, Tom I Won't Back Down +Eagles Life In The Fast Lane +Plant, Robert In The Mood +John, Elton Candle in the Wind +Led Zeppelin Babe I'm Gonna Leave You +Led Zeppelin Heartbreaker/Livin' Lovin' Maid +Gabriel, Peter Sledgehammer +Clapton, Eric Layla (Unplugged) +Rolling Stones Can't You Hear Me Knocking? +Cheap Trick I Want You To Want Me +Eagles One Of These Nights +Seger, Bob Travelin' Man/Beautiful Loser +Foreigner Long Long Way From Home +CCR Up Around The Bend +Queen Fat Bottomed Girls +Doobie Brothers Jesus Is Just Alright With Me +Rolling Stones Shattered +Black Crowes Hard To Handle +Queen You're My Best Friend +U2 Where The Streets Have No Name +Procol Harum Whiter Shade Of Pale +Pink Floyd Learning To Fly +Lynyrd Skynyrd What's Your Name? +Zombies Time of the Season +Henley, Don The Heart of The Matter +Kiss Rock And Roll All Night +Beatles Back In The USSR +Clapton, Eric After Midnight +Petty, Tom Learning To Fly +Who Love Reign O'er Me +Led Zeppelin Trampled Underfoot +Rolling Stones Brown Sugar +ZZ Top Legs +Traveling Wilburys End Of The Line +John, Elton Madman Across The Water +Buffalo Springfield Mr. Soul +Genesis Home By The Sea, Parts 1&2 +Led Zeppelin When The Levee Breaks +SugarLoaf Green Eyed Lady +Springsteen, Bruce I'm On Fire +Aerosmith Back In The Saddle +Browne, Jackson Doctor My Eyes +John, Elton Harmony +Beatles Lady Madonna +CCR Long As I Can See The Light +Gabriel, Peter Solsbury Hill +Police Message In A Bottle +Clapton, Eric Tears In Heaven +BTO Roll On Down The Highway +Doors Back Door Man +Styx Come Sail Away +Beatles If I Needed Someone +Eagles Heartache Tonight +CCR Lookin' Out My Back Door +Supertramp Even In The Quietest Moments +BTO Let It Ride +Jethro Tull Living In The Past +Argent Hold Your Head Up +CSN&Y Teach Your Children +Genesis Abacab +AC/DC Girls Got Rhythm +Pretenders Brass in Pocket +Kansas Point of Know Return +Foreigner Blue Morning Blue Day +Steely Dan My Old School +Springsteen, Bruce Tunnel Of Love +Moody Blues Tuesday Afternoon +Led Zeppelin Black Dog +Cocker, Joe With A Little Help From My Friends +Jefferson Starship Jane +Idol, Billy White Wedding +Youngbloods Get Together +Benatar, Pat Hit Me With Your Best Shot +Rolling Stones Paint It Black +Chicago Twenty-Five Or Six To Four +Yes Roundabout +Who Pinball Wizard +Foreigner Double Vision +McCartney, Paul Uncle Albert +Dylan, Bob Subterranean Homesick Blues +Beatles Taxman +Bad Company Rock Steady +Springsteen, Bruce Hungry Heart +Petty, Tom I Need To Know +Led Zeppelin Dazed And Confused +Doors Roadhouse Blues +Moody Blues Your Wildest Dreams +John, Elton Mona Lisas And Mad Hatters +Rolling Stones Beast Of Burden +BTO Takin' Care Of Business +Jett, Joan I Love Rock and Roll +Aerosmith Same Old Song And Dance +Bad Company Silver, Blue and Gold +Parsons, Alan, Project I Wouldn't Want To Be Like You +Journey Wheel in The Sky +Romantics What I Like About You +Clapton, Eric Pretending +Beatles Lucy In The Sky +Traffic Low Spark of High Heeled Boys +Young, Neil Heart Of Gold +Mellencamp, John Cherry Bomb +Clapton, Eric It's In The Way +U2 Mysterious Ways +Doors Twentieth Century Fox +Doors Crystal Ship +Eagles Desperado +Pretenders My City Was Gone +Rush New World Man +Clapton, Eric Running On Faith +Red Rider Lunatic Fringe +Cream Strange Brew +CCR Lodi +John, Elton Honky Cat +Fleetwood Mac Don't Stop +Springsteen, Bruce Fire +Journey Lights +Palmer, Robert Bad Case Of Lovin' You +Fogerty, John Old Man Down The Road +Aerosmith Last Child +Steely Dan Rikki Don't Lose That Number +Heart Straight On +Yes Changes +Bad Company Seagull +Lennon, John Instant Karma +Chambers Brothers Time Has Come Today +Grateful Dead Casey Jones +Dire Straits So Far Away +Petty, Tom Listen To Her Heart +Allman, Gregg Midnight Rider +Van Halen Pretty Woman +Foreigner Jukebox Hero +Eagles Tequila Sunrise +Stills, Stephen Love The One You're With +Beatles Drive My Car +Seger, Bob Hollywood Nights +Police Don't Stand So Close To Me +Meatloaf Paradise by the Dashboard Lights +Petty, Tom Even The Losers +AC/DC T. N. T. +CS&N Wooden Ships +Styx Suite Madam Blue +Def Leppard Photograph +Winwood, Stevie While You See A Chance +Rush Closer To The Heart +Doors Soul Kitchen +Rolling Stones Wild Horses +Moody Blues Ride My See-Saw +CS&N Southern Cross +Grand Funk Railroad We're An American Band +Guess Who No Time +Who Squeeze Box +Greenbaum, Norman Spirit In The Sky +Deep Purple Woman From Tokyo +Led Zeppelin The Ocean +Cars Bye Bye Love +ZZ Top Gimme All Your Lovin' +Eagles Lyin' Eyes +Grateful Dead Truckin' +Cheap Trick Surrender +Beatles The Ballad of John And Yoko +Police King Of Pain +Who I Can See For Miles +Aerosmith Janie's Got A Gun +Hendrix, Jimi Stone Free +Young, Neil Southern Man +Rolling Stones It's Only Rock And Roll +Bowie, David Suffragette City +Allman Brothers One Way Out +Blue Oyster Cult Godzilla +Doobie Brothers Listen To The Music +Who Eminence Front +Genesis Follow You Follow Me +Mellencamp, John I Need A Lover +Cream Born Under A Bad Sign +Dire Straits Walk Of Life +Nicks, Stevie Stand Back +Squire, Billy Lonely is the Night +Aerosmith Big Ten Inch Record +John, Elton Don't Let The Sun Go Down On Me +Steely Dan Hey Nineteen +Davis Group, Spencer Gimme Some Lovin' +Seger, Bob Her Strut +Van Halen And The Cradle Will Rock +Amboy Dukes Journey To The Center Of The Mind +Byrds Turn, Turn, Turn +Fleetwood Mac Over My Head +CCR Suzie Q +Badfinger No Matter What +Bowie, David Young Americans +Journey Who's Crying Now +Eagles In The City +Beatles Something +Hendrix, Jimi Castles Made of Sand +Mellencamp, John Hurts So Good +Jethro Tull Bouree +Fleetwood Mac Sara +Steely Dan Dirty Work +Vaughan, Stevie Ray Little Wing +Seger, Bob Fire Down Below +James Gang The Bomber +Heart Heartless +Palmer, Robert Addicted To Love +Journey Lovin' Touchin Squeezin' +Stewart, Rod Every Picture Tells A Story +Chicago I'm A Man +Genesis Misunderstanding +McCartney, Paul Band On The Run +T. Rex Bang A Gong +Canned Heat On The Road Again +Rolling Stones It's All Over Now +Money, Eddie Two Tickets To Paradise +John, Elton Where To Now Saint Peter +CCR Born on the Bayou +CS&N Marrakesh Express +Travers, Pat Boom Boom (Out Go The Lights) +Lennon, John Watching the Wheels +Led Zeppelin D'yer Maker +Grand Funk Railroad Time Machine +Bad Company Can't Get Enough +Guess Who No Sugar Tonight +Lynyrd Skynyrd Saturday Night Special +Baldry, Long John Don't Try and Lay No Boogie +ELO Do Ya +Who You Better You Bet +Firm Satisfaction Guaranteed +Mellencamp, John Authority Song +McCartney, Paul Jet +Genesis Just A Job To Do +Hendrix, Jimi Manic Depression +Thirty-Eight Special Hold On Loosely +Plant, Robert Ship Of Fools +Mayall, John Room To Move +Heart Dog And Butterfly +Stewart, Rod I Know I'm Losing You +Rolling Stones Let It Bleed +Money, Eddie Baby Hold On +Mott The Hoople All The Young Dudes +Cars You Might Think +Grateful Dead Uncle John's Band +Animals We Gotta Get Out Of This Place +Iris, Donnie Ah! Leah! +Allman Brothers Ramblin' Man +BTO Blue Collar +Led Zeppelin Traveling Riverside Blues +Dire Straits Industrial Disease +Blind Faith Can't Find My Way Home +Bad Company Good Lovin' Gone Bad +John, Elton All The Girls Love Alice +Band, The The Weight +Bowie, David Rebel, Rebel +Steely Dan Black Friday +Jethro Tull Nothing Is Easy +Fleetwood Mac World Turning +Rolling Stones Ain't Too Proud To Beg +Lynyrd Skynyrd You Got That Right +Eagles Peaceful Easy Feeling +Nazareth Love Hurts +Foreigner Urgent +Ozark Mountain Daredevils If You Wanna To Get To Heaven +Seger, Bob Rock 'n' Roll Never Forgets +Frampton, Peter Baby I Love Your Way +CS&N Long Time Gone +Springsteen, Bruce Thunder Road +CCR Proud Mary +Queen Tie Your Mother Down +Foreigner Feels Like The First Time +Deep Purple Highway Star +Eagles The Long Run +Allman Brothers Melissa +Spirit I Got A Line On You +Thorogood, George One Bourbon, One Scotch, One +J. Geils Band Love Stinks +Seger, Bob Old Time Rock 'n Roll +Rascals Good Lovin' +Aerosmith What It Takes +Them Gloria +Talking Heads Take Me To The River +Thin Lizzy The Cowboy Song +Who Five Fifteen +Who We're Not Going To Take It +Rolling Stones Waiting On A Friend +Bad Company Run With The Pack +Grand Funk Railroad Loco-Motion +Black Sabbath Iron Man +Led Zeppelin Good Times Bad Times +John, Elton Burn Down The Mission +Loggins and Messina Angry Eyes +Beatles Got To Get You Into My Life +Beatles I Am The Walrus +Cheap Trick Ain't That A Shame +Foreigner Hot Blooded +Dylan, Bob Tangled Up In Blue +Styx Renegade +Faces Stay With Me +Allman Brothers Ain't Wastin' Time No More +Young, Neil Cinnamon Girl +Clapton, Eric Forever Man +Outlaws Green Grass and High Tides +Henley, Don End Of The Innocence +Grateful Dead Friend of the Devil +Springsteen, Bruce Born In The USA +Winwood, Stevie Back In The High Life +Heart Kick It Out +Santana Samba Pa Ti +Queen Crazy Little Thing Called Love +Doors You're Lost Little Girl +Van Halen Beautiful Girls +Seger, Bob We've Got Tonight +U2 Bad +Supertramp Dreamer +Rolling Stones Heartbreaker +Beatles Mother Nature's Son +Steely Dan FM +Ram Jam Black Betty +Thorogood, George I Drink Alone +AC/DC Live Wire +Joplin, Janis Mercedes Benz +Kansas Portrait +Byrds Mr. Tambourine Man +Eagles Take It To The Limit +Uriah Heep Stealin' +Yardbirds For Your Love +Who Athena +Chicago Does Anybody Really Know What +ZZ Top I'm Bad I'm Nationwide +Iron Butterfly In-A-Gadda-Da-Vida +Henley, Don Sunset Grill +Hendrix, Jimi Angel +Rolling Stones Time Is On My Side +CCR Travelin' Band +Steppenwolf The Pusher +Led Zeppelin Communication Breakdown +Morrison, Van Into The Mystic +Nash & Crosby Immigration Man +Procol Harum Conquistador +Who The Real Me +Sonics, The The Witch +ZZ Top Tubesnake Boogie +Cream I Feel Free +Aerosmith Mama Kin +Beatles Magical Mystery Tour +Focus Hocus Pocus +Canned Heat Goin' Up the Country +Cars Dangerous Type +Nilsson, Harry Jump Into The FIre +Rolling Stones She's So Cold +Santana Europa +Springsteen, Bruce Brilliant Disguise +Animals Sky Pilot +Stewart, Rod Mandolin Wind +Deep Purple Kentucky Woman +Eagles New Kid In Town +Fleetwood Mac Silver Springs +Guess Who Undun +Humble Pie I Don't Need No Doctor +Dr. John Right Place, Wrong Time +Rolling Stones Ruby Tuesday +Strawberry Alarm Clock Incense and Peppermints +Bad Company Ready For Love +Rush The Trees +Beatles Rock And Roll Music +Blue Oyster Cult I Love The Night +Moody Blues Legend of a Mind +Dr. Hook Cover Of The Rolling Stone +Nicks, Stevie & Henley, Don Leather and Lace +Petty, Tom American Girl +Who Happy Jack +J. Geils Band Give It To Me +Pink Floyd On The Turning Away +Hendrix, Jimi Third Stone From The Sun +John, Elton Saturday Night's Alright For Fighting +Allman, Gregg I'm No Angel +AC/DC Shoot To Thrill +Led Zeppelin Down by the Seaside +Clapton, Eric Lay Down Sally +Joplin, Janis Get It While You Can +War Low Rider +CCR Good Golly Miss Molly +CS&N Dark Star +Stewart, Rod Twistin' The Night Away +Foghat I Just Wanna Make Love To You +Wright, Gary Dream Weaver +Bowie, David Jean Jeanie +Van Halen Feel Your Love Tonight +Grateful Dead Good Lovin' +Beatles Dizzy Miss Lizzy +Allman Brothers In Memory of Elizabeth Reed +Grand Funk Railroad Some Kind of Wonderful +Jethro Tull A New Day Yesterday +Miller, Steve Mercury Blues +Molly Hatchet Dreams I'll Never See +Pink Floyd Welcome To The Machine +Bishop, Elvin Fooled Around and Fell In Love +Cocker, Joe The Letter +Vaughan, Stevie Ray The House Is Rockin' +U2 One +Three Dog Night One +Springsteen, Bruce My Home Town +Beatles I Should Have Known Better +Queen Under Pressure +CCR I Put A Spell On You +Eagles Seven Bridges Road +Fleetwood Mac Hypnotized +Jeff Beck I Ain't Superstitious +Rolling Stones Heart Of Stone +Rare Earth I Just Want To Celebrate +Supertramp Goodbye Stranger +Rundgren, Todd I Saw The LIght +Fabulous Thunderbirds Tuff Enuff +Beatles Glass Onion +Journey Anyway You Want It +Little Feat Oh, Atlanta +Petty, Tom A Woman In Love +Who Substitute +Young, Neil The Needle And The Damage Done +Guess Who These Eyes +Lynyrd Skynyrd Simple Man +Doors When The Music's Over +Stealers Wheel Stuck In The Middle With You +Beatles Blackbird +ELO Can't Get It Out Of My Head +Money, Eddie Shakin' +Rolling Stones Not Fade Away +Bad Company Shooting Star +Pure Prarie League Amie +ZZ Top She Loves My Automobile +Plant, Robert Big Log +Golden Earring Twilight Zone +Who I'm Free +Lynyrd Skynyrd On The Hunt +McCartney, Paul Nineteen Hundred And Eighty-Five +Yardbirds Shapes of Things +CCR Midnight Special +CS&N Forty-Nine Bye-Byes +John, Elton Crocodile Rock +Led Zeppelin Boogie With Stu +Seger, Bob Ramblin' Gamblin' Man +It's A Beautiful Day White Bird +Beatles Hey Bulldog +Beatles Two Of Us +Vaughan, Stevie Ray Empty Arms +Jethro Tull Skating Away +Townshend, Pete Rough Boys +Kinks Jukebox Music +Thorpe, Billy Children of the Sun +Doobie Brothers Rockin' Down The Highway +Traffic Feelin' Alright +Heart Alone +Joplin, Janis Move Over +Morrison, Van Tupelo Honey +CS&N Helplessly Hoping +Rolling Stones Get Off My Cloud +Lynyrd Skynyrd Don't Ask Me No Questions +Zevon, Warren Lawyers Guns And Money +Young, Neil Rockin' In The Free World +ZZ Top Pearl Necklace +Deep Purple Lazy +Beatles Oh Darling +Doors WASP +Fleetwood Mac Tusk +Marshall Tucker Band Take The Highway +Zombies She's Not There +John, Elton Grey Seal +Supertramp Rudy +Ten Years After I'm Going Home +Who The Song Is Over +Nazareth Hair Of The Dog +Pink Floyd Hey You +America A Horse With No Name +Plant, Robert Tall Cool One +Hendrix, Jimi Little Wing +Beatles Don't Let Me Down +Hendrix, Jimi Voodoo Chile +Heart Mistral Wind +Henley, Don The Last Worthless Evening +Santana No One To Depend On +Donovan Sunshine Superman +McCartney, Paul Helen Wheels +Michaels, Lee Do You Know What I Mean +Miller, Steve Livin' In The USA +Raspberries Go All The Way +Rolling Stones Far Away Eyes +Seger, Bob Mainstreet +Zombies Tell Her No +Starr, Ringo It Don't Come Easy +Cooper, Alice No More Mr. Nice Guy +Steely Dan Showbiz Kids +Who I Can't Explain +Kinks All Day and All of the Night +Beatles Tomorrow Never Knows +Vaughan, Stevie Ray Couldn't Stand The Weather +Rainbow Stone Cold +Police De-Do-Do-Do, De-Da-Da-Da +Rolling Stones Mother's Little Helper +Morrison, Van Domino +Troggs Wild Thing +Animals Don't Bring Me Down +Hendrix, Jimi Dolly Dagger +Nugent, Ted Cat Scratch Fever +Young, Neil My My, Hey Hey +Who Amazing Journey/Sparks +Fogerty, John Centerfield +Beatles We Can Work It Out +Kinks Destroyer +Beatles She Said, She Said +CSN&Y Four and Twenty +Santana She's Not There +Scorpions Zoo, The +Doobie Brothers Ukiah/The Captain and Me +Van Halen I'll Wait +Aerosmith Walkin' The Dog +Rare Earth I Know I'm Losing You +Seger, Bob You'll Accomp'ny Me +Georgia Satellites Keep Your Hands to Yourself +Beatles Cry Baby Cry +Clapton, Eric Before You Accuse Me +Amboy Dukes Baby Please Don't Go +Fleetwood Mac Gypsy +John, Elton Take Me To The Pilot +Led Zeppelin Bron-y-aur Stomp +Led Zeppelin Gallows Pole +Petty, Tom You Don't Know How It Feels +Pink Floyd See Emily Play +Rolling Stones Happy +Fuller Four, Bobby I Fought The Law +Beatles Yesterday +Badfinger Day After Day +War Spill The WIne +Young, Neil After The Goldrush +ZZ Top Fool For Your Stockings +Boston Feelin Satisfied +Blue Oyster Cult E.T.I. +Journey Don't Stop Believin' +Joplin, Janis Summertime +Black Oak Arkansas Jim Dandy +Doors Moonlight Drive +Molly Hatchet Flirtin' With Disaster +McCartney, Paul Let Me Roll It +Donovan Hurdy Gurdy Man +Yardbirds Heart Full of Soul +Wright, Gary Love Is Alive +Firm Radioactive +Eagles Best Of My Love +Dylan, Bob Just Like A Woman +Bowie, David Ziggy Stardust +Jethro Tull Farm on the Freeway +Kiss Beth +Moody Blues The Voice +Rundgren, Todd Hello, It's Me +Allman Brothers Revival +Beatles Nowhere Man +Led Zeppelin How Many More Times +Russell, Leon Tight Rope +Steely Dan Pretzel Logic +U2 In God's Country +Asia Only Time Will Tell +Bowie, David Fame +Heart Even It Up +Judas Priest You've Got Another Thing Coming +Morrison, Van Wild Night +Vaughan, Stevie Ray Superstition +Animals Don't Let Me Be Misunderstood +Winter Group, Edgar Keep Playin' That Rock 'n Roll +Beatles The Continuing Story of Bungalow +AC/DC Ride On +Turner, Ike and Tina Proud Mary +Kinks Victoria +Stevens, Cat Peace Train +Doors The Alabama Song +Cooper, Alice School's Out +Jethro Tull Bungle in the Jungle +Fleetwood Mac Never Going Back Again +Garcia, Jerry Sugaree +Eagles Victim of Love +Led Zeppelin That's The Way +Pink Floyd Pigs +Petty, Tom Here Comes My Girl +Thorogood, George It Wasn't Me +Rare Earth Get Ready +Rolling Stones Play With Fire +Badfinger Come And Get It +Buffalo Springfield Rock And Roll Woman +Young, Neil Down By The River +Free Fire and Water +Joplin, Janis Cry Baby +Led Zeppelin The Rain Song +Santana Well All Right +Yes Yours Is No Disgrace +Eagles I Can't Tell You Why +Dylan, Bob It Ain't Me Babe +Beatles I've Just Seen A Face +Allman Brothers Whippin' Post +Queen Keep Yourself Alive +Springsteen, Bruce Prove It All Night +Led Zeppelin Ten Years Gone +Joel, Billy Piano Man +Hendrix, Jimi Wait Until Tomorrow +Genesis Turn It On Again +ZZ Top Heard It On The X +Led Zeppelin The Lemon Song +Beatles I'm Looking Through You +Animals It's My Life +Fleetwood Mac I Don't Wanna Know +ELO Don't Bring Me Down +Five Man Electrical Band Signs +Who Young Man Blues +Trower, Robin Too Rolling Stoned +Grateful Dead Sugar Magnolia +Standells Dirty Water +Rolling Stones Monkey Man +Miller, Steve Wild Mountain Honey +Lynyrd Skynyrd Needle And The Spoon +Kinks Tired Of Waiting +Doobie Brothers Another Park Another Sunday +Grand Funk Railroad Foot Stompin' Music +CCR Green River +John, Elton Someone Saved My Life Tonight +Beck, Jeff Freeway Jam +Allman Brothers Statesboro Blues +Led Zeppelin Bring It On Home +Mellencamp, John Crumblin' Down +Rolling Stones Live With Me +Santana Everything's Coming Our Way +Led Zeppelin In The Evening +Derek And The Dominos Bell Bottom Blues +Steely Dan Don't Take Me Alive +Bowie, David Let's Dance +Chicago Beginnings +Moody Blues I'm Just A Singer +ELO Strange Magic +Ted Nugent Great White Buffalo +Eagles Outlaw Man +Seger, Bob Get Out Of Denver +Ozzy Osbourne Flying High Again diff --git a/lost+found/songs.txt-XB9Zo8 b/lost+found/songs.txt-XB9Zo8 new file mode 100644 index 00000000..e9235d58 --- /dev/null +++ b/lost+found/songs.txt-XB9Zo8 @@ -0,0 +1,50 @@ +Led Zeppelin Stairway to Heaven +Beatles Hey Jude +Hendrix, Jimi All Along the Watchtower +Rolling Stones Satisfaction +Dylan, Bob Like A Rolling Stone +Pink Floyd Another Brick In The Wall +Who Won't Get Fooled Again +Eagles Hotel California +Derek And The Dominos Layla +Lynyrd Skynyrd Sweet Home Alabama +Queen Bohemian Rhapsody +Doors Riders on the Storm +Led Zeppelin Rock and Roll +Heart Barracuda +ZZ Top La Grange +Aerosmith Dream On +Van Halen You Really Got Me +Boston More Than a Feeling +Dire Straits Sultans of Swing +AC/DC You Shook Me All Night Long +Led Zeppelin Kashmir +Kinks Lola +Kansas Carry on Wayward Son +John, Elton Tiny Dancer +Jethro Tull Locomotive Breath +U2 I Still Haven't Found +Steppenwolf Magic Carpet Ride +Lynyrd Skynyrd Free Bird +Hendrix, Jimi Purple Haze +Rush Tom Sawyer +Beatles Let It Be +Who Baba O'Riley +Miller, Steve The Joker +Police Roxanne +Pink Floyd Time +AC/DC It's A Long Way to the Top +Led Zeppelin Whole Lotta Love +Fleetwood Mac The Chain +Yes I've Seen All Good People +Buffalo Springfield For What It's Worth +Santana Black Magic Woman +Moody Blues Nights in White Satin +Beatles While My Guitar Gently Weeps +Rolling Stones Gimme Shelter +Fleetwood Mac Gold Dust Woman +CCR Fortunate Son +McLean, Don American Pie +Bad Company Bad Company +ZZ Top Waitin' For The Bus/Jesus Just Left +Led Zeppelin Over the Hills and Far Away \ No newline at end of file diff --git a/lost+found/svg-salamander-core.jar-AWBvrO b/lost+found/svg-salamander-core.jar-AWBvrO new file mode 100644 index 00000000..c82273b7 Binary files /dev/null and b/lost+found/svg-salamander-core.jar-AWBvrO differ diff --git a/lost+found/swing-worker-1.1.jar-aV9lFC b/lost+found/swing-worker-1.1.jar-aV9lFC new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/task.yaml-0RqIGE b/lost+found/task.yaml-0RqIGE new file mode 100644 index 00000000..01744ddc --- /dev/null +++ b/lost+found/task.yaml-0RqIGE @@ -0,0 +1,81 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Frédéric Kaczynski, John Aoga +context: |- + Prenons l'exemple d'un ``Red-Black Tree`` vide dans lequel on ajoute progressivement des chiffres. + + Les questions suivantes vous demanderont d'écrire une représentation du ``Red-Black Tree`` au fur et à mesure que nous y ajouterons des objets. + + Écrivez la réponse comme si vous lisiez le ``Red-Black Tree`` de gauche à droite et de haut en bas (en ignorant les blancs possibles). Par exemple, si votre réponse est : + + .. figure:: PART3Rbt/rbt.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + Vous écririez: + + :: + + 6 24 7 1 3 5 9 + + Remarquez comment le nœud 2-3 composé de ``2``et ``4`` est écrit d'une manière fusionnée (``24``). +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + time: '30' + memory: '100' +name: PART 3 - Red Black Tree +network_grading: false +order: 14 +problems: + redblacktree1: + answer: '1' + header: 'En commençant par un ``Red-Black Tree`` vide, nous ajoutons ``1`` + au ``Red-Black Tree``. La représentation de l''arbre est :' + type: match + name: '' + redblacktree2: + header: 'Nous ajoutons ``6`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + answer: '16' + type: match + name: '' + redblacktree3: + answer: 4 1 6 + header: 'Nous ajoutons ``4`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + type: match + redblacktree4: + answer: 4 1 67 + header: 'Nous ajoutons ``7`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + type: match + redblacktree5: + type: match + header: 'Nous ajoutons ``3`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + answer: 4 13 67 + redblacktree6: + answer: 46 13 5 7 + type: match + header: 'Nous ajoutons ``5`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + name: '' + redblacktree7: + name: '' + header: 'Nous ajoutons ``2`` au ``Red-Black Tree``. La représentation de l''arbre + est :' + type: match + answer: 4 2 6 1 3 5 7 +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-1A6JP3 b/lost+found/task.yaml-1A6JP3 new file mode 100644 index 00000000..f73080eb --- /dev/null +++ b/lost+found/task.yaml-1A6JP3 @@ -0,0 +1,204 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: '' +context: |+ + Context + ================================================== + + Supposons la matrice 5x5 suivante: + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + + représentée dans le tableau ci-dessous : + + .. image:: Part5GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + Chaque entrée de la matrice représente une altitude. + L'objectif est d'implémenter une classe `GlobalWarmingImpl` qui implémente toutes les méthodes décrites dans `GlobalWarming` données ci-dessous. + + Un niveau d'eau global spécifié dans le constructeur modélise le fait que toutes les positions de la matrice avec une valeur <= le niveau d'eau sont inondées (sous l'eau) et donc dangereuses. + Dans l'exemple ci-dessus, le niveau d'eau est de 3, tous les points sûrs sont en vert. + + Les méthodes que vous devez implémenter sont les suivantes + + * le nombre d'îles + * un test pour vérifier si deux positions sont sur la même île + + nous supposons que les points sont **uniquement connectés verticalement ou horizontalement**. + + `Le projet IntelliJ est disponible ici `_. + + + .. code-block:: java + + + import java.util.List; + + abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * An island is a connected components of safe points wrt to waterLevel + * @return the number of islands + */ + public abstract int nbIslands(); + + /** + * + * @param p1 a point with valid coordinates on altitude matrix + * @param p2 a point with valid coordinates on altitude matrix + * @return true if p1 and p2 are on the same island, that is both p1 and p2 are safe wrt waterLevel + * and there exists a path (vertical/horizontal moves) from p1 to p2 using only safe positions + */ + public abstract boolean onSameIsland(Point p1, Point p2); + + + } + + + Preliminary exercises + ================================================== + + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + GlobalWarming gw = new MyGlobalWarming(tab,3); + + .. image:: Part5GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + hard_time: '120' + memory: '750' + output: '100' +name: PART 5 - Global Warming (implem) +network_grading: false +order: 24 +problems: + nbIslands: + name: nbIslands + type: match + answer: '4' + header: |- + Quel serait le résultat de + + .. code-block:: java + + gw.nbIslands() + + + attendu : un nombre + onSameIsland: + type: match + answer: 'false' + name: onSameIsland + header: |- + Quel serait le résultat de + + .. code-block:: java + + gw.onSameIsland(new GlobalWarming.Point(1,3),new GlobalWarming.Point(3,4)); + + attendu: true/false + implementation: + language: java + type: code + header: |+ + Copier-coller et compléter le code ci-dessous. + Faites attention à la complexité temporelle prévue de chaque méthode. + Pour répondre à cette complexité temporelle, il faut déjà faire quelques pré-calculs dans le constructeur. N'hésitez pas à créer des classes internes dans GlobalWarmingImpl pour faciliter votre implémentation. + N'hésitez pas à utiliser n'importe quelle méthode ou structure de données disponible dans le langage Java et l'API. + + + .. code-block:: java + + import java.util.*; + + public class GlobalWarmingImpl extends GlobalWarming { + + public GlobalWarmingImpl(int[][] altitude, int waterLevel) { + super(altitude,waterLevel); + // expected pre-processing time in the constructror : O(n^2 log(n^2)) + // TODO + } + + public int nbIslands() { + // TODO + // expected time complexity O(1) + return 0; + } + + + public boolean onSameIsland(Point p1, Point p2) { + // TODO + // expected time complexity O(1) + return true; + } + + } + + + + + name: Remplissez la classe de manière à ce qu'elle corresponde à sa spécification. + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-1NLbSY b/lost+found/task.yaml-1NLbSY new file mode 100644 index 00000000..027b5130 --- /dev/null +++ b/lost+found/task.yaml-1NLbSY @@ -0,0 +1,88 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00/2019-10-08 17:00:00 +author: '' +categories: [] +context: |- + Etant donné un tableau d'intervalles (fermés), Il vous est demandé d'implémenter l'opération ``union``. Cette opération retournera le tableau minimal d'intervalles triés couvrant exactement l'union des points couverts par les intervalles d'entrée. + + Par exemple, l'union des intervalles *[7,9],[5,8],[2,4]* est *[2,4],[5,9]*. + + La classe ``Interval`` permetant de stocker les intervalles vous est fourni et se présente comme suit (vous pouvez l'utiliser directement dans votre code): + + + .. code-block:: java + + public class Interval implements Comparable { + + final int min, max; + public Interval(int min, int max) { + assert(min <= max); + this.min = min; + this.max = max; + } + + @Override + public boolean equals(Object obj) { + return ((Interval) obj).min == min && ((Interval) obj).max == max; + } + + @Override + public String toString() { + return "["+min+","+max+"]"; + } + + @Override + public int compareTo(Interval o) { + if (min < o.min) return -1; + else if (min == o.min) return max - o.max; + else return 1; + } + } + + `Le projet IntelliJ est disponible ici `_. + + Nous vous conseillons de le télécharger d'implémenter/tester avant de soumettre ce qui vous est demandé. +environment: java7 +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + hard_time: '40' + time: '20' + output: '2' + memory: '400' +name: PART 2 - Union Intervals (implem) +network_grading: false +order: 6 +problems: + union: + header: | + Quelle est l'union de [10,10],[2,4],[3,4],[5,6],[6,9],[6,8]? + Exprimez votre réponse en utilisant les notations *[a,b],[c,d],...,[e,f]* avec a,b,c,d,e,f entiers. + type: match + name: Warm-up + answer: '[2,4],[5,9],[10,10]' + implementation: + type: code + language: java + name: Implementation + default: '' + header: |- + Implémentez complètement la classe Union dans la zone de texte. + N'hésitez pas à utiliser n'importe quelle méthode/classe de l'API Java. + Complexité temporelle attendue : ``O(nlog(n))``, où *n* est le nombre d'intervalles d'entrée. + + .. code-block:: java + + public class Union { + + public static Interval [] union(Interval [] intervals) { + // TODO + return new Interval[]{}; + } + } +stored_submissions: 0 +submission_limit: + amount: 30 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-1xmKhZ b/lost+found/task.yaml-1xmKhZ new file mode 100644 index 00000000..6bf16c21 --- /dev/null +++ b/lost+found/task.yaml-1xmKhZ @@ -0,0 +1,49 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: xgillard, john Aoga +context: | + Etant donné une fonction de hachage: + + :math:`h(\left[v_0 \cdots v_{n-1} \right]) = \sum\limits_{i=0}^{n-1} v_i R^{(n-i-1)} \% M` + + dans laquelle :math:`\left[v_0 \cdots v_{n-1} \right]` dénote un vecteur de bit et :math:`R` et :math:`M` sont des facteurs constants. +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 4 - QCM Hashing +network_grading: false +order: 17 +problems: + nombre_pair: + type: multiple_choice + header: Quelle portion de la clé est utilisée si on pose :math:`R=32` et `M=1024` + ? + choices: + - text: Uniquement les bits :math:`\left[v_0 \cdots v_{1023} \right]` + - text: Tous les bits de la clé + - text: Uniquement les bits :math:`\left[v_{n-1024} \cdots v_{n-1} \right]` + - text: Uniquement les deux derniers bits + valid: true + name: Fraction de la clé utilisée (1) + limit: 0 + mult_trois: + choices: + - text: Tous les bits de la clé + - text: Uniquement les bits :math:`\left[v_0 \cdots v_{80} \right]` + - text: Uniquement les bits :math:`\left[v_{n-81} \cdots v_{n-1} \right]` + - text: Uniquement les quatre derniers bits + valid: true + header: Quelle portion de la clé est utilisée si on pose :math:`R=3` et `M=81` + ? + limit: 0 + name: Fraction de la clé utilisée (2) + type: multiple_choice +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-2bbmPL b/lost+found/task.yaml-2bbmPL new file mode 100644 index 00000000..43969a70 --- /dev/null +++ b/lost+found/task.yaml-2bbmPL @@ -0,0 +1,95 @@ +accessible: false +author: Pierre Schaus +context: |+ + La fonction de Hash calculée sur le sous tableau :math:`t[from,...,from+M-1]` est calculée comme suit: + + :math:`hash([from,...,from+M-1])= \left( \sum_{i=0}^{M-1} t[from+i] \cdot R^{(M-1-i)}\right)\%Q` + + Le code pour calculer cette fonction de hash vous est donné. + Nous vous demandons de calculer + :math:`hash([from,...,from+M-1])` au départ de + :math:`hash([from-1,...,from+M-2])` en O(1). + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: '[old] Bilan M4 Incremental Hash (implem)' +network_grading: false +order: 55 +problems: + TODO1: + name: IncrementalHash.java + language: java + default: '' + type: code + header: |- + Mettez votre implémentation complète de ``IncrementalHash.java`` ci-dessous. Conseil: copiez-collez d'abord tout le code source de la classe ci-dessous (celle-ci devrait compiler mais son contenu n'est pas correct). Voir le TODO ci-dessous. La réponse ne devrait pas prendre plus de deux lignes de code à ajouter. + + .. code-block:: java + + public class IncrementalHash { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHash(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-2)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + // TODO, obviously this is not O(1) + return hash(t,from); + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-2)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + } +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-6UbjqL b/lost+found/task.yaml-6UbjqL new file mode 100644 index 00000000..d46ced1c --- /dev/null +++ b/lost+found/task.yaml-6UbjqL @@ -0,0 +1,93 @@ +accessible: false +author: Simon Hardy +context: |- + For this mission, you have to write a plagiarism detector (a class named "Plagiarism") implementing the following interface : + + .. code-block:: java + + import java.util.Map.Entry; + import java.util.Set; + + /* A class implementing this interface should have a constructor taking two arguments : + * - The path to the folder where lies the corpus of documents, + * - The number 'w' of characters from which we consider that a sentence is plagiarized. */ + public interface PlagiarismInterface { + + /* @pre : 'doc' is the path to a text file + * @post : searches for plagiarized sentences of at least 'w' characters between 'doc' and all text files in 'corpus'. + * returns a set of (document name, position) for each plagiarized sentence found in a corpus file + * ('position' is the position of the first character of the first occurence of that sentence in the corpus files, starting at 0 and considering the alphabetical order of the files) */ + public Set> detect(String doc); + + } + + In order to have an efficient detector, you will have to use Map (a class named "HashMap") implementing this interface (be aware that this interface changed a little bit since the unit tests : the parameters of the *incrementalHashCode* are different, and the type of keys is now generic): + + .. code-block:: java + + /* A Map creates mappings between objects of type K and V. + * A class implementing this interface should have at least one constructor + * with no argument, initializing the map. + */ + public interface MapInterface { + + public V get(K key); + + /* Same as 'get(key)', but instead of hashing 'key', the map will directly use 'hashCode' + * and check if there is indeed an entry with key 'key' */ + public V get(K key, int hashCode); + + public void put(K key, V value); + + /* Same as 'put(key, value)', but instead of hashing 'key', + * it will directly use 'hashCode' */ + public void put(K key, V value, int hashCode); + + public int size(); + + /* Returns the hash of the K 'key' + * Complexity required : O(m) */ + public int hashCode(K key); + + /* Returns the hash of the key with length 'keyLength' and whose last character is 'lastKeyChar', + * based on the previous hash 'lastHash' and on the previous character leading the sentence 'lastChar' + * Complexity required : O(1) */ + public int incrementalHashCode(int keyLength, int lastKeyChar, int lastHash, int lastChar); + + } + + For more information about the unspecified methods of *MapInterface*, see the Java Map interface (http://docs.oracle.com/javase/7/docs/api/java/util/Map.html). + + Note that your implementation of `MapInterface` must use `String` as key type: `public class HashMap implements MapInterface` should be the signature of your class. +environment: java8scala +evaluate: best +groups: true +input_random: '0' +limits: + output: '100' + memory: '512' + time: '20' +name: Mission 4 - Plagiarism detector [group] +network_grading: false +order: 40 +problems: + plagiarism: + allowed_exts: + - .java + name: Plagiarism detector + type: file + header: Upload your plagiarism detector here. Your class should be named "Plagiarism" + and implement *PlagiarismInterface*. **Don't include the interface in + your submission.** + hashmap: + header: Upload your map implementation here. Your class should be named "HashMap" + and implement *MapInterface*. **Don't include the interface in your submission.** + name: HashMap + allowed_exts: + - .java + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-6dWeOD b/lost+found/task.yaml-6dWeOD new file mode 100644 index 00000000..4a3405c6 --- /dev/null +++ b/lost+found/task.yaml-6dWeOD @@ -0,0 +1,41 @@ +accessible: false +author: Simon Hardy +context: |- + You are asked to implement the Bucket-Sort algorithm on a specific digit (identified by the second parameter) of an integer number (given as first parameter). Concretely, you have to create a class *BucketSort* with one static method *sort* with the following specifications : + + .. code-block:: java + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post 'tab' is not modified + * @returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) + */ + public static int[] sort(int[] tab, int digit); + + Beware that you Bucket-Sort implementation should run in *linear* time ! +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '100' + memory: '3000' + time: '60' +name: '[Old] Mission 6 - Bucket Sort [individual]' +network_grading: false +order: 57 +problems: + bucketsort: + type: file + header: 'Upload the file containing your implementation here. Your class should + be named *BucketSort* and have only one static method *sort*. ' + allowed_exts: + - .java + name: BucketSort +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-8hnnps b/lost+found/task.yaml-8hnnps new file mode 100644 index 00000000..30528e12 --- /dev/null +++ b/lost+found/task.yaml-8hnnps @@ -0,0 +1,65 @@ +accessible: 2017-09-11 10:33:34/2017-10-25 20:30:00 +author: Simon Hardy, Frédéric Kaczynski +context: |- + For this task, you have to write unit tests using JUnit in order to check several OrderedMap implementations (the interface of OrderedMap is available in the next task). You are given one class, *SearchTree*, and you have to determine if it does its job correctly or not. We provide you a template to begin writing your tests : + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + import static org.junit.Assert.fail; + import java.util.Set; + import java.util.HashSet; + + public class SearchTreeTests { + + @Test + public void firstTest() { + try { + OrderedMap tree = new SearchTree(); + String key = "Foo Fighters"; + Set value = new HashSet(); + value.add("The Pretender"); + assertEquals(tree.put(key, value), null); + assertEquals(tree.size(), 1); + assertEquals(tree.isEmpty(), false); + Set result = tree.get(key); + assertEquals(result.size(), 1); + assertTrue(result.contains("The Pretender")); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void secondTest() { + // TODO... + } + } + + Note that you can't provide custom text files for this task, but a small subset of the file *songs.txt* is available in the same folder as your tester, and under the same name. It contains only the 50 first lines of the original file. +environment: java8scala +evaluate: best +groups: false +limits: + output: '100' + memory: '512' + time: '180' +name: Mission 3 - Unit tests [individual] +network_grading: false +order: 37 +problems: + tests: + type: file + name: Unit tests + allowed_exts: + - .java + header: 'Upload your file here, with only one class named *SearchTreeTests*. + The class representing the implementation under test is called *SearchTree*, + as written in the template. ' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-9ZLjGC b/lost+found/task.yaml-9ZLjGC new file mode 100644 index 00000000..6c113353 --- /dev/null +++ b/lost+found/task.yaml-9ZLjGC @@ -0,0 +1,138 @@ +accessible: false +author: John Aoga +context: |- + Dans ce exercice il vous est demandé d'implémenter les fonctions ``resize``, ``put`` et ``get`` d'une table de symbole basé sur le hashage par Linear Probing. + + Pour cela la classe suivant vous a été donné. Vous devez completer les *TODO*. + + + + .. code-block:: java + + import java.util.Arrays; + + /** + * Symbol-table implementation with linear-probing hash table. + */ + public class LinearProbingHashST { + + private int n; // number of key-value pairs in the symbol table + private int m; // size of linear probing table + private Key[] keys; // the keys + private Value[] vals; // the values + + + /** + * Initializes an empty symbol table. + */ + public LinearProbingHashST() {this(16);} + + /** + * Initializes an empty symbol table with the specified initial capacity. + */ + public LinearProbingHashST(int capacity) { + m = capacity; + n = 0; + keys = (Key[]) new Object[m]; + vals = (Value[]) new Object[m]; + } + + public int size() {return n;} + public boolean isEmpty() {return size() == 0;} + + // hash function for keys - returns value between 0 and M-1 + private int hash(Key key) { + return (key.hashCode() & 0x7fffffff) % m; + } + + /** + * resizes the hash table to the given capacity by re-hashing all of the keys + */ + private void resize(int capacity) { + //TODO STUDENT + } + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value. + */ + public void put(Key key, Value val) { + //TODO STUDENT + } + + /** + * Returns the value associated with the specified key. + */ + public Value get(Key key) { + //TODO STUDENT + } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: EXAM0119 - LinearProbing +network_grading: false +order: 0 +problems: + resize: + name: Implementation de resize + language: java + type: code + default: '' + header: | + .. code-block:: java + + /** + * resizes the hash table to the given capacity by re-hashing all of the keys + */ + private void resize(int capacity) { + //TODO STUDENT + } + + Collez ici le contenu de votre fonction ``resize`` + put: + language: java + name: Implementation de put + default: '' + type: code + header: |- + .. code-block:: java + + /** + * Inserts the specified key-value pair into the symbol table, overwriting the old + * value with the new value. + */ + public void put(Key key, Value val) { + //TODO STUDENT + } + + Collez ici le contenu de votre fonction ``put`` + get: + type: code + language: java + header: | + .. code-block:: java + + /** + * Returns the value associated with the specified key. + */ + public Value get(Key key) { + //TODO STUDENT + } + + Collez ici le contenu de votre fonction ``get`` + default: '' + name: Implementation de get +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-BJpes7 b/lost+found/task.yaml-BJpes7 new file mode 100644 index 00000000..cf5208fb --- /dev/null +++ b/lost+found/task.yaml-BJpes7 @@ -0,0 +1,132 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: Frédéric Kaczynski, John Aoga +context: |- + Considérez cette classe, ``BreadthFirstShortestPaths``, qui calcule le chemin le plus court entre plusieurs sources de nœuds et n'importe quel nœud dans un graphe non dirigé en utilisant un parcours BFS. + + .. code-block:: java + + // TODO + + public class BreadthFirstShortestPaths { + + private static final int INFINITY = Integer.MAX_VALUE; + private boolean[] marked; // marked[v] = is there an s-v path + private int[] distTo; // distTo[v] = number of edges shortest s-v path + + /** + * Computes the shortest path between any + * one of the sources and very other vertex + * @param G the graph + * @param sources the source vertices + */ + public BreadthFirstShortestPaths(Graph G, Iterable sources) { + marked = new boolean[G.V()]; + distTo = new int[G.V()]; + for (int v = 0;v < G.V();v++) { + distTo[v] = INFINITY; + } + bfs(G, sources); + } + + // Breadth-first search from multiple sources + private void bfs(Graph G, Iterable sources) { + // TODO + } + + /** + * Is there a path between (at least one of) the sources and vertex v? + * @param v the vertex + * @return true if there is a path, and false otherwise + */ + public boolean hasPathTo(int v) { + // TODO + } + + /** + * Returns the number of edges in a shortest path + * between one of the sources and vertex v? + * @param v the vertex + * @return the number of edges in a shortest path + */ + public int distTo(int v) { + // TODO + } + } + + La classe ``Graph`` est déjà implémentée et la voici : + + .. code-block:: java + + public class Graph { + // @return the number of vertices + public int V() { } + + // @return the number of edges + public int E() { } + + // Add edge v-w to this graph + public void addEdge(int v, int w) { } + + // @return the vertices adjacent to v + public Iterable adj(int v) { } + + // @return a string representation + public String toString() { } + } + + **Note:** Les questions suivantes vous demanderont d'implémenter tous les ``TODO`` de la classe ``BreadthFirstShortestPaths``. Vous n'avez pas besoin de mettre les accolades (``{ }``) entourant le corps de la fonction dans votre réponse. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + memory: '100' + output: '2' +name: PART 6 - Breadth First Paths (implem) +network_grading: false +order: 26 +problems: + import: + default: '' + language: java + header: |- + Vous pouvez l'utiliser pour importer des classes supplémentaires dont votre code peut avoir besoin. + + **Note:** Ceci n'est demandé que pour que votre code puisse être compilé et testé. Pendant l'examen, vous n'aurez pas besoin de fournir cette information et vous pourrez utiliser des pseudo-classes comme ``Queue``. + name: Les importations + type: code + question1: + type: code + name: Implémentation de la méthode bfs + header: |- + .. code-block:: java + + private void bfs(Graph G, Iterable sources) + language: java + default: '' + question2: + default: '' + header: |- + .. code-block:: java + + public boolean hasPathTo(int v) + type: code + name: Implémentation de la méthode hasPathTo + language: java + question3: + language: java + name: Implémentation de la méthode distTo + header: |- + .. code-block:: java + + public int distTo(int v) + default: '' + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-CBRWBv b/lost+found/task.yaml-CBRWBv new file mode 100644 index 00000000..e39d53fe --- /dev/null +++ b/lost+found/task.yaml-CBRWBv @@ -0,0 +1,109 @@ +accessible: false +author: Simon Hardy +context: |- + You are asked to implement the following interface, representing a custom Ordered Map (for more informations about the methods without comment listed below, refer to the official SortedMap interface of Java). + + You have to implement this interface with a binary search tree (class named "SearchTree"), with the *height-balance property* (in order to achieve the *logarithmic* complexity for 'get'). + + Note : you can't rely on any existing Java class implementing java.util.SortedMap + + .. code-block:: java + + import java.util.Collection; + import java.util.LinkedList; + import java.util.List; + import java.util.Set; + import java.util.Map; + + /* An "OrderedMap" is a class which stores entries with keys of type String and values of type Set. + * In our case, the key is the name of the artist, and the value are the set of the songs of this artist. + * + * A class implementing this interface must have a constructor which takes as argument a String + * representing the path to the input file, and filling a data structure using data of this file. + * The format of this file is, for each line : the name of the artist, followed by a tabulation (\t), + * itself followed by the name of the song, and then an 'end of line' character (\n). + * It should also have a constructor which takes no argument, and creates an empty OrderedMap. + */ + public interface OrderedMap { + + // Methods of the Map ADT + + public int size(); + + public boolean isEmpty(); + + public Set get(String key); + + public Set put(String key, Set value); + + public Set remove(String key); + + public Set keySet(); + + public Collection> values(); + + public Set>> entrySet(); + + + // Methods of the Ordered Map ADT + + public Map.Entry> firstEntry(); + + public Map.Entry> lastEntry(); + + public Map.Entry> ceilingEntry(String key); + + public Map.Entry> floorEntry(String key); + + public Map.Entry> lowerEntry(String key); + + public Map.Entry> higherEntry(String key); + + + // Additional methods + + /* Same as the 'get' method, but instead of returning a Set, + * returns a String[] containing the values ordered by name. + * If there is no such key in the map, returns an empty array of Strings. + * You MUST use the QuickSort algorithm to sort the values, + * and you MUST implement it by yourself (do NOT use Arrays.sort). */ + public String[] getOrdered(String key); + + /* Returns a List containing all entries of this Map with keys between 'lowest' and 'highest', + * including them (if they exist). This list must be sorted by key name. + * If there is no such entries, returns an empty List>>. + * Complexity required : O(x + log n) where n is the total number of entries in the map, + * and x is the number of entries between 'lowest' and 'highest'. */ + public List>> entriesBetween(String lowest, String highest); + + /* Returns a String corresponding to the data stored in this Map. + * This String should contain one pair of artist and song per line, + * following this structure : [artistName] songName + * Order those lines by artist name, and for the same artist by song name. */ + public String toString(); + + } +environment: java8scala +evaluate: best +groups: true +input_random: '0' +limits: + output: '100' + memory: '2039' + time: '45' +name: Mission 3 - Ordered Map [group] +network_grading: false +order: 38 +problems: + ordered_map: + allowed_exts: + - .java + header: 'Upload the file containing your implementation here. The class representing + your ordered map should be named *SearchTree* and implement *OrderedMap*. ' + name: SearchTree + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-CNrYqy b/lost+found/task.yaml-CNrYqy new file mode 100644 index 00000000..e903927e --- /dev/null +++ b/lost+found/task.yaml-CNrYqy @@ -0,0 +1,88 @@ +accessible: /2017-11-05 20:00:00 +author: Simon Hardy +context: | + Recall the Map interface you used in your plagiarism detector : + + .. code-block:: java + + /* A Map creates mappings between Strings and objects of type V. + * A class implementing this interface should have at least one constructor + * with no argument, initializing the map. + */ + public interface MapInterface { + + public V get(String key); + + /* Same as 'get(key)', but instead of hashing 'key', the map will directly use 'hashCode' + * and check if there is indeed an entry with key 'key' */ + public V get(String key, int hashCode); + + public void put(String key, V value); + + /* Same as 'put(key, value)', but instead of hashing 'key', + * it will directly use 'hashCode' */ + public void put(String key, V value, int hashCode); + + public int size(); + + /* Returns the hash of the String 'key' + * Complexity required : O(m) */ + public int hashCode(String key); + + /* Returns the hash of the String 'key' based on the previous hash 'lastHash' + * and on the previous character leading the sentence 'lastChar' + * Complexity required : O(1) */ + public int incrementalHashCode(String key, int lastHash, int lastChar); + + } + + You are asked to write unit tests (using JUnit) in order to check wether a particular implementation of this interface is correct. + + Here is a simple template you can use to write your tests : + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + + /* Partial solution to the tests of the HashMap */ + + public class HashMapTests { + + @Test + public void firstTest() { + MapInterface map = new HashMap(); + map.put("a", 1); + assertEquals(map.get("a"), new Integer(1)); + } + + @Test + public void secondTest() { + // TODO... + } + } +environment: java8scala +evaluate: best +groups: false +limits: + output: '100' + time: '45' + memory: '512' +name: Mission 4 - Unit tests for the map of the plagiarism detector [individual] +network_grading: false +order: 39 +problems: + plagiarism_tests: + allowed_exts: + - .java + header: Upload your file here, with only one class named "HashMapTests". The + class representing the spam filter under test is called *HashMap* and + implements *MapInterface*, as written in the template ! + name: Unit tests + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-CT13aE b/lost+found/task.yaml-CT13aE new file mode 100644 index 00000000..d16a40f6 --- /dev/null +++ b/lost+found/task.yaml-CT13aE @@ -0,0 +1,127 @@ +accessible: false +author: '' +context: |- + Consider this class, ``DepthFirstPaths``, that computes paths to any connected node from a source node ``s`` in an undirected graph. + + .. code-block:: java + + // TODO + + public class DepthFirstPaths { + private boolean[] marked; // marked[v] = is there an s-v path? + private int[] edgeTo; // edgeTo[v] = last edge on s-v path + private final int s; + + /** + * Computes a path between s and every other vertex in graph G + * @param G the graph + * @param s the source vertex + */ + public DepthFirstPaths(Graph G, int s) { + this.s = s; + edgeTo = new int[G.V()]; + marked = new boolean[G.V()]; + dfs(G, s); + } + + // Depth first search from v + private void dfs(Graph G, int v) { + // TODO + } + + /** + * Is there a path between the source s and vertex v? + * @param v the vertex + * @return true if there is a path, false otherwise + */ + public boolean hasPathTo(int v) { + // TODO + } + + /** + * Returns a path between the source vertex s and vertex v, or + * null if no such path + * @param v the vertex + * @return the sequence of vertices on a path between the source vertex + * s and vertex v, as an Iterable + */ + public Iterable pathTo(int v) { + // TODO + } + } + + The class ``Graph`` is already implemented. Here is its specification: + + .. code-block:: java + + public class Graph { + // @return the number of vertices + public int V() { } + + // @return the number of edges + public int E() { } + + // Add edge v-w to this graph + public void addEdge(int v, int w) { } + + // @return the vertices adjacent to v + public Iterable adj(int v) { } + + // @return a string representation + public String toString() { } + } + + **Note:** The following questions will ask you to implement the function left out. You don't need to put the brackets (``{ }``) surrounding the function body in your answer. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + memory: '100' + output: '2' +name: '[old] Bilan M6 - Depth First Paths' +network_grading: false +problems: + import: + default: '' + language: java + header: |- + You can use this to import additional classes your code may need. + + **Note:** This is only asked so that your code can be compiled and tested. During the exam, you won't need to provide this and you will be able to use pseudo-classes like ``Queue``. + name: '' + type: code + question1: + type: code + name: '' + header: |- + .. code-block:: java + + private void dfs(Graph G, int v) + language: java + default: '' + question2: + default: '' + header: |- + .. code-block:: java + + public boolean hasPathTo(int v) + type: code + name: '' + language: java + question3: + language: java + name: '' + header: |- + .. code-block:: java + + public Iterable pathTo(int v) + default: '' + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 +order: 44 diff --git a/lost+found/task.yaml-DGGU26 b/lost+found/task.yaml-DGGU26 new file mode 100644 index 00000000..28c50013 --- /dev/null +++ b/lost+found/task.yaml-DGGU26 @@ -0,0 +1,47 @@ +accessible: /2017-09-29 08:00:00 +author: Simon Hardy +context: |- + You are asked to write a mini-PostScript interpreter as described in the *pdf* of the mission. Precisely, you must implement the following interface : + + .. code-block:: java + + public interface InterpreterInterface { + /** + * @pre: 'instructions' is a valid chain of PostScript instructions + * @post: returns a String representing the state of the stack when a 'pstack' instruction is encountered. + * If several 'pstack' instructions are present in the chain, a concatenation of the corresponding states (when 'pstack' is encountered) must be returned, separated by whitespaces. + * If several elements are still on the stack, separate them with whitespaces. + * If there is no element on the stack or no 'pstack' instruction, return the empty string (""). + */ + public String interpret(String instructions); + } + + Don't forget to throw the different possible exceptions : think about java.util.EmptyStackException, java.lang.ArithmeticException... + + Note that [group] means that only one student must submit the code for the entire group. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '100' + memory: '512' + time: '70' +name: '[old] Mission 1 - PostScript Interpreter [group]' +network_grading: false +order: 34 +problems: + interpreter: + allowed_exts: + - .java + type: file + header: 'Upload your interpreter here. Your file should contain exactly one + public class named *Interpreter* and implementing *InterpreterInterface*. + Put additional classes inside *Interpreter*, or just after it in the same + file but then without the *public* key-word. ' + name: PostScript interpreter +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-E40tnd b/lost+found/task.yaml-E40tnd new file mode 100644 index 00000000..8cf50b88 --- /dev/null +++ b/lost+found/task.yaml-E40tnd @@ -0,0 +1,87 @@ +accessible: false +author: Simon Hardy, Frédéric Kaczynski +context: |- + Recall the Map interface : + + .. code-block:: java + + import java.util.Set; + + /* Your class should be named MyMap and have at least a no-argument constructor. */ + public interface Map { + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key); + + /* Returns true if this map contains a mapping for the specified value. */ + public boolean containsValue(V value); + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet(); + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key); + + /* Returns the hash code value for this map. */ + public int hashCode(); + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty(); + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value); + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key); + + /* Returns the number of key-value mappings in this map. */ + public int size(); + } + + You are asked to write unit tests (using JUnit) in order to check wether a particular implementation of this interface is correct. + + Here is a simple template you can use to write your tests: + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + public class MapTests { + + @Test + public void firstTest() { + Map map = new MyMap(); + map.put("a", 5); + assertEquals(map.get("a"), new Integer(5)); + } + + @Test + public void secondTest() { + // TODO... + } + } +environment: java8scala +evaluate: best +groups: false +limits: + memory: '512' + output: '100' + time: '45' +name: '[Old] Mission 4 - Unit tests for the Map [individual]' +network_grading: false +order: 51 +problems: + map_tests: + allowed_exts: + - .java + header: Upload your file here, with only one class named "MapTests". The class + representing the map under test is called *MyMap* and implements *Map*, + as written in the template ! + name: Unit tests for the Map implementation + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-EFm4hD b/lost+found/task.yaml-EFm4hD new file mode 100644 index 00000000..c89f936e --- /dev/null +++ b/lost+found/task.yaml-EFm4hD @@ -0,0 +1,79 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00/2019-10-08 17:00:00 +author: Pierre Schaus +categories: [] +context: |- + Nous vous donnons l'API d'une classe Vector permettant d'accéder, modifier et interchanger deux élements en temps constant. + Votre tâche est d'implémenter une méthode permettant de calculer la médiane d'un Vecteur. + + .. code-block:: java + + public interface Vector { + // taille du vecteur + public int size(); + // mets la valeur v à l'indice i du vecteur + public void set(int i, int v); + // renvoie la valeur à l'indice i du vecteur + public int get(int i); + // échange les valeurs aux positions i et j + public void swap(int i, int j); + + } + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '900' +name: PART 2 - Median (implem) +network_grading: false +order: 7 +problems: + question1: + language: java + type: code + header: |- + Vous devez implémenter une méthode qui a la signature suivante: + + .. code-block:: java + + public static int median(Vector a, int lo, int hi) + + + + Cette méthode calcule la médiane du ``vector`` "a" entre les positions "lo" et "hi" (incluses). + + Vous pouvez considérer que le ``vector`` "a" a toujours une taille impaire. + + Pour vous aider, un *projet IntelliJ* avec un test minimaliste pour vérifier si votre code calcule la bonne valeur médiane est donné. En effet, il n'est pas conseillé de débugger son code via Inginious. + + **Attention** Il n'est pas interdit de modifier ou d'interchanger des elements du vecteur "a" durant le calcul (avec les methodes get/set/swap). Il est interdit de faire appel à d'autres méthodes de la librairie standard Java. Il est également interdit de faire un "new". + + L'évaluation porte sur sur 10 points: + + - bonne valeur de retour: 3 points, + + - bonne valeur de retour et complexité ``O(n log n)``: 5 points, + + - bonne valeur de retour et complexité ``O(n)`` expected (cas moyen sur une distribution uniforme aléatoire): 10 points. + + + Tout le code que vous écrirez dans le champ texte sera substitué à l'endroit indiqué ci-dessous. + Vous êtes libre d'implémenter éventuellement d'autres méthodes pour vous aider dans cette classe mais la méthode "median" donnée ci-dessus doit au moins y figurer. + + .. code-block:: java + + public class Median { + // votre code sera substitué ici + } + default: '' + name: Implementation de la median +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 10.0 diff --git a/lost+found/task.yaml-Fnjdio b/lost+found/task.yaml-Fnjdio new file mode 100644 index 00000000..89ea9437 --- /dev/null +++ b/lost+found/task.yaml-Fnjdio @@ -0,0 +1,74 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: Frédéric Kaczynski +context: |- + Considérons un graphe composé de 10 nœuds disjoints (numérotés de 0 à 9). Nous utilisons une structure de données union-find pour représenter ce graphe. Dans un premier temps, chaque nœud est contenu dans une partition qui porte son nom. Ainsi, la représentation du graphique dans le tableau ``id[]`` est : + + :: + + 0 1 2 3 4 5 6 7 8 9 + + Les questions suivantes vous demanderont de donner la représentation du graphe après avoir utilisé l'algorithme **quick-find** pour ajouter une arête entre 2 noeuds. Vous devez donner cette représentation de la même manière qu'elle a été donnée ci-dessus. + + **Note:** Lorsque nous joignons ``p-q`` avec l'algorithme quick-find, la convention est de changer ``id[p]`` (et éventuellement d'autres entrées) mais pas ``id[q]``. +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 5 - Union find +network_grading: false +order: 22 +problems: + unionfind1: + type: match + answer: 0 9 2 3 4 5 6 7 8 9 + name: '' + header: Après avoir ajouté l'arête ``1-9``, ``id[] =`` + unionfind2: + name: '' + header: Après avoir ajouté l'arête ``3-8``, ``id[] =`` + answer: 0 9 2 8 4 5 6 7 8 9 + type: match + unionfind3: + name: '' + type: match + answer: 0 0 2 8 4 5 6 7 8 0 + header: Après avoir ajouté l'arête ``1-0``, ``id[] =`` + unionfind4: + name: '' + header: Après avoir ajouté l'arête ``6-7``, ``id[] =`` + type: match + answer: 0 0 2 8 4 5 7 7 8 0 + unionfind5: + type: match + header: Après avoir ajouté l'arête ``0-6``, ``id[] =`` + answer: 7 7 2 8 4 5 7 7 8 7 + name: '' + unionfind6: + answer: 7 7 2 8 8 5 7 7 8 7 + type: match + name: '' + header: Après avoir ajouté l'arête ``4-8``, ``id[] =`` + unionfind7: + type: match + header: Après avoir ajouté l'arête ``8-5``, ``id[] =`` + name: '' + answer: 7 7 2 5 5 5 7 7 5 7 + unionfind8: + header: Après avoir ajouté l'arête ``2-7``, ``id[] =`` + name: '' + answer: 7 7 7 5 5 5 7 7 5 7 + type: match + unionfind9: + answer: 5 5 5 5 5 5 5 5 5 5 + type: match + name: '' + header: Après avoir ajouté l'arête ``7-5``, ``id[] =`` +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-G6AlUU b/lost+found/task.yaml-G6AlUU new file mode 100644 index 00000000..f4c32814 --- /dev/null +++ b/lost+found/task.yaml-G6AlUU @@ -0,0 +1,59 @@ +accessible: false +author: psc +context: |- + L'API de la classe `Graph `_. + + + L'API de `Java `_. + + .. code-block:: java + + public class ConnectedComponents { + /** + * @return the number of connected components in g + */ + public static int numberOfConnectedComponents(Graph g) { + // TODO + return 0; + } + } +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + hard_time: '30' + memory: '250' + output: '2' +name: '[old] Bilan M6 - Connected Components' +network_grading: false +problems: + TODO0: + answer: '3' + header: |- + Combien de composante(s) connexe(s) y a-t-il dans le graph suivant? + + .. image:: bilan_m6_cc/graph.png + :width: 300px + :align: center + :alt: graph example + name: Exercice préliminaire + type: match + TODO1: + default: '' + language: java + type: code + name: Code + header: |+ + Mettez votre implémentation complète de ``ConnectedComponents.java`` ci-dessous. + Conseil: commencez par par copier-coller le code source de la classe ci-dessus (celle-ci devrait compiler mais son contenu n'est pas correct). + N'hésitez pas à ajouter des méthodes ou des même des inner-class (``private static class`` ...) pour vous aider mais ne modifiez pas le nom de la classe ni la signature de la méthode ``numberOfConnectedComponents``. N'oubliez pas d'ajouter les imports au début de votre code si vous utilisez des objets de l'API de `Java `_. + + +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 +order: 43 diff --git a/lost+found/task.yaml-GMZv0r b/lost+found/task.yaml-GMZv0r new file mode 100644 index 00000000..576552d8 --- /dev/null +++ b/lost+found/task.yaml-GMZv0r @@ -0,0 +1,183 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: John Aoga +context: |- + On s’intéresse à l'implémentation d'un itérateur (``BSTIterator``) qui permet de traverser un ``Binary Search Tree`` dans l'ordre croissant (*In-order transversal*). + + Par exemple si on a ce BST, + + .. figure:: PART3OrderedBstIterator/bst.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + on veut le parcourir comme suit *[3,8,9,11,12,14,15,18,20]* + + *Attention:* L'itérateur devra lancer des exceptions dans les cas suivants: + + - étant donnée qu'on ne peut modifier l'itérateur alors qu'on est en train d'itérer, l'iterateur devra lancer un ``ConcurrentModificationException`` dans ce cas dans le ``next`` et le ``hasNest``; + + - si le ``next`` est appelé alors qu'il n'y a plus de prochain élément, l'iterateur devra lancer un ``NoSuchElementException``. + + .. code-block:: java + + import java.util.ConcurrentModificationException; + import java.util.Iterator; + import java.util.NoSuchElementException; + import java.util.Stack; + + public class BST, Value> implements Iterable { + private Node root; // root of BST + + private class Node { + private final Key key; // sorted by key + private Value val; // associated data + private Node left, right; // left and right subtrees + private int size; // number of nodes in subtree + + public Node(Key key, Value val, int size) { + this.key = key; + this.val = val; + this.size = size; + } + + public int getSize() { + return size; + } + } + + /** + * Initializes an empty symbol table. + */ + public BST() {} + + /** + * Returns true if this symbol table is empty. + * @return {@code true} if this symbol table is empty; {@code false} otherwise + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns the number of key-value pairs in this symbol table. + * @return the number of key-value pairs in this symbol table + */ + public int size() { + return size(root); + } + + // return number of key-value pairs in BST rooted at x + private int size(Node x) { + if (x == null) return 0; + else return x.size; + } + + public void inOrder(){ + inOrder(root); + } + private void inOrder(Node x) { + if (x == null) return; + + inOrder(x.left); + System.out.println(x.key+"=>"+x.val); + inOrder(x.right); + } + + /** + * Returns the value associated with the given key. + * + * @param key the key + * @return the value associated with the given key if the key is in the symbol table + * and {@code null} if the key is not in the symbol table + */ + public Value get(Key key) { + return get(root, key); + } + + private Value get(Node x, Key key) { + if (x == null) return null; + int cmp = key.compareTo(x.key); + if (cmp < 0) return get(x.left, key); + else if (cmp > 0) return get(x.right, key); + else return x.val; + } + + /** + * Search for key, update value if key is found. Grow table if key is new. + * + * @param key the key + * @param val the value + */ + public void put(Key key, Value val) { + root = put(root, key, val); + } + private Node put(Node x, Key key, Value val) { + if (x == null) return new Node(key, val, 1); + int cmp = key.compareTo(x.key); + if (cmp < 0) x.left = put(x.left, key, val); + else if (cmp > 0) x.right = put(x.right, key, val); + else x.val = val; + x.size = 1 + size(x.left) + size(x.right); + return x; + } + + /** + * Returns an iterator that iterates through the keys in Incresing order + * (In-Order transversal). + * @return an iterator that iterates through the items in FIFO order. + */ + @Override + public Iterator iterator() { + return new BSTIterator(); + } + + /** + * Implementation of an iterator that iterates through the keys of BST in incresing order (In-order transversal). + * + */ + private class BSTIterator implements Iterator { + + // TODO STUDDENT: Implement the BSTIterator + + } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '1000' + time: '300000' + output: '2' +name: PART 3 - Binary Search Tree Iterator (implem) +network_grading: false +order: 16 +problems: + bstiterator: + type: code + name: 'Implementation de l''iterateur: BSTIterator' + language: java + default: '' + header: |- + .. code-block:: java + + /** + * Implementation of an iterator that iterates through the keys of BST in incresing order (In-order transversal). + * + */ + private class BSTIterator implements Iterator { + + // TODO STUDDENT: Implement the BSTIterator + + } + + Copier le contenu de la class ``private class BSTIterator implements Iterator`` ci-desssous. +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-HsDMFb b/lost+found/task.yaml-HsDMFb new file mode 100644 index 00000000..aa31d67a --- /dev/null +++ b/lost+found/task.yaml-HsDMFb @@ -0,0 +1,166 @@ +accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00/2019-09-24 16:00:00 +author: Pierre Schaus, John Aoga +categories: [] +context: |- + On s’intéresse à l'implémentation d'une ``liste simplement chaînée circulaire``, c’est-à-dire une liste pour laquelle la dernière position de la liste fait référence, comme position suivante, à la première position de la liste. + + .. figure:: Part1CircularLinkedList/CircularLinkedList.png + :scale: 100 % + :alt: alternate text + :align: center + :figclass: align-center + + L’ajout d’un nouvel élément dans la file (méthode ``enqueue``) se fait en fin de liste et le retrait (méthode ``remove``) se fait a un `index` particulier de la liste. Une (seule) référence sur la fin de la liste (``last``) est nécessaire pour effectuer toutes les opérations sur cette file. + + Il vous est donc demander d'implémenter cette liste simplement chaînée circulaire à partir de la classe ``CircularLinkedList.java`` où vous devez completer (*TODO STUDENT*): + + - la méthode d'ajout (``enqueue``); + + - la méthode de retrait (``remove``) [L'exception ``IndexOutOfBoundsException`` est lancée quand la valeur de l'index n'est pas comprise en 0 et size()-1]; + + - l'itérateur (``ListIterator``) qui permet de parcourir la liste en FIFO. + + *Attention:* L'itérateur devra lancer des exceptions dans les cas suivants: + + - étant donnée que le ``remove`` est optionnel dans l'`API `_ , l'iterateur devra juste lancer un ``UnsupportedOperationException`` en cas d'appel du ``remove``; + + - étant donnée qu'on ne peut modifier l'itérateur alors qu'on est en train d'itérer, l'iterateur devra lancer un ``ConcurrentModificationException`` dans ce cas dans le ``next`` et le ``hasNest``; + + - si le ``next`` est appelé alors qu'il n'y a plus de prochain élément, l'iterateur devra lancer un ``NoSuchElementException``. + + .. code-block:: java + + import java.util.ConcurrentModificationException; + import java.util.Iterator; + import java.util.NoSuchElementException; + + public class CircularLinkedList implements Iterable { + private long nOp = 0; // count the number of operations + private int n; // size of the stack + private Node last; // trailer of the list + + // helper linked list class + private class Node { + private Item item; + private Node next; + } + + public CircularLinkedList() { + last = null; + n = 0; + } + + public boolean isEmpty() { return n == 0; } + + public int size() { return n; } + + private long nOp() { return nOp; } + + /** + * Append an item at the end of the list + * @param item the item to append + */ + public void enqueue(Item item) { + // TODO STUDENT: Implement add method + } + + /** + * Removes the element at the specified position in this list. + * Shifts any subsequent elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + */ + public Item remove(int index) { + // TODO STUDENT: Implement remove method + } + + /** + * Returns an iterator that iterates through the items in FIFO order. + * @return an iterator that iterates through the items in FIFO order. + */ + public Iterator iterator() { + return new ListIterator(); + } + + /** + * Implementation of an iterator that iterates through the items in FIFO order. + * + */ + private class ListIterator implements Iterator { + // TODO STUDENT: Implement the ListIterator + } + + } + + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '500' + output: '2' + memory: '1000' +name: PART 1 - Circular linkedlist (Implem) +network_grading: false +order: 5 +problems: + enqueue: + header: |- + .. code-block:: java + + /** + * Append an item at the end of the list + * @param item the item to append + */ + public void enqueue(Item item) { + // TODO STUDENT: Implement add method + } + + Copier le contenu de la fonction ``public void enqueue(Item item)`` ci-desssous. + language: java + name: 'Implementation de la fonction ajout: void enqueue(Item item)' + default: '' + type: code + remove: + header: |- + .. code-block:: java + + /** + * Removes the element at the specified position in this list. + * Shifts any subsequent elements to the left (subtracts one from their indices). + * Returns the element that was removed from the list. + */ + public Item remove(int index) { + // TODO STUDENT: Implement remove method + } + + Copier le contenu de la fonction ``public Item remove(int index)`` ci-desssous. + language: java + default: '' + type: code + name: 'Implementation de la fonction ajout: Item remove(int index)' + listiterator: + name: 'Implementation de l''iterateur: ListIterator' + header: |- + .. code-block:: java + + /** + * Implementation of an iterator that iterates through the items in FIFO order. + * + */ + private class ListIterator implements Iterator { + // TODO STUDENT: Implement the ListIterator + } + + Copier le contenu de la class ``private class ListIterator implements Iterator`` ci-desssous. + default: '' + type: code + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-I0LKTO b/lost+found/task.yaml-I0LKTO new file mode 100644 index 00000000..fd188acb --- /dev/null +++ b/lost+found/task.yaml-I0LKTO @@ -0,0 +1,76 @@ +accessible: false +author: Simon Hardy +context: |- + For this mission you will have to implement the following interface, representing an expression tree. + + .. code-block:: java + + /** + * Un "FormalExpressionTree" est un arbre permettant de mémoriser + * et de manipuler une expression analytique. + * + * Une classe implémentant cette interface doit disposer d'un CONSTRUCTEUR + * prenant comme argument une chaîne de caractères (String) et construisant + * l'arbre associé. + * Cette chaîne est supposée correspondre à une expression analytique + * syntaxiquement correcte et complètement parenthésée. + * Lorsque cette précondition n'est pas vérifiée, une ParseException (classe à implémenter) doit être lancée. + * Un CONSTRUCTEUR sans argument ou avec l'expression vide "" comme argument + * permet de construire un arbre élémentaire correspondant à l'expression "0" + */ + public interface FormalExpressionTree { + /** + * Cette méthode renvoie une chaîne de caractères correspondant à + * l'expression analytique représentée dans l'arbre. + * + * @pre this représente une expression analytique syntaxiquement correcte + * @post une chaîne de caractères, correspondant à l'expression analytique + * complètement parenthésée représentée par this, est renvoyée. + */ + public String toString(); + + /** + * Cette méthode calcule le nouvel arbre correspondant à la dérivée formelle + * de l'arbre courant. L'arbre courant (this) n'est pas modifié. + * + * @pre this représente une expression analytique syntaxiquement correcte. + * @post Une référence à un nouvel arbre représentant la dérivée formelle + * de this est renvoyée. + */ + public FormalExpressionTree derive(); + } + + NB : it's not necessary to simplify the derivatives. For example, for input "(2*x)", you can return "2" or "((0*x)+(2*1))". +environment: java8scala +evaluate: best +groups: true +limits: + memory: '512' + output: '100' + time: '45' +name: '[Old] Mission 2 - Formal expression tree [group]' +network_grading: false +order: 50 +problems: + tree: + type: file + name: Expression tree + allowed_exts: + - .java + header: 'Upload the file containing your implementation here. The class representing + your tree should be named *ExpressionTree* and implement *FormalExpressionTree*. + If you need other classes, put them in the same file but without any *public* + modifier. ' + exception: + header: 'Upload the file containing your custom exception here. The class + should be named *ParseException*. ' + name: ParseException + allowed_exts: + - .java + type: file + max_size: 1000000 +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-IGB9S1 b/lost+found/task.yaml-IGB9S1 new file mode 100644 index 00000000..a5f55449 --- /dev/null +++ b/lost+found/task.yaml-IGB9S1 @@ -0,0 +1,365 @@ +accessible: false +author: Xavier Gillard, Pierre Schaus +context: | + Les filtres de Bloom + -------------------- + Un filtre de Bloom, est une structure de donnée très compacte et efficace qui permet d'implémenter un test d'appartenance rapide (:code:`.contains()`) à un très grand *ensemble*. Cependant, contrairement au test d'appartenance à un ensemble tel qu'implémenté à l'aide d'une HashMap, le test d'appartenance implémenté via un filtre de bloom peut renvoyer un résultat erroné (faux positifs possibles mais pas de faux négatifs) dans certains cas et cela, avec une faible probabilité. + + L'efficacité de cette structure, et le fait qu'elle ne requière qu'une quantité très faible (et constante !) de mémoire quel que soit le nombre d'éléments contenus dans l'ensemble en ont fait une structure de choix pour un très grand nombre d'applications. A titre d'exemple, on mentionnera le fait que les filtres de Bloom sont utilisés par certains devices réseaux pour faire du *Deep Packet Inspection*, ou encore que les bases de données *Google Big Table*, *Apache Cassandra* ou encore *Postgresql* utilisent cette structure de donnée afin de tester si une donnée se trouve en cache ou non. + + En effet la recherche de la donnée étant généralement coûteuse, + un filtre de Bloom est utilisé pour éviter de faire une recherche + si la donnée n'est pas présente. Par contre, comme les erreurs de type faux-positifs sont possibles, le filtre de Bloom peut dire que la donnée s'y trouve alors que ça n'est pas vrai. Dans ce cas, il faudra effectuer la recherche pour vérifier et payer le coût de cette recherche (par exemple une recherche linéaire avec des accès + sur le disque). + + Concrètement + ------------ + Concrètement, un filtre de bloom consiste en un vecteur :math:`V = v_1..v_n` de bit et d'un ensemble :math:`F = f_1..f_k` de fonctions de hachage + + Pour ajouter un élément :math:`X` dans le set, on applique successivement chacune des fonctions :math:`f_i \in F` de hachage. L'application de chacune de ces fonctions à l'élément :math:`X` renvoie un nombre :math:`h_i \in \left[0..n-1\right]`. Pour marquer l'ajout de :math:`X` au filtre de bloom, on met à 1 simplement chacun des :math:`v_{h_i}` bits dans :math:`V`. + + De façon similaire, pour tester l'appartenance d'un élément :math:`X` au set, on vérifie que le :math:`h_i` ème bit :math:`\in V` correspondant à :math:`f_i(X)` est égal à 1. Le test d'appartenance ne renverra `true` que ssi, cette condition est vérifiée pour chacune des :math:`f_i \in F`. + + Exemples + ~~~~~~~~ + En supposant qu'on ait un filtre de Bloom représenté par 1 byte et 3 fonctions de hachage telles que: + + .. code:: + + f1("Salut") = 0 + f2("Salut") = 1 + f3("Salut") = 2 + + et + + f1("1121") = 0 + f2("1121") = 1 + f3("1121") = 4 + + L'ajout de "Salut" au filtre 00000000 transforme celui-ci en 11100000. Si par la suite on veut tester que "Salut" est bien présent dans le filtre, on s'assure que les bits v1, v2 et v3 sont bien égaux à 1. + + En continuant sur le même exemple, on voit que la chaine "1121" n'est pas présente dans la structure puisque le 4eme bit est égal à 0. +environment: mcq +evaluate: best +groups: false +limits: + time: '30' + memory: '100' + output: '2' +name: Pré-examen - Bloom Filters +network_grading: false +order: 41 +problems: + bloom_vs_hashmap: + multiple: true + name: Bloom Filter vs HashSet + choices: + - text: Le nombre de clés possibles est connu à l'avance + - valid: true + text: Il y a un trop grand nombre de clés possibles que pour pouvoir les + garder toutes en mémoire + - text: Il n'y a aucune raison de préférer une structure en particulier + plutôt qu'une autre + header: 'Pour implémenter un test d''appartenance, il est préférable d''utiliser + un Bloom filter plutôt qu''un HashSet lorsque: ' + limit: 0 + type: multiple_choice + limitation: + type: multiple_choice + choices: + - text: Son blocking factor. En effet, plus il y a d'éléments dans le filtre, + plus il est difficile d'en ajouter de nouveaux. + - valid: true + text: Son load factor. En effet, plus il y a d'éléments dans le filtre + plus il y a de chance que le test d'appartenance renvoie un faux positif. + limit: 0 + name: Qu'est-ce qui limite l'utilité de cette structure + header: '' + complexite_temp_ajout: + choices: + - text: :math:`O(1)` + - text: :math:`\Omega(1)` + - text: :math:`\Theta(1)` + - text: :math:`O(n)` + - text: :math:`\Omega(n)` + - text: :math:`\Theta(n)` + - text: :math:`O(k)` + - text: :math:`\Omega(k)` + - text: :math:`\Theta(k)` + valid: true + - text: On ne peut pas ajouter un élément à un filtre de Bloom. + type: multiple_choice + header: Quelle est la complexité temporelle d'un ajout d'un élément dans le + filtre de Bloom ? (On fait ici l'hypothèse que chacune des fonctions de + hachage est calculée en temps constant) + name: 'Complexité temporelle d''un ajout au filtre ' + limit: 0 + complexite_temp_suppression: + choices: + - text: :math:`O(1)` + - text: :math:`\Omega(1)` + - text: :math:`\Theta(1)` + - text: :math:`O(n)` + - text: :math:`\Omega(n)` + - text: :math:`\Theta(n)` + - text: :math:`O(k)` + - text: :math:`\Omega(k)` + - text: :math:`\Theta(k)` + - valid: true + text: On ne peut pas supprimer un élément d'un filtre de Bloom. + header: Quelle est la complexité temporelle de la suppression d'un élément + dans le filtre de Bloom ? (On fait ici l'hypothèse que chacune des fonctions + de hachage est calculée en temps constant) + name: Complexité temporelle de la suppression d'un élément + type: multiple_choice + limit: 0 + recovery: + choices: + - text: Linear Probing + - text: Separate Chaining + - text: Redimensioner le bit vector + - text: Aucune + valid: true + name: En cas de collision, quelle(s) stratégie(s) peut-on implémenter pour + résoudre le conflit ? + limit: 0 + type: multiple_choice + header: '' + multiple: true + hashtable_est_k1: + choices: + - valid: true + text: Vrai + - text: Faux + type: multiple_choice + name: HashSet - CollisionResolutionStrategy == BloomFilter with k = 1 ? + header: On peut toujours remplacer une implémentation d'un hash set qui n'incorpore + aucune stratégie de résolution de collision (*pas de separate-chaining + ni de linear probing*) par un bloom filter avec k = 1 ? + limit: 0 + pourquoi_k_pg_1: + limit: 0 + choices: + - feedback: 'Il y a un tradeoff, augmenter k pour n fixé va remplir plus + vite le tableau avec des 1 et le risque lorsque tout est à 1 est de + n''avoir plus que des collisions. D''un autre côté, avoir un plus + grand k (lorsqu''il y a peu d''élements) réduit la probabilité de + collision. En pratique pour peut déduire la formule k=(n/m) ln 2. ' + valid: true + text: Intuitivement, si pour m constant, on avait travaillé avec un tableau + de bits plus grand (n) alors k (le nombre de bits optimal qui minimise + la probabilité de collision) devrait aussi augmenter. + - feedback: 'Il y a un tradeoff, augmenter k pour n fixé va remplir plus + vite le tableau avec des 1 et le risque lorsque tout est à 1 est de + n''avoir plus que des collisions. D''un autre côté, avoir un plus + grand k (lorsqu''il y a peu d''élements) réduit la probabilité de + collision. En pratique pour peut déduire la formule k=(n/m) ln 2. ' + text: Intuitivement, si pour m constant, on avait travaillé avec un tableau + de bits plus grand (n) alors k (le nombre de bits optimal qui minimise + la probabilité de collision) devrait diminuer. + multiple: true + name: Quel est l'intérêt d'utiliser k >= 1 ? + header: | + Soit n le nombre de bits et m le nombre d'éléments insérés dans le filtre. On s'intéresse à k, le nombre de fonctions de hash qui minimise la probabilité de faux positifs. + type: multiple_choice + propositions: + choices: + - text: Une HashMap stocke la valeur associée à chacune des clés. + valid: true + - text: Un filtre de Bloom stocke la valeur associée à chacune des clés + - valid: true + text: Malgré le risque de collision pour chacune des k fonctions de hachage, + un filtre de Bloom permet de partager certains bits entre les clés + associés à différents items car la probabilité de collision est réduite. + - text: Grâce au separate chaining, une HashMap peut partager certains bits + entre différentes clés sans impacter la complexité d'un test d'appartenance. + limit: 0 + header: '' + type: multiple_choice + name: 'Sélectionne les propositions qui sont vraies:' + multiple: true + union_faux_positifs: + type: multiple_choice + choices: + - valid: true + text: :math:`k \in c` est vrai pour tous les :math:`k \in a` + - valid: true + text: :math:`k \in c` est vrai pour tous les :math:`k \in b` + - text: Il peut exister un :math:`k \not\in a \wedge k \not\in b` pour lequel + le test :math:`k \in c` renvoie `true` + valid: true + - text: 'Il est possible que `c` ne contienne pas l''information associée + à toutes les clés de `a` (:math:`\exists k \in a : k \not\in c`)' + - text: 'Il est possible que `c` ne contienne pas l''information associée + à toutes les clés de `b` (:math:`\exists k \in b : k \not\in c`)' + - text: Le filtre `c` contient exactement les mêmes clés que :math:`a \cup + b` (il n'y a pas de nouveaux faux-positifs) + multiple: true + limit: 0 + header: | + Soient `a` et `b` deux vecteurs de bits utilisés pour représenter deux filtres de Bloom utilisant un même ensemble F de fonctions de hachage. Si `c` est le vecteur de bit représentant un filtre de Bloom obtenu par `c = a | b`. + + .. note:: + + Dans les propositions suivantes, on utilisera le nom du bit + vector pour désigner le filtre de Bloom auquel il se rapporte. + name: Sélectionnez la/les proposition(s) correcte(s) + complexite_spatiale: + choices: + - text: :math:`BloomFilter \le HashSet \le SinglyLinked \le RedBlack` + valid: true + - text: :math:`BloomFilter \le HashSet \le RedBlack \le SinglyLinked` + - text: :math:`HashSet \le BloomFilter \le SinglyLinked \le RedBlack` + - text: :math:`BloomFilter \le SinglyLinked \le HashSet \le RedBlack` + - text: :math:`BloomFilter \le RedBlack \le SinglyLinked \le HashSet` + name: Complexité Spatiale + limit: 0 + header: |- + Pour représenter un ensemble comprenant 3000 éléments, on dispose d'un certain nombre d'options. Parmi celles-ci on compte les Singly-Linked List, BloomFilter (avec n = 3000), Red-Black Tree, HashSet. + + Trie chacune des ces représentations possibles par ordre croissant de mémoire utilisée. + type: multiple_choice + twitter_exact: + choices: + - text: ~ 39 MB + - text: ~ 10 MB + - text: ~ 1.2 GB + valid: true + - text: 2 GB + header: |+ + Si on souhaite compter le nombre de personnes ayant tweeté un jour donné, on peut utiliser un code semblable à celui donné ci-dessous. Sachant que le réseau social Twitter compte 328 millions d'utilisateurs actifs, choisis parmi les solutions données, la quantité minimiale de mémoire qui est nécessaire pour compter le + nombre d'utilisateurs uniques ayant tweeté un jour donné (si on utilise le code donné). On fait ici l'hypothèse que la clé utilisée pour identifier chaque utilisateur est un entier (int). + + .. code:: + java + + // Ce compteur est incrémenté chaque fois qu'on détecte qu'une nouvelle + // personne a tweeté. + long compteur = 0L; + + // Cet ensemble stocke l'identifiant de chacun des utilisateurs ayant + // déjà tweeté aujourd'hui. + HashSet aTweete = new HashSet(); + + // ... snip ... + + // Ce fragment de code est exécuté à chaque fois qu'un tweet est émis par + // un utilisateur. (On ne se soucie pas ici des race-conditions possibles) + if ( !aTweete.contains( tweet.userId() ) ) { + aTweete.add(tweet.userId()); + compteur += 1; + } + + type: multiple_choice + name: Comptage exact + limit: 0 + twitter_approx: + choices: + - text: ~ 1.2 GB + - text: ~ 10 MB + - text: ~ 39 MB + valid: true + - text: ~ 2 GB + header: |+ + Si on souhaite compter de façon approximative le nombre de personnes ayant tweeté un jour donné, on peut utiliser un code semblable à celui donné ci-dessous. Sachant que le réseau social Twitter compte 328 millions d'utilisateurs actifs, choisis parmi les solutions données, la quantité minimiale de mémoire qui est nécessaire pour compter le nombre d'utilisateurs uniques ayant tweeté un jour donné (si on utilise le code donné). On fait ici l'hypothèse que la clé utilisée pour identifier chaque utilisateur est un entier (int). + + .. code:: + java + + // Ce compteur est incrémenté chaque fois qu'on détecte qu'une nouvelle + // personne a tweeté. + long compteur = 0L; + + // Cet ensemble stocke l'identifiant de chacun des utilisateurs ayant + // déjà tweeté aujourd'hui. + // Note: le 'n' de ce bloom filter est de 328 millions + BloomFilter aTweete = new BloomFilter(); + + // ... snip ... + + // Ce fragment de code est exécuté à chaque fois qu'un tweet est émis par + // un utilisateur. (On ne se soucie pas ici des race-conditions possibles) + if ( !aTweete.contains( tweet.userId() ) ) { + aTweete.add(tweet.userId()); + compteur += 1; + } + + name: Comptage approximatif + limit: 0 + type: multiple_choice + implem_utile: + limit: 0 + choices: + - text: Solution A + - text: Solution B + - text: Solution C + valid: true + - text: Solution D + header: |+ + Parmi les propositions suivantes, la- ou lesquelles vous semblent être des implémentations utiles ? + + Solution A + ~~~~~~~~~~ + .. code:: + java + + public class BloomFilter { + int bitmask; + + int f1(Object o) { return o.hashCode() * 41 % 2; } + int f2(Object o) { return o.hashCode() * 31 % 3; } + + // snip ... + } + + Solution B + ~~~~~~~~~~ + .. code:: + java + + public class BloomFilter { + int bitmask; + + int f1(Object o) { return o.hashCode() * 41 % 97; } + int f2(Object o) { return o.hashCode() * 31 % 97; } + + // snip ... + } + + Solution C + ~~~~~~~~~~ + .. code:: + java + + public class BloomFilter { + int bitmask; + + int f1(Object o) { return o.hashCode() * 41 % 31; } + int f2(Object o) { return o.hashCode() * 31 % 31; } + + // snip ... + } + + Solution D + ~~~~~~~~~~ + .. code:: + java + + public class BloomFilter { + int bitmask; + + int f1(Object o) { return o.hashCode() * 41 % 32; } + int f2(Object o) { return o.hashCode() * 31 % 32; } + + // snip ... + } + + + type: multiple_choice + multiple: true + name: Implémentation(s) utile(s) +stored_submissions: 0 +submission_limit: + amount: 1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-IS5lBN b/lost+found/task.yaml-IS5lBN new file mode 100644 index 00000000..b1f9ff16 --- /dev/null +++ b/lost+found/task.yaml-IS5lBN @@ -0,0 +1,44 @@ +accessible: 2017-12-01 08:00:00/2017-12-10 20:00:00 +author: Simon Hardy +context: |- + For this mission, you are asked to implement Kruskal algorithm in order to compute the minimum spanning tree corresponding to an input file. As a reminder, we impose one implementation detail (which won't be checked on INGInious, but manually by the tutors) : + + - You have to use a Union/Find structure to handle the clusters (this doesn't change from the pseudo-code of the book). + + Concretely, you have to write one program : *Kruskal.java*, which reads the file located at argv[0] and writes the result in a new file located at argv[1]. The output format must be the same as for the input. + + Additional informations : + + - The input file format is valid. + + - The graph represented by the input file is connected. + + - All edges have a cost strictly greater than 0 (which means the number of edges will always be the number of nodes minus 1). + + - There can not be 2 edges with same end vertices. + + - The cities can be represented by any positive integer (not necessarily consecutive). +environment: java8scala +evaluate: best +groups: true +limits: + output: '100' + memory: '512' + time: '30' +name: Mission 6 - Minimum spanning tree [group] +network_grading: false +order: 48 +problems: + kruskal: + allowed_exts: + - .java + type: file + name: Kruskal + header: 'Upload your file here. Your class should be named *Kruskal* and take + two arguments as explained above. If you need other classes, just put + them at the end of this file, without the *public* modifier. ' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-KBVLKG b/lost+found/task.yaml-KBVLKG new file mode 100644 index 00000000..eda76820 --- /dev/null +++ b/lost+found/task.yaml-KBVLKG @@ -0,0 +1,175 @@ +accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00/2019-09-24 16:00:00 +author: Simon Hardy, Frédéric Kaczynski +categories: [] +context: |- + Il vous est demandé d'implémenter l'interface suivante, représentant une pile, en utilisant une liste simplement chainée. Vous devriez avoir au moins un constructeur sans argument, créant une pile vide. + + Note: utiliser *java.util.Stack* est interdit! + + .. code-block:: java + + import java.util.EmptyStackException; + + public interface Stack { + + public boolean empty(); + + public E peek() throws EmptyStackException; + + public E pop() throws EmptyStackException; + + public void push(E item); + + } + + + + .. code-block:: java + + import java.util.EmptyStackException; + + public class MyStack implements Stack { + + private Node top; // the node on the top of the stack + private int size; // size of the stack + + // helper linked list class + private class Node { + private E item; + private Node next; + + public Node(E element, Node next) { + this.item = element; + this.next = next; + } + } + + /** + * Tests if this stack is empty + */ + @Override + public boolean empty() { + // TODO STUDENT: Implement empty method + } + + /** + * Looks at the object at the top of this stack + * without removing it from the stack + */ + @Override + public E peek() throws EmptyStackException { + // TODO STUDENT: Implement peek method + } + + /** + * Removes the object at the top of this stack + * and returns that object as the value of this function + */ + @Override + public E pop() throws EmptyStackException { + // TODO STUDENT: Implement pop method + } + + /** + * Pushes an item onto the top of this stack + * @param item the item to append + */ + @Override + public void push(E item) { + // TODO STUDENT: Implement push method + + } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '45' + output: '100' + memory: '512' +name: PART 1 - Linked List Stack (Implem) +network_grading: false +order: 2 +problems: + empty: + language: java + type: code + header: |- + .. code-block:: java + + /** + * Tests if this stack is empty + */ + @Override + public boolean empty() { + // TODO STUDENT: Implement empty method + } + + Copier le contenu de la fonction ``public boolean empty()`` ci-desssous. + default: '' + name: 'Implementation de la fonction empty: boolean empty()' + peek: + default: '' + type: code + name: 'Implementation de la fonction peek: E peek()' + header: |- + .. code-block:: java + + /** + * Looks at the object at the top of this stack + * without removing it from the stack + */ + @Override + public E peek() throws EmptyStackException { + // TODO STUDENT: Implement peek method + } + + Copier le contenu de la fonction ``public E peek()`` ci-desssous. + language: java + pop: + name: 'Implementation de la fonction pop: E pop()' + language: java + type: code + default: '' + header: |- + .. code-block:: java + + /** + * Removes the object at the top of this stack + * and returns that object as the value of this function + */ + @Override + public E pop() throws EmptyStackException { + // TODO STUDENT: Implement pop method + } + + Copier le contenu de la fonction ``public E pop()`` ci-desssous. + push: + default: '' + header: |- + .. code-block:: java + + /** + * Pushes an item onto the top of this stack + * @param item the item to append + */ + @Override + public void push(E item) { + // TODO STUDENT: Implement push method + + } + + Copier le contenu de la fonction ``public push(E item)`` ci-desssous. + name: 'Implementation de la fonction push: void push(E item)' + type: code + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-LcLn2w b/lost+found/task.yaml-LcLn2w new file mode 100644 index 00000000..02d7e7da --- /dev/null +++ b/lost+found/task.yaml-LcLn2w @@ -0,0 +1,100 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: '' +context: |- + Vous devez calculer un arbre de Huffman au départ de la fréquence donnée pour chacune des R lettres (characters). + + Pour rappel, dans un arbre de Huffman nous avons que *la somme de la fréquence associée à chaque feuille multipliée par la profondeur de celle-ci est minimale*. + + Par exemple, étant donné les fréquences suivantes: + + + .. image:: Part5Huffman/huffmanin.png + :width: 500px + :align: center + :alt: Input frequencies + + + un arbre de Huffman pourrait être: + + + .. image:: Part5Huffman/huffmanout.png + :width: 500px + :align: center + :alt: Huffman tree + + + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + memory: '100' + output: '2' +name: PART 5 - Huffman (implem) +network_grading: false +order: 23 +problems: + TODO1: + default: '' + language: java + type: code + header: |- + Le but de cette question de faire fonctionner correctement la méthode ``buildTrie``. + Vous pouvez modifier la classe ci-dessous (ajouter des méthodes, définir des inner-classes, etc) comme vous le souhaitez, mais ne changez pas la signature des méthodes existantes et le constructeur. + Mettez votre implémentation complète de ``Huffman.java`` ci-dessous. + + **Conseil**: Si vous avez besoin d'une structure de donnée auxiliaire, celle-ci est certainement disponible dans ``java.util``. Il n'est dès lors pas nécessaire de la réimplémenter. + + + .. code-block:: java + + public class Huffman { + private Huffman() { } + + // Huffman trie node + public static class Node implements Comparable { + public final int ch; + public final int freq; + public final Node left, right; + + Node(int ch, int freq, Node left, Node right) { + this.ch = ch; + this.freq = freq; + this.left = left; + this.right = right; + } + + // is the node a leaf node? + public boolean isLeaf() { + assert ((left == null) && (right == null)) || ((left != null) && (right != null)); + return (left == null) && (right == null); + } + + @Override + public int compareTo(Node that) { + return this.freq - that.freq; + } + } + + /** + * build the Huffman trie given frequencies + * corresponding to each character codes from 0 to R-1. + * freq[i] is the frequency for the character with code i + * freq.length = R. + * R is either 256 or 65536, depending on whether the user choose to use unicode or ASCII. + */ + public static Node buildTrie(int R, int[] freq) { + // TODO + return new Node(0,0,null,null); + } + } + name: Implémentation de la fonction buildTree +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-LmkeBg b/lost+found/task.yaml-LmkeBg new file mode 100644 index 00000000..8ec7e2cb --- /dev/null +++ b/lost+found/task.yaml-LmkeBg @@ -0,0 +1,73 @@ +accessible: false +author: Frédéric Kaczynski +context: |- + Consider the ``Heap`` data structure in which we progressively add numbers. + + The following questions will ask you to write a representation of the ``Heap`` as we add objects in it. You must write the ``Heap`` as if it was stored in an array. For example, if your answer is: + + :: + + 9 + / \ + 5 8 + / \ + 4 3 + + You would write: + + :: + + 9 5 8 4 3 +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: '[old] Mission 5 - Heap' +network_grading: false +order: 35 +problems: + heap1: + answer: '5' + header: 'Starting with an empty ``Heap``, we add ``5`` to it. The array containing + the ``Heap`` is:' + name: '' + type: match + heap2: + type: match + answer: 5 1 + header: 'We add ``1`` to the ``Heap``, the array containing the ``Heap`` is:' + name: '' + heap3: + name: '' + type: match + header: 'We add ``9`` to the ``Heap``, the array containing the ``Heap`` is:' + answer: 9 1 5 + heap4: + type: match + name: '' + answer: 9 3 5 1 + header: 'We add ``3`` to the ``Heap``, the array containing the ``Heap`` is:' + heap5: + name: '' + type: match + header: 'We add ``8`` to the ``Heap``, the array containing the ``Heap`` is:' + answer: 9 8 5 1 3 + heap6: + name: '' + header: 'We add ``6`` to the ``Heap``, the array containing the ``Heap`` is:' + type: match + answer: 9 8 6 1 3 5 + heap7: + answer: 9 8 6 1 3 5 4 + header: 'We add ``4`` to the ``Heap``, the array containing the ``Heap`` is:' + type: match + name: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-MJxqqp b/lost+found/task.yaml-MJxqqp new file mode 100644 index 00000000..ff42ae28 --- /dev/null +++ b/lost+found/task.yaml-MJxqqp @@ -0,0 +1,40 @@ +accessible: 2017-11-13 15:02:02/2017-11-26 20:00:00 +author: Simon Hardy +context: |- + For this mission, you are asked to write two programs : *Compress.java*, which compresses the file located at argv[0] and writes the result in a new file located at argv[1], and *Decompress.java*, which decompresses argv[0] and writes it in the file at argv[1]. + + You are free to use any representation for your frequency table, priority queue and Huffman tree but you **have to** justify your choices in your program report, and say why your choice is the best from a complexity point of view. + + NB : all the files tested in this task end with a '\\\n', so make sure you don't skip it in your compressor ! +environment: java8scala +evaluate: best +groups: true +limits: + memory: '1024' + output: '100' + time: '45' +name: Mission 5 - Text compressor [group] +network_grading: false +order: 46 +problems: + compressor: + allowed_exts: + - .java + header: 'Upload your text compressor here. Your class should be named *Compress* + and take two arguments as explained above. If you need other classes, + just put them at the end of this file (or at the end of the decompress), + without the *public* modifier. ' + name: Text compressor + type: file + decompressor: + allowed_exts: + - .java + type: file + header: 'Upload your decompressor here. Your class should be named *Decompress* + and take two arguments as explained above. ' + name: Decompressor +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-Md0yW9 b/lost+found/task.yaml-Md0yW9 new file mode 100644 index 00000000..36ddf52b --- /dev/null +++ b/lost+found/task.yaml-Md0yW9 @@ -0,0 +1,84 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +categories: [] +context: |- + Nous sommes intéressés par la résolution de labyrinthe (labyrinthe) représenté par une matrice d'entiers 0-1 de taille `nxm`. Cette matrice est un tableau à deux dimensions. Une entrée égale à '1' signifie qu'il y a un mur et que cette position n'est donc pas accessible, tandis que '0' signifie que la position est libre. + + Nous vous demandons d'écrire un code Java pour découvrir le chemin le plus court entre deux coordonnées sur cette matrice de (x1, y1) à (x2, y2). + + Les déplacements ne peuvent être que verticaux ou horizontaux (pas en diagonale), un pas à la fois. + + Le résultat du chemin est un ``Iterable`` de coordonnées de l'origine à la destination. Ces coordonnées sont représentées par des entiers compris entre 0 et `n * m-1`, où un entier 'a' représente la position `x =a/m` et `y=a%m`. + + Si la position de début ou de fin est un mur ou s’il n’ya pas de chemin, il faut renvoyer un ``Iterable`` vide. Il en va de même s'il n'y a pas de chemin entre l'origine et la destination. + + .. code-block:: java + + import java.util.LinkedList; + + public class Maze { + public static Iterable shortestPath(int [][] maze, int x1, int y1, int x2, int y2) { + //TODO + return new LinkedList<>(); + } + + public static int ind(int x,int y, int lg) {return x*lg + y;} + + public static int row(int pos, int mCols) { return pos / mCols; } + + public static int col(int pos, int mCols) { return pos % mCols; } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: 'PART 6 : Maze (implem)' +network_grading: false +order: 32 +problems: + prelim: + type: code_single_line + header: |- + Etant donné un labyrinthe de taille `7x7` + + .. code-block:: java + + public int [][] maze = new int[][] { + // --y--> + {0,0,0,0,0,0,0}, // | + {1,1,0,0,0,0,0}, // x + {0,0,0,0,0,1,0}, // | + {0,1,1,1,1,1,1}, // V + {0,0,0,0,1,0,0}, + {1,1,0,0,1,0,0}, + {0,0,0,0,1,0,0} + }; + + Quel est le chemin le plus court entre la position-origine `(x1 = 0, y1 = 1)` et la position-destination `(x2 = 2, y2 = 1)`? + La réponse est une liste de numéros séparés par des virgules, de l'origine à la destination. Une position (x, y) est représentée par ``x * numColumns + y``. + + **Exemple de résultat:** par exemple pour le chemin allant de `(x1 = 4, y1 = 1)` à `(x2 = 5, y2 = 2)` on note: ``29,30,37`` + default: '' + name: Question préliminaire + implem: + default: '' + type: code + name: Implementation + header: | + Ne changez pas la signature des méthodes existances. Cependant, n'hésitez pas à ajouter d'autres méthodes et à utiliser n'importe quelle collection de l'API Java. + + Coller tout le contenu de votre classe ``Maze`` ici : + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-P8nLgJ b/lost+found/task.yaml-P8nLgJ new file mode 100644 index 00000000..2eb67a0e --- /dev/null +++ b/lost+found/task.yaml-P8nLgJ @@ -0,0 +1,94 @@ +accessible: false +author: Simon Hardy +context: |- + Recall the SpamFiltering interface : + + .. code-block:: java + + import java.util.HashSet; + + /* The constructor takes a String as argument, representing the path to the input file */ + public interface SpamFiltering { + + /* Returns a map (our Map interface, for example your custom type MyMap) containing mappings + * between the Strings appearing in each sms of the input file, + * and objects of type WordInterface (custom type too) containing + * correct informations about them (see below) + * Convention : use the regex "\\W+" to split the content of a message into words, and use toLowerCase() on what you read so that your map doesn't contain any upper case letter. */ + public Map getWordsMap(); + + /* Returns a HashSet (java.util.HashSet) containing the stop words listed below */ + public HashSet getStopWords(); + + /* Computes the probability that 'message' is a spam sms, using the naive Bayes formula (see pdf of the mission) */ + public double naiveBayes(String message); + + /* Returns true if 'message' is classified as a spam sms, false otherwise (a sms is considered as spam if the probability is strictly greater than 50%) */ + public boolean classify(String message); + + } + + You are asked to write unit tests (using JUnit) in order to check wether a particular implementation of this interface is correct. + + Here is a simple template you can use to write your tests : + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + + /* input1.txt contains the following : + * ham Hi Simon how are you today ?? */ + public class SpamFilterTests { + + @Test + public void firstTest() { + SpamFiltering spamFilter = new SpamFilter("input1.txt"); + Map map = spamFilter.getWordsMap(); + assertTrue(map.containsKey("hi")); + assertTrue(!map.containsKey("Hi")); + assertTrue(map.containsKey("today")); + assertTrue(!map.containsKey("ham")); + assertTrue(!map.containsKey("??")); + } + + @Test + public void secondTest() { + ... + } + } +environment: java8scala +evaluate: best +groups: false +limits: + memory: '512' + output: '100' + time: '60' +name: '[Old] Mission 4 - Unit tests for the spam filter [individual]' +network_grading: false +order: 53 +problems: + filter_tests: + allowed_exts: + - .java + type: file + name: Unit tests for the spam filter + header: Upload your file here, with only one class named "SpamFilterTests". + The class representing the spam filter under test is called *SpamFilter* + and implements *SpamFiltering*, as written in the template ! + archive: + allowed_exts: + - .zip + name: Archive with inputs as text files + max_size: 5000000 + type: file + header: 'Upload the archive containing your .txt files here. It will be unzipped + in the same directory as your *SpamFilterTests* class. Don''t forget that + if you zip a directory (instead of your .txt files directly), then you + will have to write "dir/file.txt" in your tests instead of just "file.txt". ' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-PqZtOV b/lost+found/task.yaml-PqZtOV new file mode 100644 index 00000000..f17c6c5c --- /dev/null +++ b/lost+found/task.yaml-PqZtOV @@ -0,0 +1,70 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Guillaume Derval, Simon Teugels, John Aoga +context: |- + Etant donné un arbre de recherche binaire, dont les noeuds implémentent l'interface Node: + + .. code-block:: java + + interface Node { + /** + * @return the value contained in this node + */ + int getValue(); + + /** + * @return the node on the left (whose value is < than the current value) + * if it exists, null if not + */ + Node getLeft(); + + /** + * @return the node on the right (whose value is > than the current value) + * if it exists, null if not + */ + Node getRight(); + } + + L'on vous demande de fournir le **corps** de la fonction *ceil*, qui trouve dans l'arbre le plus petit élément plus grand ou égal à `value` (donc soit l'élément lui-même soit l'élément situé directement après par ordre de grandeur). Si un tel élément n'existe pas, elle doit retourner `null`. + + Par exemple si on a ce BST, + + .. figure:: PART3Bst/bst.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + + - ceil(11) nous renverra 11, + - ceil(4) nous renverra 8, + - et ceil(21) nous renverra null. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '200' + output: '20' + time: '300' +name: PART 3 - Binary Search Tree (implem) +network_grading: false +order: 15 +problems: + ceil: + header: |- + Fournissez ici le **corps** de la fonction `ceil`: + + .. code-block:: java + + Integer ceil(Node root, int value) + default: '' + name: '' + type: code + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-PtxcIp b/lost+found/task.yaml-PtxcIp new file mode 100644 index 00000000..aa4a37e0 --- /dev/null +++ b/lost+found/task.yaml-PtxcIp @@ -0,0 +1,65 @@ +accessible: false +author: Kaczynski Frédéric +context: |- + Ce qui est interdit + ----------------------- + + Il est interdit de partager son code avec un autre groupe et même avec son propre groupe pour les parties individuelles des missions. + + Il est interdit de publier son code de manière publique (``GitHub``, ``Bitbucket``, ``Dropbox`` ou ``Drive`` partagé, etc) pendant et après le quadrimestre. Nous vous fournirons un repository ``Git`` pour vos travaux de groupes, qui sera seulement visible par les membres de votre groupe. + + Il est interdit de prendre le code de quelqu’un d’autre (même partiellement), y compris du code disponible sur le web. Seul le code fourni dans le livre de référence peut être utilisé. + + Ce qui est autorisé + ------------------------------ + + Échanger et discuter des idées avec des collègues (y compris d’un autre groupe) est autorisé (oralement autour d’un tableau, sur un forum, etc). Mais il est interdit de demander et/ou fournir une réponse toute faite ou du code source. + + Exemple de ce qui est interdit : + + - Tu as mis quoi à la réponse à la question 1 ? + + Exemple de ce qui est autorisé : + + - J’hésite entre la méthode 1 et la méthode 2 pour réaliser l’objectif 1, je pense que la méthode 1 est meilleure pour la raison x, que penses-tu de cet argument ? + + Pourquoi ? + ------------- + + Car le matériel pédagogique mis en place s’améliore chaque année et prend beaucoup de temps à développer. Le copyright de celui-ci appartient d’ailleurs à l’UCL et non aux étudiants. + + Contourner les outils pédagogiques mis en place (par exemple en empruntant du code déjà écrit) ne vous rend pas service. C’est même le meilleur moyen d’échouer à l’examen qui visera précisément à évaluer les compétences acquises: programmation, réponses aux questions, etc. + + En partageant du code ou des réponses (dans le meilleur des cas approximativement correctes...) vous inciteriez certains étudiants à ne pas réfléchir par eux-mêmes, voir pire, à apprendre des réponses potentiellement erronées. + + La note de participation ne vise pas l’exactitude des productions (réponses, codes) mais l’attitude et la motivation de l’étudiant à s’améliorer et acquérir les compétences visées. + + Risque + --------- + + Tout manquement à un de ces points sera sanctionné comme un acte de tricherie et sera dès lors reporté au président des jurys. Pour rappel, en cas de tricherie, l'étudiant peut se voir attribuer un zéro pour le cours, voire se voir attribuer zéro pour l'ensemble des cours de la session. + + Vos codes sont analysés par des outils de détection de plagiat. Un étudiant averti en vaut deux. +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: Règles de participation aux cours +network_grading: false +order: 2 +problems: + read_and_approved: + name: '' + answer: Lu et approuvé + type: match + header: Merci de prendre connaissance du règlement du cours ci-dessus et d'écrire + la mention ``Lu et approuvé`` dans l'encadré ci-dessous +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-TuhVJH b/lost+found/task.yaml-TuhVJH new file mode 100644 index 00000000..77e44893 --- /dev/null +++ b/lost+found/task.yaml-TuhVJH @@ -0,0 +1,79 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: Frédéric Kaczynski +context: |- + Considérons la structure de données ``Heap`` dans laquelle on ajoute progressivement des nombres. + + Les questions suivantes vous demanderont d'écrire une représentation du ``Heap`` au fur et à mesure que nous y ajoutons des objets. Vous devez écrire le ``Heap`` comme s'il était stocké dans un tableau. Par exemple, si votre réponse est : + + :: + + 9 + / \ + 5 8 + / \ + 4 3 + + Vous devriez écrire: + + :: + + 9 5 8 4 3 +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + memory: '100' + output: '2' + time: '30' +name: PART 5 - Heap +network_grading: false +order: 21 +problems: + heap1: + header: 'En commençant par un ``Heap`` vide, on y ajoute "5". Le tableau contenant + le ``Heap`` est :' + name: '' + type: match + answer: '5' + heap2: + header: 'Nous ajoutons ``1`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + name: '' + answer: 5 1 + type: match + heap3: + type: match + header: 'Nous ajoutons ``9`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + answer: 9 1 5 + name: '' + heap4: + name: '' + header: 'Nous ajoutons ``3`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + type: match + answer: 9 3 5 1 + heap5: + answer: 9 8 5 1 3 + header: 'Nous ajoutons ``8`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + type: match + name: '' + heap6: + type: match + answer: 9 8 6 1 3 5 + header: 'Nous ajoutons ``6`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + name: '' + heap7: + type: match + name: '' + header: 'Nous ajoutons ``4`` au ``Heap``, le tableau contenant le ``Heap`` + est :' + answer: 9 8 6 1 3 5 4 +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-Ut0znP b/lost+found/task.yaml-Ut0znP new file mode 100644 index 00000000..107dd1da --- /dev/null +++ b/lost+found/task.yaml-Ut0znP @@ -0,0 +1,121 @@ +accessible: 2017-11-26 12:56:19/2017-12-03 20:00:00 +author: Simon Hardy, Frédéric Kaczynski +context: |- + For this task, you have to write unit tests using JUnit in order to check several Kruskal implementations. You are given one class, *Kruskal*, and you have to determine if it does its job correctly or not. We provide you an optional template to begin writing your tests: + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + import static org.junit.Assert.fail; + import java.io.File; + import java.io.FileNotFoundException; + import java.util.Scanner; + import java.util.NoSuchElementException; + import java.util.Set; + import java.util.HashSet; + + public class KruskalTests { + + @Test + public void firstTest() { + try { + String in = "TODO"; + String out = "TODO"; + int numberOfNodes = 0; // TODO number of nodes of this instance + int optimalCost = 0; // TODO optimal cost for this instance + applyTest(in, out, numberOfNodes, optimalCost); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void secondTest() { + // TODO... + } + + public static void applyTest(String in, String out, int numberOfNodes, int optimalCost) { + Kruskal.main(new String[] {in, out}); // apply the algorithm under test + + int[] result = readSol(out, numberOfNodes); // get the solution in 'result' + + assertEquals(result[0], numberOfNodes); // all the nodes are involved (it's 'spanning') + assertEquals(result[1], numberOfNodes-1); // number of edges = number of nodes - 1 (it's a 'tree') + assertTrue(result[2] <= optimalCost); // the cost is optimal (it's a 'minimum' spanning tree) + + // TODO Assert that the graph is connected using Union/Find structures... + } + + public static int[] readSol(String path, int numberOfNodes) { + Set nodes = new HashSet(); + int numberOfEdges = 0; + int totalCost = 0; // cost found by the student + int cheat = 0; // incremented if fake edge + try { + File f = new File (path); + Scanner s = new Scanner(f); + + try { + while (s.hasNextInt()) + { + int v1 = s.nextInt(); + int v2 = s.nextInt(); + int cost = s.nextInt(); + numberOfEdges += 1; + totalCost += cost; + nodes.add(v1); + nodes.add(v2); + } + + s.close(); + } catch (NoSuchElementException e) + { + fail("Error occured while reading the file : " + e.getMessage()); + } + } catch (FileNotFoundException exception) { + fail("File not found"); + } + return new int[] {nodes.size(), numberOfEdges, totalCost, cheat}; + } + } + + Note that you can either provide the input text files in an archive, or directly write them in your tests. You can even do both at the same time, but in all cases you have to submit an archive (which can be empty if you don't need it). + + Hint : you should strictly respect the input format in your test files, i.e. one edge per line, *tabulations* as separators... +environment: java8scala +evaluate: best +groups: false +limits: + output: '100' + memory: '512' + time: '120' + hard_time: '420' +name: Mission 6 - Unit tests for Kruskal [individual] +network_grading: false +order: 47 +problems: + tests: + name: Unit tests for Kruskal + header: 'Upload your file here, with only one class named *KruskalTests*. + The class representing the implementation under test is called *Kruskal*, + as written in the template. ' + type: file + allowed_exts: + - .java + archive: + type: file + max_size: 5000000 + header: 'Upload the archive containing your .txt files here. It will be unzipped + in the same directory as your *KruskalTests* class. Don''t forget that + if you zip a directory (instead of your .txt files directly), then you + will have to write "dir/file.txt" in your tests instead of just "file.txt". ' + name: Archive with inputs as text files + allowed_exts: + - .zip +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-VMSDLH b/lost+found/task.yaml-VMSDLH new file mode 100644 index 00000000..a9e4ec47 --- /dev/null +++ b/lost+found/task.yaml-VMSDLH @@ -0,0 +1,62 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00 +author: Antoine Cailliau +context: '' +environment: mcq +evaluate: last +groups: false +input_random: '0' +limits: + output: '2' + time: '30' + memory: '100' +name: PART 2 - QCM +network_grading: false +order: 9 +problems: + qcm01: + choices: + - text: \\(O(N\\times\\log N)\\) + valid: true + - text: \\(O(N)\\) + - text: \\(O(N^2)\\) + - text: \\(O(\\frac{N^2}{2})\\) + - text: \\(O(\\log N)\\) + limit: 0 + name: Complexité de l'algorithme QuickSort + header: En moyenne, l’algorithme *QuickSort* utilise [reponse] comparaisons + pour trier un tableau de longueur N où les clés sont distinctes et mélangées + aléatoirement initialement. + type: multiple_choice + qcm05: + multiple: true + choices: + - text: Le *Selection Sort* n’est pas stable et est en-place. + valid: true + - text: Le *Quick Sort* est stable et en-place. + - valid: true + text: Le *Merge Sort* est stable et n’est pas en-place. + - valid: true + text: Le *3-Way Quick Sort* n’est pas stable et est en place. + - text: Le *Shell Sort* est stable et est en place. + type: multiple_choice + name: Propriétés des algorithmes de tri + limit: 0 + header: Quelles affirmations suivantes sont exactes ? + qcm06: + choices: + - valid: true + text: '[2, 3, 4, 5] [1, 6, 7, 8]' + - text: '[2, 3] [4, 5] [1, 6] [7, 8]' + - text: '[1, 2, 3, 4, 5] [7, 8, 9]' + - text: '[3, 5] [4, 2, 1, 7, 8, 6]' + type: multiple_choice + multiple: true + limit: 0 + header: Quel état du tableau correspond à une étape valide lors d’un *Merge + Sort* (Top-down) pour le tableau [3, 5, 4, 2, 1, 7, 8, 6] ? + name: Algorithme de tri MergeSort +stored_submissions: 1 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-VR3gNt b/lost+found/task.yaml-VR3gNt new file mode 100644 index 00000000..7783b32e --- /dev/null +++ b/lost+found/task.yaml-VR3gNt @@ -0,0 +1,62 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Frédéric Kaczynski, John Aoga +context: |- + Consider this ordered binary tree: + + .. figure:: PART3QcmBt/bt.png + :scale: 70 % + :alt: alternate text + :align: center + :figclass: align-center + + We traverse this tree and we print the value of each node we visit it. +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 3 - QCM Binary Trees +network_grading: false +order: 13 +problems: + qcm2: + choices: + - text: '``1 2 3 4 5 6 7``' + - text: '``4 2 1 3 5 6 7``' + valid: true + - text: '``7 6 5 3 1 2 4``' + header: If the algorithm makes an prefix traversal, what will be the printed + output ? + limit: 0 + name: '' + type: multiple_choice + qcm1: + choices: + - text: '``1 2 3 4 6 5 7``' + valid: true + - text: '``4 2 1 3 5 6 7``' + - text: '``7 6 5 3 1 2 4``' + type: multiple_choice + name: '' + limit: 0 + header: If the algorithm makes an infix traversal, what will be the printed + output ? + qcm3: + choices: + - text: '``1 2 3 4 5 6 7``' + - text: '``4 2 1 3 5 6 7``' + - valid: true + text: '``1 3 2 6 7 5 4``' + name: '' + limit: 0 + type: multiple_choice + header: If the algorithm makes an postfix (or suffix) traversal, what will + be the printed output ? +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-WE2wsy b/lost+found/task.yaml-WE2wsy new file mode 100644 index 00000000..004eefa4 --- /dev/null +++ b/lost+found/task.yaml-WE2wsy @@ -0,0 +1,118 @@ +accessible: false +author: Simon Hardy +context: |- + Recall the FormalExpressionTree interface (which has this time an additional toStringJs() method) : + + .. code-block:: java + + /** + * Un "FormalExpressionTree" est un arbre permettant de mémoriser + * et de manipuler une expression analytique. + * + * Une classe implémentant cette interface doit disposer d'un CONSTRUCTEUR + * prenant comme argument une chaîne de caractères (String) et construisant + * l'arbre associé. + * Cette chaîne est supposée correspondre à une expression analytique + * syntaxiquement correcte et complètement parenthésée. + * Lorsque cette précondition n'est pas vérifiée, une ParseException (classe à implémenter) doit être lancée. + * Un CONSTRUCTEUR sans argument ou avec l'expression vide "" comme argument + * permet de construire un arbre élémentaire correspondant à l'expression "0" + */ + public interface FormalExpressionTree { + /** + * Cette méthode renvoie une chaîne de caractères correspondant à + * l'expression analytique représentée dans l'arbre. + * + * @pre this représente une expression analytique syntaxiquement correcte + * @post une chaîne de caractères, correspondant à l'expression analytique + * complètement parenthésée représentée par this, est renvoyée. + */ + public String toString(); + + /* toStringJs() does the same job as toString(), + * but prints "Math.pow(a, b)" instead of "a^b" + * (needed so that JavaScript can interpret it). + */ + public String toStringJs(); + + /** + * Cette méthode calcule le nouvel arbre correspondant à la dérivée formelle + * de l'arbre courant. L'arbre courant (this) n'est pas modifié. + * + * @pre this représente une expression analytique syntaxiquement correcte. + * @post Une référence à un nouvel arbre représentant la dérivée formelle + * de this est renvoyée. + */ + public FormalExpressionTree derive(); + } + + You are asked to write unit tests (using JUnit) in order to check wether a particular implementation of this interface is correct. + + Here is a simple template you can use to write your tests : + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.fail; + import javax.script.ScriptEngineManager; + import javax.script.ScriptEngine; + import javax.script.ScriptException; + + public class TreeTests { + + // This template uses JavaScript to evaluate the derived expressions in a particular value, which allows to compare two derivatives easily. + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("JavaScript"); + + @Test + public void sinus() { + try { + String myResult = evaluateDerivative("sin(x)", "0"); + assertEquals(Double.parseDouble(myResult), 1, 0.01); + } catch (ParseException e) { + fail("ParseException not expected"); + } catch (ScriptException e) { + fail("Expression evaluation failed"); + } + } + @Test + public void incorrectSyntax() { + ... + } + + /* Derives 'expression' and evaluates it in 'value' */ + public String evaluateDerivative(String expression, String value) throws ParseException, ScriptException { + FormalExpressionTree tree = new ExpressionTree(expression); + FormalExpressionTree derivedTree = tree.derive(); + String derivative = derivedTree.toStringJs(); // toStringJs() does the same job as toString(), but prints "Math.pow(a, b)" instead of "a^b" (needed so that JavaScript can interpret it). + + // Do some replacements so that JavaScript can interpret everything correctly + Object result = engine.eval(derivative.replace("x", value).replace("sin", "Math.sin").replace("cos", "Math.cos").replace("--", "+")); + return result.toString(); + } + } +environment: java8scala +evaluate: best +groups: false +limits: + memory: '512' + output: '100' + time: '60' +name: '[Old] Mission 2 - Unit tests [individual]' +network_grading: false +order: 49 +problems: + tree_tests: + type: file + name: Unit tests for the formal expression tree + allowed_exts: + - .java + header: Upload your file here, with only one class named "TreeTests". The + class representing the tree under test is called *ExpressionTree* and + it implements *FormalExpressionTree*, as written in the template ! +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-WpLchn b/lost+found/task.yaml-WpLchn new file mode 100644 index 00000000..79947107 --- /dev/null +++ b/lost+found/task.yaml-WpLchn @@ -0,0 +1,85 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00/2019-10-08 17:00:00 +author: Frédéric Kaczynski +categories: [] +context: |- + Considérons l'algorithme de tri (descendant) ``Merge Sort``. + + .. code-block:: java + + public class MergeSort { + /** + * Pre-conditions: a[lo..mid] and a[mid+1..hi] are sorted + * Post-conditions: a[lo..hi] is sorted + */ + private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { + for (int k = lo; k <= hi; k++) { + aux[k] = a[k]; + } + + int i = lo; + int j = mid + 1; + for (int k = lo; k <= hi; k++) { + if (i > mid) { + a[k] = aux[j++]; + } else if (j > hi) { + a[k] = aux[i++]; + } else if (aux[j].compareTo(aux[i]) < 0) { + a[k] = aux[j++]; + } else { + a[k] = aux[i++]; + } + } + } + + // Mergesort a[lo..hi] using auxiliary array aux[lo..hi] + private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { + // TODO + } + + /** + * Rearranges the array in ascending order, using the natural order + */ + public static void sort(Comparable[] a) { + // TODO + } + } + + **Note:** Les questions suivantes vous demanderont d'implémenter la fonction left out. Vous n'avez pas besoin de mettre les accolades (``{ }``) entourant le corps de la fonction dans votre réponse. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 2 - Merge Sort (implem) +network_grading: false +order: 8 +problems: + question1: + language: java + type: code + header: |- + .. code-block:: java + + private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) + default: '' + name: Implementation de la fonction private sort + question2: + type: code + default: '' + header: |- + .. code-block:: java + + public static void sort(Comparable[] a) + language: java + name: Implementation de la fonction public sort +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-Z9x4eu b/lost+found/task.yaml-Z9x4eu new file mode 100644 index 00000000..d592f272 --- /dev/null +++ b/lost+found/task.yaml-Z9x4eu @@ -0,0 +1,103 @@ +accessible: false +author: Pierre Schaus +context: |+ + Context + ================================================== + + `Description `_ of the implementation exercise and interesting questions to improve your skills. + + Fill-in the body of each method (TODO) below in the corresponding textfield. + grade: 50% for the correctness of your implementation (correct or not), 50% for the efficiency (efficient or not). + + + + .. code-block:: java + + public class NodeQueue implements Queue { + + // Variables d’instance + + private Node marker; + private int size; + + + @Override + public int size() { + // TODO + return 0; + } + + @Override + public boolean isEmpty() { + // TODO + return true; + } + + @Override + public E front() throws QueueEmptyException { + // TODO + return null; + } + + @Override + public void enqueue(E element) { + // TODO + + } + + @Override + public E dequeue() throws QueueEmptyException { + // TODO + return null; + } + } + + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + time: '300' + memory: '1500' +name: '[old] Bilan M1 - Circular LinkedList' +network_grading: false +order: 36 +problems: + size: + header: '' + default: '' + language: java + name: size + type: code + isEmpty: + language: java + default: '' + name: isEmpty + type: code + header: '' + front: + language: java + header: '' + type: code + name: front + default: '' + enqueue: + language: java + type: code + default: '' + header: '' + name: enqueue + dequeue: + type: code + name: dequeue + header: '' + language: java + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-a9yCTE b/lost+found/task.yaml-a9yCTE new file mode 100644 index 00000000..724152bf --- /dev/null +++ b/lost+found/task.yaml-a9yCTE @@ -0,0 +1,64 @@ +accessible: false +author: Simon Hardy +context: |- + You are asked to implement the following interface, representing a Map (for more informations about the methods listed below, refer to the official Map interface : http://docs.oracle.com/javase/7/docs/api/java/util/Map.html). You should use *linear probing* as collision handling scheme (this will not be checked by INGInious, but it's strongly recommended). Pay attention to your complexities ! + + Note: you can't rely on any existing Java class implementing java.util.Map. + + .. code-block:: java + + import java.util.Set; + + /* Your class should be named MyMap and have at least a no-argument constructor. */ + public interface Map { + + /* Returns true if this map contains a mapping for the specified key. */ + public boolean containsKey(K key); + + /* Returns true if this map contains a mapping for the specified value. */ + public boolean containsValue(V value); + + /* Returns a Set view of the mappings contained in this map. */ + public Set> entrySet(); + + /* Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. */ + public V get(K key); + + /* Returns the hash code value for this map. */ + public int hashCode(); + + /* Returns true if this map contains no key-value mappings. */ + public boolean isEmpty(); + + /* Associates the specified value with the specified key in this map. */ + public V put(K key, V value); + + /* Removes the mapping for a key from this map if it is present. */ + public V remove(K key); + + /* Returns the number of key-value mappings in this map. */ + public int size(); + } +environment: java8scala +evaluate: best +groups: false +limits: + memory: '3000' + output: '100' + time: '60' +name: '[Old] Mission 4 - Map [individual]' +network_grading: false +order: 52 +problems: + map: + type: file + name: Map + allowed_exts: + - .java + header: 'Upload the file containing your implementation here. The class representing + your map should be named *MyMap* and implement *Map*. ' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-dwJjZU b/lost+found/task.yaml-dwJjZU new file mode 100644 index 00000000..3c2f5b21 --- /dev/null +++ b/lost+found/task.yaml-dwJjZU @@ -0,0 +1,71 @@ +accessible: false +author: Simon Hardy +context: |- + Recall the *BucketSort.sort* method : + + .. code-block:: java + + /* + * @pre 'tab' contains only positive integers, 'digit' belongs to [0, 9] + * @post 'tab' is not modified + * @returns a new table containing the elements of 'tab' sorted in increasing order + * on digit 'digit' (digit '0' for the unit, '1' for the decimal and so on). + * The algorithm must be stable ! (ordering of elements with the same keys is preserved) + */ + public static int[] sort(int[] tab, int digit); + + You are asked to write unit tests (using JUnit) in order to check wether a particular implementation of this interface is correct. + + Here is a simple template you can use to write your tests: + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + import static org.junit.Assert.assertArrayEquals; + import static org.junit.Assert.fail; + + public class BucketSortTests { + + @Test + public void firstTest() { + try { + int[] tab = {2, 1}; + int[] expected = {1, 2}; + int[] result = BucketSort.sort(tab, 0); + assertArrayEquals(expected, result); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void secondTest() { + // TODO... + } + } +environment: java8scala +evaluate: best +groups: false +limits: + memory: '512' + output: '100' + time: '45' +name: '[Old] Mission 6 - Unit tests for the Bucket-Sort [individual]' +network_grading: false +order: 56 +problems: + bucketsort_tests: + allowed_exts: + - .java + header: 'Upload your file here, with only one class named "BucketSortTests". + You can suppose that the *sort* method to test is available under *BucketSort.sort(arg1, + arg2)* as written in the template. ' + type: file + name: Unit tests for the Bucket-Sort +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/task.yaml-dweD90 b/lost+found/task.yaml-dweD90 new file mode 100644 index 00000000..87445f62 --- /dev/null +++ b/lost+found/task.yaml-dweD90 @@ -0,0 +1,172 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +context: |+ + Context + ================================================== + + Supposons la matrice 5x5 suivante: + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + + représentée dans le tableau ci-dessous : + + .. image:: Part6GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + Chaque entrée de la matrice représente une altitude. + L'objectif est d'implémenter une classe `GlobalWarmingImpl` qui implémente toutes les méthodes décrites dans `GlobalWarming` données ci-dessous. + + Un niveau d'eau global spécifié dans le constructeur modélise le fait que toutes les positions de la matrice avec une valeur <= le niveau d'eau sont inondées (sous l'eau) et donc dangereuses. + Dans l'exemple ci-dessus, le niveau d'eau est de 3, tous les points sûrs sont en vert. + + La méthode que vous devez implémenter doit permettre de calculer le chemin le plus court entre deux positions sont sur la même île + + nous supposons que les points sont **uniquement connectés verticalement ou horizontalement**. + + `Le projet IntelliJ est disponible ici `_. + + .. code-block:: java + + + import java.util.List; + + abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * + * @param p1 a safe point with valid coordinates on altitude matrix + * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix + * @return the shortest simple path (vertical/horizontal moves) if any between from p1 to p2 using only vertical/horizontal moves on safe points. + * an empty list if not path exists (i.e. p1 and p2 are not on the same island). + */ + public abstract List shortestPath(Point p1, Point p2); + + } + + + + Exercices Preliminaires + ================================================== + + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + GlobalWarming gw = new MyGlobalWarming(tab,3); + + .. image:: Part6GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '120' + memory: '750' + output: '100' +name: PART 6 - Global Warming (implem) +network_grading: false +order: 29 +problems: + shortestPath: + answer: (1,0),(2,0),(2,1),(3,1) + name: shortestPath + type: match + header: |- + Quel résultat on obtiendra avec cet appel? + + .. code-block:: java + + gw.shortestPath(new GlobalWarming.Point(1,0),new GlobalWarming.Point(3,1)); + + *Format du résultat attendu:* une liste de positions séparées par des virgules comme suit: (1,0),(1,1),(2,1),(3,1) + implementation: + name: Fill in the class such that it corresponds to its specification. + language: java + type: code + header: |+ + Copier-coller et compléter le code ci-dessous. + Faites attention à la complexité temporelle prévue de chaque méthode. + Pour répondre à cette complexité temporelle, il faut déjà faire quelques pré-calculs dans le constructeur. N'hésitez pas à créer des classes internes dans GlobalWarmingImpl pour faciliter votre implémentation. + N'hésitez pas à utiliser n'importe quelle méthode ou structure de données disponible dans le langage Java et l'API. + + .. code-block:: java + + import java.util.*; + + public class GlobalWarmingImpl extends GlobalWarming { + + public GlobalWarmingImpl(int[][] altitude, int waterLevel) { + super(altitude,waterLevel); + // TODO + } + + + public List shortestPath(Point p1, Point p2) { + // TODO + // expected time complexity O(n^2) + return new ArrayList(); + } + + } + + + + + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-eYUCgj b/lost+found/task.yaml-eYUCgj new file mode 100644 index 00000000..b66934a9 --- /dev/null +++ b/lost+found/task.yaml-eYUCgj @@ -0,0 +1,87 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Antoine Cailliau +context: '' +environment: mcq +evaluate: last +groups: false +input_random: '0' +limits: + memory: '100' + output: '2' + time: '30' +name: PART 3 - QCM +network_grading: false +order: 12 +problems: + qcm02: + choices: + - text: \\(O(\\log N)\\) et \\(O(N)\\) + valid: true + - text: \\(O(\\log N)\\) et \\(O(\\frac{N^2}{2})\\) + - text: \\(O(N)\\) et \\(O(N)\\) + - text: \\(O(\\frac{N^2}{2})\\) et \\(O(N)\\) + - text: \\(O(N^2)\\) et \\(O(N)\\) + type: multiple_choice + limit: 0 + header: 'Dans le pire des cas, les opérations `get` et `put` dans `BinarySearchST` + (une recherche dichotomique dans un tableau ordonné) ont les complexités + suivantes :' + name: Complexité des opérations pour BinarySearchST + qcm03: + choices: + - text: \\(O(\\frac{N}{2})\\) + - valid: true + text: \\(O(\\log N)\\) + - text: \\(O(1.39\\times \\log N)\\) + - text: \\(O(\\frac{N^2}{2})\\) + - text: \\(O(N\\times log N)\\) + header: Le coût, dans le pire cas, d’un `get` dans un arbre *red-black* est + de  + limit: 0 + type: multiple_choice + name: Complexité des opérations de arbres Red-black + qcm04: + header: Quelle est la complexité pour énumérer en ordre croissant toutes les + clés d’un arbre binaire ? + type: multiple_choice + limit: 0 + choices: + - text: \\(O(N)\\) + valid: true + - text: \\(O(\\log N)\\) + - text: \\(O(N\\times \\log N)\\) + - text: \\(O(N^2)\\) + name: Complexité des opérations de arbres binaires + qcm05: + choices: + - text: Le *Selection Sort* n’est pas stable et est en-place. + valid: true + - text: Le *Quick Sort* est stable et en-place. + - valid: true + text: Le *Merge Sort* est stable et n’est pas en-place. + - valid: true + text: Le *3-Way Quick Sort* n’est pas stable et est en place. + - text: Le *Shell Sort* est stable et est en place. + limit: 0 + name: Propriétés des algorithmes de tri + multiple: true + type: multiple_choice + header: Quelles affirmations suivantes sont exactes ? + qcm07: + choices: + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a1.png' + valid: true + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a2.png' + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a3.png' + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a4.png' + - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/PART3Qcm/a5.png' + header: Quel arbre red-black correspond à l’arbre construit à partir de la + séquence 3, 5, 4, 2, 1, 7, 8, 6 ? + type: multiple_choice + limit: 0 + name: Algorithme de construction d'un arbre red-black +stored_submissions: 1 +submission_limit: + amount: 5 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-fIdFku b/lost+found/task.yaml-fIdFku new file mode 100644 index 00000000..fb3c0865 --- /dev/null +++ b/lost+found/task.yaml-fIdFku @@ -0,0 +1,58 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: psc, John Aoga +context: |- + Il vous ait demandé d'implémenter la classe des composants connexes ``ConnectedComponent`` étant donnée un graphe. + La classe `Graph `_ disponible dans le code est celle de l'API de la classe `Java `_. + + .. code-block:: java + + public class ConnectedComponents { + /** + * @return the number of connected components in g + */ + public static int numberOfConnectedComponents(Graph g) { + // TODO + return 0; + } + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + hard_time: '30' + memory: '250' + output: '2' +name: PART 6 - Connected Components (implem) +network_grading: false +order: 28 +problems: + TODO0: + answer: '3' + header: |- + Combien de composante(s) connexe(s) y a-t-il dans le graph suivant? + + .. image:: Part6ConnectedComponents/graph.png + :width: 30% + :align: center + :alt: graph example + name: Exercice préliminaire + type: match + TODO1: + default: '' + language: java + type: code + name: Code + header: |+ + Mettez votre implémentation complète de ``ConnectedComponents.java`` ci-dessous. + **Conseil:* N'hésitez pas à ajouter des méthodes ou même des inner-class (``private static class``) pour vous aider mais ne modifiez pas le nom de la classe ni la signature de la méthode ``numberOfConnectedComponents``. N'oubliez pas d'ajouter les imports au début de votre code si vous utilisez des objets de l'API de `Java `_. + +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-fLQZyj b/lost+found/task.yaml-fLQZyj new file mode 100644 index 00000000..1f3f01de --- /dev/null +++ b/lost+found/task.yaml-fLQZyj @@ -0,0 +1,52 @@ +accessible: false +author: Simon Hardy, Frédéric Kaczynski +context: |- + You are asked to write unit tests (using JUnit) in order to check wether a particular interpreter does its job correctly (i.e. the method *interpret* follows its specifications). + + Here is a simple template you can use to write your tests : + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + public class InterpreterTests { + + String instructions = "1 1 add pstack"; + InterpreterInterface interpreter = new Interpreter(); + + @Test + public void firstTest() { + String result = interpreter.interpret(instructions); + assertEquals(result,"2"); + } + + @Test + public void secondTest() { + // TODO... + } + } +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '100' + memory: '512' + time: '65' +name: '[old] Mission 1 - Unit tests for the interpreter [individual]' +network_grading: false +order: 33 +problems: + interpreter_tests: + type: file + name: Unit tests for the interpreter + allowed_exts: + - .java + header: 'Upload your file here, with only one class named "InterpreterTests". + The class representing the interpreter under test is called *Interpreter* + and implements *InterpreterInterface*, as written in the template. ' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-gWGneh b/lost+found/task.yaml-gWGneh new file mode 100644 index 00000000..9d5d7e2e --- /dev/null +++ b/lost+found/task.yaml-gWGneh @@ -0,0 +1,120 @@ +accessible: 2018-11-26 17:00:00/2019-11-26 17:00:00 +author: '' +context: |- + Dans cette tâche on vous propose d'implémenter la fonction d'insertion ``push()`` d'un heap binaire. + + La fonction push agit sur un tableau, nommé ``contenu``, qui représente un arbre, selon la méthode vue au cours: + le noeud n°i de l'arbre a pour enfant les indices 2*i et 2*i+1. + + il faut noter que dans le livre à la page 318 a été proposée le ``MaxPQ`` mais ici nous vous proposons de plutot réfléchir aux changements à apporter à ce code pour implémenter un ``MinPQ`` notamment à la fonction d'insertion. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 5 - Binary Heap Push (implem) +network_grading: false +order: 25 +problems: + first: + name: 'Vérifiez votre compréhension ' + answer: 0 1 2 3 8 10 6 5 + type: match + header: |- + Soit ce code: + + .. code-block:: java + + Heap heap = new Heap(10); + heap.push(5); + heap.push(1); + heap.push(2); + heap.push(3); + heap.push(8); + heap.push(10); + heap.push(6); + heap.push(0); + + En considérant que le Heap est un ``MinPQ`` Quel est le contenu du tableau `content` après ces opérations? + (indiquez uniquement les entrées utilisées du tableau, dans l'ordre, séparés par **UN espace, sans espace de fin**.) + + **Note** *Cette sous-question n'attribue pas de points, mais permet à la question de l'implémentation d'être corrigée.* + second: + default: '' + language: java + name: Code + type: code + header: |- + .. code-block:: java + + + /** + * A binary heap where the content is placed in the array `content`. + * + * The array `content` represents a tree and is based on the methods we have seen in the course: + * The ith node of the tree has indices 2*i and 2*i+1 as children. + * + * remarks: + * - This heap uses a 1-indexing, ie. the first index in the array is 1 instead of 0 as usual. This could ease your computations. + * By this way, the index O of the array `content` must always stay empty. + * - You can use the function increaseSize() to double the size of the array `content`, if needed. + * - The expected complexity is O(log n) for the insertion in the heap. + */ + public class Heap { + protected int[] content; + protected int size; + + public Heap(int initSize) { + size = 0; + content = new int[initSize]; + } + + /** + * Doubles the size of the inner storage array + */ + protected void increaseSize() { + int[] newContent = new int[content.length*2]; + System.arraycopy(content, 0, newContent, 0, content.length); + content = newContent; + } + + /** + * Add a new value to the heap. + * @param val value to add + */ + public void push(int val) { + //TODO + //operation on this.content. + //use increaseSize() if needed. + } + + //You can add other functions if needed here + + /** + * Returns the content of the inner array + */ + public int[] getContent() { + return content; + } + + public int getSize() { + return size; + } + } + + + Copiez toute la fonction ``push()`` ici (y compris public void push(int val) et les accolades) ainsi que toutes les autres méthodes éventuelles que vous aviez implémenté. + + .. code-block:: java + + public void push(int val) +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-iYjCza b/lost+found/task.yaml-iYjCza new file mode 100644 index 00000000..b81f2f19 --- /dev/null +++ b/lost+found/task.yaml-iYjCza @@ -0,0 +1,103 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: Pierre Schaus +context: |- + Implémentez l'interface ``Digraph.java`` dans la classe ``DigraphImplem.java`` à l'aide d'une structure de donnée de type ``liste d'adjacence`` pour représenter les graphes dirigés. + + .. code-block:: java + + package student; + + public interface Digraph { + + /** + * The number of vertices + */ + public int V(); + + /** + * The number of edges + */ + public int E(); + + /** + * Add the edge v->w + */ + public void addEdge(int v, int w); + + /** + * The nodes adjacent to edge v + */ + public Iterable adj(int v); + + /** + * A copy of the digraph with all edges reversed + */ + public Digraph reverse(); + + } + + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '15' + memory: '1000' + output: '2' +name: PART 6 - Digraph (implem) +network_grading: false +order: 30 +problems: + implementation: + name: Implementation de Digraph.java + language: java + type: code + header: |- + .. code-block:: java + + package student; + + public class DigraphImplem implements Digraph { + + /** + * @param V is the number of vertices + */ + public DigraphImplem(int V) { + // TODO + } + + public int V() { + // TODO + return 0; + } + + public int E() { + // TODO + return 0; + } + + public void addEdge(int v, int w) { + // TODO + } + + public Iterable adj(int v) { + return null; + // TODO + } + + public Digraph reverse() { + return null; + // TODO + } + } + + Copier votre implementation complète de ``DigraphImplem.java`` ci-desssous en completant la classe. Vous pouvez changer tout ce que vous souhaitez dans la classe sauf le nom du package et les signature des méthodes. + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-kAVams b/lost+found/task.yaml-kAVams new file mode 100644 index 00000000..a0efb350 --- /dev/null +++ b/lost+found/task.yaml-kAVams @@ -0,0 +1,77 @@ +accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00/2019-09-24 16:00:00 +author: Simon Hardy, Frédéric Kaczynski +categories: [] +context: |+ + Rappelez-vous de l'interface Stack : + + .. code-block:: java + + import java.util.EmptyStackException; + + public interface Stack { + + public boolean empty(); + + public E peek() throws EmptyStackException; + + public E pop() throws EmptyStackException; + + public void push(E item); + + } + + Il vous est demandé d'écrire des tests unitaire (en utilisant JUnit) afin de vérifier si une implémentation particulière de cette interface est correcte. + + Voici un modèle simple que vous pouvez utiliser pour écrire vos tests (vous pouvez utiliser d'autres types que des String, bien sûr !) : + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class StackTests { + + @Test + public void firstTest() { + Stack stack = new MyStack(); + stack.push(1); + assertEquals(new Integer(1), stack.pop()); + } + + @Test + public void secondTest() { + // ... TODO ... + } + + } + + + `Le projet IntelliJ est disponible ici `_. + +environment: java8scala +evaluate: best +file: '' +groups: false +input_random: '0' +limits: + time: '60' + output: '100' + memory: '512' +name: PART 1 - Write Unit tests Stack (Implem) +network_grading: false +order: 1 +problems: + stack_tests: + header: |- + Téléchargez votre fichier ici, avec une seule classe nommée *StackTests*. Vous pouvez supposer que la classe représentant la stack sous test s'appelle *MyStack*, et que l'interface est disponible (nommée *Stack*) comme écrit dans le modèle. + + **Note:** : Vous ne devriez **pas** mettre votre classe dans un package java. En d'autres termes, vous ne devriez **pas** utiliser le mot-clé ``package``. + allowed_exts: + - .java + name: Tests unitaires pour l'implémentation de stack + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-krQbcA b/lost+found/task.yaml-krQbcA new file mode 100644 index 00000000..50deafb3 --- /dev/null +++ b/lost+found/task.yaml-krQbcA @@ -0,0 +1,88 @@ +accessible: 2017-11-13 08:00:00/2017-11-19 20:00:00 +author: Simon Hardy, Frédéric Kaczynski +context: |- + For this task, you have to write unit tests using JUnit in order to check several implementations of compressors and decompressors. You are given two classes, *Compress* and *Decompress*, and you have to determine if they do their job correctly or not. We provide you a small template to begin writing your tests : + + The tests will give you some hints on what error you do not detect correctly, use those hints. Here are some other hints to help you not beeing stuck on the tests for too long : + + - Try to test simple cases, then with "limit cases". + + - Do not forget simply to test "what the program is designed for". + + - Do not dive into long "for loops", simple tests will give you a very fast success. + + - You can reuse the files that are generated in the compress_decompress function, but don't change the code of that function. + + - DO NOT DO A TEST THAT THROWS ERROR RANDOMLY AND THEN SUBMIT IT 300 TIMES, HOPING IT WILL HOPEFULLY PASS ALL THE TESTS. YOU LEARN NOTHING BY DOING THAT. Moreover, when we will grade your participation to the course, we will check your codes and change the grades accordingly. If you "cheated" for the success, it won't be considered as a success and does not give us a good image of what you are able to do. + + - That could be useful : http://docs.oracle.com/javase/8/docs/api/java/io/File.html + + - You do not have to test empty files for this task. + + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + import static org.junit.Assert.fail; + import java.io.PrintWriter; + import java.util.Scanner; + import java.io.IOException; + import java.io.File; + + public class CompressTests { + + @Test + public void firstTest() { + try { + String str = "abcdefg"; + assertEquals(compress_decompress(str), str); + } catch (Exception e) { + fail("Exception occured : " + e); + } + } + + @Test + public void secondTest() { + // ... + } + + public String compress_decompress(String content) throws IOException { + PrintWriter writer = new PrintWriter("./input.txt"); + writer.println(content); + writer.close(); + Compress.main(new String[]{"./input.txt", "./compressed.txt"}); + Decompress.main(new String[]{"./compressed.txt", "./output.txt"}); + Scanner scanner = new Scanner(new File("./output.txt")); + String str = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return str; + } + } + + NB : you don't know the internal representation of the compressed file, but you can still check some of its properties : for example, a long file with only high-frequency characters should have a pretty good compression rate. +environment: java8scala +evaluate: best +groups: false +limits: + output: '100' + memory: '512' + time: '60' +name: Mission 5 - Unit tests for the text compressor [individual] +network_grading: false +order: 45 +problems: + tests: + allowed_exts: + - .java + name: Unit tests for the compressor + header: 'Upload your file here, with only one class named *CompressTests*. + The classes representing the compressor and decompressor under test are + respectively named *Compress* and *Decompress*, as written in the template. ' + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-ls2O6y b/lost+found/task.yaml-ls2O6y new file mode 100644 index 00000000..964a71da --- /dev/null +++ b/lost+found/task.yaml-ls2O6y @@ -0,0 +1,129 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +context: |- + Considérez cette classe, ``DepthFirstPaths``, qui calcule les chemins vers n'importe quel noeud connecté à partir d'un noeud source ``s`` dans un graphe non dirigé en utilisant un parcours DFS. + + .. code-block:: java + + // TODO + + public class DepthFirstPaths { + private boolean[] marked; // marked[v] = is there an s-v path? + private int[] edgeTo; // edgeTo[v] = last edge on s-v path + private final int s; + + /** + * Computes a path between s and every other vertex in graph G + * @param G the graph + * @param s the source vertex + */ + public DepthFirstPaths(Graph G, int s) { + this.s = s; + edgeTo = new int[G.V()]; + marked = new boolean[G.V()]; + dfs(G, s); + } + + // Depth first search from v + private void dfs(Graph G, int v) { + // TODO + } + + /** + * Is there a path between the source s and vertex v? + * @param v the vertex + * @return true if there is a path, false otherwise + */ + public boolean hasPathTo(int v) { + // TODO + } + + /** + * Returns a path between the source vertex s and vertex v, or + * null if no such path + * @param v the vertex + * @return the sequence of vertices on a path between the source vertex + * s and vertex v, as an Iterable + */ + public Iterable pathTo(int v) { + // TODO + } + } + + La classe ``Graph`` est déjà implémentée. En voici la spécification : + + .. code-block:: java + + public class Graph { + // @return the number of vertices + public int V() { } + + // @return the number of edges + public int E() { } + + // Add edge v-w to this graph + public void addEdge(int v, int w) { } + + // @return the vertices adjacent to v + public Iterable adj(int v) { } + + // @return a string representation + public String toString() { } + } + + **Note:** Les questions suivantes vous demanderont d'implémenter tous les ``TODO`` de la classe ``DepthFirstPaths``. Vous n'avez pas besoin de mettre les accolades (``{ }``) entourant le corps de la fonction dans votre réponse. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 6 - Depth First Paths (implem) +network_grading: false +order: 27 +problems: + import: + default: '' + header: |- + Vous pouvez l'utiliser pour importer des classes supplémentaires dont votre code peut avoir besoin. + + **Note:** Ceci n'est demandé que pour que votre code puisse être compilé et testé. Pendant l'examen, vous n'aurez pas besoin de fournir cette information et vous pourrez utiliser des pseudo-classes comme ``Queue``. + language: java + type: code + name: Les importations + question1: + name: Implémentation de la méthode dfs + language: java + header: |- + .. code-block:: java + + private void dfs(Graph G, int v) + default: '' + type: code + question2: + default: '' + header: |- + .. code-block:: java + + public boolean hasPathTo(int v) + language: java + name: Implémentation de la méthode hasPathTo + type: code + question3: + header: |- + .. code-block:: java + + public Iterable pathTo(int v) + default: '' + name: Implémentation de la méthode distTo + language: java + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-nejUg8 b/lost+found/task.yaml-nejUg8 new file mode 100644 index 00000000..66b29e3d --- /dev/null +++ b/lost+found/task.yaml-nejUg8 @@ -0,0 +1,170 @@ +accessible: false +author: '' +context: |+ + Context + ================================================== + + Assume the following 5x5 matrix: + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + + represented in the array here under: + + .. image:: globalwarming_graph/matrix.png + :width: 200px + :align: center + :alt: matrix example + + Each entry of the matrix represents an altitude. + The objective is to implement a class `GlobalWarmingImpl` that implements all the methods described in `GlobalWarming` given next. + + A global water level specified in the constructor models the fact that all the positions of the matrix with a value <= the water level are flooded (under the water) and thus unsafe. + In the above example, the water level is 3, all the safe points are green. + + The method you must implement is the computation of the shortest path between two positions on a same island + + we assume that points are **only connected vertially or horizontally**. + + .. code-block:: java + + + import java.util.List; + + abstract class GlobalWarming { + + /** + * A class to represent the coordinates on the altitude matrix + */ + public static class Point { + + final int x, y; + + Point(int x, int y) { + this.x = x; + this.y = y; + } + + @Override + public boolean equals(Object obj) { + Point p = (Point) obj; + return p.x == x && p.y == y; + } + } + + final int[][] altitude; + final int waterLevel; + + + /** + * In the following, we assume that the points are connected to + * horizontal or vertical neighbors but not to the diagonal ones + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + * @param waterLevel is the water level, every entry <= waterLevel is flooded + */ + public GlobalWarming(int[][] altitude, int waterLevel) { + this.altitude = altitude; + this.waterLevel = waterLevel; + } + + + /** + * + * @param p1 a safe point with valid coordinates on altitude matrix + * @param p2 a safe point (different from p1) with valid coordinates on altitude matrix + * @return the shortest simple path (vertical/horizontal moves) if any between from p1 to p2 using only vertical/horizontal moves on safe points. + * an empty list if not path exists (i.e. p1 and p2 are not on the same island). + */ + public abstract List shortestPath(Point p1, Point p2); + + } + + + + Preliminary exercises + ================================================== + + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + GlobalWarming gw = new MyGlobalWarming(tab,3); + + .. image:: globalwarming_graph/matrix.png + :width: 200px + :align: center + :alt: matrix example + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '120' + memory: '750' + output: '100' +name: '[old] Bilan M6 - Global Warming' +network_grading: false +problems: + shortestPath: + answer: (1,0),(2,0),(2,1),(3,1) + name: shortestPath + type: match + header: |- + What would be the result of + + .. code-block:: java + + gw.shortestPath(new GlobalWarming.Point(1,0),new GlobalWarming.Point(3,1)); + + expected: a list of comma separated positions such as (1,0),(1,1),(2,1),(3,1) + implementation: + name: Fill in the class such that it corresponds to its specification. + language: java + type: code + header: |+ + Copy-paste and complete the code below. + Be careful with the expected time-complexity in each method. + To meet these time-complexity some precomputation should already be done in the constructor. Don't hesitate to create inner classes in GlobalWarmingImpl to facilitate your implementation. + Feel free to use any method or data-structure available in the Java language and API. + + .. code-block:: java + + import java.util.*; + + public class GlobalWarmingImpl extends GlobalWarming { + + public GlobalWarmingImpl(int[][] altitude, int waterLevel) { + super(altitude,waterLevel); + // TODO + } + + + public List shortestPath(Point p1, Point p2) { + // TODO + // expected time complexity O(n^2) + return new ArrayList(); + } + + } + + + + + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 +order: 42 diff --git a/lost+found/task.yaml-qQfgNy b/lost+found/task.yaml-qQfgNy new file mode 100644 index 00000000..e7d44624 --- /dev/null +++ b/lost+found/task.yaml-qQfgNy @@ -0,0 +1,72 @@ +accessible: 2018-12-10 17:00:00/2019-12-10 17:00:00 +author: John Aoga +context: |- + On vous demande d'implémenter la classe ``WordTransformationSP`` qui permet de trouver le plus court chemin permettant de passer d'un string *A* à un autre string *B* (avec la certitude qu'il y a bien un chemin permettant de transformer *A* en *B*). + + + Pour cela on definit une opération ``rotation(x, y)`` qui inverse l’ordre des lettres entre la position x et y (non-inclus). + Par exemple, avec A=``HAMBURGER``, si l'on fait ``rotation(A, 4, 8)``, cela nous donne ``HAMBEGRUR``. Vous pouvez donc constater que la sous-string ``URGE`` a été inversé en ``EGRU`` et le reste de la chaine est resté inchangé: ``HAMB`` + ``ECRU`` + ``R`` = ``HAMBEGRUR``. + + Disons qu’une ``rotation(x, y)`` a un cout de y-x. Par exemple passer de ``HAMBURGER`` à ``HAMBEGRUR`` coût *8-4 = 4*. + + La question est de savoir quel est le coût minimum pour atteindre une string B à partir A? + + Vous devez donc inmplémenter la méthode une fonction ``public static int minimalCost(String A, String B)`` qui retourne le cout minimal pour atteindre le String B depuis A en utilisant l'opération rotation. + + .. code-block:: java + + import java.util.*; + + public class WordTransformationSP { + /** + * + * Rotate the substring between start and end of a given string s + * eg. s = HAMBURGER, rotation(s,4,8) = HAMBEGRUR i.e. HAMB + EGRU + R + * @param s + * @param start + * @param end + * @return rotated string + */ + public static String rotation(String s, int start, int end) { + return s.substring(0,start)+new StringBuilder(s.substring(start,end)).reverse().toString()+s.substring(end); + } + + /** + * Compute the minimal cost from string "from" to string "to" representing the shortest path + * @param from + * @param to + * @return + */ + public static int minimalCost(String from, String to) { + //TODO + return 0; + } + } + + `Le projet IntelliJ est disponible ici `_. + + **Note:** vous pouvez ajouter d'autres fonctions et des private classes si vous le désirez. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + time: '300' + memory: '2500' +name: PART 6 - Word Transformation Shortest Path (implem) +network_grading: false +order: 31 +problems: + implem: + default: '' + name: Code + language: java + header: | + Coller tout le contenu de votre classe ``WordTransformationSP`` ici : + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-tRaVfc b/lost+found/task.yaml-tRaVfc new file mode 100644 index 00000000..0fd8ad8c --- /dev/null +++ b/lost+found/task.yaml-tRaVfc @@ -0,0 +1,144 @@ +accessible: 2018-10-08 17:00:00/2019-10-08 17:00:00 +author: Pierre Schaus, John Aoga +context: |+ + Context + ================================================== + + Supposons la matrice 5x5 suivante : + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + + représentée dans le tableau ci-dessous : + + .. image:: Part2GlobalWarming/matrix.png + :width: 200px + :align: center + :alt: matrix example + + + Chaque entrée de la matrice représente une altitude. + L'objectif est d'implémenter une classe ``GlobalWarmingImpl`` qui étend la méthode `GlobalWarming` décrite ci-dessous. + + Compte tenu d'un niveau d'eau global, toutes les positions de la matrice ayant une valeur *<=* au niveau d'eau sont inondées et donc peu sûres. Donc, en supposant que le niveau d'eau est de *3*, tous les points sûrs sont en vert (dans la représentation ci-dessus). + + La méthode que vous devez implémentez est ``nbSafePoints`` + + * le calcul du nombre de points de sécurité pour un niveau d'eau donné + + + .. code-block:: java + + + import java.util.List; + + abstract class GlobalWarming { + + + final int[][] altitude; + + /** + * @param altitude is a n x n matrix of int values representing altitudes (positive or negative) + */ + public GlobalWarming(int[][] altitude) { + this.altitude = altitude; + } + + /** + * + * @param waterLevel + * @return the number of entries in altitude matrix that would be above + * the specified waterLevel. + * Warning: this is not the waterLevel given in the constructor/ + */ + public abstract int nbSafePoints(int waterLevel); + + } + + `Le projet IntelliJ est disponible ici `_. + + Exercices préliminaires + ================================================== + + + .. code-block:: java + + int [][] tab = new int[][] {{1,3,3,1,3}, + {4,2,2,4,5}, + {4,4,1,4,2}, + {1,4,2,3,6}, + {1,1,1,6,3}}; + GlobalWarming gw = new MyGlobalWarming(tab); + + + +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '100' + time: '5000' + memory: '750' +name: PART 2 - Global Warming (implem) +network_grading: false +order: 10 +problems: + nbSafePoints: + answer: '14' + header: |- + Quel serait le résultat de: + + .. code-block:: java + + gw.nbSafePoints(2) + + + attendu : un nombre + name: Vérifiez votre compréhension + type: match + implementation: + language: java + header: |+ + Copier-coller et compléter le code ci-dessous. + Faites attention à la complexité temporelle prévue de chaque méthode. + Pour répondre à cette complexité temporelle, il faut déjà faire quelques pré-calculs dans le constructeur. N'hésitez pas à créer des classes internes dans GlobalWarmingImpl pour faciliter votre implémentation. + N'hésitez pas à utiliser n'importe quelle méthode ou structure de données disponible dans le langage Java et l'API. + + .. code-block:: java + + import java.util.*; + + public class GlobalWarmingImpl extends GlobalWarming { + + public GlobalWarmingImpl(int[][] altitude) { + super(altitude); + // expected pre-processing time in the constructror : O(n^2 log(n^2)) + // TODO + } + + + public int nbSafePoints(int waterLevel) { + // TODO + // expected time complexity O(log(n^2)) + return 0; + } + + } + + + + + default: '' + name: 'Implémentation de GlobalWarmingImpl ' + type: code +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-tiO79g b/lost+found/task.yaml-tiO79g new file mode 100644 index 00000000..a7012f58 --- /dev/null +++ b/lost+found/task.yaml-tiO79g @@ -0,0 +1,128 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: Xavier Gillard, John Aoga +context: | + A la page 777 du livre "Algorithms" 4th edition, on vous propose l'implémentation suivante de l'algorithme de Rabin Karp. + + .. code-block:: java + + public class RabinKarp { + private String pat; // the pattern // needed only for Las Vegas + private long patHash; // pattern hash value + private int m; // pattern length + private long q; // a large prime, small enough to avoid long overflow + private int R; // radix + private long RM; // R^(M-1) % Q + + public RabinKarp(String pat) { + this.pat = pat; // save pattern (needed only for Las Vegas) + R = 256; + m = pat.length(); + q = longRandomPrime(); + + // precompute R^(m-1) % q for use in removing leading digit + RM = 1; + for (int i = 1; i <= m-1; i++) + RM = (R * RM) % q; + patHash = hash(pat, m); + } + + // Compute hash for key[0..m-1]. + private long hash(String key, int m) { + long h = 0; + for (int j = 0; j < m; j++) + h = (R * h + key.charAt(j)) % q; + return h; + } + + // Monte Carlo + private boolean check(int i) { + return true; + } + + // Returns the index of the first occurrrence of the pattern string in the text string. + public int search(String txt) { + int n = txt.length(); + if (n < m) return n; + long txtHash = hash(txt, m); + + // check for match at offset 0 + if ((patHash == txtHash) && check(txt, 0)) + return 0; + + // check for hash match; if hash match, check for exact match + for (int i = m; i < n; i++) { + // Remove leading digit, add trailing digit, check for match. + txtHash = (txtHash + q - RM*txt.charAt(i-m) % q) % q; + txtHash = (txtHash*R + txt.charAt(i)) % q; + + // match + int offset = i - m + 1; + if ((patHash == txtHash) && check(txt, offset)) + return offset; + } + + // no match + return n; + } + + + // a random 31-bit prime + private static long longRandomPrime() { + BigInteger prime = BigInteger.probablePrime(31, new Random()); + return prime.longValue(); + } + + } +environment: mcq +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 4 - QCM Rabin Karp +network_grading: false +order: 18 +problems: + propositions: + header: | + On suppose que: + * :math:`n` dénote la longueur du texte (`key.length()`) dans lequel on recherche le pattern + * :math:`m` dénote la longueur du pattern à trouver dans le texte (`pat.length()`) + choices: + - feedback: :math:`O(nm)` est la complexité d'une recherche brute force. + Cette implémentation est dite `Monte Carlo` et sa complexité est :math:`O(n)` + text: La complexité de la methode ``search`` est :math:`O(nm)` + - text: La complexité de la methode ``search`` est :math:`O(n)` + valid: true + - text: La complexité de la methode ``search`` est :math:`O\left(n~log_2(m)\right)` + feedback: Le logarithme n'a aucune raison d'être. Cette implémentation + est dite `Monte Carlo` et sa complexité est :math:`O(n)` + - text: La complexité de la methode ``search`` est :math:`O(m^n)` + feedback: Il n'y a aucune raison pour qu'n apparaise en exposant. Cette + implémentation est dite `Monte Carlo` et sa complexité est :math:`O(n)` + - text: Cet implémentation renvoie toujours un résultat correct, c'est à + dire le premier indice :math:`i` telle que la souchaine :math:`key[i::i+m-1]` est + égale au pattern ``pat``, ou :math:`n` si le pattern ``pat`` ne s'y + trouve pas. + feedback: C'est faux, puisqu'il ne vérifie pas que la sous-chaine trouvée + correspond effectivement au pattern recherché, on dit que ce bout + de code implémente la variante `Monte Carlo` de l'algorithme de Rabin + Karp. Cet algorithme est très probablement correct, mais il y a une + faible probabilité pour qu'il renvoie un résultat erroné (du a une + collision sur les hash). + - text: |+ + Cet implémentation peut renvoyer un résultat incorrect, il est possible que pour l'indice :math:`i` renvoyé, la souchaine :math:`key[i::i+m-1]` ne soit pas égale au pattern ``pat``. + + + valid: true + multiple: true + limit: 0 + type: multiple_choice + name: Sélectionnez les propositions correctes +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-vFl83X b/lost+found/task.yaml-vFl83X new file mode 100644 index 00000000..56f0ae9b --- /dev/null +++ b/lost+found/task.yaml-vFl83X @@ -0,0 +1,96 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: Pierre Schaus +context: |- + La fonction de Hash calculée sur le sous tableau :math:`t[from,...,from+M-1]` est calculée comme suit: + + :math:`hash([from,...,from+M-1])= \left( \sum_{i=0}^{M-1} t[from+i] \cdot R^{(M-1-i)}\right)\%Q` + + Le code pour calculer cette fonction de hash vous est donné. + Nous vous demandons de calculer + :math:`hash([from,...,from+M-1])` au départ de + :math:`hash([from-1,...,from+M-2])` en O(1). + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + output: '2' + memory: '100' + time: '30' +name: PART 4 - Incremental Hash (implem) +network_grading: false +order: 19 +problems: + TODO1: + header: |- + Mettez votre implémentation complète de ``IncrementalHash.java`` ci-dessous. + + .. code-block:: java + + public class IncrementalHash { + + + private static final int R = 31; + private int M; + private int RM; + private int Q; + + /** + * + * @param Q is the modulo to apply + * @param M is the length of the words to hash + */ + public IncrementalHash(int Q, int M) { + assert(M > 0); + assert(Q > 0); + this.Q = Q; + this.M = M; + // computes (R^(M-1))%Q + // which might be useful for implementing nextHash + RM = 1; + for (int i = 1; i <= M-1; i++) { + RM = (RM * R)%Q; + } + } + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(1) + * @param t + * @param previousHash = hash(from-1) + * @param 0 < from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-2)+...+t[from+M-1])%Q + */ + public int nextHash(char[] t, int previousHash, int from) { + // TODO, obviously this is not O(1) + return hash(t,from); + } + + + /** + * Compute the hash function on the substring + * t[from,...,from+M-1] in O(M) + * @param t + * @param 0 <= from <= t.length-M + * @return (t[from]*R^(M-1)+t[from+1]*R^(M-2)+...+t[from+M-1])%Q + */ + public int hash(char[] t, int from) { + int h = 0; + for (int i = from; i < from+M; i++) { + h = (R*h+t[i]) % Q; + } + return h; + } + } + type: code + default: '' + language: java + name: IncrementalHash.java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-vXjyeN b/lost+found/task.yaml-vXjyeN new file mode 100644 index 00000000..d390dcdb --- /dev/null +++ b/lost+found/task.yaml-vXjyeN @@ -0,0 +1,65 @@ +accessible: true +author: '' +context: | + Implémentez un algorithme qui reçoit en entrée un tableau d'entiers et qui trouve deux valeurs issues de tableau dont la somme se rapproche le plus d'une valeur entière donnée :math:`x`. Soiet :math:`(a,b)` les deux valeurs trouvées, celles-ci doivent donc minimiser :math:`|x-(a+b)|`. + Les deux valeurs peuvent correspondre à la même entrée du tableau. + + Par exemple pour le tableau suivant + + .. code-block:: java + + int [] input = new int [] {5,10,1,75,150,151,155,18,75,50,30}; + + + * x=20, il faut retourner [10,10]. + * x=153, il faut retrouner [1,151] + * x=13, il faut retrouner [1,10] + * x=140 il faut retourner [75,75] + * x=170 il faut retourner [18,151] + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '100' + time: '30' + output: '2' +name: 'Mid-Term Quizz: Closest Pair' +network_grading: false +order: 1 +problems: + code1: + header: |- + .. code-block:: java + + public class ClosestPair { + + /** + * + * @param input a non empty array + * @return an array containing two values a,b + in the input array (possibly the same value) + * such that |x-(a+b)| is minimum + * + */ + public static int[] closestPair(int [] input, int x) { + return new int []{input[0],input[0]}; + } + + } + + + Copiez le contenu de la classe ClostestPair ci-dessus et complétez celle-ci + afin que la méthode closestPair s'exécute correctement en maximum O(n.log(n)) + où n est la taille du tableau en entrée. + name: '' + type: code + default: '' + language: java +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-wd4ARf b/lost+found/task.yaml-wd4ARf new file mode 100644 index 00000000..4fc2630f --- /dev/null +++ b/lost+found/task.yaml-wd4ARf @@ -0,0 +1,102 @@ +accessible: 2018-11-12 17:00:00/2019-11-12 17:00:00 +author: '' +context: |- + On s'intéresse à l'algorithme de Rabin-Karp. On voudrait le modifier quelque peu pour déterminer si un mot parmi une liste (tous les mots sont de même longueur) est présent dans le texte. + + Pour cela, vous devez modifier l'algorithme de Rabin-Karp qui se trouve ci-dessous (Page 777 du livre). + + + + + + + + Plus précisément, on vous demande de modifier cette classe de manière à avoir un constructeur de la forme: + + .. code-block:: java + + public RabinKarp(String[] pat) + + + De plus la fonction ``search`` doit retourner l'indice du début du premier mot (parmi le tableau ``pat``) trouvé dans le texte ou la taille du texte si aucun mot n'aparait dans le texte. + + Exemple: + Si txt = “Here find interresting exercise for Rabin Karp” et pat={“have”, “find”, “Karp”} la fonction ``search`` doit renvoyer 5 car le mot "find" présent dans le texte et dans la liste commence à l'indice 5. + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + time: '30' + output: '2' + memory: '100' +name: PART 4 - Rabin Karp of k patterns (implem) +network_grading: false +order: 20 +problems: + RabinKarp: + type: code + language: '' + header: |- + Mettez votre implémentation complète de ``RabinKarp.java`` ci-dessous. + + .. code-block:: java + + public class RabinKarp + { + private String pat; // pattern (only needed for Las Vegas) + private long patHash; // pattern hash value + private int M; // pattern length + private long Q; // a large prime + private int R = 2048; // alphabet size + private long RM; // R^(M-1) % Q + + public RabinKarp(String pat) + { + this.pat = pat; // save pattern (only needed for Las Vegas) + this.M = pat.length(); + Q = 4463; + RM = 1; + for (int i = 1; i <= M-1; i++) // Compute R^(M-1) % Q for use + RM = (R * RM) % Q; // in removing leading digit. + patHash = hash(pat, M); + } + + + public boolean check(int i) // Monte Carlo (See text.) + { return true; } // For Las Vegas, check pat vs txt(i..i-M+1). + + private long hash(String key, int M) + { // Compute hash for key[0..M-1]. + long h = 0; + for (int j = 0; j < M; j++) + h = (R * h + key.charAt(j)) % Q; + return h; + } + + + public int search(String txt) + { // Search for hash match in text. + int N = txt.length(); + long txtHash = hash(txt, M); + if (patHash == txtHash) return 0; // Match at beginning. + for (int i = M; i < N; i++) + { // Remove leading digit, add trailing digit, check for match. + txtHash = (txtHash + Q - RM*txt.charAt(i-M) % Q) % Q; + txtHash = (txtHash*R + txt.charAt(i)) % Q; + if (patHash == txtHash) + if (check(i - M + 1)) return i - M + 1; // match + + } + return N; // no match found + } + } + name: Implémentation de Rabin-Karp pour une liste de mot + default: '' +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-wdOXV2 b/lost+found/task.yaml-wdOXV2 new file mode 100644 index 00000000..b561c194 --- /dev/null +++ b/lost+found/task.yaml-wdOXV2 @@ -0,0 +1,55 @@ +accessible: 2018-10-29 17:00:00/2019-10-29 17:00:00 +author: Simon Teugels +context: | + Il vous est demandé d'écrire des tests unitaire (en utilisant JUnit) afin de vérifier si une implémentation particulière d'un ``Red-Black Tree`` est correcte. + + Voici un modèle simple que vous pouvez utiliser pour écrire vos tests : + + + .. code-block:: java + + import org.junit.Test; + import static org.junit.Assert.assertEquals; + + public class RedBlackTests { + + @Test + public void firstTest() { + // ... TODO ... + } + + @Test + public void secondTest() { + // ... TODO ... + } + + } + + + `Le projet IntelliJ est disponible ici `_. +environment: java8scala +evaluate: best +groups: false +input_random: '0' +limits: + memory: '512' + output: '100' + time: '60' +name: PART 3 - Write Unit tests Red Black Tree +network_grading: false +order: 11 +problems: + RedBlack_tests: + header: |- + Téléchargez votre fichier ici, avec une seule classe nommée *RedBlackTests*. Vous pouvez supposer que la classe représentant le ``Red-Black Tree`` sous test s'appelle *MyRedBlack*. + + **Note:** : Vous ne devriez **pas** mettre votre classe dans un package java. En d'autres termes, vous ne devriez **pas** utiliser le mot-clé ``package``. + allowed_exts: + - .java + name: Tests unitaires pour l'implémentation d'un Red-Black Tree + type: file +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 1.0 diff --git a/lost+found/task.yaml-xzfWID b/lost+found/task.yaml-xzfWID new file mode 100644 index 00000000..420cc01a --- /dev/null +++ b/lost+found/task.yaml-xzfWID @@ -0,0 +1,90 @@ +accessible: false +author: Simon Hardy +context: |- + For this mission, you have to write a spam filter (a class named "SpamFilter") implementing the following interface : + + .. code-block:: java + + import java.util.HashSet; + + /* The constructor takes a String as argument, representing the path to the input file */ + public interface SpamFiltering { + + /* Returns a map (our Map interface, for example your custom type MyMap) containing mappings + * between the Strings appearing in each sms of the input file, + * and objects of type WordInterface (custom type too) containing + * correct informations about them (see below) + * Convention : use the regex "\\W+" to split the content of a message into words, and use toLowerCase() on what you read so that your map doesn't contain any upper case letter. */ + public Map getWordsMap(); + + /* Returns a HashSet (java.util.HashSet) containing the stop words listed below */ + public HashSet getStopWords(); + + /* Computes the probability that 'message' is a spam sms, using the naive Bayes formula (see pdf of the mission) */ + public double naiveBayes(String message); + + /* Returns true if 'message' is classified as a spam sms, false otherwise (a sms is considered as spam if the probability is strictly greater than 50%) */ + public boolean classify(String message); + + } + + To implement this spam filter, you will need to first implement 2 other interfaces : Map (which is the same as for the individual part), and WordInterface detailed below : + + .. code-block:: java + + /* The constructor takes a String as argument, representing the corresponding English word */ + public interface WordInterface { + + /* Returns the English word represented by this object */ + public String getWord(); + + /* Returns the probability that a sms containing only this word once is a spam (see pdf of the mission for the formula) */ + public double getSpamProba(); + + /* Returns the probability that a sms containing only this word once is a ham (not a spam) */ + public double getHamProba(); + + /* Returns the number of occurences of this word in the concatenation of every sms in the input file */ + public int getOccurences(); + + /* Optional */ + public String toString(); + } +environment: java8scala +evaluate: best +groups: true +limits: + memory: '512' + output: '100' + time: '30' +name: '[Old] Mission 4 - Spam filter [group]' +network_grading: false +order: 54 +problems: + classifier: + header: 'Upload your spam filter here. Your class should be named "SpamFilter" + and implement *SpamFiltering*. ' + name: Spam filter + allowed_exts: + - .java + type: file + map: + type: file + name: Map + header: 'Upload your map here. Your class should be named "MyMap" and implement + the interface *Map* given in the other part of the mission (it can be + the same as the map submitted for this other part). ' + allowed_exts: + - .java + word: + type: file + header: 'Upload your class Word here. It should be named "Word" and implement + *WordInterface*. ' + allowed_exts: + - .java + name: Word +stored_submissions: 0 +submission_limit: + amount: -1 + period: -1 +weight: 0.0 diff --git a/lost+found/text.svg-ZbacDR b/lost+found/text.svg-ZbacDR new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/three.txt-WBN883 b/lost+found/three.txt-WBN883 new file mode 100644 index 00000000..08e00ed2 --- /dev/null +++ b/lost+found/three.txt-WBN883 @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \ No newline at end of file diff --git a/lost+found/thymeleaf-2.0.17-SNAPSHOT.jar-86wJ9n b/lost+found/thymeleaf-2.0.17-SNAPSHOT.jar-86wJ9n new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/tmp_obj_02c1E1-UQLOHQ b/lost+found/tmp_obj_02c1E1-UQLOHQ new file mode 100644 index 00000000..dfe8c946 Binary files /dev/null and b/lost+found/tmp_obj_02c1E1-UQLOHQ differ diff --git a/lost+found/tmp_obj_082iQb-AWY82x b/lost+found/tmp_obj_082iQb-AWY82x new file mode 100644 index 00000000..8ea2c259 Binary files /dev/null and b/lost+found/tmp_obj_082iQb-AWY82x differ diff --git a/lost+found/tmp_obj_09mxnk-PZatFC b/lost+found/tmp_obj_09mxnk-PZatFC new file mode 100644 index 00000000..f0234fbf Binary files /dev/null and b/lost+found/tmp_obj_09mxnk-PZatFC differ diff --git a/lost+found/tmp_obj_0Fwdqh-ZbtPsG b/lost+found/tmp_obj_0Fwdqh-ZbtPsG new file mode 100644 index 00000000..aa29f1a3 Binary files /dev/null and b/lost+found/tmp_obj_0Fwdqh-ZbtPsG differ diff --git a/lost+found/tmp_obj_0HqdTO-EREOnH b/lost+found/tmp_obj_0HqdTO-EREOnH new file mode 100644 index 00000000..55ddb658 Binary files /dev/null and b/lost+found/tmp_obj_0HqdTO-EREOnH differ diff --git a/lost+found/tmp_obj_0KQohs-WGYUb6 b/lost+found/tmp_obj_0KQohs-WGYUb6 new file mode 100644 index 00000000..dcbc0091 Binary files /dev/null and b/lost+found/tmp_obj_0KQohs-WGYUb6 differ diff --git a/lost+found/tmp_obj_0LVuye-XLVtf2 b/lost+found/tmp_obj_0LVuye-XLVtf2 new file mode 100644 index 00000000..41195c52 Binary files /dev/null and b/lost+found/tmp_obj_0LVuye-XLVtf2 differ diff --git a/lost+found/tmp_obj_0LvKS3-0scC1r b/lost+found/tmp_obj_0LvKS3-0scC1r new file mode 100644 index 00000000..f382982e Binary files /dev/null and b/lost+found/tmp_obj_0LvKS3-0scC1r differ diff --git a/lost+found/tmp_obj_0NKMJR-VCO3gY b/lost+found/tmp_obj_0NKMJR-VCO3gY new file mode 100644 index 00000000..f6370564 --- /dev/null +++ b/lost+found/tmp_obj_0NKMJR-VCO3gY @@ -0,0 +1,5 @@ +xmMN0Ƨ]T BDbUBBN2L'5GԻ\#c,o<* +]E[m Eikb`guGGl.r1?AZLj)=:7SlKS8>,W@r3 |-[@Ȫ`xRl_C +E=>;%'y8CkE0Ç[iP̼XO9+2-gM+@#|&'O +}`ApSPKbE`?! +_P?}'s2_J \ No newline at end of file diff --git a/lost+found/tmp_obj_0RU30M-tIZvYv b/lost+found/tmp_obj_0RU30M-tIZvYv new file mode 100644 index 00000000..7ff2b99a Binary files /dev/null and b/lost+found/tmp_obj_0RU30M-tIZvYv differ diff --git a/lost+found/tmp_obj_0XMhHY-4XLvoC b/lost+found/tmp_obj_0XMhHY-4XLvoC new file mode 100644 index 00000000..fd21b4e5 Binary files /dev/null and b/lost+found/tmp_obj_0XMhHY-4XLvoC differ diff --git a/lost+found/tmp_obj_0b0qXL-BsUKZA b/lost+found/tmp_obj_0b0qXL-BsUKZA new file mode 100644 index 00000000..0becd03f Binary files /dev/null and b/lost+found/tmp_obj_0b0qXL-BsUKZA differ diff --git a/lost+found/tmp_obj_0d0DwQ-iZStUv b/lost+found/tmp_obj_0d0DwQ-iZStUv new file mode 100644 index 00000000..f8177f62 Binary files /dev/null and b/lost+found/tmp_obj_0d0DwQ-iZStUv differ diff --git a/lost+found/tmp_obj_0knW8I-ms6zUY b/lost+found/tmp_obj_0knW8I-ms6zUY new file mode 100644 index 00000000..6315c6bb Binary files /dev/null and b/lost+found/tmp_obj_0knW8I-ms6zUY differ diff --git a/lost+found/tmp_obj_0l8Vib-65bVRs b/lost+found/tmp_obj_0l8Vib-65bVRs new file mode 100644 index 00000000..6f233072 Binary files /dev/null and b/lost+found/tmp_obj_0l8Vib-65bVRs differ diff --git a/lost+found/tmp_obj_0nLCWU-fAv2MT b/lost+found/tmp_obj_0nLCWU-fAv2MT new file mode 100644 index 00000000..44a309ed Binary files /dev/null and b/lost+found/tmp_obj_0nLCWU-fAv2MT differ diff --git a/lost+found/tmp_obj_0xTNNe-DOUVHS b/lost+found/tmp_obj_0xTNNe-DOUVHS new file mode 100644 index 00000000..29b8680d Binary files /dev/null and b/lost+found/tmp_obj_0xTNNe-DOUVHS differ diff --git a/lost+found/tmp_obj_11aekX-vNc56U b/lost+found/tmp_obj_11aekX-vNc56U new file mode 100644 index 00000000..c1fa78e3 Binary files /dev/null and b/lost+found/tmp_obj_11aekX-vNc56U differ diff --git a/lost+found/tmp_obj_14TGEZ-02t8qy b/lost+found/tmp_obj_14TGEZ-02t8qy new file mode 100644 index 00000000..cd41900e Binary files /dev/null and b/lost+found/tmp_obj_14TGEZ-02t8qy differ diff --git a/lost+found/tmp_obj_17NtUb-jy05SH b/lost+found/tmp_obj_17NtUb-jy05SH new file mode 100644 index 00000000..3409e5f7 Binary files /dev/null and b/lost+found/tmp_obj_17NtUb-jy05SH differ diff --git a/lost+found/tmp_obj_19f80c-WKijZo b/lost+found/tmp_obj_19f80c-WKijZo new file mode 100644 index 00000000..e4b17f82 Binary files /dev/null and b/lost+found/tmp_obj_19f80c-WKijZo differ diff --git a/lost+found/tmp_obj_1DlkFj-3UGwHZ b/lost+found/tmp_obj_1DlkFj-3UGwHZ new file mode 100644 index 00000000..122bc6e0 Binary files /dev/null and b/lost+found/tmp_obj_1DlkFj-3UGwHZ differ diff --git a/lost+found/tmp_obj_1FqxPD-Uc5XRq b/lost+found/tmp_obj_1FqxPD-Uc5XRq new file mode 100644 index 00000000..3477d458 Binary files /dev/null and b/lost+found/tmp_obj_1FqxPD-Uc5XRq differ diff --git a/lost+found/tmp_obj_1L1GbO-YBNHKD b/lost+found/tmp_obj_1L1GbO-YBNHKD new file mode 100644 index 00000000..cfd2da9a Binary files /dev/null and b/lost+found/tmp_obj_1L1GbO-YBNHKD differ diff --git a/lost+found/tmp_obj_1NcTn2-n2AWqk b/lost+found/tmp_obj_1NcTn2-n2AWqk new file mode 100644 index 00000000..16eee72c Binary files /dev/null and b/lost+found/tmp_obj_1NcTn2-n2AWqk differ diff --git a/lost+found/tmp_obj_1PDlWl-d7oCTN b/lost+found/tmp_obj_1PDlWl-d7oCTN new file mode 100644 index 00000000..3e0186a3 Binary files /dev/null and b/lost+found/tmp_obj_1PDlWl-d7oCTN differ diff --git a/lost+found/tmp_obj_1PZbfb-uS7k4Z b/lost+found/tmp_obj_1PZbfb-uS7k4Z new file mode 100644 index 00000000..e4ca21a6 Binary files /dev/null and b/lost+found/tmp_obj_1PZbfb-uS7k4Z differ diff --git a/lost+found/tmp_obj_1TTTfS-t6S8Nf b/lost+found/tmp_obj_1TTTfS-t6S8Nf new file mode 100644 index 00000000..c3434871 Binary files /dev/null and b/lost+found/tmp_obj_1TTTfS-t6S8Nf differ diff --git a/lost+found/tmp_obj_1Uxs9v-LjOzNA b/lost+found/tmp_obj_1Uxs9v-LjOzNA new file mode 100644 index 00000000..cb41ca85 Binary files /dev/null and b/lost+found/tmp_obj_1Uxs9v-LjOzNA differ diff --git a/lost+found/tmp_obj_1dkwyq-esvWFU b/lost+found/tmp_obj_1dkwyq-esvWFU new file mode 100644 index 00000000..6449bd60 Binary files /dev/null and b/lost+found/tmp_obj_1dkwyq-esvWFU differ diff --git a/lost+found/tmp_obj_1gyROh-1mqEov b/lost+found/tmp_obj_1gyROh-1mqEov new file mode 100644 index 00000000..72e25e00 Binary files /dev/null and b/lost+found/tmp_obj_1gyROh-1mqEov differ diff --git a/lost+found/tmp_obj_1jfPNs-CC2uyj b/lost+found/tmp_obj_1jfPNs-CC2uyj new file mode 100644 index 00000000..448464e6 Binary files /dev/null and b/lost+found/tmp_obj_1jfPNs-CC2uyj differ diff --git a/lost+found/tmp_obj_1nou2f-fxMymz b/lost+found/tmp_obj_1nou2f-fxMymz new file mode 100644 index 00000000..1979f645 Binary files /dev/null and b/lost+found/tmp_obj_1nou2f-fxMymz differ diff --git a/lost+found/tmp_obj_1qctDg-J4ySzT b/lost+found/tmp_obj_1qctDg-J4ySzT new file mode 100644 index 00000000..5095e777 Binary files /dev/null and b/lost+found/tmp_obj_1qctDg-J4ySzT differ diff --git a/lost+found/tmp_obj_1yBSj3-n4Ax9t b/lost+found/tmp_obj_1yBSj3-n4Ax9t new file mode 100644 index 00000000..b6bb7843 Binary files /dev/null and b/lost+found/tmp_obj_1yBSj3-n4Ax9t differ diff --git a/lost+found/tmp_obj_24O0pu-pgPSgP b/lost+found/tmp_obj_24O0pu-pgPSgP new file mode 100644 index 00000000..2979c89f Binary files /dev/null and b/lost+found/tmp_obj_24O0pu-pgPSgP differ diff --git a/lost+found/tmp_obj_29WbRS-TwOe6T b/lost+found/tmp_obj_29WbRS-TwOe6T new file mode 100644 index 00000000..b3e093ae Binary files /dev/null and b/lost+found/tmp_obj_29WbRS-TwOe6T differ diff --git a/lost+found/tmp_obj_29a0DE-ozYszl b/lost+found/tmp_obj_29a0DE-ozYszl new file mode 100644 index 00000000..77667ac1 Binary files /dev/null and b/lost+found/tmp_obj_29a0DE-ozYszl differ diff --git a/lost+found/tmp_obj_29g7Vb-WaOoB3 b/lost+found/tmp_obj_29g7Vb-WaOoB3 new file mode 100644 index 00000000..b7915e4d Binary files /dev/null and b/lost+found/tmp_obj_29g7Vb-WaOoB3 differ diff --git a/lost+found/tmp_obj_2BAeOd-IjaFyT b/lost+found/tmp_obj_2BAeOd-IjaFyT new file mode 100644 index 00000000..f769f7bc Binary files /dev/null and b/lost+found/tmp_obj_2BAeOd-IjaFyT differ diff --git a/lost+found/tmp_obj_2Gv2Cr-NPsfXT b/lost+found/tmp_obj_2Gv2Cr-NPsfXT new file mode 100644 index 00000000..0ebab7e0 Binary files /dev/null and b/lost+found/tmp_obj_2Gv2Cr-NPsfXT differ diff --git a/lost+found/tmp_obj_2IqtFG-HyUFvS b/lost+found/tmp_obj_2IqtFG-HyUFvS new file mode 100644 index 00000000..f000d337 Binary files /dev/null and b/lost+found/tmp_obj_2IqtFG-HyUFvS differ diff --git a/lost+found/tmp_obj_2KUL3n-X8UOgx b/lost+found/tmp_obj_2KUL3n-X8UOgx new file mode 100644 index 00000000..ed9bc023 Binary files /dev/null and b/lost+found/tmp_obj_2KUL3n-X8UOgx differ diff --git a/lost+found/tmp_obj_2PClaF-gcZV4P b/lost+found/tmp_obj_2PClaF-gcZV4P new file mode 100644 index 00000000..9faa4f85 Binary files /dev/null and b/lost+found/tmp_obj_2PClaF-gcZV4P differ diff --git a/lost+found/tmp_obj_2RSbUQ-PwnYmN b/lost+found/tmp_obj_2RSbUQ-PwnYmN new file mode 100644 index 00000000..cde8bc36 Binary files /dev/null and b/lost+found/tmp_obj_2RSbUQ-PwnYmN differ diff --git a/lost+found/tmp_obj_2UPOCd-og3gyb b/lost+found/tmp_obj_2UPOCd-og3gyb new file mode 100644 index 00000000..c7dc5023 Binary files /dev/null and b/lost+found/tmp_obj_2UPOCd-og3gyb differ diff --git a/lost+found/tmp_obj_2UnBQS-KkUYdp b/lost+found/tmp_obj_2UnBQS-KkUYdp new file mode 100644 index 00000000..b034fd13 Binary files /dev/null and b/lost+found/tmp_obj_2UnBQS-KkUYdp differ diff --git a/lost+found/tmp_obj_2bqmzx-Hjhjq1 b/lost+found/tmp_obj_2bqmzx-Hjhjq1 new file mode 100644 index 00000000..a0524e0d Binary files /dev/null and b/lost+found/tmp_obj_2bqmzx-Hjhjq1 differ diff --git a/lost+found/tmp_obj_2gspvv-CeAfBg b/lost+found/tmp_obj_2gspvv-CeAfBg new file mode 100644 index 00000000..ec46b10a Binary files /dev/null and b/lost+found/tmp_obj_2gspvv-CeAfBg differ diff --git a/lost+found/tmp_obj_2h7gHE-YljHot b/lost+found/tmp_obj_2h7gHE-YljHot new file mode 100644 index 00000000..e1ab919b Binary files /dev/null and b/lost+found/tmp_obj_2h7gHE-YljHot differ diff --git a/lost+found/tmp_obj_2heerE-16YrmJ b/lost+found/tmp_obj_2heerE-16YrmJ new file mode 100644 index 00000000..8054beb8 Binary files /dev/null and b/lost+found/tmp_obj_2heerE-16YrmJ differ diff --git a/lost+found/tmp_obj_2qPWQS-umEE8z b/lost+found/tmp_obj_2qPWQS-umEE8z new file mode 100644 index 00000000..d231f73b Binary files /dev/null and b/lost+found/tmp_obj_2qPWQS-umEE8z differ diff --git a/lost+found/tmp_obj_2quQ0k-lL1kPq b/lost+found/tmp_obj_2quQ0k-lL1kPq new file mode 100644 index 00000000..f348d879 Binary files /dev/null and b/lost+found/tmp_obj_2quQ0k-lL1kPq differ diff --git a/lost+found/tmp_obj_2rb97j-fbPPYA b/lost+found/tmp_obj_2rb97j-fbPPYA new file mode 100644 index 00000000..c1532d89 Binary files /dev/null and b/lost+found/tmp_obj_2rb97j-fbPPYA differ diff --git a/lost+found/tmp_obj_2tZj4o-ush1fN b/lost+found/tmp_obj_2tZj4o-ush1fN new file mode 100644 index 00000000..4dcc4a1b Binary files /dev/null and b/lost+found/tmp_obj_2tZj4o-ush1fN differ diff --git a/lost+found/tmp_obj_2ySUvh-cxbZR7 b/lost+found/tmp_obj_2ySUvh-cxbZR7 new file mode 100644 index 00000000..63be7f2a Binary files /dev/null and b/lost+found/tmp_obj_2ySUvh-cxbZR7 differ diff --git a/lost+found/tmp_obj_2zHrjo-MGf6Rc b/lost+found/tmp_obj_2zHrjo-MGf6Rc new file mode 100644 index 00000000..ed4f5654 Binary files /dev/null and b/lost+found/tmp_obj_2zHrjo-MGf6Rc differ diff --git a/lost+found/tmp_obj_34gPl5-1R8iJ4 b/lost+found/tmp_obj_34gPl5-1R8iJ4 new file mode 100644 index 00000000..b4dfd86a Binary files /dev/null and b/lost+found/tmp_obj_34gPl5-1R8iJ4 differ diff --git a/lost+found/tmp_obj_37c8vL-saah6F b/lost+found/tmp_obj_37c8vL-saah6F new file mode 100644 index 00000000..69fa523b Binary files /dev/null and b/lost+found/tmp_obj_37c8vL-saah6F differ diff --git a/lost+found/tmp_obj_3EjyJc-LitMcD b/lost+found/tmp_obj_3EjyJc-LitMcD new file mode 100644 index 00000000..80306403 --- /dev/null +++ b/lost+found/tmp_obj_3EjyJc-LitMcD @@ -0,0 +1,3 @@ +xVr63bK%JT[Ofitb7}t$\I @9v${L[&w{={ya0W0fOȎ! Hv/dʸ1+mJQvo7NIIۛ_DK1G"M}ǯ獰 M!G(Z,BH h Myax b-j Q0*҉&:h2ӽ >oc87@QvӁ,Ua̵ϧpڨ2T@}ןug΢]-JF:D(5S1s}H Ը%)B-A7Ḯ-qWs_S 4ЦgѓEL?Q-Wa7N \ No newline at end of file diff --git a/lost+found/tmp_obj_3I6UfN-hLWBaG b/lost+found/tmp_obj_3I6UfN-hLWBaG new file mode 100644 index 00000000..63baa399 Binary files /dev/null and b/lost+found/tmp_obj_3I6UfN-hLWBaG differ diff --git a/lost+found/tmp_obj_3PS3Ef-tmFc1h b/lost+found/tmp_obj_3PS3Ef-tmFc1h new file mode 100644 index 00000000..d962b774 Binary files /dev/null and b/lost+found/tmp_obj_3PS3Ef-tmFc1h differ diff --git a/lost+found/tmp_obj_3SSvZP-wpnAj0 b/lost+found/tmp_obj_3SSvZP-wpnAj0 new file mode 100644 index 00000000..9047577c Binary files /dev/null and b/lost+found/tmp_obj_3SSvZP-wpnAj0 differ diff --git a/lost+found/tmp_obj_3U8882-IMqwBV b/lost+found/tmp_obj_3U8882-IMqwBV new file mode 100644 index 00000000..620443b8 Binary files /dev/null and b/lost+found/tmp_obj_3U8882-IMqwBV differ diff --git a/lost+found/tmp_obj_3sRkRA-vXzNCe b/lost+found/tmp_obj_3sRkRA-vXzNCe new file mode 100644 index 00000000..8146a878 Binary files /dev/null and b/lost+found/tmp_obj_3sRkRA-vXzNCe differ diff --git a/lost+found/tmp_obj_3vp6jd-Ga40py b/lost+found/tmp_obj_3vp6jd-Ga40py new file mode 100644 index 00000000..a2b24fe3 Binary files /dev/null and b/lost+found/tmp_obj_3vp6jd-Ga40py differ diff --git a/lost+found/tmp_obj_3xzdML-6uCorm b/lost+found/tmp_obj_3xzdML-6uCorm new file mode 100644 index 00000000..ddcc7f69 --- /dev/null +++ b/lost+found/tmp_obj_3xzdML-6uCorm @@ -0,0 +1,5 @@ +xT[O0s~'27e"`b M4#M;NB%wss2<9}XH6@R]\YdQpWL/_L}į?;i${aaϵqJ nܿX^ +F~Y*8K]\SQj\"tAZaDgmrt'8ܼ@\:kLJ%<QDTF0K܁F^)03beBasd50>?dڑ{ۦ qs KLO$j( +4&)0A) r =Y}©mW'mڞ7]Lq! Ah e n?58LKm6u6Ȩ +V`M5ÿf0hkƶ2T\AhGY0.Zz} +אm'2ڧʑWVeU.|n{;֌Jnl8r_K d8F?ZAntI8*H_:c|Lp0-*z?͛E O& U(!֭b<(~ΨMM~ \ No newline at end of file diff --git a/lost+found/tmp_obj_43a55A-5jlJXy b/lost+found/tmp_obj_43a55A-5jlJXy new file mode 100644 index 00000000..c5fe57bf Binary files /dev/null and b/lost+found/tmp_obj_43a55A-5jlJXy differ diff --git a/lost+found/tmp_obj_49XOCH-ZAwY7i b/lost+found/tmp_obj_49XOCH-ZAwY7i new file mode 100644 index 00000000..f664d89a Binary files /dev/null and b/lost+found/tmp_obj_49XOCH-ZAwY7i differ diff --git a/lost+found/tmp_obj_4DZUEJ-TY2cyZ b/lost+found/tmp_obj_4DZUEJ-TY2cyZ new file mode 100644 index 00000000..58a629c1 Binary files /dev/null and b/lost+found/tmp_obj_4DZUEJ-TY2cyZ differ diff --git a/lost+found/tmp_obj_4M3x8d-R7tsjs b/lost+found/tmp_obj_4M3x8d-R7tsjs new file mode 100644 index 00000000..0f201a42 Binary files /dev/null and b/lost+found/tmp_obj_4M3x8d-R7tsjs differ diff --git a/lost+found/tmp_obj_4Tc5PS-q43vLY b/lost+found/tmp_obj_4Tc5PS-q43vLY new file mode 100644 index 00000000..dada47ff Binary files /dev/null and b/lost+found/tmp_obj_4Tc5PS-q43vLY differ diff --git a/lost+found/tmp_obj_4TyiDQ-kmc7v8 b/lost+found/tmp_obj_4TyiDQ-kmc7v8 new file mode 100644 index 00000000..2cae598d Binary files /dev/null and b/lost+found/tmp_obj_4TyiDQ-kmc7v8 differ diff --git a/lost+found/tmp_obj_4cp85g-ZMLhcV b/lost+found/tmp_obj_4cp85g-ZMLhcV new file mode 100644 index 00000000..268ade83 Binary files /dev/null and b/lost+found/tmp_obj_4cp85g-ZMLhcV differ diff --git a/lost+found/tmp_obj_4hT3Q9-CM1IeT b/lost+found/tmp_obj_4hT3Q9-CM1IeT new file mode 100644 index 00000000..a903f552 Binary files /dev/null and b/lost+found/tmp_obj_4hT3Q9-CM1IeT differ diff --git a/lost+found/tmp_obj_4hj1Hh-Qi7uBJ b/lost+found/tmp_obj_4hj1Hh-Qi7uBJ new file mode 100644 index 00000000..b10f5b7a Binary files /dev/null and b/lost+found/tmp_obj_4hj1Hh-Qi7uBJ differ diff --git a/lost+found/tmp_obj_4oH4cu-uNxJC7 b/lost+found/tmp_obj_4oH4cu-uNxJC7 new file mode 100644 index 00000000..3de28344 Binary files /dev/null and b/lost+found/tmp_obj_4oH4cu-uNxJC7 differ diff --git a/lost+found/tmp_obj_4rEsL6-d9Prya b/lost+found/tmp_obj_4rEsL6-d9Prya new file mode 100644 index 00000000..728ac45a Binary files /dev/null and b/lost+found/tmp_obj_4rEsL6-d9Prya differ diff --git a/lost+found/tmp_obj_4zS2oh-s7UQNj b/lost+found/tmp_obj_4zS2oh-s7UQNj new file mode 100644 index 00000000..59c7c68d Binary files /dev/null and b/lost+found/tmp_obj_4zS2oh-s7UQNj differ diff --git a/lost+found/tmp_obj_512MLE-MDy7Ge b/lost+found/tmp_obj_512MLE-MDy7Ge new file mode 100644 index 00000000..c8b5c532 Binary files /dev/null and b/lost+found/tmp_obj_512MLE-MDy7Ge differ diff --git a/lost+found/tmp_obj_53BwzW-itlGVQ b/lost+found/tmp_obj_53BwzW-itlGVQ new file mode 100644 index 00000000..b209a4eb Binary files /dev/null and b/lost+found/tmp_obj_53BwzW-itlGVQ differ diff --git a/lost+found/tmp_obj_53Yc30-jrdmlR b/lost+found/tmp_obj_53Yc30-jrdmlR new file mode 100644 index 00000000..50f9b294 Binary files /dev/null and b/lost+found/tmp_obj_53Yc30-jrdmlR differ diff --git a/lost+found/tmp_obj_54pJlJ-O3Rvaw b/lost+found/tmp_obj_54pJlJ-O3Rvaw new file mode 100644 index 00000000..c7578215 Binary files /dev/null and b/lost+found/tmp_obj_54pJlJ-O3Rvaw differ diff --git a/lost+found/tmp_obj_57u2uO-SS1O5f b/lost+found/tmp_obj_57u2uO-SS1O5f new file mode 100644 index 00000000..419530b0 Binary files /dev/null and b/lost+found/tmp_obj_57u2uO-SS1O5f differ diff --git a/lost+found/tmp_obj_57yUP1-rcy5GF b/lost+found/tmp_obj_57yUP1-rcy5GF new file mode 100644 index 00000000..83d75941 Binary files /dev/null and b/lost+found/tmp_obj_57yUP1-rcy5GF differ diff --git a/lost+found/tmp_obj_5BjNkA-y3SaYO b/lost+found/tmp_obj_5BjNkA-y3SaYO new file mode 100644 index 00000000..0c45fd73 Binary files /dev/null and b/lost+found/tmp_obj_5BjNkA-y3SaYO differ diff --git a/lost+found/tmp_obj_5IgT1f-D8qwe5 b/lost+found/tmp_obj_5IgT1f-D8qwe5 new file mode 100644 index 00000000..21101dbf Binary files /dev/null and b/lost+found/tmp_obj_5IgT1f-D8qwe5 differ diff --git a/lost+found/tmp_obj_5UsKTc-TCxJEm b/lost+found/tmp_obj_5UsKTc-TCxJEm new file mode 100644 index 00000000..9f8d8e4a Binary files /dev/null and b/lost+found/tmp_obj_5UsKTc-TCxJEm differ diff --git a/lost+found/tmp_obj_5iPuvB-hsNYRv b/lost+found/tmp_obj_5iPuvB-hsNYRv new file mode 100644 index 00000000..ee8ac47a Binary files /dev/null and b/lost+found/tmp_obj_5iPuvB-hsNYRv differ diff --git a/lost+found/tmp_obj_5jnx3Y-xyjs13 b/lost+found/tmp_obj_5jnx3Y-xyjs13 new file mode 100644 index 00000000..4f6e7ba4 Binary files /dev/null and b/lost+found/tmp_obj_5jnx3Y-xyjs13 differ diff --git a/lost+found/tmp_obj_5k6fHA-vekLNO b/lost+found/tmp_obj_5k6fHA-vekLNO new file mode 100644 index 00000000..2e949806 Binary files /dev/null and b/lost+found/tmp_obj_5k6fHA-vekLNO differ diff --git a/lost+found/tmp_obj_5swsmj-nKVEZp b/lost+found/tmp_obj_5swsmj-nKVEZp new file mode 100644 index 00000000..b560c118 Binary files /dev/null and b/lost+found/tmp_obj_5swsmj-nKVEZp differ diff --git a/lost+found/tmp_obj_5y8O9t-5D5gj9 b/lost+found/tmp_obj_5y8O9t-5D5gj9 new file mode 100644 index 00000000..1827a96b Binary files /dev/null and b/lost+found/tmp_obj_5y8O9t-5D5gj9 differ diff --git a/lost+found/tmp_obj_66aloG-b5Q09G b/lost+found/tmp_obj_66aloG-b5Q09G new file mode 100644 index 00000000..d498c545 Binary files /dev/null and b/lost+found/tmp_obj_66aloG-b5Q09G differ diff --git a/lost+found/tmp_obj_6AdqPt-G23c1c b/lost+found/tmp_obj_6AdqPt-G23c1c new file mode 100644 index 00000000..b2a0a5ee Binary files /dev/null and b/lost+found/tmp_obj_6AdqPt-G23c1c differ diff --git a/lost+found/tmp_obj_6KNgxp-4NEW6H b/lost+found/tmp_obj_6KNgxp-4NEW6H new file mode 100644 index 00000000..0216b049 Binary files /dev/null and b/lost+found/tmp_obj_6KNgxp-4NEW6H differ diff --git a/lost+found/tmp_obj_6Ra3Tm-Kxb91w b/lost+found/tmp_obj_6Ra3Tm-Kxb91w new file mode 100644 index 00000000..7c64f269 Binary files /dev/null and b/lost+found/tmp_obj_6Ra3Tm-Kxb91w differ diff --git a/lost+found/tmp_obj_6ThvGQ-H4CX7M b/lost+found/tmp_obj_6ThvGQ-H4CX7M new file mode 100644 index 00000000..1c0c8f55 Binary files /dev/null and b/lost+found/tmp_obj_6ThvGQ-H4CX7M differ diff --git a/lost+found/tmp_obj_6Tr3u8-iaE1gq b/lost+found/tmp_obj_6Tr3u8-iaE1gq new file mode 100644 index 00000000..d538d3d3 Binary files /dev/null and b/lost+found/tmp_obj_6Tr3u8-iaE1gq differ diff --git a/lost+found/tmp_obj_6kQrdf-z7uqS1 b/lost+found/tmp_obj_6kQrdf-z7uqS1 new file mode 100644 index 00000000..6bb34eb7 Binary files /dev/null and b/lost+found/tmp_obj_6kQrdf-z7uqS1 differ diff --git a/lost+found/tmp_obj_6l0IgU-SZ3SE8 b/lost+found/tmp_obj_6l0IgU-SZ3SE8 new file mode 100644 index 00000000..7daedf79 Binary files /dev/null and b/lost+found/tmp_obj_6l0IgU-SZ3SE8 differ diff --git a/lost+found/tmp_obj_6mLw1d-1l83ZX b/lost+found/tmp_obj_6mLw1d-1l83ZX new file mode 100644 index 00000000..76c425d0 Binary files /dev/null and b/lost+found/tmp_obj_6mLw1d-1l83ZX differ diff --git a/lost+found/tmp_obj_6p8nxT-c6iIbF b/lost+found/tmp_obj_6p8nxT-c6iIbF new file mode 100644 index 00000000..ab5c5daa Binary files /dev/null and b/lost+found/tmp_obj_6p8nxT-c6iIbF differ diff --git a/lost+found/tmp_obj_6rKfOA-0jCU1n b/lost+found/tmp_obj_6rKfOA-0jCU1n new file mode 100644 index 00000000..e13c0e0b Binary files /dev/null and b/lost+found/tmp_obj_6rKfOA-0jCU1n differ diff --git a/lost+found/tmp_obj_75xJX5-LFv20q b/lost+found/tmp_obj_75xJX5-LFv20q new file mode 100644 index 00000000..a47ad382 Binary files /dev/null and b/lost+found/tmp_obj_75xJX5-LFv20q differ diff --git a/lost+found/tmp_obj_787Ygm-4HSuo7 b/lost+found/tmp_obj_787Ygm-4HSuo7 new file mode 100644 index 00000000..432226a4 Binary files /dev/null and b/lost+found/tmp_obj_787Ygm-4HSuo7 differ diff --git a/lost+found/tmp_obj_78Le61-s9aw3M b/lost+found/tmp_obj_78Le61-s9aw3M new file mode 100644 index 00000000..172a017f Binary files /dev/null and b/lost+found/tmp_obj_78Le61-s9aw3M differ diff --git a/lost+found/tmp_obj_79WcOP-X8ouAx b/lost+found/tmp_obj_79WcOP-X8ouAx new file mode 100644 index 00000000..b1e75da1 Binary files /dev/null and b/lost+found/tmp_obj_79WcOP-X8ouAx differ diff --git a/lost+found/tmp_obj_7CMMyf-DhvoYp b/lost+found/tmp_obj_7CMMyf-DhvoYp new file mode 100644 index 00000000..a4f5eede Binary files /dev/null and b/lost+found/tmp_obj_7CMMyf-DhvoYp differ diff --git a/lost+found/tmp_obj_7GLpFX-90EQrV b/lost+found/tmp_obj_7GLpFX-90EQrV new file mode 100644 index 00000000..0c249048 Binary files /dev/null and b/lost+found/tmp_obj_7GLpFX-90EQrV differ diff --git a/lost+found/tmp_obj_7GaCLY-UyovvE b/lost+found/tmp_obj_7GaCLY-UyovvE new file mode 100644 index 00000000..7f198dcb Binary files /dev/null and b/lost+found/tmp_obj_7GaCLY-UyovvE differ diff --git a/lost+found/tmp_obj_7JDre8-axiAu5 b/lost+found/tmp_obj_7JDre8-axiAu5 new file mode 100644 index 00000000..cc64e35f Binary files /dev/null and b/lost+found/tmp_obj_7JDre8-axiAu5 differ diff --git a/lost+found/tmp_obj_7KXrR2-BhhlAE b/lost+found/tmp_obj_7KXrR2-BhhlAE new file mode 100644 index 00000000..ee40cba1 Binary files /dev/null and b/lost+found/tmp_obj_7KXrR2-BhhlAE differ diff --git a/lost+found/tmp_obj_7PFOVW-TiFIGQ b/lost+found/tmp_obj_7PFOVW-TiFIGQ new file mode 100644 index 00000000..7a538613 Binary files /dev/null and b/lost+found/tmp_obj_7PFOVW-TiFIGQ differ diff --git a/lost+found/tmp_obj_7V5MG6-qw1wi7 b/lost+found/tmp_obj_7V5MG6-qw1wi7 new file mode 100644 index 00000000..10a8ef4a Binary files /dev/null and b/lost+found/tmp_obj_7V5MG6-qw1wi7 differ diff --git a/lost+found/tmp_obj_7Wk0G4-UDHb0n b/lost+found/tmp_obj_7Wk0G4-UDHb0n new file mode 100644 index 00000000..f1599baa Binary files /dev/null and b/lost+found/tmp_obj_7Wk0G4-UDHb0n differ diff --git a/lost+found/tmp_obj_7c7WYi-3kgney b/lost+found/tmp_obj_7c7WYi-3kgney new file mode 100644 index 00000000..740af0e1 Binary files /dev/null and b/lost+found/tmp_obj_7c7WYi-3kgney differ diff --git a/lost+found/tmp_obj_7g3U1J-OXd1mD b/lost+found/tmp_obj_7g3U1J-OXd1mD new file mode 100644 index 00000000..aee5052f Binary files /dev/null and b/lost+found/tmp_obj_7g3U1J-OXd1mD differ diff --git a/lost+found/tmp_obj_7rDTJE-K5tbHe b/lost+found/tmp_obj_7rDTJE-K5tbHe new file mode 100644 index 00000000..2dbb9909 Binary files /dev/null and b/lost+found/tmp_obj_7rDTJE-K5tbHe differ diff --git a/lost+found/tmp_obj_7uzIxC-ouo36p b/lost+found/tmp_obj_7uzIxC-ouo36p new file mode 100644 index 00000000..ca9fece9 Binary files /dev/null and b/lost+found/tmp_obj_7uzIxC-ouo36p differ diff --git a/lost+found/tmp_obj_7zTAbF-SBV7bC b/lost+found/tmp_obj_7zTAbF-SBV7bC new file mode 100644 index 00000000..e95217c6 Binary files /dev/null and b/lost+found/tmp_obj_7zTAbF-SBV7bC differ diff --git a/lost+found/tmp_obj_8215ob-Z6AEuz b/lost+found/tmp_obj_8215ob-Z6AEuz new file mode 100644 index 00000000..2631b49a Binary files /dev/null and b/lost+found/tmp_obj_8215ob-Z6AEuz differ diff --git a/lost+found/tmp_obj_8DILqn-ZO4Rld b/lost+found/tmp_obj_8DILqn-ZO4Rld new file mode 100644 index 00000000..4c2ce060 Binary files /dev/null and b/lost+found/tmp_obj_8DILqn-ZO4Rld differ diff --git a/lost+found/tmp_obj_8Gv8Hc-btKZKE b/lost+found/tmp_obj_8Gv8Hc-btKZKE new file mode 100644 index 00000000..1be1cd95 Binary files /dev/null and b/lost+found/tmp_obj_8Gv8Hc-btKZKE differ diff --git a/lost+found/tmp_obj_8HbKMQ-K5hC3m b/lost+found/tmp_obj_8HbKMQ-K5hC3m new file mode 100644 index 00000000..d99d95e2 Binary files /dev/null and b/lost+found/tmp_obj_8HbKMQ-K5hC3m differ diff --git a/lost+found/tmp_obj_8Tni3s-4H25zy b/lost+found/tmp_obj_8Tni3s-4H25zy new file mode 100644 index 00000000..5e4bef50 Binary files /dev/null and b/lost+found/tmp_obj_8Tni3s-4H25zy differ diff --git a/lost+found/tmp_obj_8Zoo9J-rTWmH8 b/lost+found/tmp_obj_8Zoo9J-rTWmH8 new file mode 100644 index 00000000..fec9bc13 Binary files /dev/null and b/lost+found/tmp_obj_8Zoo9J-rTWmH8 differ diff --git a/lost+found/tmp_obj_8hayds-EqBwza b/lost+found/tmp_obj_8hayds-EqBwza new file mode 100644 index 00000000..78c08ccc Binary files /dev/null and b/lost+found/tmp_obj_8hayds-EqBwza differ diff --git a/lost+found/tmp_obj_8kmesf-P2jeV4 b/lost+found/tmp_obj_8kmesf-P2jeV4 new file mode 100644 index 00000000..36258c9c Binary files /dev/null and b/lost+found/tmp_obj_8kmesf-P2jeV4 differ diff --git a/lost+found/tmp_obj_8nDZ6w-EifCWV b/lost+found/tmp_obj_8nDZ6w-EifCWV new file mode 100644 index 00000000..71f46d12 Binary files /dev/null and b/lost+found/tmp_obj_8nDZ6w-EifCWV differ diff --git a/lost+found/tmp_obj_8nqDDb-Big8XZ b/lost+found/tmp_obj_8nqDDb-Big8XZ new file mode 100644 index 00000000..da11ca4e Binary files /dev/null and b/lost+found/tmp_obj_8nqDDb-Big8XZ differ diff --git a/lost+found/tmp_obj_8pSO1C-Vh1XBU b/lost+found/tmp_obj_8pSO1C-Vh1XBU new file mode 100644 index 00000000..c662f43e Binary files /dev/null and b/lost+found/tmp_obj_8pSO1C-Vh1XBU differ diff --git a/lost+found/tmp_obj_8rz5uz-eUtFKK b/lost+found/tmp_obj_8rz5uz-eUtFKK new file mode 100644 index 00000000..5e7d5595 Binary files /dev/null and b/lost+found/tmp_obj_8rz5uz-eUtFKK differ diff --git a/lost+found/tmp_obj_8s2C8z-wPa1yo b/lost+found/tmp_obj_8s2C8z-wPa1yo new file mode 100644 index 00000000..ba38c089 Binary files /dev/null and b/lost+found/tmp_obj_8s2C8z-wPa1yo differ diff --git a/lost+found/tmp_obj_8wQaYC-jOgbb4 b/lost+found/tmp_obj_8wQaYC-jOgbb4 new file mode 100644 index 00000000..bcfeb757 Binary files /dev/null and b/lost+found/tmp_obj_8wQaYC-jOgbb4 differ diff --git a/lost+found/tmp_obj_8x3BZ9-wBBe9N b/lost+found/tmp_obj_8x3BZ9-wBBe9N new file mode 100644 index 00000000..96dbee65 Binary files /dev/null and b/lost+found/tmp_obj_8x3BZ9-wBBe9N differ diff --git a/lost+found/tmp_obj_90ROzE-kKlTZk b/lost+found/tmp_obj_90ROzE-kKlTZk new file mode 100644 index 00000000..1ce9559a Binary files /dev/null and b/lost+found/tmp_obj_90ROzE-kKlTZk differ diff --git a/lost+found/tmp_obj_93m5Al-RnSSRO b/lost+found/tmp_obj_93m5Al-RnSSRO new file mode 100644 index 00000000..79d28223 Binary files /dev/null and b/lost+found/tmp_obj_93m5Al-RnSSRO differ diff --git a/lost+found/tmp_obj_953bQt-oKe3O5 b/lost+found/tmp_obj_953bQt-oKe3O5 new file mode 100644 index 00000000..ea094049 Binary files /dev/null and b/lost+found/tmp_obj_953bQt-oKe3O5 differ diff --git a/lost+found/tmp_obj_979qub-cSE8wT b/lost+found/tmp_obj_979qub-cSE8wT new file mode 100644 index 00000000..1166ac6f Binary files /dev/null and b/lost+found/tmp_obj_979qub-cSE8wT differ diff --git a/lost+found/tmp_obj_9AE1mz-YDeYnT b/lost+found/tmp_obj_9AE1mz-YDeYnT new file mode 100644 index 00000000..5b677a76 Binary files /dev/null and b/lost+found/tmp_obj_9AE1mz-YDeYnT differ diff --git a/lost+found/tmp_obj_9KTPFk-DEuIuD b/lost+found/tmp_obj_9KTPFk-DEuIuD new file mode 100644 index 00000000..96bb4cd5 Binary files /dev/null and b/lost+found/tmp_obj_9KTPFk-DEuIuD differ diff --git a/lost+found/tmp_obj_9LfuEZ-tEvd9o b/lost+found/tmp_obj_9LfuEZ-tEvd9o new file mode 100644 index 00000000..8906bef8 Binary files /dev/null and b/lost+found/tmp_obj_9LfuEZ-tEvd9o differ diff --git a/lost+found/tmp_obj_9PA7mR-7kLcbY b/lost+found/tmp_obj_9PA7mR-7kLcbY new file mode 100644 index 00000000..409848c9 Binary files /dev/null and b/lost+found/tmp_obj_9PA7mR-7kLcbY differ diff --git a/lost+found/tmp_obj_9Pcidi-sVOWTP b/lost+found/tmp_obj_9Pcidi-sVOWTP new file mode 100644 index 00000000..8a880502 Binary files /dev/null and b/lost+found/tmp_obj_9Pcidi-sVOWTP differ diff --git a/lost+found/tmp_obj_9QOyk9-qzhfoj b/lost+found/tmp_obj_9QOyk9-qzhfoj new file mode 100644 index 00000000..34d40ad4 Binary files /dev/null and b/lost+found/tmp_obj_9QOyk9-qzhfoj differ diff --git a/lost+found/tmp_obj_9RKddi-UZbcwK b/lost+found/tmp_obj_9RKddi-UZbcwK new file mode 100644 index 00000000..2fa229a5 Binary files /dev/null and b/lost+found/tmp_obj_9RKddi-UZbcwK differ diff --git a/lost+found/tmp_obj_9RTOZN-cavHdV b/lost+found/tmp_obj_9RTOZN-cavHdV new file mode 100644 index 00000000..b619b1cf Binary files /dev/null and b/lost+found/tmp_obj_9RTOZN-cavHdV differ diff --git a/lost+found/tmp_obj_9WpYTd-rtjBPk b/lost+found/tmp_obj_9WpYTd-rtjBPk new file mode 100644 index 00000000..8dc02c7d Binary files /dev/null and b/lost+found/tmp_obj_9WpYTd-rtjBPk differ diff --git a/lost+found/tmp_obj_9X1PUQ-nKO1E5 b/lost+found/tmp_obj_9X1PUQ-nKO1E5 new file mode 100644 index 00000000..18051402 Binary files /dev/null and b/lost+found/tmp_obj_9X1PUQ-nKO1E5 differ diff --git a/lost+found/tmp_obj_9a71zp-7XzTab b/lost+found/tmp_obj_9a71zp-7XzTab new file mode 100644 index 00000000..2a25a472 Binary files /dev/null and b/lost+found/tmp_obj_9a71zp-7XzTab differ diff --git a/lost+found/tmp_obj_9bXahm-GWQefM b/lost+found/tmp_obj_9bXahm-GWQefM new file mode 100644 index 00000000..40e738d1 Binary files /dev/null and b/lost+found/tmp_obj_9bXahm-GWQefM differ diff --git a/lost+found/tmp_obj_9eeKOC-E9tgNV b/lost+found/tmp_obj_9eeKOC-E9tgNV new file mode 100644 index 00000000..a9de0a32 Binary files /dev/null and b/lost+found/tmp_obj_9eeKOC-E9tgNV differ diff --git a/lost+found/tmp_obj_9erCoj-aYRgfY b/lost+found/tmp_obj_9erCoj-aYRgfY new file mode 100644 index 00000000..1e0f4fe9 Binary files /dev/null and b/lost+found/tmp_obj_9erCoj-aYRgfY differ diff --git a/lost+found/tmp_obj_9fi9kB-QacAUc b/lost+found/tmp_obj_9fi9kB-QacAUc new file mode 100644 index 00000000..21db2f45 Binary files /dev/null and b/lost+found/tmp_obj_9fi9kB-QacAUc differ diff --git a/lost+found/tmp_obj_9jptnn-rDc9AF b/lost+found/tmp_obj_9jptnn-rDc9AF new file mode 100644 index 00000000..3140c4bf Binary files /dev/null and b/lost+found/tmp_obj_9jptnn-rDc9AF differ diff --git a/lost+found/tmp_obj_9kXqHh-KbBRNW b/lost+found/tmp_obj_9kXqHh-KbBRNW new file mode 100644 index 00000000..6497cb72 Binary files /dev/null and b/lost+found/tmp_obj_9kXqHh-KbBRNW differ diff --git a/lost+found/tmp_obj_9pKw3p-uyBF6u b/lost+found/tmp_obj_9pKw3p-uyBF6u new file mode 100644 index 00000000..4aa534cd Binary files /dev/null and b/lost+found/tmp_obj_9pKw3p-uyBF6u differ diff --git a/lost+found/tmp_obj_A1Aww2-hiUwZO b/lost+found/tmp_obj_A1Aww2-hiUwZO new file mode 100644 index 00000000..7069a63b Binary files /dev/null and b/lost+found/tmp_obj_A1Aww2-hiUwZO differ diff --git a/lost+found/tmp_obj_A3gsCB-W6hx6Y b/lost+found/tmp_obj_A3gsCB-W6hx6Y new file mode 100644 index 00000000..9a9960a2 Binary files /dev/null and b/lost+found/tmp_obj_A3gsCB-W6hx6Y differ diff --git a/lost+found/tmp_obj_A4N8s1-4YJ5Wv b/lost+found/tmp_obj_A4N8s1-4YJ5Wv new file mode 100644 index 00000000..c0ad7629 Binary files /dev/null and b/lost+found/tmp_obj_A4N8s1-4YJ5Wv differ diff --git a/lost+found/tmp_obj_A7pdW9-yiKtzU b/lost+found/tmp_obj_A7pdW9-yiKtzU new file mode 100644 index 00000000..0124d737 Binary files /dev/null and b/lost+found/tmp_obj_A7pdW9-yiKtzU differ diff --git a/lost+found/tmp_obj_AJVGhV-jPz9kM b/lost+found/tmp_obj_AJVGhV-jPz9kM new file mode 100644 index 00000000..21a6bda9 Binary files /dev/null and b/lost+found/tmp_obj_AJVGhV-jPz9kM differ diff --git a/lost+found/tmp_obj_AKwA8b-iD64WR b/lost+found/tmp_obj_AKwA8b-iD64WR new file mode 100644 index 00000000..c493a176 Binary files /dev/null and b/lost+found/tmp_obj_AKwA8b-iD64WR differ diff --git a/lost+found/tmp_obj_ALocu7-89O80W b/lost+found/tmp_obj_ALocu7-89O80W new file mode 100644 index 00000000..d89782e5 Binary files /dev/null and b/lost+found/tmp_obj_ALocu7-89O80W differ diff --git a/lost+found/tmp_obj_ANjrPt-4hAuxf b/lost+found/tmp_obj_ANjrPt-4hAuxf new file mode 100644 index 00000000..4bfa9251 Binary files /dev/null and b/lost+found/tmp_obj_ANjrPt-4hAuxf differ diff --git a/lost+found/tmp_obj_ANmBg4-7Rv7la b/lost+found/tmp_obj_ANmBg4-7Rv7la new file mode 100644 index 00000000..935f2ff0 Binary files /dev/null and b/lost+found/tmp_obj_ANmBg4-7Rv7la differ diff --git a/lost+found/tmp_obj_AOdEYE-aiZwqw b/lost+found/tmp_obj_AOdEYE-aiZwqw new file mode 100644 index 00000000..a0dbaa51 Binary files /dev/null and b/lost+found/tmp_obj_AOdEYE-aiZwqw differ diff --git a/lost+found/tmp_obj_AShTe1-pAlBzC b/lost+found/tmp_obj_AShTe1-pAlBzC new file mode 100644 index 00000000..7302f536 Binary files /dev/null and b/lost+found/tmp_obj_AShTe1-pAlBzC differ diff --git a/lost+found/tmp_obj_AV7nwn-mBHpEy b/lost+found/tmp_obj_AV7nwn-mBHpEy new file mode 100644 index 00000000..33d4461b Binary files /dev/null and b/lost+found/tmp_obj_AV7nwn-mBHpEy differ diff --git a/lost+found/tmp_obj_AXTagk-F0NTFz b/lost+found/tmp_obj_AXTagk-F0NTFz new file mode 100644 index 00000000..1061babc Binary files /dev/null and b/lost+found/tmp_obj_AXTagk-F0NTFz differ diff --git a/lost+found/tmp_obj_AXnmY2-0crJw9 b/lost+found/tmp_obj_AXnmY2-0crJw9 new file mode 100644 index 00000000..fddf0f80 Binary files /dev/null and b/lost+found/tmp_obj_AXnmY2-0crJw9 differ diff --git a/lost+found/tmp_obj_AYQRld-sI1Dc9 b/lost+found/tmp_obj_AYQRld-sI1Dc9 new file mode 100644 index 00000000..98b0974e Binary files /dev/null and b/lost+found/tmp_obj_AYQRld-sI1Dc9 differ diff --git a/lost+found/tmp_obj_Ab5qN3-3hBs52 b/lost+found/tmp_obj_Ab5qN3-3hBs52 new file mode 100644 index 00000000..0ac3435b Binary files /dev/null and b/lost+found/tmp_obj_Ab5qN3-3hBs52 differ diff --git a/lost+found/tmp_obj_AbvAK5-lqJ7Fd b/lost+found/tmp_obj_AbvAK5-lqJ7Fd new file mode 100644 index 00000000..4caca1ac Binary files /dev/null and b/lost+found/tmp_obj_AbvAK5-lqJ7Fd differ diff --git a/lost+found/tmp_obj_AjrA43-Y1nQfm b/lost+found/tmp_obj_AjrA43-Y1nQfm new file mode 100644 index 00000000..85d57045 Binary files /dev/null and b/lost+found/tmp_obj_AjrA43-Y1nQfm differ diff --git a/lost+found/tmp_obj_Aob59e-y8MiYS b/lost+found/tmp_obj_Aob59e-y8MiYS new file mode 100644 index 00000000..496b6090 --- /dev/null +++ b/lost+found/tmp_obj_Aob59e-y8MiYS @@ -0,0 +1 @@ +xm0 yH̐H!M5M*'$Nrk}˪a%'HZ3&; wj@̎'@@ҷŌ0䟉܀n [Oj#Hf, /K\몪%̆ Uea7魇NH] \ No newline at end of file diff --git a/lost+found/tmp_obj_Aqd4pd-SRxBwn b/lost+found/tmp_obj_Aqd4pd-SRxBwn new file mode 100644 index 00000000..e81c0773 Binary files /dev/null and b/lost+found/tmp_obj_Aqd4pd-SRxBwn differ diff --git a/lost+found/tmp_obj_AyE8pb-prHIaq b/lost+found/tmp_obj_AyE8pb-prHIaq new file mode 100644 index 00000000..1e97f281 Binary files /dev/null and b/lost+found/tmp_obj_AyE8pb-prHIaq differ diff --git a/lost+found/tmp_obj_AyOWbj-hHqzQF b/lost+found/tmp_obj_AyOWbj-hHqzQF new file mode 100644 index 00000000..0bc2a40f Binary files /dev/null and b/lost+found/tmp_obj_AyOWbj-hHqzQF differ diff --git a/lost+found/tmp_obj_B6D0XD-rjnAVV b/lost+found/tmp_obj_B6D0XD-rjnAVV new file mode 100644 index 00000000..376ae102 Binary files /dev/null and b/lost+found/tmp_obj_B6D0XD-rjnAVV differ diff --git a/lost+found/tmp_obj_B7oaH9-ckG6Mm b/lost+found/tmp_obj_B7oaH9-ckG6Mm new file mode 100644 index 00000000..a2fbbbe7 Binary files /dev/null and b/lost+found/tmp_obj_B7oaH9-ckG6Mm differ diff --git a/lost+found/tmp_obj_B8r4L0-JyWarF b/lost+found/tmp_obj_B8r4L0-JyWarF new file mode 100644 index 00000000..c252579b Binary files /dev/null and b/lost+found/tmp_obj_B8r4L0-JyWarF differ diff --git a/lost+found/tmp_obj_BC7Z8a-VjYlpi b/lost+found/tmp_obj_BC7Z8a-VjYlpi new file mode 100644 index 00000000..8c4a0992 Binary files /dev/null and b/lost+found/tmp_obj_BC7Z8a-VjYlpi differ diff --git a/lost+found/tmp_obj_BEBLCK-2PtvFO b/lost+found/tmp_obj_BEBLCK-2PtvFO new file mode 100644 index 00000000..dcc0cb15 Binary files /dev/null and b/lost+found/tmp_obj_BEBLCK-2PtvFO differ diff --git a/lost+found/tmp_obj_BKf4Tn-SNMdPy b/lost+found/tmp_obj_BKf4Tn-SNMdPy new file mode 100644 index 00000000..2b555639 Binary files /dev/null and b/lost+found/tmp_obj_BKf4Tn-SNMdPy differ diff --git a/lost+found/tmp_obj_BVHhF1-BfNgwg b/lost+found/tmp_obj_BVHhF1-BfNgwg new file mode 100644 index 00000000..c18e01f1 Binary files /dev/null and b/lost+found/tmp_obj_BVHhF1-BfNgwg differ diff --git a/lost+found/tmp_obj_BVg1td-3ZdD0U b/lost+found/tmp_obj_BVg1td-3ZdD0U new file mode 100644 index 00000000..89fc4245 Binary files /dev/null and b/lost+found/tmp_obj_BVg1td-3ZdD0U differ diff --git a/lost+found/tmp_obj_BjN1Gd-gRspiM b/lost+found/tmp_obj_BjN1Gd-gRspiM new file mode 100644 index 00000000..897b695f Binary files /dev/null and b/lost+found/tmp_obj_BjN1Gd-gRspiM differ diff --git a/lost+found/tmp_obj_BnBoxK-AhrVnr b/lost+found/tmp_obj_BnBoxK-AhrVnr new file mode 100644 index 00000000..4d0ade86 Binary files /dev/null and b/lost+found/tmp_obj_BnBoxK-AhrVnr differ diff --git a/lost+found/tmp_obj_BnXtlM-BR9eJF b/lost+found/tmp_obj_BnXtlM-BR9eJF new file mode 100644 index 00000000..26ec00d3 Binary files /dev/null and b/lost+found/tmp_obj_BnXtlM-BR9eJF differ diff --git a/lost+found/tmp_obj_Bo4otc-r4NI4v b/lost+found/tmp_obj_Bo4otc-r4NI4v new file mode 100644 index 00000000..d570a8bc Binary files /dev/null and b/lost+found/tmp_obj_Bo4otc-r4NI4v differ diff --git a/lost+found/tmp_obj_Bod4nc-YG7kUK b/lost+found/tmp_obj_Bod4nc-YG7kUK new file mode 100644 index 00000000..fb702ac9 Binary files /dev/null and b/lost+found/tmp_obj_Bod4nc-YG7kUK differ diff --git a/lost+found/tmp_obj_Bp8itu-d9nEFN b/lost+found/tmp_obj_Bp8itu-d9nEFN new file mode 100644 index 00000000..752eabb8 Binary files /dev/null and b/lost+found/tmp_obj_Bp8itu-d9nEFN differ diff --git a/lost+found/tmp_obj_BpPgkp-WTwk47 b/lost+found/tmp_obj_BpPgkp-WTwk47 new file mode 100644 index 00000000..a9aa3bea Binary files /dev/null and b/lost+found/tmp_obj_BpPgkp-WTwk47 differ diff --git a/lost+found/tmp_obj_BqT7si-afYVte b/lost+found/tmp_obj_BqT7si-afYVte new file mode 100644 index 00000000..ba1f9dd9 Binary files /dev/null and b/lost+found/tmp_obj_BqT7si-afYVte differ diff --git a/lost+found/tmp_obj_BqVM5s-xn63EE b/lost+found/tmp_obj_BqVM5s-xn63EE new file mode 100644 index 00000000..5cdcacd2 Binary files /dev/null and b/lost+found/tmp_obj_BqVM5s-xn63EE differ diff --git a/lost+found/tmp_obj_Bupw97-5JGZ93 b/lost+found/tmp_obj_Bupw97-5JGZ93 new file mode 100644 index 00000000..bd33f325 Binary files /dev/null and b/lost+found/tmp_obj_Bupw97-5JGZ93 differ diff --git a/lost+found/tmp_obj_C1BITw-QvWk30 b/lost+found/tmp_obj_C1BITw-QvWk30 new file mode 100644 index 00000000..c3262bef Binary files /dev/null and b/lost+found/tmp_obj_C1BITw-QvWk30 differ diff --git a/lost+found/tmp_obj_C6sr55-sqGrqF b/lost+found/tmp_obj_C6sr55-sqGrqF new file mode 100644 index 00000000..ee02824e Binary files /dev/null and b/lost+found/tmp_obj_C6sr55-sqGrqF differ diff --git a/lost+found/tmp_obj_CEMU64-kvwUG3 b/lost+found/tmp_obj_CEMU64-kvwUG3 new file mode 100644 index 00000000..99008683 Binary files /dev/null and b/lost+found/tmp_obj_CEMU64-kvwUG3 differ diff --git a/lost+found/tmp_obj_CGx06F-W0LuA5 b/lost+found/tmp_obj_CGx06F-W0LuA5 new file mode 100644 index 00000000..999ef8a6 Binary files /dev/null and b/lost+found/tmp_obj_CGx06F-W0LuA5 differ diff --git a/lost+found/tmp_obj_CQAosC-ElcpzC b/lost+found/tmp_obj_CQAosC-ElcpzC new file mode 100644 index 00000000..3c145e60 Binary files /dev/null and b/lost+found/tmp_obj_CQAosC-ElcpzC differ diff --git a/lost+found/tmp_obj_CQvJix-asxd5y b/lost+found/tmp_obj_CQvJix-asxd5y new file mode 100644 index 00000000..92109925 Binary files /dev/null and b/lost+found/tmp_obj_CQvJix-asxd5y differ diff --git a/lost+found/tmp_obj_CTCcGe-oP2SvJ b/lost+found/tmp_obj_CTCcGe-oP2SvJ new file mode 100644 index 00000000..f512c4dc Binary files /dev/null and b/lost+found/tmp_obj_CTCcGe-oP2SvJ differ diff --git a/lost+found/tmp_obj_CXIiaZ-xojJF7 b/lost+found/tmp_obj_CXIiaZ-xojJF7 new file mode 100644 index 00000000..b12b516d Binary files /dev/null and b/lost+found/tmp_obj_CXIiaZ-xojJF7 differ diff --git a/lost+found/tmp_obj_CZp2ra-vth3bs b/lost+found/tmp_obj_CZp2ra-vth3bs new file mode 100644 index 00000000..fbfb0894 Binary files /dev/null and b/lost+found/tmp_obj_CZp2ra-vth3bs differ diff --git a/lost+found/tmp_obj_CeLCDT-LxSXmh b/lost+found/tmp_obj_CeLCDT-LxSXmh new file mode 100644 index 00000000..686915d5 Binary files /dev/null and b/lost+found/tmp_obj_CeLCDT-LxSXmh differ diff --git a/lost+found/tmp_obj_Ced27y-99h5nr b/lost+found/tmp_obj_Ced27y-99h5nr new file mode 100644 index 00000000..a2b428c1 Binary files /dev/null and b/lost+found/tmp_obj_Ced27y-99h5nr differ diff --git a/lost+found/tmp_obj_Cekxvn-zN0Rea b/lost+found/tmp_obj_Cekxvn-zN0Rea new file mode 100644 index 00000000..4237a741 Binary files /dev/null and b/lost+found/tmp_obj_Cekxvn-zN0Rea differ diff --git a/lost+found/tmp_obj_CgzxAx-qdERws b/lost+found/tmp_obj_CgzxAx-qdERws new file mode 100644 index 00000000..3950eb6d --- /dev/null +++ b/lost+found/tmp_obj_CgzxAx-qdERws @@ -0,0 +1,7 @@ +xTMo0 9"it-vtaPvءAD"y {e;Iw,|# +|^GZ5Q٣f4WRE^Fz5*?e~*vAF#sy~tN_]tFKW|ٴLԱ)*z!.7"hF)٨BXCr˙<<|DiMw\0nﱏiÌX8gXY_2aTtR qZNhLϱj $)1ͩx̩r?-a+v zJ[&̩߬Zk-n%E✖FP

_9wZ m N6H [ E.Б}4!.:O; \ No newline at end of file diff --git a/lost+found/tmp_obj_IN76Kx-vydddW b/lost+found/tmp_obj_IN76Kx-vydddW new file mode 100644 index 00000000..05adcb5a Binary files /dev/null and b/lost+found/tmp_obj_IN76Kx-vydddW differ diff --git a/lost+found/tmp_obj_IPHG0h-IDcuy8 b/lost+found/tmp_obj_IPHG0h-IDcuy8 new file mode 100644 index 00000000..41911576 Binary files /dev/null and b/lost+found/tmp_obj_IPHG0h-IDcuy8 differ diff --git a/lost+found/tmp_obj_IXTxz0-8i4oi9 b/lost+found/tmp_obj_IXTxz0-8i4oi9 new file mode 100644 index 00000000..c2bd42c9 Binary files /dev/null and b/lost+found/tmp_obj_IXTxz0-8i4oi9 differ diff --git a/lost+found/tmp_obj_IeJt2v-1RIMng b/lost+found/tmp_obj_IeJt2v-1RIMng new file mode 100644 index 00000000..1abf3680 Binary files /dev/null and b/lost+found/tmp_obj_IeJt2v-1RIMng differ diff --git a/lost+found/tmp_obj_IqqWJp-ZfXn7r b/lost+found/tmp_obj_IqqWJp-ZfXn7r new file mode 100644 index 00000000..6ab58149 Binary files /dev/null and b/lost+found/tmp_obj_IqqWJp-ZfXn7r differ diff --git a/lost+found/tmp_obj_IwuPnj-n0uoX5 b/lost+found/tmp_obj_IwuPnj-n0uoX5 new file mode 100644 index 00000000..8d40fd35 Binary files /dev/null and b/lost+found/tmp_obj_IwuPnj-n0uoX5 differ diff --git a/lost+found/tmp_obj_J4WS6n-05XzLq b/lost+found/tmp_obj_J4WS6n-05XzLq new file mode 100644 index 00000000..3ac9f3d3 Binary files /dev/null and b/lost+found/tmp_obj_J4WS6n-05XzLq differ diff --git a/lost+found/tmp_obj_J55wqP-UcEub0 b/lost+found/tmp_obj_J55wqP-UcEub0 new file mode 100644 index 00000000..8e4eddb1 Binary files /dev/null and b/lost+found/tmp_obj_J55wqP-UcEub0 differ diff --git a/lost+found/tmp_obj_J8P3sC-Ye0PtL b/lost+found/tmp_obj_J8P3sC-Ye0PtL new file mode 100644 index 00000000..41fcb4f3 Binary files /dev/null and b/lost+found/tmp_obj_J8P3sC-Ye0PtL differ diff --git a/lost+found/tmp_obj_JAXbLf-9FAZVT b/lost+found/tmp_obj_JAXbLf-9FAZVT new file mode 100644 index 00000000..71ecff05 Binary files /dev/null and b/lost+found/tmp_obj_JAXbLf-9FAZVT differ diff --git a/lost+found/tmp_obj_JBGI5a-lADO1A b/lost+found/tmp_obj_JBGI5a-lADO1A new file mode 100644 index 00000000..643839b6 --- /dev/null +++ b/lost+found/tmp_obj_JBGI5a-lADO1A @@ -0,0 +1,7 @@ +xVn6o=sbDzmem6-6JHMy~'Nh]N"ǻ'Lh" T:&Z&4~C_&Q~ D&ewVHo w^^)Sx=3Vy.)䭢LT(>ǿK;X?Am" )5OI/b) ;(T feR~֚tje`3%$ε \e$ K|0+lXIVeĊq +)׮3زQZciTF9s䥰90x]]*Q!.gyhvkg'Asf>\SŌVZ {c#Չ-me +>anO;Gɐtr_$>I{WVF厺;iW{Km:ɫˤۥno*tfS9MN){:*/].!Ei9d*UtRP)M3=<ޣ=j01Zxn}QjGKq[-'`hr'Jk1i~%Dr8CTh…O0cl +뇛 l8HU@KJfThȥta`fMUbbLE#DϷnse~?/ W`֓~a&¸D :^&Ly7Ybnаr,8oF +:QP!rSqE)2Y,lIFWÞԌ \ No newline at end of file diff --git a/lost+found/tmp_obj_JCcE8w-LfgpNg b/lost+found/tmp_obj_JCcE8w-LfgpNg new file mode 100644 index 00000000..6dee9c1f Binary files /dev/null and b/lost+found/tmp_obj_JCcE8w-LfgpNg differ diff --git a/lost+found/tmp_obj_JG1HSe-azQrB6 b/lost+found/tmp_obj_JG1HSe-azQrB6 new file mode 100644 index 00000000..ed37b2e7 Binary files /dev/null and b/lost+found/tmp_obj_JG1HSe-azQrB6 differ diff --git a/lost+found/tmp_obj_JKjxzp-r0ALfJ b/lost+found/tmp_obj_JKjxzp-r0ALfJ new file mode 100644 index 00000000..5b549f88 Binary files /dev/null and b/lost+found/tmp_obj_JKjxzp-r0ALfJ differ diff --git a/lost+found/tmp_obj_JKrrsK-rd6Nhv b/lost+found/tmp_obj_JKrrsK-rd6Nhv new file mode 100644 index 00000000..22abaea5 Binary files /dev/null and b/lost+found/tmp_obj_JKrrsK-rd6Nhv differ diff --git a/lost+found/tmp_obj_JRoiH8-1Ynl7e b/lost+found/tmp_obj_JRoiH8-1Ynl7e new file mode 100644 index 00000000..d8edfbdc Binary files /dev/null and b/lost+found/tmp_obj_JRoiH8-1Ynl7e differ diff --git a/lost+found/tmp_obj_JTAKT6-X3JHIV b/lost+found/tmp_obj_JTAKT6-X3JHIV new file mode 100644 index 00000000..b2b0135b Binary files /dev/null and b/lost+found/tmp_obj_JTAKT6-X3JHIV differ diff --git a/lost+found/tmp_obj_JVdQGe-MhBMz9 b/lost+found/tmp_obj_JVdQGe-MhBMz9 new file mode 100644 index 00000000..3971e53d Binary files /dev/null and b/lost+found/tmp_obj_JVdQGe-MhBMz9 differ diff --git a/lost+found/tmp_obj_JeFE6c-RcRjvu b/lost+found/tmp_obj_JeFE6c-RcRjvu new file mode 100644 index 00000000..34e79718 Binary files /dev/null and b/lost+found/tmp_obj_JeFE6c-RcRjvu differ diff --git a/lost+found/tmp_obj_JeQGuL-lPRXup b/lost+found/tmp_obj_JeQGuL-lPRXup new file mode 100644 index 00000000..61bc5d86 Binary files /dev/null and b/lost+found/tmp_obj_JeQGuL-lPRXup differ diff --git a/lost+found/tmp_obj_JfCsfI-O2wAvY b/lost+found/tmp_obj_JfCsfI-O2wAvY new file mode 100644 index 00000000..586bbc4c Binary files /dev/null and b/lost+found/tmp_obj_JfCsfI-O2wAvY differ diff --git a/lost+found/tmp_obj_JpTx0F-wHf8TU b/lost+found/tmp_obj_JpTx0F-wHf8TU new file mode 100644 index 00000000..97ebeea0 Binary files /dev/null and b/lost+found/tmp_obj_JpTx0F-wHf8TU differ diff --git a/lost+found/tmp_obj_K0iblk-efmfqI b/lost+found/tmp_obj_K0iblk-efmfqI new file mode 100644 index 00000000..53f27b9f Binary files /dev/null and b/lost+found/tmp_obj_K0iblk-efmfqI differ diff --git a/lost+found/tmp_obj_K1JSTL-bAQJHz b/lost+found/tmp_obj_K1JSTL-bAQJHz new file mode 100644 index 00000000..55238aab Binary files /dev/null and b/lost+found/tmp_obj_K1JSTL-bAQJHz differ diff --git a/lost+found/tmp_obj_K8U7XK-90w2la b/lost+found/tmp_obj_K8U7XK-90w2la new file mode 100644 index 00000000..e11f7ea2 Binary files /dev/null and b/lost+found/tmp_obj_K8U7XK-90w2la differ diff --git a/lost+found/tmp_obj_KMONEa-NOuKTC b/lost+found/tmp_obj_KMONEa-NOuKTC new file mode 100644 index 00000000..eb55864f Binary files /dev/null and b/lost+found/tmp_obj_KMONEa-NOuKTC differ diff --git a/lost+found/tmp_obj_KPzQiB-Q1F75c b/lost+found/tmp_obj_KPzQiB-Q1F75c new file mode 100644 index 00000000..094b8528 Binary files /dev/null and b/lost+found/tmp_obj_KPzQiB-Q1F75c differ diff --git a/lost+found/tmp_obj_KVAjZL-3dWpxs b/lost+found/tmp_obj_KVAjZL-3dWpxs new file mode 100644 index 00000000..4c4e1e97 Binary files /dev/null and b/lost+found/tmp_obj_KVAjZL-3dWpxs differ diff --git a/lost+found/tmp_obj_KVVboo-3xxK8e b/lost+found/tmp_obj_KVVboo-3xxK8e new file mode 100644 index 00000000..6b8b0f40 Binary files /dev/null and b/lost+found/tmp_obj_KVVboo-3xxK8e differ diff --git a/lost+found/tmp_obj_KYLYJv-OAWzS4 b/lost+found/tmp_obj_KYLYJv-OAWzS4 new file mode 100644 index 00000000..c0ce7620 Binary files /dev/null and b/lost+found/tmp_obj_KYLYJv-OAWzS4 differ diff --git a/lost+found/tmp_obj_KdiAKP-DPhoUg b/lost+found/tmp_obj_KdiAKP-DPhoUg new file mode 100644 index 00000000..253930f4 Binary files /dev/null and b/lost+found/tmp_obj_KdiAKP-DPhoUg differ diff --git a/lost+found/tmp_obj_Ke1jgi-EOcaJL b/lost+found/tmp_obj_Ke1jgi-EOcaJL new file mode 100644 index 00000000..6c093c20 Binary files /dev/null and b/lost+found/tmp_obj_Ke1jgi-EOcaJL differ diff --git a/lost+found/tmp_obj_Kf6qIu-sn1iEG b/lost+found/tmp_obj_Kf6qIu-sn1iEG new file mode 100644 index 00000000..67458ef1 Binary files /dev/null and b/lost+found/tmp_obj_Kf6qIu-sn1iEG differ diff --git a/lost+found/tmp_obj_KgVVri-jPUq8a b/lost+found/tmp_obj_KgVVri-jPUq8a new file mode 100644 index 00000000..8970bcc4 Binary files /dev/null and b/lost+found/tmp_obj_KgVVri-jPUq8a differ diff --git a/lost+found/tmp_obj_KjmtoJ-tWvCA8 b/lost+found/tmp_obj_KjmtoJ-tWvCA8 new file mode 100644 index 00000000..5f8c1fdc Binary files /dev/null and b/lost+found/tmp_obj_KjmtoJ-tWvCA8 differ diff --git a/lost+found/tmp_obj_KlCAor-4eRfNE b/lost+found/tmp_obj_KlCAor-4eRfNE new file mode 100644 index 00000000..0d64cff1 Binary files /dev/null and b/lost+found/tmp_obj_KlCAor-4eRfNE differ diff --git a/lost+found/tmp_obj_KnBqA1-gfwaUc b/lost+found/tmp_obj_KnBqA1-gfwaUc new file mode 100644 index 00000000..5b13cbfa Binary files /dev/null and b/lost+found/tmp_obj_KnBqA1-gfwaUc differ diff --git a/lost+found/tmp_obj_KopM2j-l99CYD b/lost+found/tmp_obj_KopM2j-l99CYD new file mode 100644 index 00000000..ae6d3cd6 Binary files /dev/null and b/lost+found/tmp_obj_KopM2j-l99CYD differ diff --git a/lost+found/tmp_obj_Kq6e13-7ni4oo b/lost+found/tmp_obj_Kq6e13-7ni4oo new file mode 100644 index 00000000..0f77a709 Binary files /dev/null and b/lost+found/tmp_obj_Kq6e13-7ni4oo differ diff --git a/lost+found/tmp_obj_L0uvLp-1r1VsO b/lost+found/tmp_obj_L0uvLp-1r1VsO new file mode 100644 index 00000000..d6a392ba Binary files /dev/null and b/lost+found/tmp_obj_L0uvLp-1r1VsO differ diff --git a/lost+found/tmp_obj_L1C72j-QLtiaA b/lost+found/tmp_obj_L1C72j-QLtiaA new file mode 100644 index 00000000..1d0c9653 Binary files /dev/null and b/lost+found/tmp_obj_L1C72j-QLtiaA differ diff --git a/lost+found/tmp_obj_L2V2JT-DZMrzJ b/lost+found/tmp_obj_L2V2JT-DZMrzJ new file mode 100644 index 00000000..dcdba531 --- /dev/null +++ b/lost+found/tmp_obj_L2V2JT-DZMrzJ @@ -0,0 +1,5 @@ +xTO0s +/#26$@ZM&H isƁ +Nl}- +`F*ވ8RڲTx.^E!doEŭȵdwR:u)-UU 6 Vᦱʔu@Gƀ$Ei!adz9]2V(b8isq l!ncO-ha>CD! Rh-~^ +έq3IΔ#tBst=܀gV ;--um/fQ&F|--h"GﷷDa |)ܣ3Ti o R)H?#/P#1򲋕L<1%Ld@^ᥓɇtPl,epLƏF"yz\ C$Sqq8N\d~&yBȄ +vERbgd9\#%J`OGOtu4~͢ pKBB}e wfuJ)TV^cx1l鵈u>~{P$hվi$=auʴƷWs+bTێ<*"= W/#^t:$oz"rTZ$uQ* \ No newline at end of file diff --git a/lost+found/tmp_obj_L5Hdwb-LQfs0h b/lost+found/tmp_obj_L5Hdwb-LQfs0h new file mode 100644 index 00000000..c866fc35 Binary files /dev/null and b/lost+found/tmp_obj_L5Hdwb-LQfs0h differ diff --git a/lost+found/tmp_obj_L8OZqJ-uvT1aC b/lost+found/tmp_obj_L8OZqJ-uvT1aC new file mode 100644 index 00000000..b48f759b Binary files /dev/null and b/lost+found/tmp_obj_L8OZqJ-uvT1aC differ diff --git a/lost+found/tmp_obj_LEPbxd-tiLA0R b/lost+found/tmp_obj_LEPbxd-tiLA0R new file mode 100644 index 00000000..7fb3f7dc Binary files /dev/null and b/lost+found/tmp_obj_LEPbxd-tiLA0R differ diff --git a/lost+found/tmp_obj_LF1AiV-vpkDBr b/lost+found/tmp_obj_LF1AiV-vpkDBr new file mode 100644 index 00000000..73292a24 Binary files /dev/null and b/lost+found/tmp_obj_LF1AiV-vpkDBr differ diff --git a/lost+found/tmp_obj_LJvtcK-rYuDvC b/lost+found/tmp_obj_LJvtcK-rYuDvC new file mode 100644 index 00000000..7a883a43 Binary files /dev/null and b/lost+found/tmp_obj_LJvtcK-rYuDvC differ diff --git a/lost+found/tmp_obj_LLWXgd-dnLbIW b/lost+found/tmp_obj_LLWXgd-dnLbIW new file mode 100644 index 00000000..7335c865 Binary files /dev/null and b/lost+found/tmp_obj_LLWXgd-dnLbIW differ diff --git a/lost+found/tmp_obj_LZ22pg-p3YbZA b/lost+found/tmp_obj_LZ22pg-p3YbZA new file mode 100644 index 00000000..ada45298 --- /dev/null +++ b/lost+found/tmp_obj_LZ22pg-p3YbZA @@ -0,0 +1 @@ +x5ɱ +^nQvcҹ;yE(wY0<:lG'>D (vRIgĮ?5)~O^) L?$ \ No newline at end of file diff --git a/lost+found/tmp_obj_LwD0Sv-MMIMeW b/lost+found/tmp_obj_LwD0Sv-MMIMeW new file mode 100644 index 00000000..e1db398a Binary files /dev/null and b/lost+found/tmp_obj_LwD0Sv-MMIMeW differ diff --git a/lost+found/tmp_obj_LyN9cn-Ssd73R b/lost+found/tmp_obj_LyN9cn-Ssd73R new file mode 100644 index 00000000..11ea9b9c Binary files /dev/null and b/lost+found/tmp_obj_LyN9cn-Ssd73R differ diff --git a/lost+found/tmp_obj_M2oqmF-gaOhM3 b/lost+found/tmp_obj_M2oqmF-gaOhM3 new file mode 100644 index 00000000..e38cbaac Binary files /dev/null and b/lost+found/tmp_obj_M2oqmF-gaOhM3 differ diff --git a/lost+found/tmp_obj_M37PC4-k8tKF1 b/lost+found/tmp_obj_M37PC4-k8tKF1 new file mode 100644 index 00000000..6839b622 --- /dev/null +++ b/lost+found/tmp_obj_M37PC4-k8tKF1 @@ -0,0 +1,3 @@ +xS]k@aQ"J"m@RUCJB!qWғN[%1!Rl+t;;s6sMaMw,"Uc,Aš.r^G]aaR\ڑn<[X5(&wQ#cA˹Uvo"y:ZQޑU9 0_D&7Pd@.3\nrUCkEhǣ}ìk7VEdExr%gy:9ȾNh<~:GQР/wђm䭿9Bjm }-e-.#"%mAJ|< uL +Yw]=( c"X0]Jkߋܴ5=d"1UܖXtZM1%!tI$f'_[*Uǃqؽu\mIbZ9'TFRuĢ|>a$$4"lՓ@I6 K'Y.4-5-m@. 떕 /U0ku +GZWx6'>FL 35gfkSl<˓dhhՐ`gB/< m \ No newline at end of file diff --git a/lost+found/tmp_obj_MB403Y-LcDpLh b/lost+found/tmp_obj_MB403Y-LcDpLh new file mode 100644 index 00000000..1d509630 Binary files /dev/null and b/lost+found/tmp_obj_MB403Y-LcDpLh differ diff --git a/lost+found/tmp_obj_MBCwdn-8MCq5R b/lost+found/tmp_obj_MBCwdn-8MCq5R new file mode 100644 index 00000000..12c6b4b8 Binary files /dev/null and b/lost+found/tmp_obj_MBCwdn-8MCq5R differ diff --git a/lost+found/tmp_obj_MEq1z8-bVzMah b/lost+found/tmp_obj_MEq1z8-bVzMah new file mode 100644 index 00000000..7d18c77a Binary files /dev/null and b/lost+found/tmp_obj_MEq1z8-bVzMah differ diff --git a/lost+found/tmp_obj_MGOXWn-e7McQ0 b/lost+found/tmp_obj_MGOXWn-e7McQ0 new file mode 100644 index 00000000..2aef35b7 Binary files /dev/null and b/lost+found/tmp_obj_MGOXWn-e7McQ0 differ diff --git a/lost+found/tmp_obj_MGOjid-hn7Xh1 b/lost+found/tmp_obj_MGOjid-hn7Xh1 new file mode 100644 index 00000000..c2a67ab4 Binary files /dev/null and b/lost+found/tmp_obj_MGOjid-hn7Xh1 differ diff --git a/lost+found/tmp_obj_MKBAU4-a144VX b/lost+found/tmp_obj_MKBAU4-a144VX new file mode 100644 index 00000000..39704e53 Binary files /dev/null and b/lost+found/tmp_obj_MKBAU4-a144VX differ diff --git a/lost+found/tmp_obj_MLFhli-tBu54o b/lost+found/tmp_obj_MLFhli-tBu54o new file mode 100644 index 00000000..b396f0a8 Binary files /dev/null and b/lost+found/tmp_obj_MLFhli-tBu54o differ diff --git a/lost+found/tmp_obj_MMlc1g-ANpRaU b/lost+found/tmp_obj_MMlc1g-ANpRaU new file mode 100644 index 00000000..661a1e44 Binary files /dev/null and b/lost+found/tmp_obj_MMlc1g-ANpRaU differ diff --git a/lost+found/tmp_obj_MOOwV8-wE01p7 b/lost+found/tmp_obj_MOOwV8-wE01p7 new file mode 100644 index 00000000..7bb7c95a Binary files /dev/null and b/lost+found/tmp_obj_MOOwV8-wE01p7 differ diff --git a/lost+found/tmp_obj_MRMK1d-fjlWmu b/lost+found/tmp_obj_MRMK1d-fjlWmu new file mode 100644 index 00000000..4a901be9 Binary files /dev/null and b/lost+found/tmp_obj_MRMK1d-fjlWmu differ diff --git a/lost+found/tmp_obj_MS0fUq-xz4Haq b/lost+found/tmp_obj_MS0fUq-xz4Haq new file mode 100644 index 00000000..2af6761c Binary files /dev/null and b/lost+found/tmp_obj_MS0fUq-xz4Haq differ diff --git a/lost+found/tmp_obj_MW7dsd-QTIcd9 b/lost+found/tmp_obj_MW7dsd-QTIcd9 new file mode 100644 index 00000000..ba771abb Binary files /dev/null and b/lost+found/tmp_obj_MW7dsd-QTIcd9 differ diff --git a/lost+found/tmp_obj_MWEh5B-obyJ7I b/lost+found/tmp_obj_MWEh5B-obyJ7I new file mode 100644 index 00000000..0158e6e7 Binary files /dev/null and b/lost+found/tmp_obj_MWEh5B-obyJ7I differ diff --git a/lost+found/tmp_obj_MXVyNJ-76agRM b/lost+found/tmp_obj_MXVyNJ-76agRM new file mode 100644 index 00000000..819a06fb Binary files /dev/null and b/lost+found/tmp_obj_MXVyNJ-76agRM differ diff --git a/lost+found/tmp_obj_MZGVbk-Lp0Bmq b/lost+found/tmp_obj_MZGVbk-Lp0Bmq new file mode 100644 index 00000000..3cefd640 Binary files /dev/null and b/lost+found/tmp_obj_MZGVbk-Lp0Bmq differ diff --git a/lost+found/tmp_obj_MaETgL-8cbbU3 b/lost+found/tmp_obj_MaETgL-8cbbU3 new file mode 100644 index 00000000..57278ef0 Binary files /dev/null and b/lost+found/tmp_obj_MaETgL-8cbbU3 differ diff --git a/lost+found/tmp_obj_Miy26B-XcYpVu b/lost+found/tmp_obj_Miy26B-XcYpVu new file mode 100644 index 00000000..ae30b369 Binary files /dev/null and b/lost+found/tmp_obj_Miy26B-XcYpVu differ diff --git a/lost+found/tmp_obj_MtqqGz-gMgdcL b/lost+found/tmp_obj_MtqqGz-gMgdcL new file mode 100644 index 00000000..fcf4daca Binary files /dev/null and b/lost+found/tmp_obj_MtqqGz-gMgdcL differ diff --git a/lost+found/tmp_obj_MuBAM1-1SNBMg b/lost+found/tmp_obj_MuBAM1-1SNBMg new file mode 100644 index 00000000..4868f65c Binary files /dev/null and b/lost+found/tmp_obj_MuBAM1-1SNBMg differ diff --git a/lost+found/tmp_obj_N0BWgo-yB3i1D b/lost+found/tmp_obj_N0BWgo-yB3i1D new file mode 100644 index 00000000..4a4392bc Binary files /dev/null and b/lost+found/tmp_obj_N0BWgo-yB3i1D differ diff --git a/lost+found/tmp_obj_N1mF4R-6phlA1 b/lost+found/tmp_obj_N1mF4R-6phlA1 new file mode 100644 index 00000000..a861aa60 Binary files /dev/null and b/lost+found/tmp_obj_N1mF4R-6phlA1 differ diff --git a/lost+found/tmp_obj_N8gy9K-8Zb67m b/lost+found/tmp_obj_N8gy9K-8Zb67m new file mode 100644 index 00000000..5d1ea01d Binary files /dev/null and b/lost+found/tmp_obj_N8gy9K-8Zb67m differ diff --git a/lost+found/tmp_obj_N9KEdS-fvtCHt b/lost+found/tmp_obj_N9KEdS-fvtCHt new file mode 100644 index 00000000..e6d22441 Binary files /dev/null and b/lost+found/tmp_obj_N9KEdS-fvtCHt differ diff --git a/lost+found/tmp_obj_NGA44i-LBHaJ9 b/lost+found/tmp_obj_NGA44i-LBHaJ9 new file mode 100644 index 00000000..1cf180bc Binary files /dev/null and b/lost+found/tmp_obj_NGA44i-LBHaJ9 differ diff --git a/lost+found/tmp_obj_NKqDGV-Q1EGol b/lost+found/tmp_obj_NKqDGV-Q1EGol new file mode 100644 index 00000000..32cde709 Binary files /dev/null and b/lost+found/tmp_obj_NKqDGV-Q1EGol differ diff --git a/lost+found/tmp_obj_NSw41D-xJqdeY b/lost+found/tmp_obj_NSw41D-xJqdeY new file mode 100644 index 00000000..866857ae Binary files /dev/null and b/lost+found/tmp_obj_NSw41D-xJqdeY differ diff --git a/lost+found/tmp_obj_NUeh0c-4JQIK6 b/lost+found/tmp_obj_NUeh0c-4JQIK6 new file mode 100644 index 00000000..8534f37b Binary files /dev/null and b/lost+found/tmp_obj_NUeh0c-4JQIK6 differ diff --git a/lost+found/tmp_obj_NXISUg-ay2pM8 b/lost+found/tmp_obj_NXISUg-ay2pM8 new file mode 100644 index 00000000..b39cdb41 Binary files /dev/null and b/lost+found/tmp_obj_NXISUg-ay2pM8 differ diff --git a/lost+found/tmp_obj_NbpG5O-4scy8K b/lost+found/tmp_obj_NbpG5O-4scy8K new file mode 100644 index 00000000..4da54880 Binary files /dev/null and b/lost+found/tmp_obj_NbpG5O-4scy8K differ diff --git a/lost+found/tmp_obj_NbyPew-NAqGbd b/lost+found/tmp_obj_NbyPew-NAqGbd new file mode 100644 index 00000000..d5c69747 --- /dev/null +++ b/lost+found/tmp_obj_NbyPew-NAqGbd @@ -0,0 +1,3 @@ +xTQo03@:UTHH2 J7wNR6^w}ݗ,YBӽyw + m :MRTHnb|S)DO{+2\KǦº3a̵ƹ,qpOYYǝ烵8xv,wR`5Fq'l8'MXac/(N0NFwQN kT~5~VhEu%5W ÷~1{>nj:LJ-h^&=pNDY,zmΨ*)O5z@hVU _9 %{S5^FDSJDg& р(O4v:Ѩ`ar@C_˟g <-Ͻugy qy=헭"Ä+j3r>fp'eF?Yֻz&$Gb{ v}  m{։$h4؋ }?jm \ No newline at end of file diff --git a/lost+found/tmp_obj_STHIV5-nNlFta b/lost+found/tmp_obj_STHIV5-nNlFta new file mode 100644 index 00000000..96fdfac8 Binary files /dev/null and b/lost+found/tmp_obj_STHIV5-nNlFta differ diff --git a/lost+found/tmp_obj_SXeH0S-hm6F2k b/lost+found/tmp_obj_SXeH0S-hm6F2k new file mode 100644 index 00000000..08c8d269 Binary files /dev/null and b/lost+found/tmp_obj_SXeH0S-hm6F2k differ diff --git a/lost+found/tmp_obj_SbNjsv-6GTA7w b/lost+found/tmp_obj_SbNjsv-6GTA7w new file mode 100644 index 00000000..dcea0591 Binary files /dev/null and b/lost+found/tmp_obj_SbNjsv-6GTA7w differ diff --git a/lost+found/tmp_obj_SeN29a-wHlyzm b/lost+found/tmp_obj_SeN29a-wHlyzm new file mode 100644 index 00000000..decd7006 Binary files /dev/null and b/lost+found/tmp_obj_SeN29a-wHlyzm differ diff --git a/lost+found/tmp_obj_Sea3Zc-rgG2di b/lost+found/tmp_obj_Sea3Zc-rgG2di new file mode 100644 index 00000000..8a0e3422 Binary files /dev/null and b/lost+found/tmp_obj_Sea3Zc-rgG2di differ diff --git a/lost+found/tmp_obj_SejgVj-J3gqQO b/lost+found/tmp_obj_SejgVj-J3gqQO new file mode 100644 index 00000000..94d98bdd --- /dev/null +++ b/lost+found/tmp_obj_SejgVj-J3gqQO @@ -0,0 +1,2 @@ +xeRMO0_1GGDV C[@ a8841NG@;v6+|'޼Tm ggrٵA.y-]K^{KY JF̥#855Z:Mm>0wR͓G '+p|qeUW VShLF,5歰ȅhio&xj#|MHB4wCb$_r +p'rHi5RpEY;'Q9r 4@;+Iv s' 8*฀sG0ax0[wl]ljt« el7]$,pz`-`[m;cG6?* > \ No newline at end of file diff --git a/lost+found/tmp_obj_SgTHbc-Rm62xH b/lost+found/tmp_obj_SgTHbc-Rm62xH new file mode 100644 index 00000000..65751bee Binary files /dev/null and b/lost+found/tmp_obj_SgTHbc-Rm62xH differ diff --git a/lost+found/tmp_obj_SpTIaK-ckg0if b/lost+found/tmp_obj_SpTIaK-ckg0if new file mode 100644 index 00000000..bb460402 Binary files /dev/null and b/lost+found/tmp_obj_SpTIaK-ckg0if differ diff --git a/lost+found/tmp_obj_SspMLV-V5pH2Q b/lost+found/tmp_obj_SspMLV-V5pH2Q new file mode 100644 index 00000000..e6315498 Binary files /dev/null and b/lost+found/tmp_obj_SspMLV-V5pH2Q differ diff --git a/lost+found/tmp_obj_TJpV9V-N0s2NR b/lost+found/tmp_obj_TJpV9V-N0s2NR new file mode 100644 index 00000000..7cf5480f Binary files /dev/null and b/lost+found/tmp_obj_TJpV9V-N0s2NR differ diff --git a/lost+found/tmp_obj_TKRLUF-QfRWg6 b/lost+found/tmp_obj_TKRLUF-QfRWg6 new file mode 100644 index 00000000..26d99a49 Binary files /dev/null and b/lost+found/tmp_obj_TKRLUF-QfRWg6 differ diff --git a/lost+found/tmp_obj_TLY0rd-KZEMub b/lost+found/tmp_obj_TLY0rd-KZEMub new file mode 100644 index 00000000..898ad46c Binary files /dev/null and b/lost+found/tmp_obj_TLY0rd-KZEMub differ diff --git a/lost+found/tmp_obj_TLyZkT-04LE24 b/lost+found/tmp_obj_TLyZkT-04LE24 new file mode 100644 index 00000000..89765ec5 Binary files /dev/null and b/lost+found/tmp_obj_TLyZkT-04LE24 differ diff --git a/lost+found/tmp_obj_TPVi6a-ubrZ77 b/lost+found/tmp_obj_TPVi6a-ubrZ77 new file mode 100644 index 00000000..f40c877d Binary files /dev/null and b/lost+found/tmp_obj_TPVi6a-ubrZ77 differ diff --git a/lost+found/tmp_obj_TR2AuM-4EwTGk b/lost+found/tmp_obj_TR2AuM-4EwTGk new file mode 100644 index 00000000..3174661f Binary files /dev/null and b/lost+found/tmp_obj_TR2AuM-4EwTGk differ diff --git a/lost+found/tmp_obj_TUr98b-ooIM6N b/lost+found/tmp_obj_TUr98b-ooIM6N new file mode 100644 index 00000000..fa67da81 Binary files /dev/null and b/lost+found/tmp_obj_TUr98b-ooIM6N differ diff --git a/lost+found/tmp_obj_TVuDwB-RdRs1h b/lost+found/tmp_obj_TVuDwB-RdRs1h new file mode 100644 index 00000000..32833ef4 Binary files /dev/null and b/lost+found/tmp_obj_TVuDwB-RdRs1h differ diff --git a/lost+found/tmp_obj_TZfSLf-Ko3jF1 b/lost+found/tmp_obj_TZfSLf-Ko3jF1 new file mode 100644 index 00000000..90585638 Binary files /dev/null and b/lost+found/tmp_obj_TZfSLf-Ko3jF1 differ diff --git a/lost+found/tmp_obj_Talhxf-fs5zjY b/lost+found/tmp_obj_Talhxf-fs5zjY new file mode 100644 index 00000000..df680f45 Binary files /dev/null and b/lost+found/tmp_obj_Talhxf-fs5zjY differ diff --git a/lost+found/tmp_obj_Tp5MK8-cCvoip b/lost+found/tmp_obj_Tp5MK8-cCvoip new file mode 100644 index 00000000..f0dddbc4 Binary files /dev/null and b/lost+found/tmp_obj_Tp5MK8-cCvoip differ diff --git a/lost+found/tmp_obj_Tq7uk2-DqOvHC b/lost+found/tmp_obj_Tq7uk2-DqOvHC new file mode 100644 index 00000000..f1950d84 Binary files /dev/null and b/lost+found/tmp_obj_Tq7uk2-DqOvHC differ diff --git a/lost+found/tmp_obj_TrDjlG-COoMDT b/lost+found/tmp_obj_TrDjlG-COoMDT new file mode 100644 index 00000000..d23016fa Binary files /dev/null and b/lost+found/tmp_obj_TrDjlG-COoMDT differ diff --git a/lost+found/tmp_obj_TuBTMA-fnjsWc b/lost+found/tmp_obj_TuBTMA-fnjsWc new file mode 100644 index 00000000..0bc53d59 Binary files /dev/null and b/lost+found/tmp_obj_TuBTMA-fnjsWc differ diff --git a/lost+found/tmp_obj_TujvuK-hZ2njM b/lost+found/tmp_obj_TujvuK-hZ2njM new file mode 100644 index 00000000..bd6e9627 Binary files /dev/null and b/lost+found/tmp_obj_TujvuK-hZ2njM differ diff --git a/lost+found/tmp_obj_TwYgjB-8F0wph b/lost+found/tmp_obj_TwYgjB-8F0wph new file mode 100644 index 00000000..9859cdff Binary files /dev/null and b/lost+found/tmp_obj_TwYgjB-8F0wph differ diff --git a/lost+found/tmp_obj_TyseUb-j8WQOi b/lost+found/tmp_obj_TyseUb-j8WQOi new file mode 100644 index 00000000..9722602b Binary files /dev/null and b/lost+found/tmp_obj_TyseUb-j8WQOi differ diff --git a/lost+found/tmp_obj_U9k5sJ-wRtyGp b/lost+found/tmp_obj_U9k5sJ-wRtyGp new file mode 100644 index 00000000..e626d32a Binary files /dev/null and b/lost+found/tmp_obj_U9k5sJ-wRtyGp differ diff --git a/lost+found/tmp_obj_UBDeb4-KIXuqW b/lost+found/tmp_obj_UBDeb4-KIXuqW new file mode 100644 index 00000000..11206281 Binary files /dev/null and b/lost+found/tmp_obj_UBDeb4-KIXuqW differ diff --git a/lost+found/tmp_obj_UFocwV-pHHawN b/lost+found/tmp_obj_UFocwV-pHHawN new file mode 100644 index 00000000..01c27301 Binary files /dev/null and b/lost+found/tmp_obj_UFocwV-pHHawN differ diff --git a/lost+found/tmp_obj_UIsUni-VR5YNm b/lost+found/tmp_obj_UIsUni-VR5YNm new file mode 100644 index 00000000..34b56580 Binary files /dev/null and b/lost+found/tmp_obj_UIsUni-VR5YNm differ diff --git a/lost+found/tmp_obj_UP4mvg-zD7h1S b/lost+found/tmp_obj_UP4mvg-zD7h1S new file mode 100644 index 00000000..36963cec Binary files /dev/null and b/lost+found/tmp_obj_UP4mvg-zD7h1S differ diff --git a/lost+found/tmp_obj_UPD6Lb-Q9h0vw b/lost+found/tmp_obj_UPD6Lb-Q9h0vw new file mode 100644 index 00000000..88413035 Binary files /dev/null and b/lost+found/tmp_obj_UPD6Lb-Q9h0vw differ diff --git a/lost+found/tmp_obj_UUxk82-v7yW77 b/lost+found/tmp_obj_UUxk82-v7yW77 new file mode 100644 index 00000000..30c6d476 Binary files /dev/null and b/lost+found/tmp_obj_UUxk82-v7yW77 differ diff --git a/lost+found/tmp_obj_UYvESb-scwDhn b/lost+found/tmp_obj_UYvESb-scwDhn new file mode 100644 index 00000000..4c7971bd Binary files /dev/null and b/lost+found/tmp_obj_UYvESb-scwDhn differ diff --git a/lost+found/tmp_obj_UcdJkZ-oZDIqZ b/lost+found/tmp_obj_UcdJkZ-oZDIqZ new file mode 100644 index 00000000..9c48bf6c Binary files /dev/null and b/lost+found/tmp_obj_UcdJkZ-oZDIqZ differ diff --git a/lost+found/tmp_obj_UdeXHP-Z5rRpI b/lost+found/tmp_obj_UdeXHP-Z5rRpI new file mode 100644 index 00000000..10562a00 Binary files /dev/null and b/lost+found/tmp_obj_UdeXHP-Z5rRpI differ diff --git a/lost+found/tmp_obj_UigIGb-WGccNO b/lost+found/tmp_obj_UigIGb-WGccNO new file mode 100644 index 00000000..b2101ebc Binary files /dev/null and b/lost+found/tmp_obj_UigIGb-WGccNO differ diff --git a/lost+found/tmp_obj_UnpXCL-8IAjOa b/lost+found/tmp_obj_UnpXCL-8IAjOa new file mode 100644 index 00000000..5d1a41f4 Binary files /dev/null and b/lost+found/tmp_obj_UnpXCL-8IAjOa differ diff --git a/lost+found/tmp_obj_UtFmZj-I0hSzc b/lost+found/tmp_obj_UtFmZj-I0hSzc new file mode 100644 index 00000000..d99b36d0 Binary files /dev/null and b/lost+found/tmp_obj_UtFmZj-I0hSzc differ diff --git a/lost+found/tmp_obj_UvWjck-4gxJt0 b/lost+found/tmp_obj_UvWjck-4gxJt0 new file mode 100644 index 00000000..58a46fa1 Binary files /dev/null and b/lost+found/tmp_obj_UvWjck-4gxJt0 differ diff --git a/lost+found/tmp_obj_UvymvC-l0DyFd b/lost+found/tmp_obj_UvymvC-l0DyFd new file mode 100644 index 00000000..9929e7f7 Binary files /dev/null and b/lost+found/tmp_obj_UvymvC-l0DyFd differ diff --git a/lost+found/tmp_obj_V5FXPK-9Uu1fM b/lost+found/tmp_obj_V5FXPK-9Uu1fM new file mode 100644 index 00000000..541d4bf8 Binary files /dev/null and b/lost+found/tmp_obj_V5FXPK-9Uu1fM differ diff --git a/lost+found/tmp_obj_V5nKzV-sRsgBI b/lost+found/tmp_obj_V5nKzV-sRsgBI new file mode 100644 index 00000000..6d22a8c8 Binary files /dev/null and b/lost+found/tmp_obj_V5nKzV-sRsgBI differ diff --git a/lost+found/tmp_obj_VA9296-LTKC9e b/lost+found/tmp_obj_VA9296-LTKC9e new file mode 100644 index 00000000..91cd1687 Binary files /dev/null and b/lost+found/tmp_obj_VA9296-LTKC9e differ diff --git a/lost+found/tmp_obj_VAVIVI-yRIotU b/lost+found/tmp_obj_VAVIVI-yRIotU new file mode 100644 index 00000000..296daa78 Binary files /dev/null and b/lost+found/tmp_obj_VAVIVI-yRIotU differ diff --git a/lost+found/tmp_obj_VEdEPH-Q1SPY4 b/lost+found/tmp_obj_VEdEPH-Q1SPY4 new file mode 100644 index 00000000..1b41a2d0 --- /dev/null +++ b/lost+found/tmp_obj_VEdEPH-Q1SPY4 @@ -0,0 +1 @@ +xQ=k0_Ĵdh C KvwUTȊM(99.]dJMJ[8Ja5"" 뮱hfG(k'ʞ)%wyg$ewy \ No newline at end of file diff --git a/lost+found/tmp_obj_VKYKvh-tejJto b/lost+found/tmp_obj_VKYKvh-tejJto new file mode 100644 index 00000000..456de109 Binary files /dev/null and b/lost+found/tmp_obj_VKYKvh-tejJto differ diff --git a/lost+found/tmp_obj_VPvebX-LSZPsQ b/lost+found/tmp_obj_VPvebX-LSZPsQ new file mode 100644 index 00000000..5f67297f Binary files /dev/null and b/lost+found/tmp_obj_VPvebX-LSZPsQ differ diff --git a/lost+found/tmp_obj_VQAXYY-681h4V b/lost+found/tmp_obj_VQAXYY-681h4V new file mode 100644 index 00000000..2bcc4a38 Binary files /dev/null and b/lost+found/tmp_obj_VQAXYY-681h4V differ diff --git a/lost+found/tmp_obj_VZ1H6W-zt35O6 b/lost+found/tmp_obj_VZ1H6W-zt35O6 new file mode 100644 index 00000000..decca913 --- /dev/null +++ b/lost+found/tmp_obj_VZ1H6W-zt35O6 @@ -0,0 +1,9 @@ +xYMlDo44N6KӠM4?MlRP 4i6Mbp )T+pBDOH  B q7oEGy3ޛٳϛt|ޮ} +9}/cuԕrf.+`$ȟ 1r2iku8""""""@l^U} ;~S29!W5~ +@B}|x w5EAN87'䜐A3;#PN~qߜ!!d؆,G,LR)wҤ}T Y T,jz2]"%ek%IQJLj)<˹I-;G7c- (zLΦna֝Bٺ믓 +IeyLiohu6gZZggeqs/<9{5?]ªxL%XnGyb6?bf;e^0*@SDMZѬL<۲;rj5dg^&ұ)tluI6$Zec[qޅuUju"|l|4CS&NjnưuΛA[4MuFW3ɥ'rw^mu]UR[V?NtGh}QF|O֠VL+MI.+إUW|npmU%U,-mXbSԇ[LPIhG2$h~.{kwlʰi{ݑh$uC$!$aU~mf[Y;;I^b/<>fowv]g/DP2AT`=؎؉N$ЍǑN`: c6 +i\sx/2;x +>U|/OY\gHڣb\lqzI<+6vJ +6nihy{f.7SgO"-x+˘^j9瑴㱘 $i!1E-!˾=JL-# +m[fE5[iasm&吒29HkApU>dٷĽW;xWMBk64b7ZЊ6 ~<-'M:ۍ@:Ypzj/jkǩ wy?'!.9!IC?wL \ No newline at end of file diff --git a/lost+found/tmp_obj_Va1Y9h-Qyyk50 b/lost+found/tmp_obj_Va1Y9h-Qyyk50 new file mode 100644 index 00000000..f5b90e06 Binary files /dev/null and b/lost+found/tmp_obj_Va1Y9h-Qyyk50 differ diff --git a/lost+found/tmp_obj_Vbw2jf-qCuKMC b/lost+found/tmp_obj_Vbw2jf-qCuKMC new file mode 100644 index 00000000..4138d961 Binary files /dev/null and b/lost+found/tmp_obj_Vbw2jf-qCuKMC differ diff --git a/lost+found/tmp_obj_Vc0FLc-cDcqRk b/lost+found/tmp_obj_Vc0FLc-cDcqRk new file mode 100644 index 00000000..ff697084 Binary files /dev/null and b/lost+found/tmp_obj_Vc0FLc-cDcqRk differ diff --git a/lost+found/tmp_obj_Vesyse-6YGOQf b/lost+found/tmp_obj_Vesyse-6YGOQf new file mode 100644 index 00000000..d851cae7 Binary files /dev/null and b/lost+found/tmp_obj_Vesyse-6YGOQf differ diff --git a/lost+found/tmp_obj_VhnwWX-8bLBYK b/lost+found/tmp_obj_VhnwWX-8bLBYK new file mode 100644 index 00000000..4f59a455 Binary files /dev/null and b/lost+found/tmp_obj_VhnwWX-8bLBYK differ diff --git a/lost+found/tmp_obj_VjvPia-1fbnyx b/lost+found/tmp_obj_VjvPia-1fbnyx new file mode 100644 index 00000000..cd63cc7d Binary files /dev/null and b/lost+found/tmp_obj_VjvPia-1fbnyx differ diff --git a/lost+found/tmp_obj_VlU4P6-NbVwKJ b/lost+found/tmp_obj_VlU4P6-NbVwKJ new file mode 100644 index 00000000..dc89794e Binary files /dev/null and b/lost+found/tmp_obj_VlU4P6-NbVwKJ differ diff --git a/lost+found/tmp_obj_VnUNVj-qz2gwG b/lost+found/tmp_obj_VnUNVj-qz2gwG new file mode 100644 index 00000000..e358aeb2 Binary files /dev/null and b/lost+found/tmp_obj_VnUNVj-qz2gwG differ diff --git a/lost+found/tmp_obj_Vndjwl-jowzWy b/lost+found/tmp_obj_Vndjwl-jowzWy new file mode 100644 index 00000000..c3f95b35 Binary files /dev/null and b/lost+found/tmp_obj_Vndjwl-jowzWy differ diff --git a/lost+found/tmp_obj_VxSwnf-V0MPU7 b/lost+found/tmp_obj_VxSwnf-V0MPU7 new file mode 100644 index 00000000..f53cada7 Binary files /dev/null and b/lost+found/tmp_obj_VxSwnf-V0MPU7 differ diff --git a/lost+found/tmp_obj_VyG15J-iqfgpp b/lost+found/tmp_obj_VyG15J-iqfgpp new file mode 100644 index 00000000..7f7ffbe1 Binary files /dev/null and b/lost+found/tmp_obj_VyG15J-iqfgpp differ diff --git a/lost+found/tmp_obj_W3O4Jv-oEw25o b/lost+found/tmp_obj_W3O4Jv-oEw25o new file mode 100644 index 00000000..e09ea838 Binary files /dev/null and b/lost+found/tmp_obj_W3O4Jv-oEw25o differ diff --git a/lost+found/tmp_obj_W3wSKl-oFN1gB b/lost+found/tmp_obj_W3wSKl-oFN1gB new file mode 100644 index 00000000..557a5916 Binary files /dev/null and b/lost+found/tmp_obj_W3wSKl-oFN1gB differ diff --git a/lost+found/tmp_obj_WDO3CU-y81ezx b/lost+found/tmp_obj_WDO3CU-y81ezx new file mode 100644 index 00000000..e938ce62 Binary files /dev/null and b/lost+found/tmp_obj_WDO3CU-y81ezx differ diff --git a/lost+found/tmp_obj_WIDzCe-G7wJCH b/lost+found/tmp_obj_WIDzCe-G7wJCH new file mode 100644 index 00000000..4ec3f548 Binary files /dev/null and b/lost+found/tmp_obj_WIDzCe-G7wJCH differ diff --git a/lost+found/tmp_obj_WIWd82-95b5ua b/lost+found/tmp_obj_WIWd82-95b5ua new file mode 100644 index 00000000..eb7ce933 Binary files /dev/null and b/lost+found/tmp_obj_WIWd82-95b5ua differ diff --git a/lost+found/tmp_obj_WU0gbw-KsPa2E b/lost+found/tmp_obj_WU0gbw-KsPa2E new file mode 100644 index 00000000..f0b1df79 Binary files /dev/null and b/lost+found/tmp_obj_WU0gbw-KsPa2E differ diff --git a/lost+found/tmp_obj_WVFRQc-Q1b1rP b/lost+found/tmp_obj_WVFRQc-Q1b1rP new file mode 100644 index 00000000..1d19f5e1 Binary files /dev/null and b/lost+found/tmp_obj_WVFRQc-Q1b1rP differ diff --git a/lost+found/tmp_obj_WVgpXp-IZfFMV b/lost+found/tmp_obj_WVgpXp-IZfFMV new file mode 100644 index 00000000..61c83dd6 Binary files /dev/null and b/lost+found/tmp_obj_WVgpXp-IZfFMV differ diff --git a/lost+found/tmp_obj_WYH0sH-WOOGRZ b/lost+found/tmp_obj_WYH0sH-WOOGRZ new file mode 100644 index 00000000..f2889f05 Binary files /dev/null and b/lost+found/tmp_obj_WYH0sH-WOOGRZ differ diff --git a/lost+found/tmp_obj_WcXPGO-mr4h2C b/lost+found/tmp_obj_WcXPGO-mr4h2C new file mode 100644 index 00000000..5b2b48c3 Binary files /dev/null and b/lost+found/tmp_obj_WcXPGO-mr4h2C differ diff --git a/lost+found/tmp_obj_WjBnNm-NDC9YV b/lost+found/tmp_obj_WjBnNm-NDC9YV new file mode 100644 index 00000000..685831ef Binary files /dev/null and b/lost+found/tmp_obj_WjBnNm-NDC9YV differ diff --git a/lost+found/tmp_obj_WryLpb-ThqWnl b/lost+found/tmp_obj_WryLpb-ThqWnl new file mode 100644 index 00000000..fd6f84a0 Binary files /dev/null and b/lost+found/tmp_obj_WryLpb-ThqWnl differ diff --git a/lost+found/tmp_obj_WtDk6X-iTfh28 b/lost+found/tmp_obj_WtDk6X-iTfh28 new file mode 100644 index 00000000..eac73043 Binary files /dev/null and b/lost+found/tmp_obj_WtDk6X-iTfh28 differ diff --git a/lost+found/tmp_obj_XDFYnr-ZlbhK2 b/lost+found/tmp_obj_XDFYnr-ZlbhK2 new file mode 100644 index 00000000..b2298241 Binary files /dev/null and b/lost+found/tmp_obj_XDFYnr-ZlbhK2 differ diff --git a/lost+found/tmp_obj_XEiyiH-DpehGO b/lost+found/tmp_obj_XEiyiH-DpehGO new file mode 100644 index 00000000..d167b977 Binary files /dev/null and b/lost+found/tmp_obj_XEiyiH-DpehGO differ diff --git a/lost+found/tmp_obj_XNGzef-qqxkQW b/lost+found/tmp_obj_XNGzef-qqxkQW new file mode 100644 index 00000000..37bb0d7a --- /dev/null +++ b/lost+found/tmp_obj_XNGzef-qqxkQW @@ -0,0 +1,5 @@ +xn6SܝgȕO@An:hcs"2fз t9^=l9v&Es/,Jx297F,J(0Mh8Mbn~21gWJnE"XQ{JZM8"\+i_or+Nje- vBOJHktd-9%CzXQ +Fdvur%? +YP&k;'h x 5[ƾڔ@;3h+S`SڄBzY4Rzװmx~!P=T} |}r P ˜NF|" a4^E^c r#P%*_G|JǀN EK\mRJ#!kg4jzI/*E%ICy~x`+*]c(_I1 InA-\F1jЬN53qR+fUs85>@Bg군~bYP}ڍfl;,ˆ<ˮv˲ ۡh[:Ǚ͎Φ/{Hv +& ƧbIg%gRn^ATbOHs)&סhL.'/m{[igQ+uhiisG/ssG;*xk#|Rы*4@cεmNg}tigV4/[T]Gjtޅ7B*{%k0|bdDI \ No newline at end of file diff --git a/lost+found/tmp_obj_XaCNai-W25uve b/lost+found/tmp_obj_XaCNai-W25uve new file mode 100644 index 00000000..62353ea5 Binary files /dev/null and b/lost+found/tmp_obj_XaCNai-W25uve differ diff --git a/lost+found/tmp_obj_Xal59u-2rV5LJ b/lost+found/tmp_obj_Xal59u-2rV5LJ new file mode 100644 index 00000000..12fe559a Binary files /dev/null and b/lost+found/tmp_obj_Xal59u-2rV5LJ differ diff --git a/lost+found/tmp_obj_Xe09te-8bmM42 b/lost+found/tmp_obj_Xe09te-8bmM42 new file mode 100644 index 00000000..9d475e47 Binary files /dev/null and b/lost+found/tmp_obj_Xe09te-8bmM42 differ diff --git a/lost+found/tmp_obj_Xgakhi-lu2CHu b/lost+found/tmp_obj_Xgakhi-lu2CHu new file mode 100644 index 00000000..3bb14dd6 Binary files /dev/null and b/lost+found/tmp_obj_Xgakhi-lu2CHu differ diff --git a/lost+found/tmp_obj_Xgglel-0ggCCX b/lost+found/tmp_obj_Xgglel-0ggCCX new file mode 100644 index 00000000..971c96a0 Binary files /dev/null and b/lost+found/tmp_obj_Xgglel-0ggCCX differ diff --git a/lost+found/tmp_obj_XlY179-5DsM45 b/lost+found/tmp_obj_XlY179-5DsM45 new file mode 100644 index 00000000..812ab818 Binary files /dev/null and b/lost+found/tmp_obj_XlY179-5DsM45 differ diff --git a/lost+found/tmp_obj_Xn69Dq-JhrXR3 b/lost+found/tmp_obj_Xn69Dq-JhrXR3 new file mode 100644 index 00000000..750e1836 Binary files /dev/null and b/lost+found/tmp_obj_Xn69Dq-JhrXR3 differ diff --git a/lost+found/tmp_obj_Xpexzt-zGGRUJ b/lost+found/tmp_obj_Xpexzt-zGGRUJ new file mode 100644 index 00000000..1f2b5cf2 Binary files /dev/null and b/lost+found/tmp_obj_Xpexzt-zGGRUJ differ diff --git a/lost+found/tmp_obj_Xw9LPw-bHsprk b/lost+found/tmp_obj_Xw9LPw-bHsprk new file mode 100644 index 00000000..71de9eb0 Binary files /dev/null and b/lost+found/tmp_obj_Xw9LPw-bHsprk differ diff --git a/lost+found/tmp_obj_XyUqkT-JATdEc b/lost+found/tmp_obj_XyUqkT-JATdEc new file mode 100644 index 00000000..8714bb1b Binary files /dev/null and b/lost+found/tmp_obj_XyUqkT-JATdEc differ diff --git a/lost+found/tmp_obj_Y0GvkO-MCzzU8 b/lost+found/tmp_obj_Y0GvkO-MCzzU8 new file mode 100644 index 00000000..bc26ccc3 Binary files /dev/null and b/lost+found/tmp_obj_Y0GvkO-MCzzU8 differ diff --git a/lost+found/tmp_obj_Y4unw3-ueMoKn b/lost+found/tmp_obj_Y4unw3-ueMoKn new file mode 100644 index 00000000..5f8dd6ed Binary files /dev/null and b/lost+found/tmp_obj_Y4unw3-ueMoKn differ diff --git a/lost+found/tmp_obj_Y5pFTr-nG8X6D b/lost+found/tmp_obj_Y5pFTr-nG8X6D new file mode 100644 index 00000000..9230db34 Binary files /dev/null and b/lost+found/tmp_obj_Y5pFTr-nG8X6D differ diff --git a/lost+found/tmp_obj_Y6jXfc-xXv4WB b/lost+found/tmp_obj_Y6jXfc-xXv4WB new file mode 100644 index 00000000..c4e451d7 Binary files /dev/null and b/lost+found/tmp_obj_Y6jXfc-xXv4WB differ diff --git a/lost+found/tmp_obj_YEvjMg-uXitWC b/lost+found/tmp_obj_YEvjMg-uXitWC new file mode 100644 index 00000000..4622ef0c Binary files /dev/null and b/lost+found/tmp_obj_YEvjMg-uXitWC differ diff --git a/lost+found/tmp_obj_YGapAr-gEQ5SH b/lost+found/tmp_obj_YGapAr-gEQ5SH new file mode 100644 index 00000000..c2f862c4 Binary files /dev/null and b/lost+found/tmp_obj_YGapAr-gEQ5SH differ diff --git a/lost+found/tmp_obj_YJgBwf-7dS0iw b/lost+found/tmp_obj_YJgBwf-7dS0iw new file mode 100644 index 00000000..06bee04c Binary files /dev/null and b/lost+found/tmp_obj_YJgBwf-7dS0iw differ diff --git a/lost+found/tmp_obj_YbTqef-t1Hd1Y b/lost+found/tmp_obj_YbTqef-t1Hd1Y new file mode 100644 index 00000000..b3999286 Binary files /dev/null and b/lost+found/tmp_obj_YbTqef-t1Hd1Y differ diff --git a/lost+found/tmp_obj_YdcNUU-LZ38TB b/lost+found/tmp_obj_YdcNUU-LZ38TB new file mode 100644 index 00000000..b48fd169 Binary files /dev/null and b/lost+found/tmp_obj_YdcNUU-LZ38TB differ diff --git a/lost+found/tmp_obj_YemX97-lOs44B b/lost+found/tmp_obj_YemX97-lOs44B new file mode 100644 index 00000000..2c667c74 Binary files /dev/null and b/lost+found/tmp_obj_YemX97-lOs44B differ diff --git a/lost+found/tmp_obj_YflGya-498Ax6 b/lost+found/tmp_obj_YflGya-498Ax6 new file mode 100644 index 00000000..b7cdcfeb Binary files /dev/null and b/lost+found/tmp_obj_YflGya-498Ax6 differ diff --git a/lost+found/tmp_obj_Ykyz4T-gg4Fqn b/lost+found/tmp_obj_Ykyz4T-gg4Fqn new file mode 100644 index 00000000..bea97c93 Binary files /dev/null and b/lost+found/tmp_obj_Ykyz4T-gg4Fqn differ diff --git a/lost+found/tmp_obj_Z4ETav-83i7bA b/lost+found/tmp_obj_Z4ETav-83i7bA new file mode 100644 index 00000000..0063855d Binary files /dev/null and b/lost+found/tmp_obj_Z4ETav-83i7bA differ diff --git a/lost+found/tmp_obj_Z4rEBg-uWiBBo b/lost+found/tmp_obj_Z4rEBg-uWiBBo new file mode 100644 index 00000000..3cca710f Binary files /dev/null and b/lost+found/tmp_obj_Z4rEBg-uWiBBo differ diff --git a/lost+found/tmp_obj_ZDq8XM-Jby1v4 b/lost+found/tmp_obj_ZDq8XM-Jby1v4 new file mode 100644 index 00000000..6c4e09d6 Binary files /dev/null and b/lost+found/tmp_obj_ZDq8XM-Jby1v4 differ diff --git a/lost+found/tmp_obj_ZEP9yU-cz1k5J b/lost+found/tmp_obj_ZEP9yU-cz1k5J new file mode 100644 index 00000000..aba73ed7 Binary files /dev/null and b/lost+found/tmp_obj_ZEP9yU-cz1k5J differ diff --git a/lost+found/tmp_obj_ZIgyHM-2jsQKu b/lost+found/tmp_obj_ZIgyHM-2jsQKu new file mode 100644 index 00000000..6ce297c6 Binary files /dev/null and b/lost+found/tmp_obj_ZIgyHM-2jsQKu differ diff --git a/lost+found/tmp_obj_ZNfukR-hjFFek b/lost+found/tmp_obj_ZNfukR-hjFFek new file mode 100644 index 00000000..5559b349 Binary files /dev/null and b/lost+found/tmp_obj_ZNfukR-hjFFek differ diff --git a/lost+found/tmp_obj_ZRWlqW-8ot9Ru b/lost+found/tmp_obj_ZRWlqW-8ot9Ru new file mode 100644 index 00000000..872051b9 Binary files /dev/null and b/lost+found/tmp_obj_ZRWlqW-8ot9Ru differ diff --git a/lost+found/tmp_obj_ZWFNRd-6BsqFF b/lost+found/tmp_obj_ZWFNRd-6BsqFF new file mode 100644 index 00000000..4e1486f2 Binary files /dev/null and b/lost+found/tmp_obj_ZWFNRd-6BsqFF differ diff --git a/lost+found/tmp_obj_ZXz7YU-2CWAuf b/lost+found/tmp_obj_ZXz7YU-2CWAuf new file mode 100644 index 00000000..7a68b926 Binary files /dev/null and b/lost+found/tmp_obj_ZXz7YU-2CWAuf differ diff --git a/lost+found/tmp_obj_ZfmMpc-VO57cj b/lost+found/tmp_obj_ZfmMpc-VO57cj new file mode 100644 index 00000000..5297a992 Binary files /dev/null and b/lost+found/tmp_obj_ZfmMpc-VO57cj differ diff --git a/lost+found/tmp_obj_ZhDap4-GTlk6l b/lost+found/tmp_obj_ZhDap4-GTlk6l new file mode 100644 index 00000000..934b7f65 Binary files /dev/null and b/lost+found/tmp_obj_ZhDap4-GTlk6l differ diff --git a/lost+found/tmp_obj_Zokc35-mirAR6 b/lost+found/tmp_obj_Zokc35-mirAR6 new file mode 100644 index 00000000..4605da64 Binary files /dev/null and b/lost+found/tmp_obj_Zokc35-mirAR6 differ diff --git a/lost+found/tmp_obj_ZtQJGr-eDWvqM b/lost+found/tmp_obj_ZtQJGr-eDWvqM new file mode 100644 index 00000000..225af0c2 Binary files /dev/null and b/lost+found/tmp_obj_ZtQJGr-eDWvqM differ diff --git a/lost+found/tmp_obj_aCQbyw-o2haGi b/lost+found/tmp_obj_aCQbyw-o2haGi new file mode 100644 index 00000000..a949a574 Binary files /dev/null and b/lost+found/tmp_obj_aCQbyw-o2haGi differ diff --git a/lost+found/tmp_obj_aDYkkb-HpDT5u b/lost+found/tmp_obj_aDYkkb-HpDT5u new file mode 100644 index 00000000..ba40cd74 Binary files /dev/null and b/lost+found/tmp_obj_aDYkkb-HpDT5u differ diff --git a/lost+found/tmp_obj_aFBJPc-Yyg0Co b/lost+found/tmp_obj_aFBJPc-Yyg0Co new file mode 100644 index 00000000..635fe607 Binary files /dev/null and b/lost+found/tmp_obj_aFBJPc-Yyg0Co differ diff --git a/lost+found/tmp_obj_aGwspg-oLPyyU b/lost+found/tmp_obj_aGwspg-oLPyyU new file mode 100644 index 00000000..7bd6d3ee --- /dev/null +++ b/lost+found/tmp_obj_aGwspg-oLPyyU @@ -0,0 +1 @@ +xSM0_mU]. DB+.UN:iM`;)gn=4y1E \ܾ{ӉQڮ]l;m\gY,Q6Z|_p  ݡwXv=};c@c{! 1&TS ExbOz& .GAHH4{:88Xy'hTN {SRI'V$s,c$n^YV)eEEG_]_}wg' ΋SKy|yC$LY2Ő$-0 <:5+mb6L}'eeɦ!\?q;i{\o JiX8,QRLQZ %%Q A|C_t6NX!B#P=FwC})h`9;2GD.kre*5qJB}6a^&R7ͽۨ62ǵ}RQ^cUnUAѮzTa3kdF+lħUPvk ^R?,u3^;HWژ7Wbm@JU{9';=o98:az2.S\NJ͏'JG|vzQGߋ;1{כW% J3)b tlP)˴Cq2 \lT]5h7 aouÚM\Őt fg9t3dq^rU_ h)L _\U6/nghh \ No newline at end of file diff --git a/lost+found/tmp_obj_ehIYaQ-WhR98f b/lost+found/tmp_obj_ehIYaQ-WhR98f new file mode 100644 index 00000000..760c5862 Binary files /dev/null and b/lost+found/tmp_obj_ehIYaQ-WhR98f differ diff --git a/lost+found/tmp_obj_el2AoK-kOhWaB b/lost+found/tmp_obj_el2AoK-kOhWaB new file mode 100644 index 00000000..28b7c398 Binary files /dev/null and b/lost+found/tmp_obj_el2AoK-kOhWaB differ diff --git a/lost+found/tmp_obj_engszh-07OPmb b/lost+found/tmp_obj_engszh-07OPmb new file mode 100644 index 00000000..21c9f751 Binary files /dev/null and b/lost+found/tmp_obj_engszh-07OPmb differ diff --git a/lost+found/tmp_obj_eoDNQl-v8pc2J b/lost+found/tmp_obj_eoDNQl-v8pc2J new file mode 100644 index 00000000..0376c30c Binary files /dev/null and b/lost+found/tmp_obj_eoDNQl-v8pc2J differ diff --git a/lost+found/tmp_obj_erPs3S-cxhXdc b/lost+found/tmp_obj_erPs3S-cxhXdc new file mode 100644 index 00000000..3bc269ef Binary files /dev/null and b/lost+found/tmp_obj_erPs3S-cxhXdc differ diff --git a/lost+found/tmp_obj_etEfm6-YGAXXA b/lost+found/tmp_obj_etEfm6-YGAXXA new file mode 100644 index 00000000..7cba796e Binary files /dev/null and b/lost+found/tmp_obj_etEfm6-YGAXXA differ diff --git a/lost+found/tmp_obj_ez3XQM-PSPtcQ b/lost+found/tmp_obj_ez3XQM-PSPtcQ new file mode 100644 index 00000000..6b897877 Binary files /dev/null and b/lost+found/tmp_obj_ez3XQM-PSPtcQ differ diff --git a/lost+found/tmp_obj_f0qT7x-0D2Yb7 b/lost+found/tmp_obj_f0qT7x-0D2Yb7 new file mode 100644 index 00000000..a16b5d3d Binary files /dev/null and b/lost+found/tmp_obj_f0qT7x-0D2Yb7 differ diff --git a/lost+found/tmp_obj_f6PtrH-4CPJ4J b/lost+found/tmp_obj_f6PtrH-4CPJ4J new file mode 100644 index 00000000..ab5a5274 Binary files /dev/null and b/lost+found/tmp_obj_f6PtrH-4CPJ4J differ diff --git a/lost+found/tmp_obj_f7xe34-X6mJui b/lost+found/tmp_obj_f7xe34-X6mJui new file mode 100644 index 00000000..7d1d9774 Binary files /dev/null and b/lost+found/tmp_obj_f7xe34-X6mJui differ diff --git a/lost+found/tmp_obj_f8bV6l-r1bRWy b/lost+found/tmp_obj_f8bV6l-r1bRWy new file mode 100644 index 00000000..a47f3967 Binary files /dev/null and b/lost+found/tmp_obj_f8bV6l-r1bRWy differ diff --git a/lost+found/tmp_obj_f9Tw8D-VrxuFy b/lost+found/tmp_obj_f9Tw8D-VrxuFy new file mode 100644 index 00000000..5c0b496b Binary files /dev/null and b/lost+found/tmp_obj_f9Tw8D-VrxuFy differ diff --git a/lost+found/tmp_obj_fEzdU1-Drrwo7 b/lost+found/tmp_obj_fEzdU1-Drrwo7 new file mode 100644 index 00000000..a7dbccb8 Binary files /dev/null and b/lost+found/tmp_obj_fEzdU1-Drrwo7 differ diff --git a/lost+found/tmp_obj_fHxXCf-czFYSs b/lost+found/tmp_obj_fHxXCf-czFYSs new file mode 100644 index 00000000..5f865385 Binary files /dev/null and b/lost+found/tmp_obj_fHxXCf-czFYSs differ diff --git a/lost+found/tmp_obj_fUQdYq-A1KUPg b/lost+found/tmp_obj_fUQdYq-A1KUPg new file mode 100644 index 00000000..bb339ba7 Binary files /dev/null and b/lost+found/tmp_obj_fUQdYq-A1KUPg differ diff --git a/lost+found/tmp_obj_fXPLNK-fJ5TAk b/lost+found/tmp_obj_fXPLNK-fJ5TAk new file mode 100644 index 00000000..b567312b Binary files /dev/null and b/lost+found/tmp_obj_fXPLNK-fJ5TAk differ diff --git a/lost+found/tmp_obj_fXm0MS-yoh5OV b/lost+found/tmp_obj_fXm0MS-yoh5OV new file mode 100644 index 00000000..e61e97dc Binary files /dev/null and b/lost+found/tmp_obj_fXm0MS-yoh5OV differ diff --git a/lost+found/tmp_obj_fYxRlp-XoN7mE b/lost+found/tmp_obj_fYxRlp-XoN7mE new file mode 100644 index 00000000..e11e6be4 Binary files /dev/null and b/lost+found/tmp_obj_fYxRlp-XoN7mE differ diff --git a/lost+found/tmp_obj_faSWbG-sNWoQv b/lost+found/tmp_obj_faSWbG-sNWoQv new file mode 100644 index 00000000..0c04b3d2 Binary files /dev/null and b/lost+found/tmp_obj_faSWbG-sNWoQv differ diff --git a/lost+found/tmp_obj_felS0d-J6IXQT b/lost+found/tmp_obj_felS0d-J6IXQT new file mode 100644 index 00000000..cb77e270 --- /dev/null +++ b/lost+found/tmp_obj_felS0d-J6IXQT @@ -0,0 +1,3 @@ +xuTn0_}h{iRi{&S8N{g$jI`Y̛yo)MLdYiV<.yY—ى?ȌHa6 +Id+=Xwdx;~!FȿFm*ͥ~ Zu w+c˕t] +_H wB[N8e Z\$Jjo/6KT`mW$㸨_ƣӠJ;*)lH]r˪t/u L*,MiQd`8P˥V)EN[|Lf6C6k흖)4V#.,S;NYK1 hTmΗ }1 >=*<Ӊq~hOzd1kh'=j _25''C~ĀœX֜QBirQLkMq XgdtjwoUNu-Pu/j#83! 8uDy9*өFp{þI#Qh ů?WW?S`t8ΙB3n}:3pE%4<yX/Y*r-z.@bwC 8uB"M#:moUzr?' \ No newline at end of file diff --git a/lost+found/tmp_obj_fgG4X7-LdSOGX b/lost+found/tmp_obj_fgG4X7-LdSOGX new file mode 100644 index 00000000..a47253ca Binary files /dev/null and b/lost+found/tmp_obj_fgG4X7-LdSOGX differ diff --git a/lost+found/tmp_obj_foMBDb-sUrEIv b/lost+found/tmp_obj_foMBDb-sUrEIv new file mode 100644 index 00000000..935a1083 Binary files /dev/null and b/lost+found/tmp_obj_foMBDb-sUrEIv differ diff --git a/lost+found/tmp_obj_fwpV3t-qDEEAB b/lost+found/tmp_obj_fwpV3t-qDEEAB new file mode 100644 index 00000000..3ccd1b59 Binary files /dev/null and b/lost+found/tmp_obj_fwpV3t-qDEEAB differ diff --git a/lost+found/tmp_obj_fxRHFa-9IzzdM b/lost+found/tmp_obj_fxRHFa-9IzzdM new file mode 100644 index 00000000..1ad3ad7b Binary files /dev/null and b/lost+found/tmp_obj_fxRHFa-9IzzdM differ diff --git a/lost+found/tmp_obj_fyawie-TW8dsU b/lost+found/tmp_obj_fyawie-TW8dsU new file mode 100644 index 00000000..ca6764c8 Binary files /dev/null and b/lost+found/tmp_obj_fyawie-TW8dsU differ diff --git a/lost+found/tmp_obj_g0fmih-gYc6BW b/lost+found/tmp_obj_g0fmih-gYc6BW new file mode 100644 index 00000000..afe87053 Binary files /dev/null and b/lost+found/tmp_obj_g0fmih-gYc6BW differ diff --git a/lost+found/tmp_obj_g682d9-OAxcIf b/lost+found/tmp_obj_g682d9-OAxcIf new file mode 100644 index 00000000..9824650a Binary files /dev/null and b/lost+found/tmp_obj_g682d9-OAxcIf differ diff --git a/lost+found/tmp_obj_g8R32C-koLw1k b/lost+found/tmp_obj_g8R32C-koLw1k new file mode 100644 index 00000000..56a14a2d Binary files /dev/null and b/lost+found/tmp_obj_g8R32C-koLw1k differ diff --git a/lost+found/tmp_obj_g9Pef9-6mDLQF b/lost+found/tmp_obj_g9Pef9-6mDLQF new file mode 100644 index 00000000..35473a8e Binary files /dev/null and b/lost+found/tmp_obj_g9Pef9-6mDLQF differ diff --git a/lost+found/tmp_obj_gAMYDF-Qkbd7S b/lost+found/tmp_obj_gAMYDF-Qkbd7S new file mode 100644 index 00000000..213c72ab Binary files /dev/null and b/lost+found/tmp_obj_gAMYDF-Qkbd7S differ diff --git a/lost+found/tmp_obj_gFkwsN-mSExr3 b/lost+found/tmp_obj_gFkwsN-mSExr3 new file mode 100644 index 00000000..a8dd7c5a Binary files /dev/null and b/lost+found/tmp_obj_gFkwsN-mSExr3 differ diff --git a/lost+found/tmp_obj_gIFEgE-79pWTG b/lost+found/tmp_obj_gIFEgE-79pWTG new file mode 100644 index 00000000..7f1be853 Binary files /dev/null and b/lost+found/tmp_obj_gIFEgE-79pWTG differ diff --git a/lost+found/tmp_obj_gLSHEs-bWWmvb b/lost+found/tmp_obj_gLSHEs-bWWmvb new file mode 100644 index 00000000..720865fd Binary files /dev/null and b/lost+found/tmp_obj_gLSHEs-bWWmvb differ diff --git a/lost+found/tmp_obj_gQSuHQ-n4vJpX b/lost+found/tmp_obj_gQSuHQ-n4vJpX new file mode 100644 index 00000000..312215ae Binary files /dev/null and b/lost+found/tmp_obj_gQSuHQ-n4vJpX differ diff --git a/lost+found/tmp_obj_gYmcKP-gFPGz0 b/lost+found/tmp_obj_gYmcKP-gFPGz0 new file mode 100644 index 00000000..63170dfe Binary files /dev/null and b/lost+found/tmp_obj_gYmcKP-gFPGz0 differ diff --git a/lost+found/tmp_obj_gcplBh-xk5mkZ b/lost+found/tmp_obj_gcplBh-xk5mkZ new file mode 100644 index 00000000..aef0e376 Binary files /dev/null and b/lost+found/tmp_obj_gcplBh-xk5mkZ differ diff --git a/lost+found/tmp_obj_gfQwJf-lDEu3v b/lost+found/tmp_obj_gfQwJf-lDEu3v new file mode 100644 index 00000000..12b0a049 Binary files /dev/null and b/lost+found/tmp_obj_gfQwJf-lDEu3v differ diff --git a/lost+found/tmp_obj_ghbEJj-DB86na b/lost+found/tmp_obj_ghbEJj-DB86na new file mode 100644 index 00000000..9843c187 Binary files /dev/null and b/lost+found/tmp_obj_ghbEJj-DB86na differ diff --git a/lost+found/tmp_obj_gkSSSl-EY1hSR b/lost+found/tmp_obj_gkSSSl-EY1hSR new file mode 100644 index 00000000..197e826a Binary files /dev/null and b/lost+found/tmp_obj_gkSSSl-EY1hSR differ diff --git a/lost+found/tmp_obj_gqB07J-lFnFSd b/lost+found/tmp_obj_gqB07J-lFnFSd new file mode 100644 index 00000000..b400270b Binary files /dev/null and b/lost+found/tmp_obj_gqB07J-lFnFSd differ diff --git a/lost+found/tmp_obj_gwBPkj-cOyCCB b/lost+found/tmp_obj_gwBPkj-cOyCCB new file mode 100644 index 00000000..09337eca Binary files /dev/null and b/lost+found/tmp_obj_gwBPkj-cOyCCB differ diff --git a/lost+found/tmp_obj_gwZsuq-JDYWf4 b/lost+found/tmp_obj_gwZsuq-JDYWf4 new file mode 100644 index 00000000..4807fecd Binary files /dev/null and b/lost+found/tmp_obj_gwZsuq-JDYWf4 differ diff --git a/lost+found/tmp_obj_gzJHjx-YpDzBn b/lost+found/tmp_obj_gzJHjx-YpDzBn new file mode 100644 index 00000000..4f6949f9 Binary files /dev/null and b/lost+found/tmp_obj_gzJHjx-YpDzBn differ diff --git a/lost+found/tmp_obj_h0d3B2-RncrzY b/lost+found/tmp_obj_h0d3B2-RncrzY new file mode 100644 index 00000000..296ba9bc Binary files /dev/null and b/lost+found/tmp_obj_h0d3B2-RncrzY differ diff --git a/lost+found/tmp_obj_h54dAV-FnnR1Q b/lost+found/tmp_obj_h54dAV-FnnR1Q new file mode 100644 index 00000000..deb8c721 Binary files /dev/null and b/lost+found/tmp_obj_h54dAV-FnnR1Q differ diff --git a/lost+found/tmp_obj_h7c8FP-SliNEv b/lost+found/tmp_obj_h7c8FP-SliNEv new file mode 100644 index 00000000..1c676806 Binary files /dev/null and b/lost+found/tmp_obj_h7c8FP-SliNEv differ diff --git a/lost+found/tmp_obj_hBEWeL-eil6fw b/lost+found/tmp_obj_hBEWeL-eil6fw new file mode 100644 index 00000000..39752c93 Binary files /dev/null and b/lost+found/tmp_obj_hBEWeL-eil6fw differ diff --git a/lost+found/tmp_obj_hHlJgr-KZD4Mq b/lost+found/tmp_obj_hHlJgr-KZD4Mq new file mode 100644 index 00000000..bbd50cd1 Binary files /dev/null and b/lost+found/tmp_obj_hHlJgr-KZD4Mq differ diff --git a/lost+found/tmp_obj_hMK2ye-j7W9qj b/lost+found/tmp_obj_hMK2ye-j7W9qj new file mode 100644 index 00000000..ffd521d1 Binary files /dev/null and b/lost+found/tmp_obj_hMK2ye-j7W9qj differ diff --git a/lost+found/tmp_obj_hQoe5M-YDoLS0 b/lost+found/tmp_obj_hQoe5M-YDoLS0 new file mode 100644 index 00000000..01a2fd73 Binary files /dev/null and b/lost+found/tmp_obj_hQoe5M-YDoLS0 differ diff --git a/lost+found/tmp_obj_hQzOfk-MvByKG b/lost+found/tmp_obj_hQzOfk-MvByKG new file mode 100644 index 00000000..2d072f22 Binary files /dev/null and b/lost+found/tmp_obj_hQzOfk-MvByKG differ diff --git a/lost+found/tmp_obj_hXw6Wr-9TuCF9 b/lost+found/tmp_obj_hXw6Wr-9TuCF9 new file mode 100644 index 00000000..ecc7effa Binary files /dev/null and b/lost+found/tmp_obj_hXw6Wr-9TuCF9 differ diff --git a/lost+found/tmp_obj_heenF0-9Q6t5y b/lost+found/tmp_obj_heenF0-9Q6t5y new file mode 100644 index 00000000..6bf90130 Binary files /dev/null and b/lost+found/tmp_obj_heenF0-9Q6t5y differ diff --git a/lost+found/tmp_obj_hhrsGi-jDgvWs b/lost+found/tmp_obj_hhrsGi-jDgvWs new file mode 100644 index 00000000..5161c6a9 Binary files /dev/null and b/lost+found/tmp_obj_hhrsGi-jDgvWs differ diff --git a/lost+found/tmp_obj_hipvXl-DNSUVA b/lost+found/tmp_obj_hipvXl-DNSUVA new file mode 100644 index 00000000..ba446bbc Binary files /dev/null and b/lost+found/tmp_obj_hipvXl-DNSUVA differ diff --git a/lost+found/tmp_obj_hjFLBd-Nd18iB b/lost+found/tmp_obj_hjFLBd-Nd18iB new file mode 100644 index 00000000..e9877ac1 Binary files /dev/null and b/lost+found/tmp_obj_hjFLBd-Nd18iB differ diff --git a/lost+found/tmp_obj_hkNpLb-tngZOv b/lost+found/tmp_obj_hkNpLb-tngZOv new file mode 100644 index 00000000..8c05523e Binary files /dev/null and b/lost+found/tmp_obj_hkNpLb-tngZOv differ diff --git a/lost+found/tmp_obj_hs3ZYm-2OWpxN b/lost+found/tmp_obj_hs3ZYm-2OWpxN new file mode 100644 index 00000000..0b31a964 Binary files /dev/null and b/lost+found/tmp_obj_hs3ZYm-2OWpxN differ diff --git a/lost+found/tmp_obj_hsvZ6C-1axh9x b/lost+found/tmp_obj_hsvZ6C-1axh9x new file mode 100644 index 00000000..dcf0ef34 Binary files /dev/null and b/lost+found/tmp_obj_hsvZ6C-1axh9x differ diff --git a/lost+found/tmp_obj_hvjDjy-NZtLpe b/lost+found/tmp_obj_hvjDjy-NZtLpe new file mode 100644 index 00000000..e6064a16 Binary files /dev/null and b/lost+found/tmp_obj_hvjDjy-NZtLpe differ diff --git a/lost+found/tmp_obj_hzBOBh-Ip6ToE b/lost+found/tmp_obj_hzBOBh-Ip6ToE new file mode 100644 index 00000000..867f9361 Binary files /dev/null and b/lost+found/tmp_obj_hzBOBh-Ip6ToE differ diff --git a/lost+found/tmp_obj_i08V7m-7cKmwk b/lost+found/tmp_obj_i08V7m-7cKmwk new file mode 100644 index 00000000..c585aedb --- /dev/null +++ b/lost+found/tmp_obj_i08V7m-7cKmwk @@ -0,0 +1 @@ +xUMj1 )]\CtǣqD5V@o_kڄd'}z{H#mK \ No newline at end of file diff --git a/lost+found/tmp_obj_juzfcG-VIhhoz b/lost+found/tmp_obj_juzfcG-VIhhoz new file mode 100644 index 00000000..625d3e0e Binary files /dev/null and b/lost+found/tmp_obj_juzfcG-VIhhoz differ diff --git a/lost+found/tmp_obj_jwp96c-DqEOoq b/lost+found/tmp_obj_jwp96c-DqEOoq new file mode 100644 index 00000000..8b402839 Binary files /dev/null and b/lost+found/tmp_obj_jwp96c-DqEOoq differ diff --git a/lost+found/tmp_obj_k4mfsw-8mRDJc b/lost+found/tmp_obj_k4mfsw-8mRDJc new file mode 100644 index 00000000..8b5e820f Binary files /dev/null and b/lost+found/tmp_obj_k4mfsw-8mRDJc differ diff --git a/lost+found/tmp_obj_k9zaIi-Xthh0d b/lost+found/tmp_obj_k9zaIi-Xthh0d new file mode 100644 index 00000000..f2a1a3a3 Binary files /dev/null and b/lost+found/tmp_obj_k9zaIi-Xthh0d differ diff --git a/lost+found/tmp_obj_kANvi8-PAi68q b/lost+found/tmp_obj_kANvi8-PAi68q new file mode 100644 index 00000000..57ed1503 --- /dev/null +++ b/lost+found/tmp_obj_kANvi8-PAi68q @@ -0,0 +1 @@ +xm0 yH̐ `eaĜn&O_ɾ|V e@҈%cТW=Zh#7Zz$u ^${$oxtƑX A?KUYVUa刢W݁>NޣOD3NQlv6/] \ No newline at end of file diff --git a/lost+found/tmp_obj_kBCvJI-6epM1C b/lost+found/tmp_obj_kBCvJI-6epM1C new file mode 100644 index 00000000..8b6a6c4c Binary files /dev/null and b/lost+found/tmp_obj_kBCvJI-6epM1C differ diff --git a/lost+found/tmp_obj_kEn0l0-HKBrOu b/lost+found/tmp_obj_kEn0l0-HKBrOu new file mode 100644 index 00000000..4ba0fc3d Binary files /dev/null and b/lost+found/tmp_obj_kEn0l0-HKBrOu differ diff --git a/lost+found/tmp_obj_kJmDvd-5UngNO b/lost+found/tmp_obj_kJmDvd-5UngNO new file mode 100644 index 00000000..b98d17ed Binary files /dev/null and b/lost+found/tmp_obj_kJmDvd-5UngNO differ diff --git a/lost+found/tmp_obj_kLbX0S-v0PRMz b/lost+found/tmp_obj_kLbX0S-v0PRMz new file mode 100644 index 00000000..70c8b31a Binary files /dev/null and b/lost+found/tmp_obj_kLbX0S-v0PRMz differ diff --git a/lost+found/tmp_obj_ka1EUe-bypt3e b/lost+found/tmp_obj_ka1EUe-bypt3e new file mode 100644 index 00000000..c0f2e86c Binary files /dev/null and b/lost+found/tmp_obj_ka1EUe-bypt3e differ diff --git a/lost+found/tmp_obj_ke9468-hQmqfV b/lost+found/tmp_obj_ke9468-hQmqfV new file mode 100644 index 00000000..cfaff4c0 Binary files /dev/null and b/lost+found/tmp_obj_ke9468-hQmqfV differ diff --git a/lost+found/tmp_obj_kkWq8z-sASdnu b/lost+found/tmp_obj_kkWq8z-sASdnu new file mode 100644 index 00000000..aa1f2961 Binary files /dev/null and b/lost+found/tmp_obj_kkWq8z-sASdnu differ diff --git a/lost+found/tmp_obj_kyfiSd-8SOw78 b/lost+found/tmp_obj_kyfiSd-8SOw78 new file mode 100644 index 00000000..53fa4ec1 Binary files /dev/null and b/lost+found/tmp_obj_kyfiSd-8SOw78 differ diff --git a/lost+found/tmp_obj_l2MzLh-st7OZr b/lost+found/tmp_obj_l2MzLh-st7OZr new file mode 100644 index 00000000..5bd16d81 Binary files /dev/null and b/lost+found/tmp_obj_l2MzLh-st7OZr differ diff --git a/lost+found/tmp_obj_l5IJz0-hrCMu6 b/lost+found/tmp_obj_l5IJz0-hrCMu6 new file mode 100644 index 00000000..ee0146f9 Binary files /dev/null and b/lost+found/tmp_obj_l5IJz0-hrCMu6 differ diff --git a/lost+found/tmp_obj_lHLczb-sExqVq b/lost+found/tmp_obj_lHLczb-sExqVq new file mode 100644 index 00000000..a0c9b88e Binary files /dev/null and b/lost+found/tmp_obj_lHLczb-sExqVq differ diff --git a/lost+found/tmp_obj_lJPHGI-THkRVl b/lost+found/tmp_obj_lJPHGI-THkRVl new file mode 100644 index 00000000..7174e737 Binary files /dev/null and b/lost+found/tmp_obj_lJPHGI-THkRVl differ diff --git a/lost+found/tmp_obj_lPUc54-E6DGwB b/lost+found/tmp_obj_lPUc54-E6DGwB new file mode 100644 index 00000000..1862fe12 Binary files /dev/null and b/lost+found/tmp_obj_lPUc54-E6DGwB differ diff --git a/lost+found/tmp_obj_lRVCHn-ArarIJ b/lost+found/tmp_obj_lRVCHn-ArarIJ new file mode 100644 index 00000000..7d7d519b Binary files /dev/null and b/lost+found/tmp_obj_lRVCHn-ArarIJ differ diff --git a/lost+found/tmp_obj_lTn88M-Ovo82U b/lost+found/tmp_obj_lTn88M-Ovo82U new file mode 100644 index 00000000..bddf660a Binary files /dev/null and b/lost+found/tmp_obj_lTn88M-Ovo82U differ diff --git a/lost+found/tmp_obj_le3ouU-d4oHhL b/lost+found/tmp_obj_le3ouU-d4oHhL new file mode 100644 index 00000000..f8b832bb Binary files /dev/null and b/lost+found/tmp_obj_le3ouU-d4oHhL differ diff --git a/lost+found/tmp_obj_lgV4AG-tmacm4 b/lost+found/tmp_obj_lgV4AG-tmacm4 new file mode 100644 index 00000000..4532657a Binary files /dev/null and b/lost+found/tmp_obj_lgV4AG-tmacm4 differ diff --git a/lost+found/tmp_obj_lhABS9-OuJkak b/lost+found/tmp_obj_lhABS9-OuJkak new file mode 100644 index 00000000..36816eb3 Binary files /dev/null and b/lost+found/tmp_obj_lhABS9-OuJkak differ diff --git a/lost+found/tmp_obj_lkSjJh-kdcYqH b/lost+found/tmp_obj_lkSjJh-kdcYqH new file mode 100644 index 00000000..bffdc988 Binary files /dev/null and b/lost+found/tmp_obj_lkSjJh-kdcYqH differ diff --git a/lost+found/tmp_obj_lqoYKh-0a3hka b/lost+found/tmp_obj_lqoYKh-0a3hka new file mode 100644 index 00000000..b231c0eb Binary files /dev/null and b/lost+found/tmp_obj_lqoYKh-0a3hka differ diff --git a/lost+found/tmp_obj_lrbHAa-6ERtOV b/lost+found/tmp_obj_lrbHAa-6ERtOV new file mode 100644 index 00000000..ce493166 Binary files /dev/null and b/lost+found/tmp_obj_lrbHAa-6ERtOV differ diff --git a/lost+found/tmp_obj_ltaWlh-xcD7bZ b/lost+found/tmp_obj_ltaWlh-xcD7bZ new file mode 100644 index 00000000..d941e344 Binary files /dev/null and b/lost+found/tmp_obj_ltaWlh-xcD7bZ differ diff --git a/lost+found/tmp_obj_lv5G6c-nn0sg0 b/lost+found/tmp_obj_lv5G6c-nn0sg0 new file mode 100644 index 00000000..f9d91163 --- /dev/null +++ b/lost+found/tmp_obj_lv5G6c-nn0sg0 @@ -0,0 +1 @@ +xKOR01eH,OKMMIJLζR)*Mq3R݋S2 \ No newline at end of file diff --git a/lost+found/tmp_obj_lw3e6B-N2Lbaj b/lost+found/tmp_obj_lw3e6B-N2Lbaj new file mode 100644 index 00000000..14dec127 Binary files /dev/null and b/lost+found/tmp_obj_lw3e6B-N2Lbaj differ diff --git a/lost+found/tmp_obj_lzZQ0M-qMcBDc b/lost+found/tmp_obj_lzZQ0M-qMcBDc new file mode 100644 index 00000000..b764c7b3 Binary files /dev/null and b/lost+found/tmp_obj_lzZQ0M-qMcBDc differ diff --git a/lost+found/tmp_obj_m1Ddhp-cR6pkE b/lost+found/tmp_obj_m1Ddhp-cR6pkE new file mode 100644 index 00000000..89d880e4 Binary files /dev/null and b/lost+found/tmp_obj_m1Ddhp-cR6pkE differ diff --git a/lost+found/tmp_obj_m2cqxM-dq7zcW b/lost+found/tmp_obj_m2cqxM-dq7zcW new file mode 100644 index 00000000..3b833504 Binary files /dev/null and b/lost+found/tmp_obj_m2cqxM-dq7zcW differ diff --git a/lost+found/tmp_obj_m6Ghvl-7q0D7p b/lost+found/tmp_obj_m6Ghvl-7q0D7p new file mode 100644 index 00000000..1fa6619b Binary files /dev/null and b/lost+found/tmp_obj_m6Ghvl-7q0D7p differ diff --git a/lost+found/tmp_obj_m7h5Yb-Ng4CMM b/lost+found/tmp_obj_m7h5Yb-Ng4CMM new file mode 100644 index 00000000..3df77b64 Binary files /dev/null and b/lost+found/tmp_obj_m7h5Yb-Ng4CMM differ diff --git a/lost+found/tmp_obj_mCCNSZ-zrbKlN b/lost+found/tmp_obj_mCCNSZ-zrbKlN new file mode 100644 index 00000000..d080bfcc Binary files /dev/null and b/lost+found/tmp_obj_mCCNSZ-zrbKlN differ diff --git a/lost+found/tmp_obj_mEwbH8-eZxVgN b/lost+found/tmp_obj_mEwbH8-eZxVgN new file mode 100644 index 00000000..4cc64f47 Binary files /dev/null and b/lost+found/tmp_obj_mEwbH8-eZxVgN differ diff --git a/lost+found/tmp_obj_mGtqOa-55S3eS b/lost+found/tmp_obj_mGtqOa-55S3eS new file mode 100644 index 00000000..685f59ac Binary files /dev/null and b/lost+found/tmp_obj_mGtqOa-55S3eS differ diff --git a/lost+found/tmp_obj_mIOP5Y-lV5Rvs b/lost+found/tmp_obj_mIOP5Y-lV5Rvs new file mode 100644 index 00000000..10af1d41 Binary files /dev/null and b/lost+found/tmp_obj_mIOP5Y-lV5Rvs differ diff --git a/lost+found/tmp_obj_mIcAEr-OPsebM b/lost+found/tmp_obj_mIcAEr-OPsebM new file mode 100644 index 00000000..09b8bae4 Binary files /dev/null and b/lost+found/tmp_obj_mIcAEr-OPsebM differ diff --git a/lost+found/tmp_obj_mSOdwt-0x8ANW b/lost+found/tmp_obj_mSOdwt-0x8ANW new file mode 100644 index 00000000..1349998a Binary files /dev/null and b/lost+found/tmp_obj_mSOdwt-0x8ANW differ diff --git a/lost+found/tmp_obj_mTt8Bb-h0d66o b/lost+found/tmp_obj_mTt8Bb-h0d66o new file mode 100644 index 00000000..f5af662f Binary files /dev/null and b/lost+found/tmp_obj_mTt8Bb-h0d66o differ diff --git a/lost+found/tmp_obj_mYhbK1-oDbHvy b/lost+found/tmp_obj_mYhbK1-oDbHvy new file mode 100644 index 00000000..524d3dda Binary files /dev/null and b/lost+found/tmp_obj_mYhbK1-oDbHvy differ diff --git a/lost+found/tmp_obj_meltAc-h0Ct1C b/lost+found/tmp_obj_meltAc-h0Ct1C new file mode 100644 index 00000000..1d4baa0e Binary files /dev/null and b/lost+found/tmp_obj_meltAc-h0Ct1C differ diff --git a/lost+found/tmp_obj_mm4cTS-rGen5U b/lost+found/tmp_obj_mm4cTS-rGen5U new file mode 100644 index 00000000..6612895d Binary files /dev/null and b/lost+found/tmp_obj_mm4cTS-rGen5U differ diff --git a/lost+found/tmp_obj_mpJTgH-JnMrDG b/lost+found/tmp_obj_mpJTgH-JnMrDG new file mode 100644 index 00000000..acb53cee Binary files /dev/null and b/lost+found/tmp_obj_mpJTgH-JnMrDG differ diff --git a/lost+found/tmp_obj_n7ouhf-GzaMib b/lost+found/tmp_obj_n7ouhf-GzaMib new file mode 100644 index 00000000..f4091c15 Binary files /dev/null and b/lost+found/tmp_obj_n7ouhf-GzaMib differ diff --git a/lost+found/tmp_obj_n9EGBq-GMT37K b/lost+found/tmp_obj_n9EGBq-GMT37K new file mode 100644 index 00000000..b70e2437 --- /dev/null +++ b/lost+found/tmp_obj_n9EGBq-GMT37K @@ -0,0 +1,6 @@ +xSn@9_1Nz1ʥ%h:+]kwBwf/vb*;33*'Oxqj2iڬ+XULkx妼JϥTL0C5. e +/ ר?vs]+AȤ%L}<8ݒSB`Q 1P?ι6 ء,D[g@5Ȏų{ ȺiiWy!CA4}-V:T ]0jb߇/:'gAe!*< vAh2 N:$&.k (oB* tztp +toߪ>7{ݶ~U +.x8*l^A#S +%k"7ANܳ^fl0LjLቘJ=3Sx(1н t?P67 +M"pE:<T J/qdc[r8]9q>QgkaOd \ No newline at end of file diff --git a/lost+found/tmp_obj_nUn7za-8fyIFg b/lost+found/tmp_obj_nUn7za-8fyIFg new file mode 100644 index 00000000..108e21a8 Binary files /dev/null and b/lost+found/tmp_obj_nUn7za-8fyIFg differ diff --git a/lost+found/tmp_obj_nVv24C-Z2bIyn b/lost+found/tmp_obj_nVv24C-Z2bIyn new file mode 100644 index 00000000..857524d0 Binary files /dev/null and b/lost+found/tmp_obj_nVv24C-Z2bIyn differ diff --git a/lost+found/tmp_obj_nYPpO4-jb1taq b/lost+found/tmp_obj_nYPpO4-jb1taq new file mode 100644 index 00000000..d5ab1bf1 Binary files /dev/null and b/lost+found/tmp_obj_nYPpO4-jb1taq differ diff --git a/lost+found/tmp_obj_nZyhv4-EESEqW b/lost+found/tmp_obj_nZyhv4-EESEqW new file mode 100644 index 00000000..f36b4945 Binary files /dev/null and b/lost+found/tmp_obj_nZyhv4-EESEqW differ diff --git a/lost+found/tmp_obj_ncF86L-GWWapP b/lost+found/tmp_obj_ncF86L-GWWapP new file mode 100644 index 00000000..aa7ab3bb Binary files /dev/null and b/lost+found/tmp_obj_ncF86L-GWWapP differ diff --git a/lost+found/tmp_obj_nezcUk-jHLh8g b/lost+found/tmp_obj_nezcUk-jHLh8g new file mode 100644 index 00000000..8e63ba6b Binary files /dev/null and b/lost+found/tmp_obj_nezcUk-jHLh8g differ diff --git a/lost+found/tmp_obj_nmb1xT-Kl2FeV b/lost+found/tmp_obj_nmb1xT-Kl2FeV new file mode 100644 index 00000000..f6a4b27a Binary files /dev/null and b/lost+found/tmp_obj_nmb1xT-Kl2FeV differ diff --git a/lost+found/tmp_obj_nncSxp-C3K9oX b/lost+found/tmp_obj_nncSxp-C3K9oX new file mode 100644 index 00000000..f23cfb3b Binary files /dev/null and b/lost+found/tmp_obj_nncSxp-C3K9oX differ diff --git a/lost+found/tmp_obj_nrAcS8-kRBS6r b/lost+found/tmp_obj_nrAcS8-kRBS6r new file mode 100644 index 00000000..f3a9d0d1 Binary files /dev/null and b/lost+found/tmp_obj_nrAcS8-kRBS6r differ diff --git a/lost+found/tmp_obj_ntedSe-lWfFaw b/lost+found/tmp_obj_ntedSe-lWfFaw new file mode 100644 index 00000000..3013d9f9 Binary files /dev/null and b/lost+found/tmp_obj_ntedSe-lWfFaw differ diff --git a/lost+found/tmp_obj_nydQhL-TnkHgg b/lost+found/tmp_obj_nydQhL-TnkHgg new file mode 100644 index 00000000..9f01a748 Binary files /dev/null and b/lost+found/tmp_obj_nydQhL-TnkHgg differ diff --git a/lost+found/tmp_obj_o0VBre-NY7kNF b/lost+found/tmp_obj_o0VBre-NY7kNF new file mode 100644 index 00000000..f98a343a Binary files /dev/null and b/lost+found/tmp_obj_o0VBre-NY7kNF differ diff --git a/lost+found/tmp_obj_o3pmJO-YxjDCy b/lost+found/tmp_obj_o3pmJO-YxjDCy new file mode 100644 index 00000000..f03cb8ee Binary files /dev/null and b/lost+found/tmp_obj_o3pmJO-YxjDCy differ diff --git a/lost+found/tmp_obj_o4Sd64-70qJ7d b/lost+found/tmp_obj_o4Sd64-70qJ7d new file mode 100644 index 00000000..14c36f4e Binary files /dev/null and b/lost+found/tmp_obj_o4Sd64-70qJ7d differ diff --git a/lost+found/tmp_obj_o8DgH0-8ECsQj b/lost+found/tmp_obj_o8DgH0-8ECsQj new file mode 100644 index 00000000..957174fe Binary files /dev/null and b/lost+found/tmp_obj_o8DgH0-8ECsQj differ diff --git a/lost+found/tmp_obj_oBFQYb-secfIv b/lost+found/tmp_obj_oBFQYb-secfIv new file mode 100644 index 00000000..f91b81ba Binary files /dev/null and b/lost+found/tmp_obj_oBFQYb-secfIv differ diff --git a/lost+found/tmp_obj_oGtAjC-qSKiIy b/lost+found/tmp_obj_oGtAjC-qSKiIy new file mode 100644 index 00000000..b7658609 Binary files /dev/null and b/lost+found/tmp_obj_oGtAjC-qSKiIy differ diff --git a/lost+found/tmp_obj_oNNa7B-YLpREK b/lost+found/tmp_obj_oNNa7B-YLpREK new file mode 100644 index 00000000..6f06b312 Binary files /dev/null and b/lost+found/tmp_obj_oNNa7B-YLpREK differ diff --git a/lost+found/tmp_obj_oTgUct-hvxavy b/lost+found/tmp_obj_oTgUct-hvxavy new file mode 100644 index 00000000..9dc309c9 Binary files /dev/null and b/lost+found/tmp_obj_oTgUct-hvxavy differ diff --git a/lost+found/tmp_obj_oVZpb0-YbYd4H b/lost+found/tmp_obj_oVZpb0-YbYd4H new file mode 100644 index 00000000..634198e1 Binary files /dev/null and b/lost+found/tmp_obj_oVZpb0-YbYd4H differ diff --git a/lost+found/tmp_obj_obkCDb-SJYwAN b/lost+found/tmp_obj_obkCDb-SJYwAN new file mode 100644 index 00000000..4eba55f9 Binary files /dev/null and b/lost+found/tmp_obj_obkCDb-SJYwAN differ diff --git a/lost+found/tmp_obj_ofGnvo-VCeWBc b/lost+found/tmp_obj_ofGnvo-VCeWBc new file mode 100644 index 00000000..d5545d29 Binary files /dev/null and b/lost+found/tmp_obj_ofGnvo-VCeWBc differ diff --git a/lost+found/tmp_obj_okvxMf-5cXFX9 b/lost+found/tmp_obj_okvxMf-5cXFX9 new file mode 100644 index 00000000..6c2c11f0 Binary files /dev/null and b/lost+found/tmp_obj_okvxMf-5cXFX9 differ diff --git a/lost+found/tmp_obj_onGBFt-lnXpba b/lost+found/tmp_obj_onGBFt-lnXpba new file mode 100644 index 00000000..79cb115c Binary files /dev/null and b/lost+found/tmp_obj_onGBFt-lnXpba differ diff --git a/lost+found/tmp_obj_os77zE-J227m2 b/lost+found/tmp_obj_os77zE-J227m2 new file mode 100644 index 00000000..b1d9a0cf Binary files /dev/null and b/lost+found/tmp_obj_os77zE-J227m2 differ diff --git a/lost+found/tmp_obj_ozStV4-ZE8bQ2 b/lost+found/tmp_obj_ozStV4-ZE8bQ2 new file mode 100644 index 00000000..279d96da Binary files /dev/null and b/lost+found/tmp_obj_ozStV4-ZE8bQ2 differ diff --git a/lost+found/tmp_obj_p82ELS-y1MIB8 b/lost+found/tmp_obj_p82ELS-y1MIB8 new file mode 100644 index 00000000..5c69e8e8 Binary files /dev/null and b/lost+found/tmp_obj_p82ELS-y1MIB8 differ diff --git a/lost+found/tmp_obj_p84K30-TWqJ8k b/lost+found/tmp_obj_p84K30-TWqJ8k new file mode 100644 index 00000000..001776d2 Binary files /dev/null and b/lost+found/tmp_obj_p84K30-TWqJ8k differ diff --git a/lost+found/tmp_obj_p85uOf-XMnOO4 b/lost+found/tmp_obj_p85uOf-XMnOO4 new file mode 100644 index 00000000..3556a61e --- /dev/null +++ b/lost+found/tmp_obj_p85uOf-XMnOO4 @@ -0,0 +1,3 @@ +xS]o@ٿb .FB*PsOmpZU_{3Y%3͞5l}6buEqWmtXS&QiEMU| i ܔ\i:Lwt6PM b^Bܠ~:T B&VP3uyqs Dj?`~Tsm2CYD[g@5p='w uYm=v izhVjMuLСigo{|0juXs@Хǰ0XVi &[@ 93^+Cymʪ +F:B=O:8IACwhUn[T +=6r=qRؼF%JPMEnzm~!gn<]4Fp)f:vDMӧEإw3@Q}A tz+*4`T]"ioh{bYJS^m.oƞxP2m})Ὸ*DN{4ܯ~F/C8>˽B \ No newline at end of file diff --git a/lost+found/tmp_obj_p8tCtP-pCC2ZH b/lost+found/tmp_obj_p8tCtP-pCC2ZH new file mode 100644 index 00000000..e28b5753 Binary files /dev/null and b/lost+found/tmp_obj_p8tCtP-pCC2ZH differ diff --git a/lost+found/tmp_obj_p9OmoG-2HHhTK b/lost+found/tmp_obj_p9OmoG-2HHhTK new file mode 100644 index 00000000..ee896e2f Binary files /dev/null and b/lost+found/tmp_obj_p9OmoG-2HHhTK differ diff --git a/lost+found/tmp_obj_p9ylOy-YLYDPv b/lost+found/tmp_obj_p9ylOy-YLYDPv new file mode 100644 index 00000000..67a0aec8 Binary files /dev/null and b/lost+found/tmp_obj_p9ylOy-YLYDPv differ diff --git a/lost+found/tmp_obj_pLIIkW-SofwRI b/lost+found/tmp_obj_pLIIkW-SofwRI new file mode 100644 index 00000000..0374b083 Binary files /dev/null and b/lost+found/tmp_obj_pLIIkW-SofwRI differ diff --git a/lost+found/tmp_obj_pQqZ0Q-sshO8g b/lost+found/tmp_obj_pQqZ0Q-sshO8g new file mode 100644 index 00000000..54494087 Binary files /dev/null and b/lost+found/tmp_obj_pQqZ0Q-sshO8g differ diff --git a/lost+found/tmp_obj_pSs31e-i02hfF b/lost+found/tmp_obj_pSs31e-i02hfF new file mode 100644 index 00000000..dff7194c Binary files /dev/null and b/lost+found/tmp_obj_pSs31e-i02hfF differ diff --git a/lost+found/tmp_obj_pTYMVY-XtKHXr b/lost+found/tmp_obj_pTYMVY-XtKHXr new file mode 100644 index 00000000..fbbd105a Binary files /dev/null and b/lost+found/tmp_obj_pTYMVY-XtKHXr differ diff --git a/lost+found/tmp_obj_pTv5WA-EvmMPI b/lost+found/tmp_obj_pTv5WA-EvmMPI new file mode 100644 index 00000000..d62548fc Binary files /dev/null and b/lost+found/tmp_obj_pTv5WA-EvmMPI differ diff --git a/lost+found/tmp_obj_pVBxw6-HJLi2T b/lost+found/tmp_obj_pVBxw6-HJLi2T new file mode 100644 index 00000000..eb82ca34 Binary files /dev/null and b/lost+found/tmp_obj_pVBxw6-HJLi2T differ diff --git a/lost+found/tmp_obj_pYf1uv-ah29f8 b/lost+found/tmp_obj_pYf1uv-ah29f8 new file mode 100644 index 00000000..b3bf590d Binary files /dev/null and b/lost+found/tmp_obj_pYf1uv-ah29f8 differ diff --git a/lost+found/tmp_obj_pctKoT-qFMXwk b/lost+found/tmp_obj_pctKoT-qFMXwk new file mode 100644 index 00000000..01779d28 Binary files /dev/null and b/lost+found/tmp_obj_pctKoT-qFMXwk differ diff --git a/lost+found/tmp_obj_pfbNpp-ARN1rS b/lost+found/tmp_obj_pfbNpp-ARN1rS new file mode 100644 index 00000000..a41dd088 Binary files /dev/null and b/lost+found/tmp_obj_pfbNpp-ARN1rS differ diff --git a/lost+found/tmp_obj_poTHyC-3Z476x b/lost+found/tmp_obj_poTHyC-3Z476x new file mode 100644 index 00000000..03134920 Binary files /dev/null and b/lost+found/tmp_obj_poTHyC-3Z476x differ diff --git a/lost+found/tmp_obj_pp0rLl-SkTTcn b/lost+found/tmp_obj_pp0rLl-SkTTcn new file mode 100644 index 00000000..0e750bc4 Binary files /dev/null and b/lost+found/tmp_obj_pp0rLl-SkTTcn differ diff --git a/lost+found/tmp_obj_prY7II-a6T3II b/lost+found/tmp_obj_prY7II-a6T3II new file mode 100644 index 00000000..438ce5e9 Binary files /dev/null and b/lost+found/tmp_obj_prY7II-a6T3II differ diff --git a/lost+found/tmp_obj_pwWs7e-xxSSJh b/lost+found/tmp_obj_pwWs7e-xxSSJh new file mode 100644 index 00000000..46c6cf25 Binary files /dev/null and b/lost+found/tmp_obj_pwWs7e-xxSSJh differ diff --git a/lost+found/tmp_obj_q2nTJd-ZN7Jh0 b/lost+found/tmp_obj_q2nTJd-ZN7Jh0 new file mode 100644 index 00000000..bddcd069 Binary files /dev/null and b/lost+found/tmp_obj_q2nTJd-ZN7Jh0 differ diff --git a/lost+found/tmp_obj_qANw4j-UwbafZ b/lost+found/tmp_obj_qANw4j-UwbafZ new file mode 100644 index 00000000..42783367 Binary files /dev/null and b/lost+found/tmp_obj_qANw4j-UwbafZ differ diff --git a/lost+found/tmp_obj_qDbsMW-73m29g b/lost+found/tmp_obj_qDbsMW-73m29g new file mode 100644 index 00000000..8a2abe1b Binary files /dev/null and b/lost+found/tmp_obj_qDbsMW-73m29g differ diff --git a/lost+found/tmp_obj_qRONea-8zP87F b/lost+found/tmp_obj_qRONea-8zP87F new file mode 100644 index 00000000..dc036983 Binary files /dev/null and b/lost+found/tmp_obj_qRONea-8zP87F differ diff --git a/lost+found/tmp_obj_qSoH35-7ovxJS b/lost+found/tmp_obj_qSoH35-7ovxJS new file mode 100644 index 00000000..e6399c4c Binary files /dev/null and b/lost+found/tmp_obj_qSoH35-7ovxJS differ diff --git a/lost+found/tmp_obj_qfdvDz-nL7WLT b/lost+found/tmp_obj_qfdvDz-nL7WLT new file mode 100644 index 00000000..79b63c16 Binary files /dev/null and b/lost+found/tmp_obj_qfdvDz-nL7WLT differ diff --git a/lost+found/tmp_obj_ql311Q-iYfC2s b/lost+found/tmp_obj_ql311Q-iYfC2s new file mode 100644 index 00000000..e5599a14 Binary files /dev/null and b/lost+found/tmp_obj_ql311Q-iYfC2s differ diff --git a/lost+found/tmp_obj_qmxQL8-JKQqvI b/lost+found/tmp_obj_qmxQL8-JKQqvI new file mode 100644 index 00000000..415fa17f Binary files /dev/null and b/lost+found/tmp_obj_qmxQL8-JKQqvI differ diff --git a/lost+found/tmp_obj_qpcsa6-9CXMdZ b/lost+found/tmp_obj_qpcsa6-9CXMdZ new file mode 100644 index 00000000..0cf90aff Binary files /dev/null and b/lost+found/tmp_obj_qpcsa6-9CXMdZ differ diff --git a/lost+found/tmp_obj_qra7bd-Ji5KLR b/lost+found/tmp_obj_qra7bd-Ji5KLR new file mode 100644 index 00000000..475c23ba Binary files /dev/null and b/lost+found/tmp_obj_qra7bd-Ji5KLR differ diff --git a/lost+found/tmp_obj_qtizAT-zPUi8f b/lost+found/tmp_obj_qtizAT-zPUi8f new file mode 100644 index 00000000..bcb835ff Binary files /dev/null and b/lost+found/tmp_obj_qtizAT-zPUi8f differ diff --git a/lost+found/tmp_obj_qufuTz-vBisAM b/lost+found/tmp_obj_qufuTz-vBisAM new file mode 100644 index 00000000..8d908b11 Binary files /dev/null and b/lost+found/tmp_obj_qufuTz-vBisAM differ diff --git a/lost+found/tmp_obj_r2ru7I-Td9QnR b/lost+found/tmp_obj_r2ru7I-Td9QnR new file mode 100644 index 00000000..0c8f4ccb Binary files /dev/null and b/lost+found/tmp_obj_r2ru7I-Td9QnR differ diff --git a/lost+found/tmp_obj_r4tiMn-ey251W b/lost+found/tmp_obj_r4tiMn-ey251W new file mode 100644 index 00000000..a91b0cfe Binary files /dev/null and b/lost+found/tmp_obj_r4tiMn-ey251W differ diff --git a/lost+found/tmp_obj_r5DFKJ-A9X3F1 b/lost+found/tmp_obj_r5DFKJ-A9X3F1 new file mode 100644 index 00000000..30b9961e Binary files /dev/null and b/lost+found/tmp_obj_r5DFKJ-A9X3F1 differ diff --git a/lost+found/tmp_obj_r6wfkL-eCkKTc b/lost+found/tmp_obj_r6wfkL-eCkKTc new file mode 100644 index 00000000..acf50610 Binary files /dev/null and b/lost+found/tmp_obj_r6wfkL-eCkKTc differ diff --git a/lost+found/tmp_obj_r7KyGI-GEYeOO b/lost+found/tmp_obj_r7KyGI-GEYeOO new file mode 100644 index 00000000..53d808c6 Binary files /dev/null and b/lost+found/tmp_obj_r7KyGI-GEYeOO differ diff --git a/lost+found/tmp_obj_rBZ329-xDKvH0 b/lost+found/tmp_obj_rBZ329-xDKvH0 new file mode 100644 index 00000000..933b46a0 Binary files /dev/null and b/lost+found/tmp_obj_rBZ329-xDKvH0 differ diff --git a/lost+found/tmp_obj_rOGx7y-83QBNr b/lost+found/tmp_obj_rOGx7y-83QBNr new file mode 100644 index 00000000..d635216b Binary files /dev/null and b/lost+found/tmp_obj_rOGx7y-83QBNr differ diff --git a/lost+found/tmp_obj_rWGebc-zCfgy7 b/lost+found/tmp_obj_rWGebc-zCfgy7 new file mode 100644 index 00000000..fb5189b3 Binary files /dev/null and b/lost+found/tmp_obj_rWGebc-zCfgy7 differ diff --git a/lost+found/tmp_obj_rWe2Q9-IN9diq b/lost+found/tmp_obj_rWe2Q9-IN9diq new file mode 100644 index 00000000..d175fa45 Binary files /dev/null and b/lost+found/tmp_obj_rWe2Q9-IN9diq differ diff --git a/lost+found/tmp_obj_rWvBvk-URwjte b/lost+found/tmp_obj_rWvBvk-URwjte new file mode 100644 index 00000000..207c86da Binary files /dev/null and b/lost+found/tmp_obj_rWvBvk-URwjte differ diff --git a/lost+found/tmp_obj_rdcuZr-LqYrdp b/lost+found/tmp_obj_rdcuZr-LqYrdp new file mode 100644 index 00000000..31b19809 Binary files /dev/null and b/lost+found/tmp_obj_rdcuZr-LqYrdp differ diff --git a/lost+found/tmp_obj_rhhSzz-jFZPgt b/lost+found/tmp_obj_rhhSzz-jFZPgt new file mode 100644 index 00000000..59795f60 Binary files /dev/null and b/lost+found/tmp_obj_rhhSzz-jFZPgt differ diff --git a/lost+found/tmp_obj_rk85Vd-VmIleU b/lost+found/tmp_obj_rk85Vd-VmIleU new file mode 100644 index 00000000..c311ec73 Binary files /dev/null and b/lost+found/tmp_obj_rk85Vd-VmIleU differ diff --git a/lost+found/tmp_obj_rqMdCX-GljVHf b/lost+found/tmp_obj_rqMdCX-GljVHf new file mode 100644 index 00000000..80d94983 Binary files /dev/null and b/lost+found/tmp_obj_rqMdCX-GljVHf differ diff --git a/lost+found/tmp_obj_rxS1hg-hPJox4 b/lost+found/tmp_obj_rxS1hg-hPJox4 new file mode 100644 index 00000000..602dacbf Binary files /dev/null and b/lost+found/tmp_obj_rxS1hg-hPJox4 differ diff --git a/lost+found/tmp_obj_ry4F4x-Ijm3EW b/lost+found/tmp_obj_ry4F4x-Ijm3EW new file mode 100644 index 00000000..5b621c43 Binary files /dev/null and b/lost+found/tmp_obj_ry4F4x-Ijm3EW differ diff --git a/lost+found/tmp_obj_s6ijut-fTrSpS b/lost+found/tmp_obj_s6ijut-fTrSpS new file mode 100644 index 00000000..4da2bccb Binary files /dev/null and b/lost+found/tmp_obj_s6ijut-fTrSpS differ diff --git a/lost+found/tmp_obj_sAHHTA-WbYaU3 b/lost+found/tmp_obj_sAHHTA-WbYaU3 new file mode 100644 index 00000000..39cc01fd Binary files /dev/null and b/lost+found/tmp_obj_sAHHTA-WbYaU3 differ diff --git a/lost+found/tmp_obj_sD8XOk-MKqvc1 b/lost+found/tmp_obj_sD8XOk-MKqvc1 new file mode 100644 index 00000000..095158ef Binary files /dev/null and b/lost+found/tmp_obj_sD8XOk-MKqvc1 differ diff --git a/lost+found/tmp_obj_sDV3zU-9Y6knW b/lost+found/tmp_obj_sDV3zU-9Y6knW new file mode 100644 index 00000000..bab18ce1 Binary files /dev/null and b/lost+found/tmp_obj_sDV3zU-9Y6knW differ diff --git a/lost+found/tmp_obj_sJk6DM-0ntJ3a b/lost+found/tmp_obj_sJk6DM-0ntJ3a new file mode 100644 index 00000000..913e40da Binary files /dev/null and b/lost+found/tmp_obj_sJk6DM-0ntJ3a differ diff --git a/lost+found/tmp_obj_sNb5uE-MW6UpU b/lost+found/tmp_obj_sNb5uE-MW6UpU new file mode 100644 index 00000000..250689dc Binary files /dev/null and b/lost+found/tmp_obj_sNb5uE-MW6UpU differ diff --git a/lost+found/tmp_obj_sO9YPS-9udzaj b/lost+found/tmp_obj_sO9YPS-9udzaj new file mode 100644 index 00000000..72131f44 Binary files /dev/null and b/lost+found/tmp_obj_sO9YPS-9udzaj differ diff --git a/lost+found/tmp_obj_sSApWg-CO1mMw b/lost+found/tmp_obj_sSApWg-CO1mMw new file mode 100644 index 00000000..cfe069d8 Binary files /dev/null and b/lost+found/tmp_obj_sSApWg-CO1mMw differ diff --git a/lost+found/tmp_obj_sYZ2Hf-rwTyU7 b/lost+found/tmp_obj_sYZ2Hf-rwTyU7 new file mode 100644 index 00000000..ee946762 Binary files /dev/null and b/lost+found/tmp_obj_sYZ2Hf-rwTyU7 differ diff --git a/lost+found/tmp_obj_sdqmgj-QJbWSR b/lost+found/tmp_obj_sdqmgj-QJbWSR new file mode 100644 index 00000000..c1f91e53 Binary files /dev/null and b/lost+found/tmp_obj_sdqmgj-QJbWSR differ diff --git a/lost+found/tmp_obj_sdsDTg-Q3gfF8 b/lost+found/tmp_obj_sdsDTg-Q3gfF8 new file mode 100644 index 00000000..86620fa8 Binary files /dev/null and b/lost+found/tmp_obj_sdsDTg-Q3gfF8 differ diff --git a/lost+found/tmp_obj_sfjPyf-slAUCd b/lost+found/tmp_obj_sfjPyf-slAUCd new file mode 100644 index 00000000..fb286ffd Binary files /dev/null and b/lost+found/tmp_obj_sfjPyf-slAUCd differ diff --git a/lost+found/tmp_obj_skCsXa-BL9Rg5 b/lost+found/tmp_obj_skCsXa-BL9Rg5 new file mode 100644 index 00000000..fb793c38 Binary files /dev/null and b/lost+found/tmp_obj_skCsXa-BL9Rg5 differ diff --git a/lost+found/tmp_obj_skuCQf-wdloky b/lost+found/tmp_obj_skuCQf-wdloky new file mode 100644 index 00000000..dc115699 Binary files /dev/null and b/lost+found/tmp_obj_skuCQf-wdloky differ diff --git a/lost+found/tmp_obj_slrQJm-UgOF8O b/lost+found/tmp_obj_slrQJm-UgOF8O new file mode 100644 index 00000000..75155234 Binary files /dev/null and b/lost+found/tmp_obj_slrQJm-UgOF8O differ diff --git a/lost+found/tmp_obj_sowu6l-1LMDZR b/lost+found/tmp_obj_sowu6l-1LMDZR new file mode 100644 index 00000000..736e93e8 Binary files /dev/null and b/lost+found/tmp_obj_sowu6l-1LMDZR differ diff --git a/lost+found/tmp_obj_su7Vue-BKBRq3 b/lost+found/tmp_obj_su7Vue-BKBRq3 new file mode 100644 index 00000000..ddb25cda Binary files /dev/null and b/lost+found/tmp_obj_su7Vue-BKBRq3 differ diff --git a/lost+found/tmp_obj_sxLY7s-aJR0Dm b/lost+found/tmp_obj_sxLY7s-aJR0Dm new file mode 100644 index 00000000..2efff6ec Binary files /dev/null and b/lost+found/tmp_obj_sxLY7s-aJR0Dm differ diff --git a/lost+found/tmp_obj_szvSAv-EiGAzj b/lost+found/tmp_obj_szvSAv-EiGAzj new file mode 100644 index 00000000..ce852b1d Binary files /dev/null and b/lost+found/tmp_obj_szvSAv-EiGAzj differ diff --git a/lost+found/tmp_obj_t2dgwW-22zDGX b/lost+found/tmp_obj_t2dgwW-22zDGX new file mode 100644 index 00000000..18bb4882 Binary files /dev/null and b/lost+found/tmp_obj_t2dgwW-22zDGX differ diff --git a/lost+found/tmp_obj_t6fBBb-xsdJDr b/lost+found/tmp_obj_t6fBBb-xsdJDr new file mode 100644 index 00000000..ec74dfcf Binary files /dev/null and b/lost+found/tmp_obj_t6fBBb-xsdJDr differ diff --git a/lost+found/tmp_obj_t7UhwH-5OtFVt b/lost+found/tmp_obj_t7UhwH-5OtFVt new file mode 100644 index 00000000..90f064b0 Binary files /dev/null and b/lost+found/tmp_obj_t7UhwH-5OtFVt differ diff --git a/lost+found/tmp_obj_tBjNLh-d4Ssh6 b/lost+found/tmp_obj_tBjNLh-d4Ssh6 new file mode 100644 index 00000000..5256bed8 Binary files /dev/null and b/lost+found/tmp_obj_tBjNLh-d4Ssh6 differ diff --git a/lost+found/tmp_obj_tDoJOf-uCO5JT b/lost+found/tmp_obj_tDoJOf-uCO5JT new file mode 100644 index 00000000..aebf2670 Binary files /dev/null and b/lost+found/tmp_obj_tDoJOf-uCO5JT differ diff --git a/lost+found/tmp_obj_tH0yvY-pIEIN5 b/lost+found/tmp_obj_tH0yvY-pIEIN5 new file mode 100644 index 00000000..baf4fefe Binary files /dev/null and b/lost+found/tmp_obj_tH0yvY-pIEIN5 differ diff --git a/lost+found/tmp_obj_tHmWyh-ClUfdn b/lost+found/tmp_obj_tHmWyh-ClUfdn new file mode 100644 index 00000000..8d473a1f Binary files /dev/null and b/lost+found/tmp_obj_tHmWyh-ClUfdn differ diff --git a/lost+found/tmp_obj_tKVxTU-Wo5zUq b/lost+found/tmp_obj_tKVxTU-Wo5zUq new file mode 100644 index 00000000..80d07d80 Binary files /dev/null and b/lost+found/tmp_obj_tKVxTU-Wo5zUq differ diff --git a/lost+found/tmp_obj_tO4fpu-ZXmlSB b/lost+found/tmp_obj_tO4fpu-ZXmlSB new file mode 100644 index 00000000..53ce2adf Binary files /dev/null and b/lost+found/tmp_obj_tO4fpu-ZXmlSB differ diff --git a/lost+found/tmp_obj_tQ9kuW-93Bmht b/lost+found/tmp_obj_tQ9kuW-93Bmht new file mode 100644 index 00000000..694063aa Binary files /dev/null and b/lost+found/tmp_obj_tQ9kuW-93Bmht differ diff --git a/lost+found/tmp_obj_tWErqZ-4hxO5u b/lost+found/tmp_obj_tWErqZ-4hxO5u new file mode 100644 index 00000000..ea7921d9 Binary files /dev/null and b/lost+found/tmp_obj_tWErqZ-4hxO5u differ diff --git a/lost+found/tmp_obj_tX3WdL-fdFoyn b/lost+found/tmp_obj_tX3WdL-fdFoyn new file mode 100644 index 00000000..b31b39f2 Binary files /dev/null and b/lost+found/tmp_obj_tX3WdL-fdFoyn differ diff --git a/lost+found/tmp_obj_tXxTqh-uZDUK7 b/lost+found/tmp_obj_tXxTqh-uZDUK7 new file mode 100644 index 00000000..63809f3a Binary files /dev/null and b/lost+found/tmp_obj_tXxTqh-uZDUK7 differ diff --git a/lost+found/tmp_obj_tbOoWr-tBdRkd b/lost+found/tmp_obj_tbOoWr-tBdRkd new file mode 100644 index 00000000..ec3466d5 Binary files /dev/null and b/lost+found/tmp_obj_tbOoWr-tBdRkd differ diff --git a/lost+found/tmp_obj_tiiaFb-h1rEZw b/lost+found/tmp_obj_tiiaFb-h1rEZw new file mode 100644 index 00000000..e48ffa93 Binary files /dev/null and b/lost+found/tmp_obj_tiiaFb-h1rEZw differ diff --git a/lost+found/tmp_obj_trfxWv-1KD9b5 b/lost+found/tmp_obj_trfxWv-1KD9b5 new file mode 100644 index 00000000..a8022efb Binary files /dev/null and b/lost+found/tmp_obj_trfxWv-1KD9b5 differ diff --git a/lost+found/tmp_obj_tsIPx2-gfFcB4 b/lost+found/tmp_obj_tsIPx2-gfFcB4 new file mode 100644 index 00000000..a50aecc5 Binary files /dev/null and b/lost+found/tmp_obj_tsIPx2-gfFcB4 differ diff --git a/lost+found/tmp_obj_twVE7h-phRPup b/lost+found/tmp_obj_twVE7h-phRPup new file mode 100644 index 00000000..f2ea2bbd Binary files /dev/null and b/lost+found/tmp_obj_twVE7h-phRPup differ diff --git a/lost+found/tmp_obj_tzIy3a-uEiz4n b/lost+found/tmp_obj_tzIy3a-uEiz4n new file mode 100644 index 00000000..76d712d0 Binary files /dev/null and b/lost+found/tmp_obj_tzIy3a-uEiz4n differ diff --git a/lost+found/tmp_obj_u08xzc-ucgwZ4 b/lost+found/tmp_obj_u08xzc-ucgwZ4 new file mode 100644 index 00000000..c6428e68 Binary files /dev/null and b/lost+found/tmp_obj_u08xzc-ucgwZ4 differ diff --git a/lost+found/tmp_obj_u3OxMh-ZdBAQ6 b/lost+found/tmp_obj_u3OxMh-ZdBAQ6 new file mode 100644 index 00000000..3d5f1961 Binary files /dev/null and b/lost+found/tmp_obj_u3OxMh-ZdBAQ6 differ diff --git a/lost+found/tmp_obj_uBqAyr-0jB5Xg b/lost+found/tmp_obj_uBqAyr-0jB5Xg new file mode 100644 index 00000000..7e1473e0 Binary files /dev/null and b/lost+found/tmp_obj_uBqAyr-0jB5Xg differ diff --git a/lost+found/tmp_obj_uTZPj9-YiQ5n3 b/lost+found/tmp_obj_uTZPj9-YiQ5n3 new file mode 100644 index 00000000..8a2d10ca Binary files /dev/null and b/lost+found/tmp_obj_uTZPj9-YiQ5n3 differ diff --git a/lost+found/tmp_obj_uXGHve-OJNUGO b/lost+found/tmp_obj_uXGHve-OJNUGO new file mode 100644 index 00000000..0362576e Binary files /dev/null and b/lost+found/tmp_obj_uXGHve-OJNUGO differ diff --git a/lost+found/tmp_obj_uXqnzO-sCtwYJ b/lost+found/tmp_obj_uXqnzO-sCtwYJ new file mode 100644 index 00000000..36069456 Binary files /dev/null and b/lost+found/tmp_obj_uXqnzO-sCtwYJ differ diff --git a/lost+found/tmp_obj_ubIWtv-e9q8zR b/lost+found/tmp_obj_ubIWtv-e9q8zR new file mode 100644 index 00000000..63f7e49b Binary files /dev/null and b/lost+found/tmp_obj_ubIWtv-e9q8zR differ diff --git a/lost+found/tmp_obj_udsmvh-XVlcEH b/lost+found/tmp_obj_udsmvh-XVlcEH new file mode 100644 index 00000000..e9b85d1f Binary files /dev/null and b/lost+found/tmp_obj_udsmvh-XVlcEH differ diff --git a/lost+found/tmp_obj_ugB7uH-iu7Sn5 b/lost+found/tmp_obj_ugB7uH-iu7Sn5 new file mode 100644 index 00000000..8a8c1c05 Binary files /dev/null and b/lost+found/tmp_obj_ugB7uH-iu7Sn5 differ diff --git a/lost+found/tmp_obj_uheHdi-r1sGhO b/lost+found/tmp_obj_uheHdi-r1sGhO new file mode 100644 index 00000000..467eb864 Binary files /dev/null and b/lost+found/tmp_obj_uheHdi-r1sGhO differ diff --git a/lost+found/tmp_obj_ukPByd-To3u8q b/lost+found/tmp_obj_ukPByd-To3u8q new file mode 100644 index 00000000..377c9a4c Binary files /dev/null and b/lost+found/tmp_obj_ukPByd-To3u8q differ diff --git a/lost+found/tmp_obj_uloDbE-H2SXL1 b/lost+found/tmp_obj_uloDbE-H2SXL1 new file mode 100644 index 00000000..75ea9c91 Binary files /dev/null and b/lost+found/tmp_obj_uloDbE-H2SXL1 differ diff --git a/lost+found/tmp_obj_uqByLy-3nrz8X b/lost+found/tmp_obj_uqByLy-3nrz8X new file mode 100644 index 00000000..ef6e43da Binary files /dev/null and b/lost+found/tmp_obj_uqByLy-3nrz8X differ diff --git a/lost+found/tmp_obj_us85th-DewA4S b/lost+found/tmp_obj_us85th-DewA4S new file mode 100644 index 00000000..19540bce Binary files /dev/null and b/lost+found/tmp_obj_us85th-DewA4S differ diff --git a/lost+found/tmp_obj_uuRSPe-DhZvA6 b/lost+found/tmp_obj_uuRSPe-DhZvA6 new file mode 100644 index 00000000..752172bc Binary files /dev/null and b/lost+found/tmp_obj_uuRSPe-DhZvA6 differ diff --git a/lost+found/tmp_obj_uuZbTR-fjl5xL b/lost+found/tmp_obj_uuZbTR-fjl5xL new file mode 100644 index 00000000..6dafb243 Binary files /dev/null and b/lost+found/tmp_obj_uuZbTR-fjl5xL differ diff --git a/lost+found/tmp_obj_uyoD0s-qgxjFi b/lost+found/tmp_obj_uyoD0s-qgxjFi new file mode 100644 index 00000000..06a3d2e9 --- /dev/null +++ b/lost+found/tmp_obj_uyoD0s-qgxjFi @@ -0,0 +1 @@ +xm1oSlf]A R8fI|{7S͜spt|j  &ZD£(jlαuv|M%u?F75ڢ˿{Lgy>StgjsWgh D[<5ʼnhL0ogTK?fR#u6&8[ga#ru' ɴu09EpYq$rl] +ha_SJ4zqB[&Sߩ \ No newline at end of file diff --git a/lost+found/tmp_obj_zMHy3d-r69dmZ b/lost+found/tmp_obj_zMHy3d-r69dmZ new file mode 100644 index 00000000..84d98486 Binary files /dev/null and b/lost+found/tmp_obj_zMHy3d-r69dmZ differ diff --git a/lost+found/tmp_obj_zOlQ7a-dfwf5r b/lost+found/tmp_obj_zOlQ7a-dfwf5r new file mode 100644 index 00000000..2b55f698 Binary files /dev/null and b/lost+found/tmp_obj_zOlQ7a-dfwf5r differ diff --git a/lost+found/tmp_obj_zR54H7-8rOKCZ b/lost+found/tmp_obj_zR54H7-8rOKCZ new file mode 100644 index 00000000..78533482 Binary files /dev/null and b/lost+found/tmp_obj_zR54H7-8rOKCZ differ diff --git a/lost+found/tmp_obj_zRN0nH-ypR4b9 b/lost+found/tmp_obj_zRN0nH-ypR4b9 new file mode 100644 index 00000000..c5608950 Binary files /dev/null and b/lost+found/tmp_obj_zRN0nH-ypR4b9 differ diff --git a/lost+found/tmp_obj_zSDBla-Fskud3 b/lost+found/tmp_obj_zSDBla-Fskud3 new file mode 100644 index 00000000..3ede9428 Binary files /dev/null and b/lost+found/tmp_obj_zSDBla-Fskud3 differ diff --git a/lost+found/tmp_obj_zb9MB8-AsPELQ b/lost+found/tmp_obj_zb9MB8-AsPELQ new file mode 100644 index 00000000..30e4713f Binary files /dev/null and b/lost+found/tmp_obj_zb9MB8-AsPELQ differ diff --git a/lost+found/tmp_obj_zfl4FD-aAiluw b/lost+found/tmp_obj_zfl4FD-aAiluw new file mode 100644 index 00000000..021c8d6b Binary files /dev/null and b/lost+found/tmp_obj_zfl4FD-aAiluw differ diff --git a/lost+found/tmp_obj_zgMjb8-w9Leby b/lost+found/tmp_obj_zgMjb8-w9Leby new file mode 100644 index 00000000..78813dde Binary files /dev/null and b/lost+found/tmp_obj_zgMjb8-w9Leby differ diff --git a/lost+found/tmp_obj_zkhTIb-wF6gyK b/lost+found/tmp_obj_zkhTIb-wF6gyK new file mode 100644 index 00000000..f17bebb8 Binary files /dev/null and b/lost+found/tmp_obj_zkhTIb-wF6gyK differ diff --git a/lost+found/tmp_obj_zn2S4I-EelUOG b/lost+found/tmp_obj_zn2S4I-EelUOG new file mode 100644 index 00000000..76aaea85 Binary files /dev/null and b/lost+found/tmp_obj_zn2S4I-EelUOG differ diff --git a/lost+found/tmp_obj_zsiHwg-zE9EFE b/lost+found/tmp_obj_zsiHwg-zE9EFE new file mode 100644 index 00000000..e7879ad3 Binary files /dev/null and b/lost+found/tmp_obj_zsiHwg-zE9EFE differ diff --git a/lost+found/tmp_obj_ztbxWy-HBNTk5 b/lost+found/tmp_obj_ztbxWy-HBNTk5 new file mode 100644 index 00000000..f50f55ae Binary files /dev/null and b/lost+found/tmp_obj_ztbxWy-HBNTk5 differ diff --git a/lost+found/tmp_obj_zwc2vW-CCjz0N b/lost+found/tmp_obj_zwc2vW-CCjz0N new file mode 100644 index 00000000..ddaf0feb Binary files /dev/null and b/lost+found/tmp_obj_zwc2vW-CCjz0N differ diff --git a/lost+found/tmp_obj_zxBtun-LkTDUm b/lost+found/tmp_obj_zxBtun-LkTDUm new file mode 100644 index 00000000..c99d57e5 Binary files /dev/null and b/lost+found/tmp_obj_zxBtun-LkTDUm differ diff --git a/lost+found/two.txt-o5yGyq b/lost+found/two.txt-o5yGyq new file mode 100644 index 00000000..79c4aecc --- /dev/null +++ b/lost+found/two.txt-o5yGyq @@ -0,0 +1 @@ +Mais qui était le roi de Babylone ? \ No newline at end of file diff --git a/lost+found/visicut-icon.png-WRrkdj b/lost+found/visicut-icon.png-WRrkdj new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/visicut_export.inx-n7wFEm b/lost+found/visicut_export.inx-n7wFEm new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/visicut_export.py-HY6vbP b/lost+found/visicut_export.py-HY6vbP new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/visicut_export_replace.inx-pcwBDT b/lost+found/visicut_export_replace.inx-pcwBDT new file mode 100644 index 00000000..2b4f4c7e --- /dev/null +++ b/lost+found/visicut_export_replace.inx-pcwBDT @@ -0,0 +1,16 @@ + + + <_name>Open in VisiCut + visicut.export_replace + visicut_export.py + false + + path + + + + + + diff --git a/lost+found/webcam-capture-0.3.11-20141227.105512-4.jar-wthfF9 b/lost+found/webcam-capture-0.3.11-20141227.105512-4.jar-wthfF9 new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/xml-apis-ext.jar-snPWbV b/lost+found/xml-apis-ext.jar-snPWbV new file mode 100644 index 00000000..e69de29b diff --git a/lost+found/xml-apis.jar-rQGfT8 b/lost+found/xml-apis.jar-rQGfT8 new file mode 100644 index 00000000..d42c0ea6 Binary files /dev/null and b/lost+found/xml-apis.jar-rQGfT8 differ diff --git a/lost+found/xpp3-1.1.4c.jar-Hv5dyy b/lost+found/xpp3-1.1.4c.jar-Hv5dyy new file mode 100644 index 00000000..451ac82a Binary files /dev/null and b/lost+found/xpp3-1.1.4c.jar-Hv5dyy differ diff --git a/lost+found/xstream-1.4.3.jar-ZUXFKG b/lost+found/xstream-1.4.3.jar-ZUXFKG new file mode 100644 index 00000000..e69de29b diff --git a/m1interpreter/task.yaml b/m1interpreter/task.yaml index 7f07f499..28c50013 100644 --- a/m1interpreter/task.yaml +++ b/m1interpreter/task.yaml @@ -22,23 +22,24 @@ context: |- environment: java8scala evaluate: best groups: false +input_random: '0' limits: - memory: '512' output: '100' + memory: '512' time: '70' -name: Mission 1 - PostScript Interpreter [group] +name: '[old] Mission 1 - PostScript Interpreter [group]' network_grading: false -order: 5 +order: 34 problems: interpreter: - name: PostScript interpreter allowed_exts: - .java + type: file header: 'Upload your interpreter here. Your file should contain exactly one public class named *Interpreter* and implementing *InterpreterInterface*. Put additional classes inside *Interpreter*, or just after it in the same file but then without the *public* key-word. ' - type: file + name: PostScript interpreter stored_submissions: 0 submission_limit: amount: -1 diff --git a/m1interpretertests/execute_test b/m1interpretertests/execute_test old mode 100755 new mode 100644 diff --git a/m1interpretertests/task.yaml b/m1interpretertests/task.yaml index 6d0b81a6..1f3f01de 100644 --- a/m1interpretertests/task.yaml +++ b/m1interpretertests/task.yaml @@ -33,21 +33,20 @@ limits: output: '100' memory: '512' time: '65' -name: Mission 1 - Unit tests for the interpreter [individual] +name: '[old] Mission 1 - Unit tests for the interpreter [individual]' network_grading: false -order: 4 +order: 33 problems: interpreter_tests: + type: file + name: Unit tests for the interpreter allowed_exts: - .java - name: Unit tests for the interpreter header: 'Upload your file here, with only one class named "InterpreterTests". The class representing the interpreter under test is called *Interpreter* and implements *InterpreterInterface*, as written in the template. ' - type: file stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 diff --git a/m1stack/feedback_settings.yaml b/m1stack/feedback_settings.yaml new file mode 100644 index 00000000..5452c07b --- /dev/null +++ b/m1stack/feedback_settings.yaml @@ -0,0 +1,2 @@ +has_feedback: True +feedback_kind: JavaGrading \ No newline at end of file diff --git a/m1stack/public/MyStack.java b/m1stack/public/MyStack.java new file mode 100644 index 00000000..15b8abf5 --- /dev/null +++ b/m1stack/public/MyStack.java @@ -0,0 +1,54 @@ +import java.util.EmptyStackException; + +public class MyStack implements Stack { + + private Node top; // the node on the top of the stack + private int size; // size of the stack + + // helper linked list class + private class Node { + private E item; + private Node next; + + public Node(E element, Node next) { + this.item = element; + this.next = next; + } + } + + /** + * Tests if this stack is empty + */ + @Override + public boolean empty() { + //TODO by student + } + + /** + * Looks at the object at the top of this stack + * without removing it from the stack + */ + @Override + public E peek() throws EmptyStackException { + //TODO by student + } + + /** + * Removes the object at the top of this stack + * and returns that object as the value of this function + */ + @Override + public E pop() throws EmptyStackException { + //TODO by student + } + + /** + * Pushes an item onto the top of this stack + * @param item the item to append + */ + @Override + public void push(E item) { + //TODO by student + + } +} diff --git a/m1stack/run b/m1stack/run index 53ace86c..1abbd37e 100644 --- a/m1stack/run +++ b/m1stack/run @@ -1,19 +1,22 @@ -#! /bin/bash +#!/bin/python3 +import importlib.util +import sys -################ -# Configuration -################ -names=( - "MyStack" -) -forbiddenClasses=( - "java.util.Stack" - "java.util.LinkedList" -) -#getinput "stack" > "student/MyStack.java" -# parse templates -parsetemplate student/MyStack.java +# Dynamically load modules we need +# Credits to https://stackoverflow.com/a/67692/6149867 +# And for the explanation : http://www.blog.pythonlibrary.org/2016/05/27/python-201-an-intro-to-importlib/ +def dynamically_load_module(module, path): + spec = importlib.util.spec_from_file_location(module, path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod -. ./execute -execute names forbiddenClasses \ No newline at end of file + +##################################### +# Our import for common run file # +##################################### +sys.path.append("/course/common") + +runfile = dynamically_load_module("runfile", "/course/common/runfile.py") +runfile.main() diff --git a/m1stack/src/InginiousTests.java b/m1stack/src/InginiousTests.java new file mode 100644 index 00000000..887ed03f --- /dev/null +++ b/m1stack/src/InginiousTests.java @@ -0,0 +1,126 @@ +package src; + +import com.github.guillaumederval.javagrading.CustomGradingResult; +import com.github.guillaumederval.javagrading.Grade; +import com.github.guillaumederval.javagrading.GradeFeedback; +import com.github.guillaumederval.javagrading.GradeFeedbacks; +import com.github.guillaumederval.javagrading.GradingRunner; +import com.github.guillaumederval.javagrading.TestStatus; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import templates.*; + +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.fail; +import java.util.EmptyStackException; + +public class InginiousTests { + + @Test + @Grade + public void testEmpty() + { + String message = "Test of empty;"; + MyStack stack = new MyStack(); + stack.push("test"); + stack.pop(); + assertTrue(message, stack.empty()); + } + + @Test + @Grade + public void testNotEmpty() + { + String message = "Test of empty;"; + MyStack stack = new MyStack(); + stack.push("test"); + assertFalse(message, stack.empty()); + } + + /* PUSH IS NOW VOID + @Test + public void testPush() + { + String message = "Test of push;"; + MyStack stack = new MyStack(); + assertEquals(message, "test", stack.push("test")); + } + + @Test + public void testDoublePush() + { + String message = "Test of push (twice);"; + MyStack stack = new MyStack(); + assertEquals(message, "test", stack.push("test")); + assertEquals(message, "testBis", stack.push("testBis")); + } + */ + + @Test + @Grade + public void testPeek() + { + String message = "Test of peek;"; + MyStack stack = new MyStack(); + stack.push("elem"); + assertEquals(message, "elem", stack.peek()); + assertFalse(message, stack.empty()); + } + + @Test + @Grade + public void testMultiplePush() + { + String message = "Test of push (multiple);"; + MyStack stack = new MyStack(); + + for (int i = 0;i <= 100;i++) { + //assertEquals(message, i, stack.push(i)); + stack.push(i); + } + + for (int i = 100;i >= 0;i--) { + assertEquals(message, i, stack.pop()); + } + + assertTrue(message, stack.empty()); + } + + @Test + @Grade + public void testPopException() + { + String message = "Test of pop when empty;"; + MyStack stack = new MyStack(); + + try { + stack.pop(); + fail(message); + } catch (EmptyStackException e) { + // Ok + } + } + + @Test + @Grade + public void testPeekException() + { + String message = "Test of peek when empty;"; + MyStack stack = new MyStack(); + + try { + stack.peek(); + fail(message); + } catch (EmptyStackException e) { + // Ok + } + } +} diff --git a/m1stack/src/StudentTestRunner.java b/m1stack/src/StudentTestRunner.java new file mode 100644 index 00000000..b4455f1e --- /dev/null +++ b/m1stack/src/StudentTestRunner.java @@ -0,0 +1,48 @@ +package src; + +import com.github.guillaumederval.javagrading.GradingListener; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import java.util.List; + +public class StudentTestRunner { + + public static void main(String [] args) { + + JUnitCore runner = new JUnitCore(); + runner.addListener(new GradingListener()); + Result result = runner.run(InginiousTests.class); + + if(result.wasSuccessful()){ + System.exit(0); + } else { + determineProblem(result); + } + } + + /* + * Makes the distinction between two different failure cases : + * - The student has a mistake in his/her code. (Sys exit 1) + * - The student used a forbidden instruction in his/her code. (Sys exit 2) + */ + private static void determineProblem(Result result){ + boolean flag = false; + + if(result.getFailureCount() != 0) { + List failures = result.getFailures(); + + for (Failure fail : failures) { + flag |= fail.getMessage()!= null && fail.getMessage().contains("access denied"); + } + } + + if(flag) { + System.exit(2); // The student used a forbidden instruction + } else { + System.exit(1); // There's an error in your code etc etc... + } + } + +} \ No newline at end of file diff --git a/m1stack/student/MyStack.java b/m1stack/student/MyStack.java deleted file mode 100644 index 7336532f..00000000 --- a/m1stack/student/MyStack.java +++ /dev/null @@ -1,54 +0,0 @@ -import java.util.EmptyStackException; - -public class MyStack implements Stack { - - private Node top; // the node on the top of the stack - private int size; // size of the stack - - // helper linked list class - private class Node { - private E item; - private Node next; - - public Node(E element, Node next) { - this.item = element; - this.next = next; - } - } - - /** - * Tests if this stack is empty - */ - @Override - public boolean empty() { - @@empty@@ - } - - /** - * Looks at the object at the top of this stack - * without removing it from the stack - */ - @Override - public E peek() throws EmptyStackException { - @@peek@@ - } - - /** - * Removes the object at the top of this stack - * and returns that object as the value of this function - */ - @Override - public E pop() throws EmptyStackException { - @@pop@@ - } - - /** - * Pushes an item onto the top of this stack - * @param item the item to append - */ - @Override - public void push(E item) { - @@push@@ - - } -} diff --git a/m1stack/student/Tests.java b/m1stack/student/Tests.java deleted file mode 100644 index df1b1894..00000000 --- a/m1stack/student/Tests.java +++ /dev/null @@ -1,109 +0,0 @@ -import org.junit.Test; -import org.junit.runner.JUnitCore; -import org.junit.runner.Result; -import org.junit.runner.notification.Failure; - -import java.util.Arrays; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.fail; -import java.util.EmptyStackException; - -public class Tests { - - @Test - public void testEmpty() - { - String message = "Test of empty;"; - MyStack stack = new MyStack(); - stack.push("test"); - stack.pop(); - assertTrue(message, stack.empty()); - } - - @Test - public void testNotEmpty() - { - String message = "Test of empty;"; - MyStack stack = new MyStack(); - stack.push("test"); - assertFalse(message, stack.empty()); - } - - /* PUSH IS NOW VOID - @Test - public void testPush() - { - String message = "Test of push;"; - MyStack stack = new MyStack(); - assertEquals(message, "test", stack.push("test")); - } - - @Test - public void testDoublePush() - { - String message = "Test of push (twice);"; - MyStack stack = new MyStack(); - assertEquals(message, "test", stack.push("test")); - assertEquals(message, "testBis", stack.push("testBis")); - } - */ - - @Test - public void testPeek() - { - String message = "Test of peek;"; - MyStack stack = new MyStack(); - stack.push("elem"); - assertEquals(message, "elem", stack.peek()); - assertFalse(message, stack.empty()); - } - - @Test - public void testMultiplePush() - { - String message = "Test of push (multiple);"; - MyStack stack = new MyStack(); - - for (int i = 0;i <= 100;i++) { - //assertEquals(message, i, stack.push(i)); - stack.push(i); - } - - for (int i = 100;i >= 0;i--) { - assertEquals(message, i, stack.pop()); - } - - assertTrue(message, stack.empty()); - } - - @Test - public void testPopException() - { - String message = "Test of pop when empty;"; - MyStack stack = new MyStack(); - - try { - stack.pop(); - fail(message); - } catch (EmptyStackException e) { - // Ok - } - } - - @Test - public void testPeekException() - { - String message = "Test of peek when empty;"; - MyStack stack = new MyStack(); - - try { - stack.peek(); - fail(message); - } catch (EmptyStackException e) { - // Ok - } - } -} diff --git a/m1stack/task.yaml b/m1stack/task.yaml index 2c72958e..eda76820 100644 --- a/m1stack/task.yaml +++ b/m1stack/task.yaml @@ -1,5 +1,6 @@ -accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00 +accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00/2019-09-24 16:00:00 author: Simon Hardy, Frédéric Kaczynski +categories: [] context: |- Il vous est demandé d'implémenter l'interface suivante, représentant une pile, en utilisant une liste simplement chainée. Vous devriez avoir au moins un constructeur sans argument, créant une pile vide. @@ -84,19 +85,20 @@ context: |- `Le projet IntelliJ est disponible ici `_. environment: java8scala evaluate: best +file: '' groups: false input_random: '0' limits: time: '45' - memory: '512' output: '100' + memory: '512' name: PART 1 - Linked List Stack (Implem) network_grading: false order: 2 problems: empty: - default: '' - name: 'Implementation de la fonction empty: boolean empty()' + language: java + type: code header: |- .. code-block:: java @@ -109,11 +111,12 @@ problems: } Copier le contenu de la fonction ``public boolean empty()`` ci-desssous. - type: code - language: java + default: '' + name: 'Implementation de la fonction empty: boolean empty()' peek: default: '' type: code + name: 'Implementation de la fonction peek: E peek()' header: |- .. code-block:: java @@ -128,11 +131,11 @@ problems: Copier le contenu de la fonction ``public E peek()`` ci-desssous. language: java - name: 'Implementation de la fonction peek: E peek()' pop: - default: '' + name: 'Implementation de la fonction pop: E pop()' language: java type: code + default: '' header: |- .. code-block:: java @@ -146,8 +149,8 @@ problems: } Copier le contenu de la fonction ``public E pop()`` ci-desssous. - name: 'Implementation de la fonction pop: E pop()' push: + default: '' header: |- .. code-block:: java @@ -162,13 +165,11 @@ problems: } Copier le contenu de la fonction ``public push(E item)`` ci-desssous. - language: java name: 'Implementation de la fonction push: void push(E item)' - default: '' type: code + language: java stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 diff --git a/m1stack/templates/MyStack.java b/m1stack/templates/MyStack.java new file mode 100644 index 00000000..2dc17d04 --- /dev/null +++ b/m1stack/templates/MyStack.java @@ -0,0 +1,56 @@ +package templates; + +import java.util.EmptyStackException; + +public class MyStack implements Stack { + + private Node top; // the node on the top of the stack + private int size; // size of the stack + + // helper linked list class + private class Node { + private E item; + private Node next; + + public Node(E element, Node next) { + this.item = element; + this.next = next; + } + } + + /** + * Tests if this stack is empty + */ + @Override + public boolean empty() { + @@empty@@ + } + + /** + * Looks at the object at the top of this stack + * without removing it from the stack + */ + @Override + public E peek() throws EmptyStackException { + @@peek@@ + } + + /** + * Removes the object at the top of this stack + * and returns that object as the value of this function + */ + @Override + public E pop() throws EmptyStackException { + @@pop@@ + } + + /** + * Pushes an item onto the top of this stack + * @param item the item to append + */ + @Override + public void push(E item) { + @@push@@ + + } +} diff --git a/m1stack/Stack.java b/m1stack/templates/Stack.java similarity index 79% rename from m1stack/Stack.java rename to m1stack/templates/Stack.java index 8aec3c4c..8a9bedd5 100644 --- a/m1stack/Stack.java +++ b/m1stack/templates/Stack.java @@ -1,3 +1,5 @@ +package templates; + import java.util.EmptyStackException; public interface Stack { @@ -8,6 +10,6 @@ public interface Stack { public E pop() throws EmptyStackException; - public E push(E item); + public void push(E item); } \ No newline at end of file diff --git a/m1stacktests/execute_test b/m1stacktests/execute_test old mode 100755 new mode 100644 diff --git a/m1stacktests/readme.md b/m1stacktests/readme.md new file mode 100644 index 00000000..29d9fa2a --- /dev/null +++ b/m1stacktests/readme.md @@ -0,0 +1,3 @@ +This task was not adapted to the new Inginious Java exercise format. +The format was defined in july-august 2019 by Bastin J, Yakoub J, Rucquoy A and Piron H as they were working for INGI department at the UCLouvain. +If you want more information about the new format you can find them at https://github.com/UCL-INGI/LEPL1402. diff --git a/m1stacktests/task.yaml b/m1stacktests/task.yaml index 7ca4a68f..a0efb350 100644 --- a/m1stacktests/task.yaml +++ b/m1stacktests/task.yaml @@ -1,5 +1,6 @@ -accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00 +accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00/2019-09-24 16:00:00 author: Simon Hardy, Frédéric Kaczynski +categories: [] context: |+ Rappelez-vous de l'interface Stack : @@ -49,28 +50,28 @@ context: |+ environment: java8scala evaluate: best +file: '' groups: false input_random: '0' limits: time: '60' - memory: '512' output: '100' + memory: '512' name: PART 1 - Write Unit tests Stack (Implem) network_grading: false order: 1 problems: stack_tests: - type: file - allowed_exts: - - .java header: |- Téléchargez votre fichier ici, avec une seule classe nommée *StackTests*. Vous pouvez supposer que la classe représentant la stack sous test s'appelle *MyStack*, et que l'interface est disponible (nommée *Stack*) comme écrit dans le modèle. **Note:** : Vous ne devriez **pas** mettre votre classe dans un package java. En d'autres termes, vous ne devriez **pas** utiliser le mot-clé ``package``. + allowed_exts: + - .java name: Tests unitaires pour l'implémentation de stack + type: file stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 diff --git a/m2bilanqcm/task.yaml b/m2bilanqcm/task.yaml deleted file mode 100644 index c1677806..00000000 --- a/m2bilanqcm/task.yaml +++ /dev/null @@ -1,63 +0,0 @@ -accessible: false -author: Antoine Cailliau -context: '' -environment: mcq -evaluate: last -groups: false -input_random: '0' -limits: - memory: '100' - time: '30' - output: '2' -name: Bilan M2 - QCM -network_grading: false -order: 9 -problems: - qcm01: - name: Complexité de l'algorithme QuickSort - choices: - - text: \\(O(N\\times\\log N)\\) - valid: true - - text: \\(O(N)\\) - - text: \\(O(N^2)\\) - - text: \\(O(\\frac{N^2}{2})\\) - - text: \\(O(\\log N)\\) - header: En moyenne, l’algorithme *QuickSort* utilise [reponse] comparaisons - pour trier un tableau de longueur N où les clés sont distinctes et mélangées - aléatoirement initialement. - type: multiple_choice - limit: 0 - qcm05: - choices: - - text: Le *Selection Sort* n’est pas stable et est en-place. - valid: true - - text: Le *Quick Sort* est stable et en-place. - - valid: true - text: Le *Merge Sort* est stable et n’est pas en-place. - - valid: true - text: Le *3-Way Quick Sort* n’est pas stable et est en place. - - text: Le *Shell Sort* est stable et est en place. - multiple: true - type: multiple_choice - limit: 0 - name: Propriétés des algorithmes de tri - header: Quelles affirmations suivantes sont exactes ? - qcm06: - choices: - - text: '[2, 3, 4, 5] [1, 6, 7, 8]' - valid: true - - text: '[2, 3] [4, 5] [1, 6] [7, 8]' - - text: '[1, 2, 3, 4, 5] [7, 8, 9]' - - text: '[3, 5] [4, 2, 1, 7, 8, 6]' - limit: 0 - name: Algorithme de tri MergeSort - type: multiple_choice - header: Quel état du tableau correspond à une étape valide lors d’un *Merge - Sort* (Top-down) pour le tableau [3, 5, 4, 2, 1, 7, 8, 6] ? - multiple: true -stored_submissions: 1 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 1.0 diff --git a/m2tests/task.yaml b/m2tests/task.yaml index 3c3bce98..004eefa4 100644 --- a/m2tests/task.yaml +++ b/m2tests/task.yaml @@ -101,7 +101,7 @@ limits: time: '60' name: '[Old] Mission 2 - Unit tests [individual]' network_grading: false -order: 35 +order: 49 problems: tree_tests: type: file diff --git a/m2tree/task.yaml b/m2tree/task.yaml index 65d34c69..fd188acb 100644 --- a/m2tree/task.yaml +++ b/m2tree/task.yaml @@ -50,7 +50,7 @@ limits: time: '45' name: '[Old] Mission 2 - Formal expression tree [group]' network_grading: false -order: 36 +order: 50 problems: tree: type: file diff --git a/m3orderedmap/execute_implementation b/m3orderedmap/execute_implementation old mode 100755 new mode 100644 diff --git a/m3orderedmap/task.yaml b/m3orderedmap/task.yaml index 2996bce6..e39d53fe 100644 --- a/m3orderedmap/task.yaml +++ b/m3orderedmap/task.yaml @@ -93,7 +93,7 @@ limits: time: '45' name: Mission 3 - Ordered Map [group] network_grading: false -order: 11 +order: 38 problems: ordered_map: allowed_exts: @@ -106,5 +106,4 @@ stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 diff --git a/m3tests/execute_test b/m3tests/execute_test old mode 100755 new mode 100644 diff --git a/m3tests/task.yaml b/m3tests/task.yaml index f1c8d728..30528e12 100644 --- a/m3tests/task.yaml +++ b/m3tests/task.yaml @@ -48,7 +48,7 @@ limits: time: '180' name: Mission 3 - Unit tests [individual] network_grading: false -order: 10 +order: 37 problems: tests: type: file diff --git a/m4_filter_tests/task.yaml b/m4_filter_tests/task.yaml index 4633fb8b..2eb67a0e 100644 --- a/m4_filter_tests/task.yaml +++ b/m4_filter_tests/task.yaml @@ -67,7 +67,7 @@ limits: time: '60' name: '[Old] Mission 4 - Unit tests for the spam filter [individual]' network_grading: false -order: 39 +order: 53 problems: filter_tests: allowed_exts: diff --git a/m4_plagiarism_tests/execute_test b/m4_plagiarism_tests/execute_test old mode 100755 new mode 100644 diff --git a/m4_plagiarism_tests/task.yaml b/m4_plagiarism_tests/task.yaml index bc9fd132..e903927e 100644 --- a/m4_plagiarism_tests/task.yaml +++ b/m4_plagiarism_tests/task.yaml @@ -71,7 +71,7 @@ limits: memory: '512' name: Mission 4 - Unit tests for the map of the plagiarism detector [individual] network_grading: false -order: 16 +order: 39 problems: plagiarism_tests: allowed_exts: diff --git a/m4bis/execute_implementation b/m4bis/execute_implementation old mode 100755 new mode 100644 diff --git a/m4bis/task.yaml b/m4bis/task.yaml index 68f66b62..d46ced1c 100644 --- a/m4bis/task.yaml +++ b/m4bis/task.yaml @@ -69,7 +69,7 @@ limits: time: '20' name: Mission 4 - Plagiarism detector [group] network_grading: false -order: 17 +order: 40 problems: plagiarism: allowed_exts: @@ -90,5 +90,4 @@ stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 diff --git a/m4classifier/task.yaml b/m4classifier/task.yaml index a7678248..420cc01a 100644 --- a/m4classifier/task.yaml +++ b/m4classifier/task.yaml @@ -59,7 +59,7 @@ limits: time: '30' name: '[Old] Mission 4 - Spam filter [group]' network_grading: false -order: 40 +order: 54 problems: classifier: header: 'Upload your spam filter here. Your class should be named "SpamFilter" diff --git a/m4map/task.yaml b/m4map/task.yaml index 1eda102e..724152bf 100644 --- a/m4map/task.yaml +++ b/m4map/task.yaml @@ -48,7 +48,7 @@ limits: time: '60' name: '[Old] Mission 4 - Map [individual]' network_grading: false -order: 38 +order: 52 problems: map: type: file diff --git a/m4maptests/task.yaml b/m4maptests/task.yaml index 5a0d788a..8cf50b88 100644 --- a/m4maptests/task.yaml +++ b/m4maptests/task.yaml @@ -70,7 +70,7 @@ limits: time: '45' name: '[Old] Mission 4 - Unit tests for the Map [individual]' network_grading: false -order: 37 +order: 51 problems: map_tests: allowed_exts: diff --git a/m5_compressor_tests/execute_test b/m5_compressor_tests/execute_test old mode 100755 new mode 100644 diff --git a/m5_compressor_tests/task.yaml b/m5_compressor_tests/task.yaml index e3805afc..50deafb3 100644 --- a/m5_compressor_tests/task.yaml +++ b/m5_compressor_tests/task.yaml @@ -71,7 +71,7 @@ limits: time: '60' name: Mission 5 - Unit tests for the text compressor [individual] network_grading: false -order: 22 +order: 45 problems: tests: allowed_exts: diff --git a/m5compressor/execute_implementation b/m5compressor/execute_implementation old mode 100755 new mode 100644 diff --git a/m5compressor/task.yaml b/m5compressor/task.yaml index f102e5b7..ff42ae28 100644 --- a/m5compressor/task.yaml +++ b/m5compressor/task.yaml @@ -15,7 +15,7 @@ limits: time: '45' name: Mission 5 - Text compressor [group] network_grading: false -order: 23 +order: 46 problems: compressor: allowed_exts: diff --git a/m6_kruskal_tests/execute_test b/m6_kruskal_tests/execute_test old mode 100755 new mode 100644 diff --git a/m6_kruskal_tests/task.yaml b/m6_kruskal_tests/task.yaml index 5eebac80..107dd1da 100644 --- a/m6_kruskal_tests/task.yaml +++ b/m6_kruskal_tests/task.yaml @@ -94,7 +94,7 @@ limits: hard_time: '420' name: Mission 6 - Unit tests for Kruskal [individual] network_grading: false -order: 28 +order: 47 problems: tests: name: Unit tests for Kruskal diff --git a/m6bucketsort/task.yaml b/m6bucketsort/task.yaml index 360b568a..4a3405c6 100644 --- a/m6bucketsort/task.yaml +++ b/m6bucketsort/task.yaml @@ -25,7 +25,7 @@ limits: time: '60' name: '[Old] Mission 6 - Bucket Sort [individual]' network_grading: false -order: 42 +order: 57 problems: bucketsort: type: file @@ -38,5 +38,4 @@ stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 0.0 diff --git a/m6bucketsorttests/task.yaml b/m6bucketsorttests/task.yaml index 7e348879..3c2f5b21 100644 --- a/m6bucketsorttests/task.yaml +++ b/m6bucketsorttests/task.yaml @@ -54,7 +54,7 @@ limits: time: '45' name: '[Old] Mission 6 - Unit tests for the Bucket-Sort [individual]' network_grading: false -order: 41 +order: 56 problems: bucketsort_tests: allowed_exts: diff --git a/m6kruskal/task.yaml b/m6kruskal/task.yaml index 86133d29..b1f9ff16 100644 --- a/m6kruskal/task.yaml +++ b/m6kruskal/task.yaml @@ -27,7 +27,7 @@ limits: time: '30' name: Mission 6 - Minimum spanning tree [group] network_grading: false -order: 29 +order: 48 problems: kruskal: allowed_exts: diff --git a/median/Test.java b/median/Test.java deleted file mode 100644 index 1d2e35fc..00000000 --- a/median/Test.java +++ /dev/null @@ -1,94 +0,0 @@ -import junit.framework.TestCase; -import org.junit.runner.JUnitCore; -import org.junit.runner.Result; -import org.junit.runner.notification.Failure; - -import java.security.Permission; -import java.util.Arrays; - -public class Test extends TestCase { - - public static int partition(Vector a, int lo, int hi) { - int i = lo, j = hi+1; - int v = a.get(lo); - while (true) { - while (a.get(++i) < v) if (i == hi) break; - while (v < a.get(--j)) if (j == lo) break; - if (i >= j) break; - a.swap(i,j); - } - a.swap(lo,j); - return j; - } - - public static int median(Vector a, int lo, int hi) { - int i = partition(a,lo,hi); - if (i == a.size()/2) return a.get(i); - else if (i < a.size()/2) { - return median(a,i+1,hi); - } else { - return median(a,lo,i-1); - } - } - - public static void sort(Vector a, int lo, int hi) { - if (lo < hi) { - int i = partition(a,lo,hi); - sort(a,lo,i-1); - sort(a,i+1,hi); - } - } - - - public static Vector randomVector(int n) { - java.util.Random rand = new java.util.Random(0); - int [] array = new int[n]; - Arrays.setAll(array, i -> rand.nextInt(1000000)); - //System.out.println(Arrays.toString(array)); - Vector v = new Vector(array.length); - for (int i = 0; i < v.size(); i++) { - v.set(i,array[i]); - } - return v; - } - - - // assigning the values - protected void setUp() { - - } - - @org.junit.Test - public void testMedianOk() { - for (int i = 100; i < 1000; i += 100) { - Vector v = randomVector(i+1); - assertTrue("correct median value computed",median(v,0,v.size()-1) == Median.median(v,0,v.size()-1)); - } - } - @org.junit.Test - public void testComplexityNLogNOk() { - for (int i = 100; i < 2000000; i += 100000) { - Vector v1 = randomVector(i+1); - Median.median(v1,0,v1.size()-1); - - Vector v2 = randomVector(i+1); - sort(v2,0,v2.size()-1); - - assertTrue("complexity larger than O(n.log(n))",v1.nOp() <= v2.nOp()*3); - } - } - @org.junit.Test - public void testComplexityNOk() { - for (int i = 100; i < 2000000; i += 100000) { - Vector v1 = randomVector(i+1); - Median.median(v1,0,v1.size()-1); - - Vector v2 = randomVector(i+1); - median(v2,0,v2.size()-1); - - assertTrue("complexity larger than O(n) expected",v1.nOp() <= v2.nOp()*3); - } - } - - -} \ No newline at end of file diff --git a/median/task.yaml b/median/task.yaml deleted file mode 100644 index 4a47aaa1..00000000 --- a/median/task.yaml +++ /dev/null @@ -1,78 +0,0 @@ -accessible: false -author: Pierre Schaus -context: |- - Nous vous donnons l'API d'une classe Vector permettant d'accéder, modifier et interchanger deux élements en temps constant. - Votre tâche est d'implémenter une méthode permettant de calculer la médiane d'un Vecteur. - - .. code-block:: java - - public interface Vector { - // taille du vecteur - public int size(); - // mets la valeur v à l'indice i du vecteur - public void set(int i, int v); - // renvoie la valeur à l'indice i du vecteur - public int get(int i); - // échange les valeurs aux positions i et j - public void swap(int i, int j); - - } - - `Un projet Eclipse contenant des tests basiques vous est fourni en cliquant sur ce lien. `_ -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - output: '2' - memory: '900' - time: '30' -name: Bilan M2 - Median -network_grading: false -order: 7 -problems: - question1: - name: Votre code - header: |- - Vous devez implémenter une méthode qui a la signature suivante: - - .. code-block:: java - - public static int median(Vector a, int lo, int hi) - - - - Cette méthode calcule la médiane du vector "a" entre les positions "lo" et "hi" (incluses). - - Vous pouvez considérer que le vector "a" a toujours une taille impaire. - - Pour vous aider, un projet eclipse avec un test minimaliste pour vérifier si votre code calcule la bonne valeur médiane est donné. En effet, il n'est pas conseillé de débugger son code via Inginious. - - Il n'est pas interdit de modifier ou d'interchanger des elements du vecteur "a" durant le calcul (avec les methode get/set/swap). Il est interdit de faire appel à d'autres méthodes de la librairie standard Java. Il est également interdit de faire un "new". - - L'évaluation porte sur sur 10 points: - - - bonne valeur de retour: 3 points, - - - bonne valeur de retour et complexité O(n log n): 5 points, - - - bonne valeur de retour et complexité O(n) expected (cas moyen sur une distribution uniforme aléatoire): 10 points. - - - Tout le code que vous écrivez dans le champ texte sera substitué à l'endroit indiqué ci-dessous. - Vous êtes libre d'implémenter éventuellement d'autres méthodes pour vous aider dans cette classe mais la méthode "median" donnée ci-dessus doit au moins y figurer. - - .. code-block:: java - - public class Median { - // votre code sera substitué ici - } - type: code - default: '' - language: java -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 10.0 diff --git a/preexam_merge_sort/student/RunTests.java b/old-common/common/RunTests.java similarity index 100% rename from preexam_merge_sort/student/RunTests.java rename to old-common/common/RunTests.java diff --git a/preexam_merge_sort/execute b/old-common/common/execute similarity index 100% rename from preexam_merge_sort/execute rename to old-common/common/execute diff --git a/old-common/common/execute_implementation b/old-common/common/execute_implementation new file mode 100644 index 00000000..473b8912 --- /dev/null +++ b/old-common/common/execute_implementation @@ -0,0 +1,84 @@ +#!/bin/bash + +# Ceci est le script commun pour toutes les missions où les étudiants +# doivent envoyer une implémentation +# Arguments +# 1 - The id of the problem +# 2 - The name of the file/class of the student implementation +# 3 - The name of the interface +# 4 - The name of an array that contains the forbidden classes that the student +# can't use +# 5 - The name of the Scala tests that will be compiled & run + +function execute_implementation { + local problemId="$1" + local studentCodeName="$2" + local interfaceName="$3" + local -n forbiddenClasses=$4 + local testsName="$5" + + getinput "${problemId}" > "student/${studentCodeName}.java" + if [ -n "${interfaceName}" ];then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + + # We check if the student cheated + for forbiddenClass in "${forbiddenClasses[@]}"; do + cheat=$(cat "student/${studentCodeName}.java" | grep -c "${forbiddenClass}") + echo -e "Cheat check for ${forbiddenClass}: ${cheat}" + if [ "$cheat" != "0" ]; then + feedback --result failed --feedback "We detected the use of ${forbiddenClass}, which is prohibited for this test." + exit 1 + fi + done + + # Compile the student code + compilationMessage=$(javac student/${interfaceName}.java student/${studentCodeName}.java 2>&1) + retval=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of ${studentCodeName}.java failed :\n::\n\n $compilationMessage") + if [ "${retval}" != "0" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 1 + fi + + # Copy everything in the 'student' directory for run_student + cp ${testsName}.scala student/${testsName}.scala + cp scalacheck.jar student/scalacheck.jar + cd student + + # We compile the tests + output=$(scalac -cp .:scalacheck.jar "${testsName}.scala" 2>&1) + retval=$? + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + if [ "$retval" != 0 ]; then + feedback-result failed + feedback-msg -ae -m "Error while compiling the tests. If it persists, contact the administrator of the course.\n\n" + feedback-msg -ae -m "${output}" + exit 1 + fi + + # We run the tests + output=$(run_student scala -cp .:scalacheck.jar ${testsName}) + retval=$? + echo -e "${output}\n" + echo -e "Scalacheck returned the value: ${retval}\n" + + cd .. + + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + elif [ "$retval" = "0" ]; then + # The student implementation passed the test + feedback --result success --feedback "Congratulations, your implementation passed the tests!" + else + # The return code of scalacheck is the number of fail tests + feedback-result failed + feedback-msg -ae -m "Unfortunatley, you failed ${retval} tests:\n\n" + feedback-msg -ae -m "${output}\n\n" + fi +} diff --git a/old-common/common/execute_preexam b/old-common/common/execute_preexam new file mode 100644 index 00000000..31bb1fab --- /dev/null +++ b/old-common/common/execute_preexam @@ -0,0 +1,58 @@ +#! /bin/bash + +function execute_preexam { + local name="$1" + + parsetemplate --output "student/${name}.java" "student/${name}.java" + + cd student/ + + # We compile the students code + output=$(javac "${name}.java" 2>&1) + retval=$? + if [ "$retval" != "0" ]; then + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-result failed + feedback-msg -ae -m "Compilation of ${name} failed:\n::\n\n" + feedback-msg -ae -m "$output" + exit 1 + fi + + # We compile the JUnit tests + output=$(javac -cp .:junit-4.12.jar RunTests.java Tests.java 2>&1) + retval=$? + if [ "$retval" != "0" ]; then + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-result failed + feedback-msg -ae -m "Compilation of JUnit tests failed:\n::\n\n" + feedback-msg -ae -m "$output" + exit 1 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar RunTests 2>&1) + #output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "Tests" 2>&1) + retval=$? + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + + if [ "$retval" = "0" ]; then + feedback-result success + feedback-msg -ae -m "Your implementation passed all the tests !" + else + feedback-result failed + if [ "$retval" = "252" ]; then + feedback-msg -ae -m "The execution was killed due to an out-of-memory (Could it be because of an infinite loop ?)" + elif [ "$retval" = "253" ]; then + feedback-msg -ae -m "The execution timed out" + elif [ "$retval" = "254" ]; then + feedback-msg -ae -m "An error occured while running the proxy" + else + feedback-msg -ae -m "Your implementation didn't pass all the tests" + fi + + # Sometime output only contains spaces, so we must trim them + if [[ ! -z "${output// }" ]]; then + feedback-msg -ae -m "\n::\n\n${output}\n\n" + fi + fi + +} diff --git a/old-common/common/execute_test b/old-common/common/execute_test new file mode 100644 index 00000000..8935dcb6 --- /dev/null +++ b/old-common/common/execute_test @@ -0,0 +1,121 @@ +#!/bin/bash + +# This is the script executed for each missions where students submit tests. +# Arguments: +# 1 - Count of tests to pass (taking in account the "correct" implementation) +# 2 - Id of the problem +# 3 - Name of the class that contains the JUnit tests, submitted by the student +# 4 - Name of the interface implemented by the $5 class +# 5 - Name of the implementation that the tests run against +# 6 - Prefix of the buggy implementations (="MyBuggyStack" for "MyBuggyStack1.java", ...) +# 7 - Name of an array that contains feedbacks messages for each buggy implementations +# 8 - Count of errors before we show feedbacks to user + +function execute_test { + local tot="$1" + local problemId="$2" + local testName="$3" + local interfaceName="$4" + local name="$5" + local buggyName="$6" + local -n buggyFeedbacks=$7 + local countBeforeHints=$8 + + getinput "${problemId}" > "student/$testName.java" + cp junit-4.12.jar student/junit-4.12.jar + cp hamcrest-core-1.3.jar student/hamcrest-core-1.3.jar + cp "${name}.java" "student/${name}.java" + if [ -n "${interfaceName}" ]; then + cp "${interfaceName}.java" "student/${interfaceName}.java" + fi + cd student + + incorrect=$(( $tot-1 )) + n=0 # number of tests passed + failOk=0 + oldName="$name" + feedbackMessages="" + + # This loop first checks with the correct implementation, and then + # with the ${tot-1} incorrect ones + for i in $(seq 1 $tot) + do + cp "../${name}.java" "./${oldName}.java" + name="${buggyName}${i}" + javac "${oldName}.java" + + # Compile the student code and parse it properly + compilationMessage=$(javac -cp .:junit-4.12.jar "${testName}.java" 2>&1) + r=$? + compilationMessage=$(echo "$compilationMessage" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + compilationMessage=$(printf "Compilation of $testName.java failed :\n::\n\n $compilationMessage") + if [ "$r" = "1" ]; then + feedback --result failed --feedback "$compilationMessage" + exit 0 + fi + + output=$(run_student java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore "$testName") + retval=$? + echo -e "${output}\n" + echo -e "Return value of JUnit: ${retval}\n" + if [ "$retval" = "252" ]; then + feedback --result failed --feedback "Command was killed due to an out-of-memory" + exit 0 + elif [ "$retval" = "253" ]; then + feedback --result timeout --feedback "Command timed out" + exit 0 + elif [ "$retval" = "254" ]; then + feedback --result failed --feedback "Unfortunately, a runtime error occured" + exit 0 + fi + + if [ "$i" = "1" ]; then + # This is the first test, we're testing against the correct implementation + # Therefore, the test should say this is a correct implementation + if [ "$retval" = "0" ]; then + ((n++)) + else + feedback-result failed + feedback-msg -ae -m "You detected an error in a correct implementation:\n::\n\n" + output=$(echo "$output" | sed -e 's/^/\t/' | sed -e 's/%/%%%/g') + feedback-msg -ae -m "${output}" + exit 1 + fi + else + # We're testing against an incorrect implementation + if [ "$retval" != "0" ]; then + ((n++)) + ((failOk++)) + else + # We add a feedback message for the user + index=$((i - 1)) + feedbackLine=${buggyFeedbacks[$index-1]} + if [[ -z "$feedbackLine" ]]; then + feedbackLine="Failed test" + fi + feedbackMessages="${feedbackMessages}**Test #$index:** $feedbackLine\n\n" + fi + fi + done + cd .. + + if [ "$n" = "0" ]; then + feedback --result failed --feedback "It seems like an internal error occured. If this persists, please contact your course administrator." + elif [ "$n" = "$tot" ]; then + feedback --grade 100 --result success --feedback "Congratulations, you passed the **${incorrect}** tests!" + else + errors=$(( incorrect - failOk )) + grade=$(( (100 * (failOk)) / $incorrect )) + + feedback-grade $grade + feedback-result failed + + # We only print the test feedbacks if the student has not more + # than 3 failed tests + if [ "$errors" -le "${countBeforeHints}" ]; then + feedback-msg -ae -m "${feedbackMessages}" + fi + + feedback-msg -ae -m "You detected errors in only **$failOk** (out of **$incorrect**) incorrect implementations." + fi +} diff --git a/p1circularlinkedlist/._.DS_Store b/p1circularlinkedlist/._.DS_Store deleted file mode 100644 index 0e6cea2e..00000000 Binary files a/p1circularlinkedlist/._.DS_Store and /dev/null differ diff --git a/p1circularlinkedlist/._run b/p1circularlinkedlist/._run deleted file mode 100644 index ad7bcee4..00000000 Binary files a/p1circularlinkedlist/._run and /dev/null differ diff --git a/p1circularlinkedlist/public/._.DS_Store b/p1circularlinkedlist/public/._.DS_Store deleted file mode 100644 index 23b7a73f..00000000 Binary files a/p1circularlinkedlist/public/._.DS_Store and /dev/null differ diff --git a/p1circularlinkedlist/public/._CircularLinkedList.png b/p1circularlinkedlist/public/._CircularLinkedList.png deleted file mode 100644 index c1054ac8..00000000 Binary files a/p1circularlinkedlist/public/._CircularLinkedList.png and /dev/null differ diff --git a/p1circularlinkedlist/public/._LSINF1121CircularLinkedList.zip b/p1circularlinkedlist/public/._LSINF1121CircularLinkedList.zip deleted file mode 100644 index e7761258..00000000 Binary files a/p1circularlinkedlist/public/._LSINF1121CircularLinkedList.zip and /dev/null differ diff --git a/p1circularlinkedlist/public/LSINF1121CircularLinkedList.zip b/p1circularlinkedlist/public/LSINF1121CircularLinkedList.zip deleted file mode 100644 index eb74bff1..00000000 Binary files a/p1circularlinkedlist/public/LSINF1121CircularLinkedList.zip and /dev/null differ diff --git a/p1circularlinkedlist/run b/p1circularlinkedlist/run deleted file mode 100644 index 997cf0a8..00000000 --- a/p1circularlinkedlist/run +++ /dev/null @@ -1,35 +0,0 @@ -#! /bin/python3 -# coding: utf-8 - -from inginious import input -from inginious import feedback -import subprocess -from inginious import rst -import re - - -input.parse_template("student/CircularLinkedList.java") - -compile_error = subprocess.call('javac -cp ".:libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar" tests/*.java student/CircularLinkedList.java 2>&1', shell=True, stdout=open('compiler.out', 'w')) - -if compile_error != 0: - codeblock = rst.get_codeblock("java", open('compiler.out').read()) - feedback.set_global_feedback("Votre code ne compile pas: \n\n" + codeblock, True) - feedback.set_global_result("failed") - exit(0) - - - -try: - out = subprocess.check_output('java -cp "libs/junit-4.12.jar:libs/hamcrest-core-1.3.jar:libs/JavaGrading-0.1.jar:." tests/RunTests', shell=True).decode('utf8') - - grade = re.findall(r"^TOTAL ([0-9\.]+)/([0-9\.]+)$", out, re.MULTILINE)[-1] - grade = 100.0*float(grade[0])/float(grade[1]) - - feedback.set_grade(grade) - codeblock = rst.get_codeblock("java", out) - feedback.set_global_feedback("Résultat des tests: \n\n" + codeblock, True) - feedback.set_global_result("success") -except Exception as e: - feedback.set_global_feedback("Une erreur s'est produite!!." + str(e), True) - feedback.set_global_result("failed") \ No newline at end of file diff --git a/p1circularlinkedlist/student/._.DS_Store b/p1circularlinkedlist/student/._.DS_Store deleted file mode 100644 index 1ef77c50..00000000 Binary files a/p1circularlinkedlist/student/._.DS_Store and /dev/null differ diff --git a/p1circularlinkedlist/task.yaml b/p1circularlinkedlist/task.yaml deleted file mode 100644 index 9d78fd24..00000000 --- a/p1circularlinkedlist/task.yaml +++ /dev/null @@ -1,150 +0,0 @@ -accessible: 2018-09-24 16:00:00/2019-09-24 16:00:00 -author: Pierre Schaus -context: |- - On s’intéresse à l'implémentation d'une ``liste simplement chaînée circulaire``, c’est-à-dire une liste pour laquelle la dernière position de la liste fait référence, comme position suivante, à la première position de la liste. - - .. image:: p1circularlinkedlist/CircularLinkedList.png - - L’ajout d’un nouvel élément dans la file (méthode ``enqueue``) se fait en fin de liste et le retrait (méthode ``remove``) se fait a un `index` particulier de la liste. Une (seule) référence sur la fin de la liste (``last``) est nécessaire pour effectuer toutes les opérations sur cette file. - - Il vous est donc demander d'implémenter cette liste simplement chaînée circulaire à partir de la classe ``CircularLinkedList.java`` où vous devez completer (*TODO STUDENT*) les méthodes d'ajout (``enqueue``) et de retrait (``remove``) ainsi qu'un itérateur (``ListIterator``) qui permet de parcourir la liste en FIFO. - *Attention:* un itérateur ne peut être modifié au cours de son utilisation. - - .. code-block:: java - - package student; - - import java.util.ConcurrentModificationException; - import java.util.Iterator; - import java.util.NoSuchElementException; - - public class CircularLinkedList implements Iterable { - private long nOp = 0; // count the number of operations - private int n; // size of the stack - private Node last; // trailer of the list - - // helper linked list class - private class Node { - private Item item; - private Node next; - } - - public CircularLinkedList() { - last = null; - n = 0; - } - - public boolean isEmpty() { return n == 0; } - - public int size() { return n; } - - private long nOp() { return nOp; } - - /** - * Append an item at the end of the list - * @param item the item to append - */ - public void enqueue(Item item) { - // TODO STUDENT: Implement add method - } - - /** - * Removes the element at the specified position in this list. - * Shifts any subsequent elements to the left (subtracts one from their indices). - * Returns the element that was removed from the list. - */ - public Item remove(int index) { - // TODO STUDENT: Implement remove method - } - - /** - * Returns an iterator that iterates through the items in FIFO order. - * @return an iterator that iterates through the items in FIFO order. - */ - public Iterator iterator() { - return new ListIterator(); - } - - /** - * Implementation of an iterator that iterates through the items in FIFO order. - * - */ - private class ListIterator implements Iterator { - // TODO STUDDENT: Implement the ListIterator - } - - } - - - - `Le projet IntelliJ est disponible ici `_. -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - time: '300' - memory: '1000' - output: '2' -name: PART 1 - Circular linkedlist (Implem) -network_grading: false -order: 3 -problems: - enqueue: - header: |- - .. code-block:: java - - /** - * Append an item at the end of the list - * @param item the item to append - */ - public void enqueue(Item item) { - // TODO STUDENT: Implement add method - } - - Copier le contenu de la fonction ``public void enqueue(Item item)`` ci-desssous. - default: '' - type: code - name: 'Implementation de la fonction ajout: void enqueue(Item item)' - language: java - remove: - language: java - type: code - default: '' - header: |- - .. code-block:: java - - /** - * Removes the element at the specified position in this list. - * Shifts any subsequent elements to the left (subtracts one from their indices). - * Returns the element that was removed from the list. - */ - public Item remove(int index) { - // TODO STUDENT: Implement remove method - } - - Copier le contenu de la fonction ``public Item remove(int index)`` ci-desssous. - name: 'Implementation de la fonction ajout: Item remove(int index)' - listiterator: - name: 'Implementation de l''iterateur: ListIterator' - default: '' - type: code - language: java - header: |- - .. code-block:: java - - /** - * Implementation of an iterator that iterates through the items in FIFO order. - * - */ - private class ListIterator implements Iterator { - // TODO STUDDENT: Implement the ListIterator - } - - Copier le contenu de la class ``private class ListIterator implements Iterator`` ci-desssous. -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 1.0 diff --git a/p1circularlinkedlist/tests/._.DS_Store b/p1circularlinkedlist/tests/._.DS_Store deleted file mode 100644 index 9385138a..00000000 Binary files a/p1circularlinkedlist/tests/._.DS_Store and /dev/null differ diff --git a/p1circularlinkedlist/tests/CircularLinkedListTestComplexity.java b/p1circularlinkedlist/tests/CircularLinkedListTestComplexity.java deleted file mode 100644 index 8e7f8f2d..00000000 --- a/p1circularlinkedlist/tests/CircularLinkedListTestComplexity.java +++ /dev/null @@ -1,64 +0,0 @@ -package tests; - -import be.ac.ucl.info.javagrading.Grade; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import student.CircularLinkedList; - -import java.io.IOException; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import static org.junit.Assert.*; - - -@RunWith(Parameterized.class) -public class CircularLinkedListTestComplexity { - - private CircularLinkedList student; - private List correct; - - - public CircularLinkedListTestComplexity(CircularLinkedList student, List correct) { - this.student = student; - this.correct = correct; - } - - @Test(timeout=300) - @Grade(value=10) //10 par test x 5 = 50 - public void runAsExpected() { - int sz = correct.size(); - for (int i = 0; i < sz/2; i++) { - student.remove(0); - correct.remove(0); - } - Iterator aIter = student.iterator(); - Iterator bIter = correct.iterator(); - - while (bIter.hasNext()) { - assertTrue(aIter.hasNext()); - assertEquals(bIter.next(),aIter.next()); - } - assertFalse(bIter.hasNext()); - assertFalse(aIter.hasNext()); - } - - - @Parameterized.Parameters - public static List data() throws IOException { - LinkedList tests = new LinkedList<>(); - for (int i = 0; i < 5; i++) { - CircularLinkedList a = new CircularLinkedList<>(); - List b = new LinkedList<>(); - for (int k = 0; k < 1000000; k++) { - a.enqueue(k); - b.add(k); - } - tests.add(new Object[]{a,b}); - } - return tests; - } -} - diff --git a/p1circularlinkedlist/tests/CircularLinkedListTestExtreme.java b/p1circularlinkedlist/tests/CircularLinkedListTestExtreme.java deleted file mode 100644 index eec9b2ac..00000000 --- a/p1circularlinkedlist/tests/CircularLinkedListTestExtreme.java +++ /dev/null @@ -1,62 +0,0 @@ -package tests; - -import be.ac.ucl.info.javagrading.Grade; -import org.junit.Test; -import student.CircularLinkedList; - -import java.util.ConcurrentModificationException; -import java.util.Iterator; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - - -public class CircularLinkedListTestExtreme { - - - @Test - @Grade(value=15) - public void testIteratorList() { - for (int i = 0; i < 20; i++) { - CircularLinkedList a = new CircularLinkedList<>(); - assertEquals(0,a.size()); - a.enqueue(i); - assertEquals(1,a.size()); - Iterator itera = a.iterator(); - assertTrue(itera.hasNext()); - assertEquals(i,itera.next()); - - CircularLinkedList b = new CircularLinkedList<>(); - b.enqueue(i); - b.remove(0); - Iterator iterb = b.iterator(); - assertFalse(iterb.hasNext()); - - } - } - - @Test(expected = IndexOutOfBoundsException.class) - @Grade(value=5) - public void testOutOfBound() { - CircularLinkedList a = new CircularLinkedList<>(); - a.enqueue(3); - a.remove(1); - } - - - @Test(expected = ConcurrentModificationException.class) - @Grade(value=5) - public void testConcurrentModificationNext() { - CircularLinkedList a = new CircularLinkedList<>(); - Iterator iter = a.iterator(); - a.enqueue(3); - iter.next(); - } - - - - - -} - diff --git a/p1circularlinkedlist/tests/CircularLinkedListTestRandom.java b/p1circularlinkedlist/tests/CircularLinkedListTestRandom.java deleted file mode 100644 index de662b5a..00000000 --- a/p1circularlinkedlist/tests/CircularLinkedListTestRandom.java +++ /dev/null @@ -1,68 +0,0 @@ -package tests; - -import be.ac.ucl.info.javagrading.Grade; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import student.CircularLinkedList; - - -import java.io.IOException; -import java.util.*; - -import static org.junit.Assert.*; - - - -@RunWith(Parameterized.class) -public class CircularLinkedListTestRandom { - private CircularLinkedList student; - private List correct; - - - public CircularLinkedListTestRandom(CircularLinkedList student, List correct) { - this.student = student; - this.correct = correct; - } - - @Test - @Grade(value=0.5) //0.5 par test x 50 = 25 - public void runAsExpected() { - Iterator aIter = student.iterator(); - Iterator bIter = correct.iterator(); - assertEquals(correct.size(),student.size()); - while (bIter.hasNext()) { - assertTrue(aIter.hasNext()); - assertEquals(bIter.next(),aIter.next()); - } - assertFalse(bIter.hasNext()); - assertFalse(aIter.hasNext()); - } - - - @Parameterized.Parameters - public static List data() throws IOException { - Random r = new Random(); - LinkedList tests = new LinkedList<>(); - for (int i = 0; i < 50; i++) { - CircularLinkedList a = new CircularLinkedList<>(); - List b = new LinkedList<>(); - for (int k = 0; k < 100; k++) { - int v = r.nextInt(); - a.enqueue(v); - b.add(v); - } - if (i%2 == 0) { - a.remove(10); - b.remove(10); - a.remove(0); - b.remove(0); - a.remove(a.size()-1); - b.remove(b.size()-1); - } - tests.add(new Object[]{a,b}); - } - return tests; - } -} - diff --git a/p1circularlinkedlist/tests/RunTests.java b/p1circularlinkedlist/tests/RunTests.java deleted file mode 100644 index 65cea456..00000000 --- a/p1circularlinkedlist/tests/RunTests.java +++ /dev/null @@ -1,12 +0,0 @@ -package tests; - -import be.ac.ucl.info.javagrading.GradingListener; -import org.junit.runner.JUnitCore; - -public class RunTests { - public static void main(String args[]) { - JUnitCore runner = new JUnitCore(); - runner.addListener(new GradingListener()); - runner.run(CircularLinkedListTestComplexity.class,CircularLinkedListTestExtreme.class,CircularLinkedListTestRandom.class); - } -} diff --git a/participation_rules/task.yaml b/participation_rules/task.yaml index e71326dd..aa4a37e0 100644 --- a/participation_rules/task.yaml +++ b/participation_rules/task.yaml @@ -50,7 +50,7 @@ limits: time: '30' name: Règles de participation aux cours network_grading: false -order: 0 +order: 2 problems: read_and_approved: name: '' @@ -62,5 +62,4 @@ stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 0.0 diff --git a/preexam_bfs/run b/preexam_bfs/run deleted file mode 100644 index 395862d7..00000000 --- a/preexam_bfs/run +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -names=( - "BreadthFirstShortestPaths" -) -forbiddenClasses=( -) - -parsetemplate --output "student/${names[0]}.java" "student/${names[0]}.java" - -. ./execute -execute names forbiddenClasses diff --git a/preexam_bfs/student/BreadthFirstShortestPaths.java b/preexam_bfs/student/BreadthFirstShortestPaths.java deleted file mode 100644 index b4f743f9..00000000 --- a/preexam_bfs/student/BreadthFirstShortestPaths.java +++ /dev/null @@ -1,46 +0,0 @@ -@ @import@@ - -public class BreadthFirstShortestPaths { - public static final int INFINITY = Integer.MAX_VALUE; - private boolean[] marked; // marked[v] = is there an s-v path - private int[] distTo; // distTo[v] = number of edges shortest s-v path - - /** - * Computes the shortest path between any - * one of the sources and very other vertex - * @param G the graph - * @param sources the source vertices - */ - public BreadthFirstShortestPaths(Graph G, Iterable sources) { - marked = new boolean[G.V()]; - distTo = new int[G.V()]; - for (int v = 0;v < G.V();v++) { - distTo[v] = INFINITY; - } - bfs(G, sources); - } - - // Breadth-first search from multiple sources - private void bfs(Graph G, Iterable sources) { - @ @question1@@ - } - - /** - * Is there a path between (at least one of) the sources and vertex v? - * @param v the vertex - * @return true if there is a path, and false otherwise - */ - public boolean hasPathTo(int v) { - @ @question2@@ - } - - /** - * Returns the number of edges in a shortest path - * between one of the sources and vertex v? - * @param v the vertex - * @return the number of edges in a shortest path - */ - public int distTo(int v) { - @ @question3@@ - } -} diff --git a/preexam_bfs/student/Tests.java b/preexam_bfs/student/Tests.java deleted file mode 100644 index b1d206f1..00000000 --- a/preexam_bfs/student/Tests.java +++ /dev/null @@ -1,91 +0,0 @@ -import org.junit.Test; -import org.junit.runner.JUnitCore; -import org.junit.runner.Result; -import org.junit.runner.notification.Failure; - -import java.util.Arrays; - -import static org.junit.Assert.assertEquals; - -public class Tests { - @Test - public void testSimple() - { - String message = "Test [0-1, 0-2, 0-3, 0-4] with [1] as sources"; - Graph graph = new Graph(5); - - graph.addEdge(0, 1); - graph.addEdge(0, 2); - graph.addEdge(0, 3); - graph.addEdge(0, 4); - - BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); - - assertEquals(message, 0, bfs.distTo(1)); - assertEquals(message, 1, bfs.distTo(0)); - assertEquals(message, 2, bfs.distTo(2)); - assertEquals(message, 2, bfs.distTo(3)); - assertEquals(message, 2, bfs.distTo(4)); - } - - @Test - public void testDisconnected() - { - String message = "Test [0-1, 1-2, 3-4] with [1] as sources"; - Graph graph = new Graph(5); - - graph.addEdge(0, 1); - graph.addEdge(1, 2); - graph.addEdge(3, 4); - - BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1)); - assertEquals(message, 1, bfs.distTo(0)); - assertEquals(message, 1, bfs.distTo(2)); - - assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(3)); - assertEquals(message, BreadthFirstShortestPaths.INFINITY, bfs.distTo(4)); - } - - @Test - public void testLoop() - { - String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5, 5-0] with [0] as sources"; - Graph graph = new Graph(6); - - graph.addEdge(0, 1); - graph.addEdge(1, 2); - graph.addEdge(2, 3); - graph.addEdge(3, 4); - graph.addEdge(4, 5); - graph.addEdge(5, 0); - - BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(0)); - assertEquals(message, 0, bfs.distTo(0)); - assertEquals(message, 1, bfs.distTo(1)); - assertEquals(message, 2, bfs.distTo(2)); - assertEquals(message, 3, bfs.distTo(3)); - assertEquals(message, 2, bfs.distTo(4)); - assertEquals(message, 1, bfs.distTo(5)); - } - - @Test - public void testMultipleSources() - { - String message = "Test [0-1, 1-2, 2-3, 3-4, 4-5] with [1, 5] as sources"; - Graph graph = new Graph(6); - - graph.addEdge(0, 1); - graph.addEdge(1, 2); - graph.addEdge(2, 3); - graph.addEdge(3, 4); - graph.addEdge(4, 5); - - BreadthFirstShortestPaths bfs = new BreadthFirstShortestPaths(graph, Arrays.asList(1, 5)); - assertEquals(message, 1, bfs.distTo(0)); - assertEquals(message, 0, bfs.distTo(1)); - assertEquals(message, 1, bfs.distTo(2)); - assertEquals(message, 2, bfs.distTo(3)); - assertEquals(message, 1, bfs.distTo(4)); - assertEquals(message, 0, bfs.distTo(5)); - } -} diff --git a/preexam_bfs/task.yaml b/preexam_bfs/task.yaml deleted file mode 100644 index ad3fb799..00000000 --- a/preexam_bfs/task.yaml +++ /dev/null @@ -1,131 +0,0 @@ -accessible: false -author: Frédéric Kaczynski -context: |- - Consider this class, ``BreadthFirstShortestPaths``, that computes the shortest path between multiple node sources and any node in an undirected graph. - - .. code-block:: java - - // TODO - - public class BreadthFirstShortestPaths { - - private static final int INFINITY = Integer.MAX_VALUE; - private boolean[] marked; // marked[v] = is there an s-v path - private int[] distTo; // distTo[v] = number of edges shortest s-v path - - /** - * Computes the shortest path between any - * one of the sources and very other vertex - * @param G the graph - * @param sources the source vertices - */ - public BreadthFirstShortestPaths(Graph G, Iterable sources) { - marked = new boolean[G.V()]; - distTo = new int[G.V()]; - for (int v = 0;v < G.V();v++) { - distTo[v] = INFINITY; - } - bfs(G, sources); - } - - // Breadth-first search from multiple sources - private void bfs(Graph G, Iterable sources) { - // TODO - } - - /** - * Is there a path between (at least one of) the sources and vertex v? - * @param v the vertex - * @return true if there is a path, and false otherwise - */ - public boolean hasPathTo(int v) { - // TODO - } - - /** - * Returns the number of edges in a shortest path - * between one of the sources and vertex v? - * @param v the vertex - * @return the number of edges in a shortest path - */ - public int distTo(int v) { - // TODO - } - } - - The class ``Graph`` is already implemented. Here is its specification: - - .. code-block:: java - - public class Graph { - // @return the number of vertices - public int V() { } - - // @return the number of edges - public int E() { } - - // Add edge v-w to this graph - public void addEdge(int v, int w) { } - - // @return the vertices adjacent to v - public Iterable adj(int v) { } - - // @return a string representation - public String toString() { } - } - - **Note:** The following questions will ask you to implement the function left out. You don't need to put the brackets (``{ }``) surrounding the function body in your answer. -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - memory: '100' - time: '30' - output: '2' -name: Bilan M6 - Breadth First Paths -network_grading: false -order: 30 -problems: - import: - language: java - name: '' - default: '' - header: |- - You can use this to import additional classes your code may need. - - **Note:** This is only asked so that your code can be compiled and tested. During the exam, you won't need to provide this and you will be able to use pseudo-classes like ``Queue``. - type: code - question1: - name: '' - header: |- - .. code-block:: java - - private void bfs(Graph G, Iterable sources) - type: code - default: '' - language: java - question2: - type: code - default: '' - name: '' - language: java - header: |- - .. code-block:: java - - public boolean hasPathTo(int v) - question3: - language: java - type: code - default: '' - header: |- - .. code-block:: java - - public int distTo(int v) - name: '' -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 0.0 diff --git a/preexam_bloomfilter/task.yaml b/preexam_bloomfilter/task.yaml index b9a9df70..a5f55449 100644 --- a/preexam_bloomfilter/task.yaml +++ b/preexam_bloomfilter/task.yaml @@ -48,7 +48,7 @@ limits: output: '2' name: Pré-examen - Bloom Filters network_grading: false -order: 21 +order: 41 problems: bloom_vs_hashmap: multiple: true diff --git a/preexam_dfs/run b/preexam_dfs/run deleted file mode 100644 index 4ceec29b..00000000 --- a/preexam_dfs/run +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -names=( - "DepthFirstPaths" -) -forbiddenClasses=( -) - -parsetemplate --output "student/${names[0]}.java" "student/${names[0]}.java" - -. ./execute -execute names forbiddenClasses diff --git a/preexam_dfs/student/DepthFirstPaths.java b/preexam_dfs/student/DepthFirstPaths.java deleted file mode 100644 index f80e5a61..00000000 --- a/preexam_dfs/student/DepthFirstPaths.java +++ /dev/null @@ -1,44 +0,0 @@ -@ @import@@ - -public class DepthFirstPaths { - private boolean[] marked; // marked[v] = is there an s-v path? - private int[] edgeTo; // edgeTo[v] = last edge on s-v path - private final int s; - - /** - * Computes a path between s and every other vertex in graph G - * @param G the graph - * @param s the source vertex - */ - public DepthFirstPaths(Graph G, int s) { - this.s = s; - edgeTo = new int[G.V()]; - marked = new boolean[G.V()]; - dfs(G, s); - } - - // Depth first search from v - private void dfs(Graph G, int v) { - @ @question1@@ - } - - /** - * Is there a path between the source s and vertex v? - * @param v the vertex - * @return true if there is a path, false otherwise - */ - public boolean hasPathTo(int v) { - @ @question2@@ - } - - /** - * Returns a path between the source vertex s and vertex v, or - * null if no such path - * @param v the vertex - * @return the sequence of vertices on a path between the source vertex - * s and vertex v, as an Iterable - */ - public Iterable pathTo(int v) { - @ @question3@@ - } -} diff --git a/preexam_dfs/student/Tests.java b/preexam_dfs/student/Tests.java deleted file mode 100644 index cb32c786..00000000 --- a/preexam_dfs/student/Tests.java +++ /dev/null @@ -1,68 +0,0 @@ -import org.junit.Test; -import org.junit.runner.JUnitCore; -import org.junit.runner.Result; -import org.junit.runner.notification.Failure; - -import java.util.Arrays; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; - -public class Tests { - - @Test - public void testSimple() - { - String message = "Test [0-1, 0-2, 0-3, 0-4] with 1 as source"; - Graph graph = new Graph(5); - - graph.addEdge(0, 1); - graph.addEdge(0, 2); - graph.addEdge(0, 3); - graph.addEdge(0, 4); - - DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); - - assertTrue(message, dfs.hasPathTo(0)); - assertTrue(message, dfs.hasPathTo(1)); - assertTrue(message, dfs.hasPathTo(2)); - assertTrue(message, dfs.hasPathTo(3)); - assertTrue(message, dfs.hasPathTo(4)); - } - - @Test - public void testDisconnected() - { - String message = "Test [0-1, 1-2, 3-4] with 1 as source"; - Graph graph = new Graph(5); - - graph.addEdge(0, 1); - graph.addEdge(1, 2); - graph.addEdge(3, 4); - - DepthFirstPaths dfs = new DepthFirstPaths(graph, 1); - - assertTrue(message, dfs.hasPathTo(0)); - assertTrue(message, dfs.hasPathTo(2)); - assertFalse(message, dfs.hasPathTo(3)); - assertFalse(message, dfs.hasPathTo(4)); - } - - @Test - public void testLoop() - { - String message = "Test [0-1, 1-2, 2-3, 3-4, 4-0] with 0 as source"; - Graph graph = new Graph(6); - - graph.addEdge(0, 1); - graph.addEdge(1, 2); - graph.addEdge(2, 3); - graph.addEdge(3, 4); - graph.addEdge(4, 0); - - DepthFirstPaths dfs = new DepthFirstPaths(graph, 0); - - assertTrue(message, dfs.hasPathTo(4)); - } -} diff --git a/preexam_dfs/task.yaml b/preexam_dfs/task.yaml index 8a88a91c..d16a40f6 100644 --- a/preexam_dfs/task.yaml +++ b/preexam_dfs/task.yaml @@ -77,52 +77,51 @@ evaluate: best groups: false input_random: '0' limits: - memory: '100' time: '30' + memory: '100' output: '2' -name: Bilan M6 - Depth First Paths +name: '[old] Bilan M6 - Depth First Paths' network_grading: false -order: 31 problems: import: + default: '' + language: java header: |- You can use this to import additional classes your code may need. **Note:** This is only asked so that your code can be compiled and tested. During the exam, you won't need to provide this and you will be able to use pseudo-classes like ``Queue``. - type: code - language: java - default: '' name: '' + type: code question1: + type: code name: '' header: |- .. code-block:: java private void dfs(Graph G, int v) - default: '' language: java - type: code + default: '' question2: + default: '' header: |- .. code-block:: java public boolean hasPathTo(int v) type: code - default: '' name: '' language: java question3: + language: java + name: '' header: |- .. code-block:: java public Iterable pathTo(int v) - language: java - name: '' default: '' type: code stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 1.0 +order: 44 diff --git a/preexam_heap/task.yaml b/preexam_heap/task.yaml index 6cdfa56f..8ec7e2cb 100644 --- a/preexam_heap/task.yaml +++ b/preexam_heap/task.yaml @@ -23,52 +23,51 @@ evaluate: best groups: false input_random: '0' limits: + output: '2' memory: '100' time: '30' - output: '2' -name: Bilan M5 - Heap +name: '[old] Mission 5 - Heap' network_grading: false -order: 26 +order: 35 problems: heap1: - type: match - name: '' + answer: '5' header: 'Starting with an empty ``Heap``, we add ``5`` to it. The array containing the ``Heap`` is:' - answer: '5' + name: '' + type: match heap2: - answer: 5 1 type: match - name: '' + answer: 5 1 header: 'We add ``1`` to the ``Heap``, the array containing the ``Heap`` is:' + name: '' heap3: - header: 'We add ``9`` to the ``Heap``, the array containing the ``Heap`` is:' - type: match name: '' + type: match + header: 'We add ``9`` to the ``Heap``, the array containing the ``Heap`` is:' answer: 9 1 5 heap4: type: match - header: 'We add ``3`` to the ``Heap``, the array containing the ``Heap`` is:' name: '' answer: 9 3 5 1 + header: 'We add ``3`` to the ``Heap``, the array containing the ``Heap`` is:' heap5: - header: 'We add ``8`` to the ``Heap``, the array containing the ``Heap`` is:' name: '' type: match + header: 'We add ``8`` to the ``Heap``, the array containing the ``Heap`` is:' answer: 9 8 5 1 3 heap6: name: '' header: 'We add ``6`` to the ``Heap``, the array containing the ``Heap`` is:' - answer: 9 8 6 1 3 5 type: match + answer: 9 8 6 1 3 5 heap7: - type: match - header: 'We add ``4`` to the ``Heap``, the array containing the ``Heap`` is:' answer: 9 8 6 1 3 5 4 + header: 'We add ``4`` to the ``Heap``, the array containing the ``Heap`` is:' + type: match name: '' stored_submissions: 0 submission_limit: amount: -1 period: -1 -tags: {} weight: 0.0 diff --git a/preexam_merge_sort/task.yaml b/preexam_merge_sort/task.yaml deleted file mode 100644 index ef2aac9d..00000000 --- a/preexam_merge_sort/task.yaml +++ /dev/null @@ -1,82 +0,0 @@ -accessible: false -author: Frédéric Kaczynski -context: |- - Consider the (top-down) sorting algorithm ``Merge Sort`` - - .. code-block:: java - - public class MergeSort { - /** - * Pre-conditions: a[lo..mid] and a[mid+1..hi] are sorted - * Post-conditions: a[lo..hi] is sorted - */ - private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { - for (int k = lo; k <= hi; k++) { - aux[k] = a[k]; - } - - int i = lo; - int j = mid + 1; - for (int k = lo; k <= hi; k++) { - if (i > mid) { - a[k] = aux[j++]; - } else if (j > hi) { - a[k] = aux[i++]; - } else if (aux[j].compareTo(aux[i]) < 0) { - a[k] = aux[j++]; - } else { - a[k] = aux[i++]; - } - } - } - - // Mergesort a[lo..hi] using auxiliary array aux[lo..hi] - private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { - // TODO - } - - /** - * Rearranges the array in ascending order, using the natural order - */ - public static void sort(Comparable[] a) { - // TODO - } - } - - **Note:** The following questions will ask you to implement the function left out. You don't need to put the brackets (``{ }``) surrounding the function body in your answer. -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - output: '2' - memory: '100' - time: '30' -name: Bilan M2 - Merge Sort -network_grading: false -order: 8 -problems: - question1: - name: '' - header: |- - .. code-block:: java - - private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) - type: code - default: '' - language: java - question2: - name: '' - header: |- - .. code-block:: java - - public static void sort(Comparable[] a) - language: java - type: code - default: '' -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 0.0 diff --git a/preexam_redblacktree/task.yaml b/preexam_redblacktree/task.yaml deleted file mode 100644 index ce71df6a..00000000 --- a/preexam_redblacktree/task.yaml +++ /dev/null @@ -1,82 +0,0 @@ -accessible: false -author: Frédéric Kaczynski -context: |- - Consider an empty ``Red-Black Tree`` in which we progressively add numbers. - - The following questions will ask you to write a representation of the ``Red-Black Tree`` as we add objects in it. Write it as if you were reading from left to right and from top to bottom (ignoring the possible blanks). For example, if your answer is: - - :: - - 6 - / \ - (2 4) 7 - / | \ \ - 1 3 5 9 - - You would write: - - :: - - 6 24 7 1 3 5 9 - - Notice how the 2-3 node composed of ``2`` and ``4`` is written in a merged way (``24``). -environment: mcq -evaluate: best -groups: false -input_random: '0' -limits: - memory: '100' - time: '30' - output: '2' -name: Bilan M3 - Red Black Tree -network_grading: false -order: 15 -problems: - redblacktree1: - type: match - header: 'Starting with an empty ``Red-Black Tree``, we add ``1`` to the ``Red-Black - Tree``. The representation of the tree is:' - answer: '1' - name: '' - redblacktree2: - answer: '16' - type: match - name: '' - header: 'We add ``6`` to the ``Red-Black Tree``. The representation of the - tree is:' - redblacktree3: - type: match - answer: 4 1 6 - name: '' - header: 'We add ``4`` to the ``Red-Black Tree``. The representation of the - tree is:' - redblacktree4: - name: '' - answer: 4 1 67 - type: match - header: 'We add ``7`` to the ``Red-Black Tree``. The representation of the - tree is:' - redblacktree5: - name: '' - type: match - answer: 4 13 67 - header: 'We add ``3`` to the ``Red-Black Tree``. The representation of the - tree is:' - redblacktree6: - type: match - answer: 46 13 5 7 - name: '' - header: 'We add ``5`` to the ``Red-Black Tree``. The representation of the - tree is:' - redblacktree7: - name: '' - type: match - header: 'We add ``2`` to the ``Red-Black Tree``. The representation of the - tree is:' - answer: 4 2 6 1 3 5 7 -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 0.0 diff --git a/preexam_tree_qcm/task.yaml b/preexam_tree_qcm/task.yaml deleted file mode 100644 index d2c74c25..00000000 --- a/preexam_tree_qcm/task.yaml +++ /dev/null @@ -1,65 +0,0 @@ -accessible: false -author: Frédéric Kaczynski -context: |- - Consider this ordered binary tree: - - :: - - 4 - / \ - 2 5 - / \ / \ - 1 3 6 7 - - We traverse this tree and we print the value of each node we visit it. -environment: mcq -evaluate: best -groups: false -input_random: '0' -limits: - memory: '100' - time: '30' - output: '2' -name: Bilan M3 - QCM Binary Trees -network_grading: false -order: 34 -problems: - qcm2: - choices: - - text: '``1 2 3 4 5 6 7``' - - text: '``4 2 1 3 5 6 7``' - valid: true - - text: '``7 6 5 3 1 2 4``' - type: multiple_choice - limit: 0 - header: If the algorithm makes an prefix traversal, what will be the printed - output ? - name: '' - qcm1: - choices: - - text: '``1 2 3 4 6 5 7``' - valid: true - - text: '``4 2 1 3 5 6 7``' - - text: '``7 6 5 3 1 2 4``' - limit: 0 - header: If the algorithm makes an infix traversal, what will be the printed - output ? - name: '' - type: multiple_choice - qcm3: - choices: - - text: '``1 2 3 4 5 6 7``' - - text: '``4 2 1 3 5 6 7``' - - valid: true - text: '``1 3 2 6 7 5 4``' - type: multiple_choice - name: '' - limit: 0 - header: If the algorithm makes an postfix (or suffix) traversal, what will - be the printed output ? -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 0.0 diff --git a/preexam_unionfind/task.yaml b/preexam_unionfind/task.yaml deleted file mode 100644 index 26a6fee9..00000000 --- a/preexam_unionfind/task.yaml +++ /dev/null @@ -1,75 +0,0 @@ -accessible: false -author: Frédéric Kaczynski -context: |- - Consider a graph made of 10 disjoint nodes (numbered from 0 to 9). We use a union-find data structure to represent this graph. At first, each node is contained in a partition named after the node. Thus, the representation of the graph in the array ``id[]`` is: - - :: - - 0 1 2 3 4 5 6 7 8 9 - - The following questions will ask you to type the representation of the graph after we use the **quick-find** algorithm to add an edge between 2 nodes. You must type this representation in the same way it was typed above. - - **Note:** When we join ``p-q`` with the quick-find algorithm, the convention is to change ``id[p]`` (and potentially other entries) but not ``id[q]``. -environment: mcq -evaluate: best -groups: false -input_random: '0' -limits: - time: '30' - memory: '100' - output: '2' -name: Bilan M5 - Union find -network_grading: false -order: 27 -problems: - unionfind1: - name: '' - answer: 0 9 2 3 4 5 6 7 8 9 - header: After we add the edge ``1-9``, ``id[] =`` - type: match - unionfind2: - type: match - answer: 0 9 2 8 4 5 6 7 8 9 - name: '' - header: After we add the edge ``3-8``, ``id[] =`` - unionfind3: - header: After we add the edge ``1-0``, ``id[] =`` - name: '' - type: match - answer: 0 0 2 8 4 5 6 7 8 0 - unionfind4: - name: '' - type: match - answer: 0 0 2 8 4 5 7 7 8 0 - header: After we add the edge ``6-7``, ``id[] =`` - unionfind5: - type: match - answer: 7 7 2 8 4 5 7 7 8 7 - name: '' - header: After we add the edge ``0-6``, ``id[] =`` - unionfind6: - type: match - answer: 7 7 2 8 8 5 7 7 8 7 - name: '' - header: After we add the edge ``4-8``, ``id[] =`` - unionfind7: - answer: 7 7 2 5 5 5 7 7 5 7 - name: '' - header: After we add the edge ``8-5``, ``id[] =`` - type: match - unionfind8: - answer: 7 7 7 5 5 5 7 7 5 7 - type: match - header: After we add the edge ``2-7``, ``id[] =`` - name: '' - unionfind9: - answer: 5 5 5 5 5 5 5 5 5 5 - name: '' - header: After we add the edge ``7-5``, ``id[] =`` - type: match -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 0.0 diff --git a/preexamen_rabinkarp/task.yaml b/preexamen_rabinkarp/task.yaml deleted file mode 100644 index 0ab2cff5..00000000 --- a/preexamen_rabinkarp/task.yaml +++ /dev/null @@ -1,130 +0,0 @@ -accessible: false -author: Xavier Gillard -context: | - A la page 777 du livre "Algorithms" 4th edition, on vous propose l'implémentation suivante de l'algorithme de Rabin Karp. - - .. code-block:: java - - public class RabinKarp { - private String pat; // the pattern // needed only for Las Vegas - private long patHash; // pattern hash value - private int m; // pattern length - private long q; // a large prime, small enough to avoid long overflow - private int R; // radix - private long RM; // R^(M-1) % Q - - public RabinKarp(String pat) { - this.pat = pat; // save pattern (needed only for Las Vegas) - R = 256; - m = pat.length(); - q = longRandomPrime(); - - // precompute R^(m-1) % q for use in removing leading digit - RM = 1; - for (int i = 1; i <= m-1; i++) - RM = (R * RM) % q; - patHash = hash(pat, m); - } - - // Compute hash for key[0..m-1]. - private long hash(String key, int m) { - long h = 0; - for (int j = 0; j < m; j++) - h = (R * h + key.charAt(j)) % q; - return h; - } - - // Monte Carlo - private boolean check(int i) { - return true; - } - - // Returns the index of the first occurrrence of the pattern string in the text string. - public int search(String txt) { - int n = txt.length(); - if (n < m) return n; - long txtHash = hash(txt, m); - - // check for match at offset 0 - if ((patHash == txtHash) && check(txt, 0)) - return 0; - - // check for hash match; if hash match, check for exact match - for (int i = m; i < n; i++) { - // Remove leading digit, add trailing digit, check for match. - txtHash = (txtHash + q - RM*txt.charAt(i-m) % q) % q; - txtHash = (txtHash*R + txt.charAt(i)) % q; - - // match - int offset = i - m + 1; - if ((patHash == txtHash) && check(txt, offset)) - return offset; - } - - // no match - return n; - } - - - // a random 31-bit prime - private static long longRandomPrime() { - BigInteger prime = BigInteger.probablePrime(31, new Random()); - return prime.longValue(); - } - - } -environment: mcq -evaluate: best -groups: false -input_random: '0' -limits: - time: '30' - output: '2' - memory: '100' -name: Bilan M4 - Rabin Karp -network_grading: false -order: 20 -problems: - propositions: - choices: - - text: La complexité de la methode 'search' est :math:`O(nm)` - feedback: :math:`O(nm)` est la complexité d'une recherche brute force. - Cette implémentation est dite `Monte Carlo` et sa complexité est :math:`O(n)` - - text: La complexité de la methode 'search' est :math:`O(n)` - valid: true - - feedback: Le logarithme n'a aucune raison d'être. Cette implémentation - est dite `Monte Carlo` et sa complexité est :math:`O(n)` - text: La complexité de la methode 'search' est :math:`O\left(n~log_2(m)\right)` - - text: La complexité de la methode 'search' est :math:`O(m^n)` - feedback: Il n'y a aucune raison pour qu'n apparaise en exposant. Cette - implémentation est dite `Monte Carlo` et sa complexité est :math:`O(n)` - - text: Cet implémentation renvoie toujours un résultat correct, c'est à - dire le premier indice i telle que la souchaine key[i::i+m-1] est - égale au pattern 'pat', ou n si le pattern pat ne s'y trouve pas. - feedback: C'est faux, puisqu'il ne vérifie pas que la sous-chaine trouvée - correspond effectivement au pattern recherché, on dit que ce bout - de code implémente la variante `Monte Carlo` de l'algorithme de Rabin - Karp. Cet algorithme est très probablement correct, mais il y a une - faible probabilité pour qu'il renvoie un résultat erroné (du a une - collision sur les hash). - - text: |+ - Cet implémentation peut renvoyer un résultat incorrect, il est possible que pour l'indice i renvoyé, la souchaine key[i::i+m-1] ne soit pas égale au pattern 'pat'. - - - valid: true - header: | - .. note:: - - Dans toutes les propositions, on suppose que: - * `n` dénote la longueur du texte (key.length()) dans lequel on recherche le pattern - * `m` dénote la longueur du pattern à trouver dans le texte (pat.length()) - type: multiple_choice - multiple: true - name: Sélectionnez les propositions correctes - limit: 0 -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 1.0 diff --git a/project_generator_config.yaml b/project_generator_config.yaml new file mode 100644 index 00000000..1d9e1653 --- /dev/null +++ b/project_generator_config.yaml @@ -0,0 +1,4 @@ +archive_path: public +libraries_path: $common/libs +resources_path: public +tests_path: unit_test diff --git a/whiteexam2016bst/Main.java b/whiteexam2016bst/Main.java deleted file mode 100644 index a71db5f4..00000000 --- a/whiteexam2016bst/Main.java +++ /dev/null @@ -1,116 +0,0 @@ -import java.util.Arrays; -import java.util.HashSet; - -public class Main { - static private class InstanceConfig { - int toRetrieve = 0; - boolean wrongDirection = false; - HashSet wrongTurnsCalled = new HashSet<>(); - - public void reset(int toRetrieve) { - this.toRetrieve = toRetrieve; - wrongDirection = false; - wrongTurnsCalled = new HashSet<>(); - } - } - - static private class BaseNode implements Node { - private int value; - private InstanceConfig info; - private BaseNode left; - private BaseNode right; - - BaseNode(int v, InstanceConfig tor) { - value = v; - left = null; - right = null; - info = tor; - } - - @Override - public int getValue() { - if(info.wrongTurnsCalled.contains(this)) - info.wrongDirection = true; - return value; - } - - @Override - public Node getLeft() { - if(value <= info.toRetrieve) - info.wrongTurnsCalled.add(left); - return left; - } - - @Override - public Node getRight() { - if(value >= info.toRetrieve) - info.wrongTurnsCalled.add(right); - return right; - } - - void add(int v) { - if(v < value && left == null) left = new BaseNode(v, info); - else if(v < value) left.add(v); - else if(v > value && right == null) right = new BaseNode(v, info); - else if(v > value) right.add(v); - } - } - - public static void main(String[] args) { - int[][] tests = new int[][]{ - new int[] {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}, - new int[] {1000, 900, 800, 700, 600, 500, 400, 300, 200, 100}, - new int[] {500, 300, 800, 100, 400, 600, 900, 200, 700}, - new int[] {231,635,69,644,422,855,161,275,10,685,544,34,379,575,858,740,832,842,838,624,118,55,977,163,484,59,737,299,343,161,647,674,249,758,248,19,612,336,419,255,416,460,286,35,678,352,796,195,308,918,778,118,202,879,378,548,214,688,908,668,759,293,875,279,324,472,117,167,637,32,934,34,854,673,113,110,27,585,266,450,769,4,264,206,586,704,304,612,639,948,718,952,534,444,470,302,182,30,165,984}, - new int[] {636,403,939,800,651,781,855,72,835,858,820,463,473,665,524,759,454,454,920,674,496,571,481,255,384,933,7,116,579,895,562,381,151,454,907,146,410,566,332,364,814,193,50,462,922,510,831,766,42,69,917,254,287,65,182,35,50,64,760,822,556,203,381,34,744,360,234,965,932,406,264,581,601,792,160,531,562,997,433,987,204,383,629,132,118,716,216,621,25,11,42,854,759,435,312,741,482,722,546,490}, - new int[] {164,898,443,782,245,1,164,767,788,590,910,745,803,688,801,322,118,70,121,829,130,153,443,718,794,871,935,845,233,187,48,93,235,35,603,481,317,348,674,673,278,809,651,468,858,696,902,905,303,108,952,435,766,922,13,492,29,797,988,120,371,24,115,425,970,898,65,735,938,647,691,886,563,930,958,393,94,218,23,258,825,232,697,673,863,607,356,17,13,340,981,288,9,316,345,155,489,224,449,491}, - new int[] {4,471,616,61,568,47,232,7,921,169,153,583,849,230,996,532,864,343,435,452,391,389,903,390,356,292,769,504,509,354,980,798,825,287,136,115,128,600,31,555,450,625,515,78,940,351,22,801,16,825,338,491,891,994,10,970,381,902,387,173,765,567,81,380,695,995,337,685,631,160,728,804,906,920,905,12,103,226,288,984,15,183,488,245,223,732,8,870,806,641,663,752,468,269,275,651,378,471,259,219}, - new int[] {483,76,190,396,531,330,847,356,79,392,14,322,24,995,193,532,185,885,888,637,950,895,216,860,345,690,29,250,926,586,913,263,855,343,403,416,433,529,492,52,709,676,836,503,767,775,208,75,861,204,525,43,929,122,966,582,451,115,46,793,462,493,886,801,819,181,574,30,912,14,946,908,15,693,140,94,212,970,62,374,306,10,717,708,220,544,742,716,413,555,969,895,92,711,506,989,469,354,819,510}, - }; - boolean wrongDirection = false; - boolean ok = true; - try { - for (int testNb = 0; testNb < tests.length; testNb++) { - // Get the test - int[] test = tests[testNb]; - int[] testSorted = new int[test.length]; - System.arraycopy(test, 0, testSorted, 0, test.length); - Arrays.sort(testSorted); - - // Generate the tree - InstanceConfig info = new InstanceConfig(); - BaseNode root = new BaseNode(test[0], info); - for (int i = 1; i < test.length; i++) - root.add(test[i]); - - // Test all the possibilities - int posInSorted = 0; - for (int i = 0; i <= 1000; i++) { - info.reset(i); - while (posInSorted != testSorted.length && testSorted[posInSorted] < i) - posInSorted++; - Integer expected = null; - if (posInSorted != testSorted.length) - expected = testSorted[posInSorted]; - Integer returned = StudentAnswer.ceil(root, i); - wrongDirection |= info.wrongDirection; - if(returned == null && expected != null) - ok = false; - if(expected == null && returned != null) - ok = false; - if(returned != null && expected != null && !returned.equals(expected)) - ok = false; - } - } - if(ok && !wrongDirection) - System.out.println("ok"); - else if(ok && wrongDirection) - System.out.println("wrongDirection"); - else - System.out.println("ko"); - } - catch (Exception e) { - System.out.println("exception"); - } - } -} diff --git a/whiteexam2016bst/Node.java b/whiteexam2016bst/Node.java deleted file mode 100644 index a85d046e..00000000 --- a/whiteexam2016bst/Node.java +++ /dev/null @@ -1,16 +0,0 @@ -interface Node { - /** - * @return la valeur contenue dans ce noeud - */ - int getValue(); - - /** - * @return Le noeud situe a gauche (dont la valeur est < que la valeur actuelle) s'il existe, null sinon - */ - Node getLeft(); - - /** - * @return Le noeud situe a droite (dont la valeur est > que la valeur actuelle) s'il existe, null sinon - */ - Node getRight(); -} diff --git a/whiteexam2016bst/StudentAnswer.java b/whiteexam2016bst/StudentAnswer.java deleted file mode 100644 index bf5c42bc..00000000 --- a/whiteexam2016bst/StudentAnswer.java +++ /dev/null @@ -1,9 +0,0 @@ -import java.util.LinkedList; -import java.util.Queue; -import java.util.Stack; - -class StudentAnswer { - public static Integer ceil(Node root, int value) { - @@q@@ - } -} diff --git a/whiteexam2016bst/public/project.zip b/whiteexam2016bst/public/project.zip deleted file mode 100644 index 448674b9..00000000 Binary files a/whiteexam2016bst/public/project.zip and /dev/null differ diff --git a/whiteexam2016bst/run b/whiteexam2016bst/run deleted file mode 100644 index f8aac591..00000000 --- a/whiteexam2016bst/run +++ /dev/null @@ -1,50 +0,0 @@ -#! /bin/bash - -parsetemplate -o student/StudentAnswer.java StudentAnswer.java -cp Main.java student/ -cp Node.java student/ -cd student -javac Main.java Node.java StudentAnswer.java &> ../compile -if [ $? -eq 0 ]; then - content=`run_student java Main` - retval=$? - if [ $retval -eq 252 ]; then - feedback-result overflow - feedback-grade 0 - elif [ $retval -eq 253 ]; then - feedback-result timeout - feedback-grade 0 - elif [ $retval -eq 0 ]; then - if [ "$content" == "ok" ]; then - feedback-result success - feedback-grade 100 - feedback-msg -m "Bravo, c'est l'algorithme optimal." - elif [ "$content" == "wrongDirection" ]; then - feedback-result failed - feedback-grade 40 - feedback-msg -m "Votre algorithme fonctionne, mais n'est pas optimal. Essayez d'améliorer sa complexité." - elif [ "$content" == "exception" ]; then - feedback-result failed - feedback-grade 0 - feedback-msg -m "Votre programme a lancé une exception." - echo $content | rst-code | feedback-msg -a - elif [ "$content" == "ko" ]; then - feedback-result failed - feedback-grade 0 - feedback-msg -m "Vous ne renvoyez pas toujours la bonne valeur." - else - feedback-result crash - feedback-grade 0 - feedback-msg -e -m "Une erreur inconnue s'est produite" - fi - else - feedback-result crash - feedback-grade 0 - feedback-msg -e -m "Une erreur inconnue s'est produite" - fi -else - feedback-result failed - feedback-grade 0 - feedback-msg -e -m "Erreur à la compilation:\n\n" - cat ../compile | rst-code | feedback-msg -a -fi \ No newline at end of file diff --git a/whiteexam2016bst/task.yaml b/whiteexam2016bst/task.yaml deleted file mode 100644 index 03900911..00000000 --- a/whiteexam2016bst/task.yaml +++ /dev/null @@ -1,56 +0,0 @@ -accessible: false -author: Guillaume Derval -context: |- - Etant donné un arbre de recherche binaire, dont les noeuds implémentent l'interface Node: - - .. code-block:: java - - interface Node { - /** - * @return la valeur contenue dans ce noeud - */ - int getValue(); - - /** - * @return Le noeud situe a gauche (dont la valeur est < que la valeur actuelle) s'il existe, null sinon - */ - Node getLeft(); - - /** - * @return Le noeud situe a droite (dont la valeur est > que la valeur actuelle) s'il existe, null sinon - */ - Node getRight(); - } - - L'on vous demande de fournir le **corps** de la fonction *ceil*, qui trouve dans l'arbre le plus petit élément plus grand ou égal à `value` (donc soit l'élément lui-même soit l'élément situé directement après par ordre de grandeur). Si un tel élément n'existe pas, elle doit retourner `null`. - - `Un projet Eclipse contenant des tests basiques vous est fourni en cliquant sur ce lien. `_ -environment: java8scala -evaluate: best -groups: false -input_random: '0' -limits: - output: '2' - memory: '100' - time: '30' -name: Bilan M3 - Binary Search Tree -network_grading: false -order: 14 -problems: - q: - type: code - name: '' - language: java - default: '' - header: | - Fournissez ici le **corps** de la fonction `ceil`: - - .. code-block:: java - - Integer ceil(Node root, int value) -stored_submissions: 0 -submission_limit: - amount: -1 - period: -1 -tags: {} -weight: 1.0 diff --git a/whiteexam2016qcm/task.yaml b/whiteexam2016qcm/task.yaml deleted file mode 100644 index e5e27c44..00000000 --- a/whiteexam2016qcm/task.yaml +++ /dev/null @@ -1,88 +0,0 @@ -accessible: false -author: Antoine Cailliau -context: '' -environment: mcq -evaluate: last -groups: false -input_random: '0' -limits: - memory: '100' - output: '2' - time: '30' -name: Bilan M3 - Questions à choix multiples -network_grading: false -order: 13 -problems: - qcm02: - choices: - - valid: true - text: \\(O(\\log N)\\) et \\(O(N)\\) - - text: \\(O(\\log N)\\) et \\(O(\\frac{N^2}{2})\\) - - text: \\(O(N)\\) et \\(O(N)\\) - - text: \\(O(\\frac{N^2}{2})\\) et \\(O(N)\\) - - text: \\(O(N^2)\\) et \\(O(N)\\) - header: 'Dans le pire des cas, les opérations `get` et `put` dans `BinarySearchST` - (une recherche dichotomique dans un tableau ordonné) ont les complexités - suivantes :' - limit: 0 - type: multiple_choice - name: Complexité des opérations pour BinarySearchST - qcm03: - choices: - - text: \\(O(\\frac{N}{2})\\) - - text: \\(O(\\log N)\\) - valid: true - - text: \\(O(1.39\\times \\log N)\\) - - text: \\(O(\\frac{N^2}{2})\\) - - text: \\(O(N\\times log N)\\) - header: Le coût, dans le pire cas, d’un `get` dans un arbre *red-black* est - de  - limit: 0 - name: Complexité des opérations de arbres Red-black - type: multiple_choice - qcm04: - choices: - - text: \\(O(N)\\) - valid: true - - text: \\(O(\\log N)\\) - - text: \\(O(N\\times \\log N)\\) - - text: \\(O(N^2)\\) - header: Quelle est la complexité pour énumérer en ordre croissant toutes les - clés d’un arbre binaire ? - type: multiple_choice - name: Complexité des opérations de arbres binaires - limit: 0 - qcm05: - choices: - - text: Le *Selection Sort* n’est pas stable et est en-place. - valid: true - - text: Le *Quick Sort* est stable et en-place. - - valid: true - text: Le *Merge Sort* est stable et n’est pas en-place. - - valid: true - text: Le *3-Way Quick Sort* n’est pas stable et est en place. - - text: Le *Shell Sort* est stable et est en place. - type: multiple_choice - header: Quelles affirmations suivantes sont exactes ? - multiple: true - limit: 0 - name: Propriétés des algorithmes de tri - qcm07: - choices: - - valid: true - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/whiteexam2016qcm/a1.png' - - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/whiteexam2016qcm/a2.png' - - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/whiteexam2016qcm/a3.png' - - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/whiteexam2016qcm/a4.png' - - text: '.. image:: https://inginious.info.ucl.ac.be/course/LSINF1121-2016/whiteexam2016qcm/a5.png' - header: Quel arbre red-black correspond à l’arbre construit à partir de la - séquence 3, 5, 4, 2, 1, 7, 8, 6 ? - limit: 0 - type: multiple_choice - name: Algorithme de construction d'un arbre red-black -stored_submissions: 1 -submission_limit: - amount: 5 - period: -1 -tags: {} -weight: 1.0