Skip to content
Snippets Groups Projects
Commit c742ade4 authored by Lucas Philippe's avatar Lucas Philippe
Browse files

ajout TP2 amélioré

parent bba5d3b7
Branches main
No related tags found
No related merge requests found
Showing
with 1158 additions and 580 deletions
...@@ -16,7 +16,7 @@ class BubbleCursor: ...@@ -16,7 +16,7 @@ class BubbleCursor:
def move(self, x, y): def move(self, x, y):
self.x = x self.x = x
self.y = y self.y = y
min_distance = float("inf") # variable valeur infini pour démarrer la recherche de min min_distance = float("inf")
previous_closest = self.closest previous_closest = self.closest
for target in self.targets: for target in self.targets:
......
...@@ -2,7 +2,7 @@ import csv ...@@ -2,7 +2,7 @@ import csv
import random import random
import time import time
from PyQt5.QtGui import QPainter from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget
from BubbleCursor import BubbleCursor from BubbleCursor import BubbleCursor
...@@ -10,13 +10,14 @@ from Target import Target ...@@ -10,13 +10,14 @@ from Target import Target
class BubbleWidget(QWidget): class BubbleWidget(QWidget):
def __init__(self, file_name, exp_setup, number_of_targets): def __init__(self, file_name, exp_setup, number_of_targets, technique_name):
super().__init__() super().__init__()
self.exp_setup = exp_setup self.exp_setup = exp_setup
self.targets = [] self.targets = []
self.setMouseTracking(True) self.setMouseTracking(True)
self.start_time = None self.start_time = None
self.errors = 0 self.errors = 0
self.technique_name = technique_name
# Chargement du fichier csv # Chargement du fichier csv
with open(file_name) as csvfile: with open(file_name) as csvfile:
...@@ -37,6 +38,9 @@ class BubbleWidget(QWidget): ...@@ -37,6 +38,9 @@ class BubbleWidget(QWidget):
self.cursor.paint(painter) self.cursor.paint(painter)
for target in self.targets: for target in self.targets:
target.paint(painter) target.paint(painter)
painter.setPen(QColor("black"))
status_text = f"Technique: {self.technique_name}, Cible: {self.target_number}/15, Configuration: {self.config_number}/9, Répétition: {self.repeat_number}/{self.total_repeats}"
painter.drawText(10, 20, status_text)
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
self.cursor.move(event.x(), event.y()) self.cursor.move(event.x(), event.y())
...@@ -55,9 +59,17 @@ class BubbleWidget(QWidget): ...@@ -55,9 +59,17 @@ class BubbleWidget(QWidget):
self.errors = 0 self.errors = 0
self.start_time = None self.start_time = None
def set_status(self, target_number, config_number, repeat_number, total_repeats):
self.target_number = target_number
self.config_number = config_number
self.repeat_number = repeat_number
self.total_repeats = total_repeats
def mousePressEvent(self, event): def mousePressEvent(self, event):
if self.cursor.closest is not None: if self.cursor.closest is not None:
if self.cursor.closest.click_cible(): if self.cursor.closest.click_cible():
self.errors = 0
self.target_number += 1
self.printLog() self.printLog()
if len(self.target_to_select) > 0: if len(self.target_to_select) > 0:
self.selectRandomTarget() self.selectRandomTarget()
...@@ -65,3 +77,6 @@ class BubbleWidget(QWidget): ...@@ -65,3 +77,6 @@ class BubbleWidget(QWidget):
self.exp_setup.next_experience() self.exp_setup.next_experience()
else: else:
self.errors += 1 self.errors += 1
self.set_status(self.target_number, self.config_number, self.repeat_number,
self.total_repeats)
self.update()
...@@ -2,20 +2,21 @@ import csv ...@@ -2,20 +2,21 @@ import csv
import random import random
import time import time
from PyQt5.QtGui import QPainter from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget
from NormalCursor import NormalCursor from NormalCursor import NormalCursor
from Target import Target from Target import Target
class NormalWidget(QWidget): class NormalWidget(QWidget):
def __init__(self, file_name, exp_setup, number_of_targets): def __init__(self, file_name, exp_setup, number_of_targets, technique_name):
super().__init__() super().__init__()
self.targets = [] self.targets = []
self.setMouseTracking(True) self.setMouseTracking(True)
self.start_time = None self.start_time = None
self.exp_setup = exp_setup self.exp_setup = exp_setup
self.errors = 0 self.errors = 0
self.technique_name = technique_name
# Chargement du fichier csv # Chargement du fichier csv
with open(file_name) as csvfile: with open(file_name) as csvfile:
...@@ -35,7 +36,15 @@ class NormalWidget(QWidget): ...@@ -35,7 +36,15 @@ class NormalWidget(QWidget):
painter = QPainter(self) painter = QPainter(self)
for target in self.targets: for target in self.targets:
target.paint(painter) target.paint(painter)
painter.setPen(QColor("black"))
status_text = f"Technique: {self.technique_name}, Cible: {self.target_number}/15, Configuration: {self.config_number}/9, Répétition: {self.repeat_number}/{self.total_repeats}"
painter.drawText(10, 20, status_text)
def set_status(self, target_number, config_number, repeat_number, total_repeats):
self.target_number = target_number
self.config_number = config_number
self.repeat_number = repeat_number
self.total_repeats = total_repeats
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
self.cursor.move(event.x(), event.y()) self.cursor.move(event.x(), event.y())
self.update() self.update()
...@@ -58,13 +67,16 @@ class NormalWidget(QWidget): ...@@ -58,13 +67,16 @@ class NormalWidget(QWidget):
if self.cursor.closest is not None and self.cursor.closest.toSelect: if self.cursor.closest is not None and self.cursor.closest.toSelect:
distance = ((event.x() - self.cursor.closest.x) ** 2 + (event.y() - self.cursor.closest.y) ** 2) ** 0.5 distance = ((event.x() - self.cursor.closest.x) ** 2 + (event.y() - self.cursor.closest.y) ** 2) ** 0.5
if distance <= self.cursor.closest.size / 2: if distance <= self.cursor.closest.size / 2:
if self.cursor.closest.click_cible(): self.target_number += 1
self.printLog() self.printLog()
self.cursor.closest.toSelect = False
self.cursor.closest = None
if len(self.target_to_select) > 0: if len(self.target_to_select) > 0:
self.selectRandomTarget() self.selectRandomTarget()
else: else:
self.exp_setup.next_experience() self.exp_setup.next_experience()
else: else:
self.errors += 1 self.errors += 1
else: self.set_status(self.target_number, self.config_number, self.repeat_number, self.total_repeats)
self.errors += 1 self.update()
\ No newline at end of file
import csv, random, time import csv, random, time
from PyQt5.QtGui import QPainter from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget
from Target import Target from Target import Target
from RopeCursor import RopeCursor from RopeCursor import RopeCursor
class RopeWidget(QWidget): class RopeWidget(QWidget):
def __init__(self, file_name, exp_setup, number_of_targets): def __init__(self, file_name, exp_setup, number_of_targets, technique_name):
super().__init__() super().__init__()
self.exp_setup = exp_setup self.exp_setup = exp_setup
self.targets = [] self.targets = []
self.setMouseTracking(True) self.setMouseTracking(True)
self.start_time = None self.start_time = None
self.errors = 0 self.errors = 0
self.technique_name = technique_name
# Chargement du fichier csv # Chargement du fichier csv
with open(file_name) as csvfile: with open(file_name) as csvfile:
...@@ -32,6 +33,15 @@ class RopeWidget(QWidget): ...@@ -32,6 +33,15 @@ class RopeWidget(QWidget):
self.cursor.paint(painter) self.cursor.paint(painter)
for target in self.targets: for target in self.targets:
target.paint(painter) target.paint(painter)
painter.setPen(QColor("black"))
status_text = f"Technique: {self.technique_name}, Cible: {self.target_number}/15, Configuration: {self.config_number}/9, Répétition: {self.repeat_number}/{self.total_repeats}"
painter.drawText(10, 20, status_text)
def set_status(self, target_number, config_number, repeat_number, total_repeats):
self.target_number = target_number
self.config_number = config_number
self.repeat_number = repeat_number
self.total_repeats = total_repeats
def mouseMoveEvent(self, event): def mouseMoveEvent(self, event):
self.cursor.move(event.x(), event.y()) self.cursor.move(event.x(), event.y())
...@@ -53,6 +63,8 @@ class RopeWidget(QWidget): ...@@ -53,6 +63,8 @@ class RopeWidget(QWidget):
def mousePressEvent(self, event): def mousePressEvent(self, event):
if self.cursor.closest is not None: if self.cursor.closest is not None:
if self.cursor.closest.click_cible(): if self.cursor.closest.click_cible():
self.errors = 0
self.target_number += 1
self.printLog() self.printLog()
if len(self.target_to_select) > 0: if len(self.target_to_select) > 0:
self.selectRandomTarget() self.selectRandomTarget()
...@@ -60,3 +72,6 @@ class RopeWidget(QWidget): ...@@ -60,3 +72,6 @@ class RopeWidget(QWidget):
self.exp_setup.next_experience() self.exp_setup.next_experience()
else: else:
self.errors += 1 self.errors += 1
self.set_status(self.target_number, self.config_number, self.repeat_number,
self.total_repeats)
self.update()
...@@ -7,14 +7,14 @@ from PyQt5.QtWidgets import QDialog, QLabel, QLineEdit, QComboBox, QGridLayout, ...@@ -7,14 +7,14 @@ from PyQt5.QtWidgets import QDialog, QLabel, QLineEdit, QComboBox, QGridLayout,
from Experience import Experience from Experience import Experience
from FileDisplayWidget import FileDisplayWidget from FileDisplayWidget import FileDisplayWidget
DIR_PATH = "experience/generated_exp/" DIR_PATH = "generated_exp/"
TARGETS_PER_EXPERIENCE = 15 TARGETS_PER_EXPERIENCE = 15
class ExpSetup(QDialog): class ExpSetup(QDialog):
def __init__(self, window): def __init__(self, window):
super().__init__() super().__init__()
self.file_name = 'experience/data/response.csv' self.file_name = 'data/response.csv'
self.current_ordonnance = None self.current_ordonnance = None
self.ordonnance = None self.ordonnance = None
self.window = window self.window = window
...@@ -68,9 +68,8 @@ class ExpSetup(QDialog): ...@@ -68,9 +68,8 @@ class ExpSetup(QDialog):
self.init_ordonnance() self.init_ordonnance()
self.next_experience() self.next_experience()
def create_experience(self, experience, density, target_size): def create_experience(self, experience, density, target_size, technique_name):
if experience not in Experience: if experience not in Experience:
# Error
print('Aucune expérience selectionné') print('Aucune expérience selectionné')
return None return None
...@@ -79,7 +78,7 @@ class ExpSetup(QDialog): ...@@ -79,7 +78,7 @@ class ExpSetup(QDialog):
file_name = "src_d_" + density + "_s_" + target_size + ".csv" file_name = "src_d_" + density + "_s_" + target_size + ".csv"
file_path = DIR_PATH + file_name file_path = DIR_PATH + file_name
return experience.create_widget(file_path, self, TARGETS_PER_EXPERIENCE) return experience.create_widget(file_path, self, TARGETS_PER_EXPERIENCE, technique_name)
def start_experience(self, widget): def start_experience(self, widget):
if widget is not None: if widget is not None:
...@@ -95,25 +94,32 @@ class ExpSetup(QDialog): ...@@ -95,25 +94,32 @@ class ExpSetup(QDialog):
density_list = [30, 60, 90] density_list = [30, 60, 90]
size_list = [9, 12, 18] size_list = [9, 12, 18]
# Répéter la création des widgets pour chaque expérience en fonction du nombre de répétitions for _ in range(self.repeats):
for _ in range(self.repeats): # Répéter pour le nombre total de répétitions
for experience in experience_ordered: for experience in experience_ordered:
for density in density_list: for density in density_list:
for size in size_list: for size in size_list:
widget = self.create_experience(experience, density, size) widget = self.create_experience(experience, density, size, experience.name)
self.ordonnance.append((widget, experience, density, size)) self.ordonnance.append((widget, experience, density, size))
def next_experience(self): def next_experience(self):
self.current_target_number = 1 self.current_target_number = 1
self.current_ordonnance += 1 self.current_ordonnance += 1
total_experiences_per_repeat = len(Experience) * len([30, 60, 90]) * len([9, 12, 18])
if self.current_ordonnance >= len(self.ordonnance): if self.current_ordonnance >= len(self.ordonnance):
self.display_data() self.display_data()
return return
if self.current_ordonnance % (len(self.ordonnance) / self.repeats) == 0: if self.current_ordonnance % total_experiences_per_repeat == 0 and self.current_ordonnance != 0:
self.current_repeat_series += 1 self.current_repeat_series += 1
widget = self.ordonnance[self.current_ordonnance][0] self.current_configuration_number = (self.current_ordonnance % 9) + 1
self.current_repeat_number = (self.current_ordonnance // total_experiences_per_repeat) + 1
widget, experience, density, size = self.ordonnance[self.current_ordonnance]
widget.set_status(self.current_repeat_series, self.current_configuration_number, self.current_repeat_number,
self.repeats)
self.start_experience(widget) self.start_experience(widget)
def add_line_to_response(self, time, error): def add_line_to_response(self, time, error):
......
...@@ -9,13 +9,13 @@ class Experience(Enum): ...@@ -9,13 +9,13 @@ class Experience(Enum):
ROPE = 2 ROPE = 2
NORMAL = 3 NORMAL = 3
def create_widget(self, file_path, exp_setup, number_of_targets): def create_widget(self, file_path, exp_setup, number_of_targets, technique_name):
if self.value == Experience.BUBBLE.value: if self.value == Experience.BUBBLE.value:
widget = BubbleWidget(file_path, exp_setup, number_of_targets) widget = BubbleWidget(file_path, exp_setup, number_of_targets, technique_name)
elif self.value == Experience.ROPE.value: elif self.value == Experience.ROPE.value:
widget = RopeWidget(file_path, exp_setup, number_of_targets) widget = RopeWidget(file_path, exp_setup, number_of_targets, technique_name)
elif self.value == Experience.NORMAL.value: elif self.value == Experience.NORMAL.value:
widget = NormalWidget(file_path, exp_setup, number_of_targets) widget = NormalWidget(file_path, exp_setup, number_of_targets, technique_name)
else: else:
print('Aucune expérience selectionnée') print('Aucune expérience selectionnée')
widget = None widget = None
......
...@@ -19,8 +19,6 @@ def generate_targets(num_targets, max_target_size, min_spacing): ...@@ -19,8 +19,6 @@ def generate_targets(num_targets, max_target_size, min_spacing):
if not all_targets: if not all_targets:
all_targets.append(target) all_targets.append(target)
else: else:
# cf. Theoreme de Pythagore
# Prendre la distance avec le cercle et pas le centre
min_distance = min([(((x - t[0]) ** 2 + (y - t[1]) ** 2) ** 0.5) - max_target_size/2 for t in all_targets]) min_distance = min([(((x - t[0]) ** 2 + (y - t[1]) ** 2) ** 0.5) - max_target_size/2 for t in all_targets])
if min_distance >= min_spacing: if min_distance >= min_spacing:
all_targets.append(target) all_targets.append(target)
......
This diff is collapsed.
666,638,12 846,461,12
1,172,12 269,46,12
864,57,12 705,287,12
8,125,12 618,790,12
162,369,12 347,311,12
796,19,12 403,474,12
677,424,12 74,60,12
312,9,12 688,678,12
558,732,12 813,643,12
674,128,12 45,529,12
973,467,12 16,299,12
592,150,12 995,619,12
245,148,12 397,307,12
425,561,12 187,498,12
687,794,12 551,637,12
14,652,12 700,346,12
607,52,12 525,209,12
295,440,12 280,17,12
571,375,12 403,713,12
769,588,12 282,244,12
412,625,12 209,652,12
857,611,12 96,611,12
191,673,12 935,176,12
648,702,12 294,585,12
445,344,12 797,686,12
218,338,12 213,463,12
951,523,12 915,346,12
542,229,12 613,488,12
851,671,12 587,553,12
518,383,12 999,390,12
666,638,18 846,461,18
1,172,18 269,46,18
864,57,18 705,287,18
8,125,18 618,790,18
162,369,18 347,311,18
796,19,18 403,474,18
677,424,18 74,60,18
312,9,18 688,678,18
558,732,18 813,643,18
674,128,18 45,529,18
973,467,18 16,299,18
592,150,18 995,619,18
245,148,18 397,307,18
425,561,18 187,498,18
687,794,18 551,637,18
14,652,18 700,346,18
607,52,18 525,209,18
295,440,18 280,17,18
571,375,18 403,713,18
769,588,18 282,244,18
412,625,18 209,652,18
857,611,18 96,611,18
191,673,18 935,176,18
648,702,18 294,585,18
445,344,18 797,686,18
218,338,18 213,463,18
951,523,18 915,346,18
542,229,18 613,488,18
851,671,18 587,553,18
518,383,18 999,390,18
666,638,9 846,461,9
1,172,9 269,46,9
864,57,9 705,287,9
8,125,9 618,790,9
162,369,9 347,311,9
796,19,9 403,474,9
677,424,9 74,60,9
312,9,9 688,678,9
558,732,9 813,643,9
674,128,9 45,529,9
973,467,9 16,299,9
592,150,9 995,619,9
245,148,9 397,307,9
425,561,9 187,498,9
687,794,9 551,637,9
14,652,9 700,346,9
607,52,9 525,209,9
295,440,9 280,17,9
571,375,9 403,713,9
769,588,9 282,244,9
412,625,9 209,652,9
857,611,9 96,611,9
191,673,9 935,176,9
648,702,9 294,585,9
445,344,9 797,686,9
218,338,9 213,463,9
951,523,9 915,346,9
542,229,9 613,488,9
851,671,9 587,553,9
518,383,9 999,390,9
666,638,12 846,461,12
1,172,12 269,46,12
864,57,12 705,287,12
8,125,12 618,790,12
162,369,12 347,311,12
796,19,12 403,474,12
677,424,12 74,60,12
312,9,12 688,678,12
558,732,12 813,643,12
674,128,12 45,529,12
973,467,12 16,299,12
592,150,12 995,619,12
245,148,12 397,307,12
425,561,12 187,498,12
687,794,12 551,637,12
14,652,12 700,346,12
607,52,12 525,209,12
295,440,12 280,17,12
571,375,12 403,713,12
769,588,12 282,244,12
412,625,12 209,652,12
857,611,12 96,611,12
191,673,12 935,176,12
648,702,12 294,585,12
445,344,12 797,686,12
218,338,12 213,463,12
951,523,12 915,346,12
542,229,12 613,488,12
851,671,12 587,553,12
518,383,12 999,390,12
670,3,12 885,307,12
304,665,12 267,456,12
562,112,12 796,59,12
198,128,12 406,93,12
363,337,12 673,464,12
583,344,12 365,751,12
168,558,12 95,29,12
715,629,12 24,10,12
697,660,12 240,512,12
435,149,12 731,783,12
239,82,12 356,138,12
46,69,12 745,493,12
380,685,12 270,703,12
964,5,12 344,608,12
620,136,12 148,319,12
351,471,12 462,347,12
528,536,12 501,230,12
501,75,12 541,6,12
910,317,12 238,572,12
223,724,12 177,784,12
563,641,12 212,435,12
791,244,12 278,739,12
987,77,12 433,343,12
907,244,12 308,717,12
22,538,12 392,541,12
782,353,12 802,173,12
235,793,12 292,758,12
751,447,12 990,753,12
515,258,12 385,461,12
418,538,12 989,280,12
666,638,18 846,461,18
1,172,18 269,46,18
864,57,18 705,287,18
8,125,18 618,790,18
162,369,18 347,311,18
796,19,18 403,474,18
677,424,18 74,60,18
312,9,18 688,678,18
558,732,18 813,643,18
674,128,18 45,529,18
973,467,18 16,299,18
592,150,18 995,619,18
245,148,18 397,307,18
425,561,18 187,498,18
687,794,18 551,637,18
14,652,18 700,346,18
607,52,18 525,209,18
295,440,18 280,17,18
571,375,18 403,713,18
769,588,18 282,244,18
412,625,18 209,652,18
857,611,18 96,611,18
191,673,18 935,176,18
648,702,18 294,585,18
445,344,18 797,686,18
218,338,18 213,463,18
951,523,18 915,346,18
542,229,18 613,488,18
851,671,18 587,553,18
518,383,18 999,390,18
670,3,18 885,307,18
304,665,18 267,456,18
562,112,18 796,59,18
198,128,18 406,93,18
363,337,18 673,464,18
583,344,18 365,751,18
168,558,18 95,29,18
715,629,18 24,10,18
697,660,18 240,512,18
435,149,18 731,783,18
239,82,18 356,138,18
46,69,18 745,493,18
380,685,18 270,703,18
964,5,18 344,608,18
620,136,18 148,319,18
351,471,18 462,347,18
528,536,18 501,230,18
501,75,18 541,6,18
910,317,18 238,572,18
223,724,18 177,784,18
563,641,18 212,435,18
791,244,18 278,739,18
987,77,18 433,343,18
907,244,18 308,717,18
22,538,18 392,541,18
782,353,18 802,173,18
235,793,18 292,758,18
751,447,18 990,753,18
515,258,18 385,461,18
418,538,18 989,280,18
666,638,9 846,461,9
1,172,9 269,46,9
864,57,9 705,287,9
8,125,9 618,790,9
162,369,9 347,311,9
796,19,9 403,474,9
677,424,9 74,60,9
312,9,9 688,678,9
558,732,9 813,643,9
674,128,9 45,529,9
973,467,9 16,299,9
592,150,9 995,619,9
245,148,9 397,307,9
425,561,9 187,498,9
687,794,9 551,637,9
14,652,9 700,346,9
607,52,9 525,209,9
295,440,9 280,17,9
571,375,9 403,713,9
769,588,9 282,244,9
412,625,9 209,652,9
857,611,9 96,611,9
191,673,9 935,176,9
648,702,9 294,585,9
445,344,9 797,686,9
218,338,9 213,463,9
951,523,9 915,346,9
542,229,9 613,488,9
851,671,9 587,553,9
518,383,9 999,390,9
670,3,9 885,307,9
304,665,9 267,456,9
562,112,9 796,59,9
198,128,9 406,93,9
363,337,9 673,464,9
583,344,9 365,751,9
168,558,9 95,29,9
715,629,9 24,10,9
697,660,9 240,512,9
435,149,9 731,783,9
239,82,9 356,138,9
46,69,9 745,493,9
380,685,9 270,703,9
964,5,9 344,608,9
620,136,9 148,319,9
351,471,9 462,347,9
528,536,9 501,230,9
501,75,9 541,6,9
910,317,9 238,572,9
223,724,9 177,784,9
563,641,9 212,435,9
791,244,9 278,739,9
987,77,9 433,343,9
907,244,9 308,717,9
22,538,9 392,541,9
782,353,9 802,173,9
235,793,9 292,758,9
751,447,9 990,753,9
515,258,9 385,461,9
418,538,9 989,280,9
666,638,12 846,461,12
1,172,12 269,46,12
864,57,12 705,287,12
8,125,12 618,790,12
162,369,12 347,311,12
796,19,12 403,474,12
677,424,12 74,60,12
312,9,12 688,678,12
558,732,12 813,643,12
674,128,12 45,529,12
973,467,12 16,299,12
592,150,12 995,619,12
245,148,12 397,307,12
425,561,12 187,498,12
687,794,12 551,637,12
14,652,12 700,346,12
607,52,12 525,209,12
295,440,12 280,17,12
571,375,12 403,713,12
769,588,12 282,244,12
412,625,12 209,652,12
857,611,12 96,611,12
191,673,12 935,176,12
648,702,12 294,585,12
445,344,12 797,686,12
218,338,12 213,463,12
951,523,12 915,346,12
542,229,12 613,488,12
851,671,12 587,553,12
518,383,12 999,390,12
670,3,12 885,307,12
304,665,12 267,456,12
562,112,12 796,59,12
198,128,12 406,93,12
363,337,12 673,464,12
583,344,12 365,751,12
168,558,12 95,29,12
715,629,12 24,10,12
697,660,12 240,512,12
435,149,12 731,783,12
239,82,12 356,138,12
46,69,12 745,493,12
380,685,12 270,703,12
964,5,12 344,608,12
620,136,12 148,319,12
351,471,12 462,347,12
528,536,12 501,230,12
501,75,12 541,6,12
910,317,12 238,572,12
223,724,12 177,784,12
563,641,12 212,435,12
791,244,12 278,739,12
987,77,12 433,343,12
907,244,12 308,717,12
22,538,12 392,541,12
782,353,12 802,173,12
235,793,12 292,758,12
751,447,12 990,753,12
515,258,12 385,461,12
418,538,12 989,280,12
643,468,12 936,501,12
471,327,12 535,634,12
789,481,12 820,589,12
48,420,12 274,669,12
364,625,12 860,212,12
296,629,12 939,261,12
201,320,12 133,676,12
159,3,12 639,445,12
414,168,12 793,77,12
873,230,12 968,238,12
481,633,12 767,385,12
357,702,12 502,508,12
815,292,12 849,167,12
393,674,12 345,259,12
411,435,12 293,402,12
646,90,12 654,580,12
439,101,12 319,437,12
691,187,12 261,89,12
101,627,12 31,55,12
411,597,12 282,553,12
671,381,12 860,589,12
977,516,12 532,572,12
302,562,12 372,18,12
383,285,12 84,152,12
109,253,12 59,383,12
37,337,12 144,536,12
826,741,12 775,711,12
583,91,12 218,61,12
666,638,18 846,461,18
1,172,18 269,46,18
864,57,18 705,287,18
8,125,18 618,790,18
162,369,18 347,311,18
796,19,18 403,474,18
677,424,18 74,60,18
312,9,18 688,678,18
558,732,18 813,643,18
674,128,18 45,529,18
973,467,18 16,299,18
592,150,18 995,619,18
245,148,18 397,307,18
425,561,18 187,498,18
687,794,18 551,637,18
14,652,18 700,346,18
607,52,18 525,209,18
295,440,18 280,17,18
571,375,18 403,713,18
769,588,18 282,244,18
412,625,18 209,652,18
857,611,18 96,611,18
191,673,18 935,176,18
648,702,18 294,585,18
445,344,18 797,686,18
218,338,18 213,463,18
951,523,18 915,346,18
542,229,18 613,488,18
851,671,18 587,553,18
518,383,18 999,390,18
670,3,18 885,307,18
304,665,18 267,456,18
562,112,18 796,59,18
198,128,18 406,93,18
363,337,18 673,464,18
583,344,18 365,751,18
168,558,18 95,29,18
715,629,18 24,10,18
697,660,18 240,512,18
435,149,18 731,783,18
239,82,18 356,138,18
46,69,18 745,493,18
380,685,18 270,703,18
964,5,18 344,608,18
620,136,18 148,319,18
351,471,18 462,347,18
528,536,18 501,230,18
501,75,18 541,6,18
910,317,18 238,572,18
223,724,18 177,784,18
563,641,18 212,435,18
791,244,18 278,739,18
987,77,18 433,343,18
907,244,18 308,717,18
22,538,18 392,541,18
782,353,18 802,173,18
235,793,18 292,758,18
751,447,18 990,753,18
515,258,18 385,461,18
418,538,18 989,280,18
643,468,18 936,501,18
471,327,18 535,634,18
789,481,18 820,589,18
48,420,18 274,669,18
364,625,18 860,212,18
296,629,18 939,261,18
201,320,18 133,676,18
159,3,18 639,445,18
414,168,18 793,77,18
873,230,18 968,238,18
481,633,18 767,385,18
357,702,18 502,508,18
815,292,18 849,167,18
393,674,18 345,259,18
411,435,18 293,402,18
646,90,18 654,580,18
439,101,18 319,437,18
691,187,18 261,89,18
101,627,18 31,55,18
411,597,18 282,553,18
671,381,18 860,589,18
977,516,18 532,572,18
302,562,18 372,18,18
383,285,18 84,152,18
109,253,18 59,383,18
37,337,18 144,536,18
826,741,18 775,711,18
583,91,18 218,61,18
666,638,9 846,461,9
1,172,9 269,46,9
864,57,9 705,287,9
8,125,9 618,790,9
162,369,9 347,311,9
796,19,9 403,474,9
677,424,9 74,60,9
312,9,9 688,678,9
558,732,9 813,643,9
674,128,9 45,529,9
973,467,9 16,299,9
592,150,9 995,619,9
245,148,9 397,307,9
425,561,9 187,498,9
687,794,9 551,637,9
14,652,9 700,346,9
607,52,9 525,209,9
295,440,9 280,17,9
571,375,9 403,713,9
769,588,9 282,244,9
412,625,9 209,652,9
857,611,9 96,611,9
191,673,9 935,176,9
648,702,9 294,585,9
445,344,9 797,686,9
218,338,9 213,463,9
951,523,9 915,346,9
542,229,9 613,488,9
851,671,9 587,553,9
518,383,9 999,390,9
670,3,9 885,307,9
304,665,9 267,456,9
562,112,9 796,59,9
198,128,9 406,93,9
363,337,9 673,464,9
583,344,9 365,751,9
168,558,9 95,29,9
715,629,9 24,10,9
697,660,9 240,512,9
435,149,9 731,783,9
239,82,9 356,138,9
46,69,9 745,493,9
380,685,9 270,703,9
964,5,9 344,608,9
620,136,9 148,319,9
351,471,9 462,347,9
528,536,9 501,230,9
501,75,9 541,6,9
910,317,9 238,572,9
223,724,9 177,784,9
563,641,9 212,435,9
791,244,9 278,739,9
987,77,9 433,343,9
907,244,9 308,717,9
22,538,9 392,541,9
782,353,9 802,173,9
235,793,9 292,758,9
751,447,9 990,753,9
515,258,9 385,461,9
418,538,9 989,280,9
643,468,9 936,501,9
471,327,9 535,634,9
789,481,9 820,589,9
48,420,9 274,669,9
364,625,9 860,212,9
296,629,9 939,261,9
201,320,9 133,676,9
159,3,9 639,445,9
414,168,9 793,77,9
873,230,9 968,238,9
481,633,9 767,385,9
357,702,9 502,508,9
815,292,9 849,167,9
393,674,9 345,259,9
411,435,9 293,402,9
646,90,9 654,580,9
439,101,9 319,437,9
691,187,9 261,89,9
101,627,9 31,55,9
411,597,9 282,553,9
671,381,9 860,589,9
977,516,9 532,572,9
302,562,9 372,18,9
383,285,9 84,152,9
109,253,9 59,383,9
37,337,9 144,536,9
826,741,9 775,711,9
583,91,9 218,61,9
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment