diff --git a/docs/manual-general b/docs/manual-general --- a/docs/manual-general +++ b/docs/manual-general @@ -15,79 +15,79 @@ - we let the children select the difficulty level and do nothing to determine it is appropriate or not for her - we do nothing to make the children addict - the software does not replace a teacher or a parent - - the software does not really teaches, it is a complement to a traditional teaching course + - the software does not really teach, it is a complement to a traditional teaching course - activities must bring something more than doing the same activity on paper ***Distribution The source code of GCompris is under GNU GPLv3, it is free software. It runs best on Free-Software operating systems like GNU/Linux, where it is of course available for free. We also support proprietary operating systems, but there we sell the full version. For Windows you can buy an activation code on our website to unlock the full version. For Android, the software must be purchased from the play store. -However for schools, you should contact us directly to get a lower price ( sales@gcompris.net ). +However for schools, you should contact us directly to get a lower price (sales@gcompris.net). Note that the latest version of GCompris for OSX and iOS are not available yet, we are looking at bringing them back soon. **Quick start tour --On first launch, we ask to download the pack of voices depending on selected language if it is not already done, as well as the additional image set. +On first launch, we ask to download the pack of voices depending on selected language if it is not already done, as well as the additional image set. On the main menu page, the activities are listed by categories, with the different animals and their attributes at the top. - -The cat is for computer activities, where children can learn to use a keyboard and a mouse or touchpad. - -The penguin (tux, the mascot of Linux) is for discovery activities, to initiate and discover lot of different topics. - -The pig is for experience activities, mostly related to science topics. - -The dragon (Konqi, the mascot of KDE), is for fun activities, which are more relaxing and.. fun. - -The sheep is for math activities, to learn numbers and operations. - -The panda is for puzzle activities, with all kinds of puzzle games to learn logic. - -The cow is for reading activities, to learn letters and words. - -The frog is for strategy activities, with some classical strategy games including checkers and chess. + - The cat is for computer activities, where children can learn to use a keyboard and a mouse or touchpad. + - The penguin (Tux, the mascot of Linux) is for discovery activities, to initiate and discover lot of different topics. + - The pig is for experience activities, mostly related to science topics. + - The dragon (Konqi, the mascot of KDE), is for fun activities, which are more relaxing and... fun. + - The sheep is for math activities, to learn numbers and operations. + - The panda is for puzzle activities, with all kinds of puzzle games to learn logic. + - The cow is for reading activities, to learn letters and words. + - The frog is for strategy activities, with some classical strategy games including checkers and chess. On the left, the Sun is meant to access your favorite set of activities. To add an activity to favorites, click the little sun icon on it to activate it. On the right, there is a search category where you can find activities by keywords. - The activities also have some difficulty indications, with the little stars on the top-left corner of their icons. it goes from 1 yellow star for the easiest to 3 red stars for the hardest. + The activities also have some difficulty indications, with the little stars on the top-left corner of their icons. It goes from 1 yellow star for the easiest to 3 red stars for the hardest. On the bottom, there is the menu-bar, which different controls depending on the activity running. In the main menu page, this bar contains: --A quit button --The G button to access infos about GCompris --The question mark to access the help page --The Settings button to access the global settings page. +- A quit button +- The G button to access infos about GCompris +- The question mark to access the help page +- The Settings button to access the global settings page. **Main options In the global settings page, you find several options to configure the software to your needs. --first, a line checking if you have the full version. If not, this is where you can enter the activation code. +- first, a line checking if you have the full version. If not, this is where you can enter the activation code. --enable audio voices: to turn off/on the voices --enable audio effects: to turn off/on the sound effects --Fullscreen: start in fullscreen or window mode --virtual keyboard: to add a virtual keyboard on the screen +- Enable audio voices: to turn off/on the voices +- Enable audio effects: to turn off/on the sound effects +- Fullscreen: start in fullscreen or window mode +- virtual keyboard: to add a virtual keyboard on the screen --Enable automatic downloads: if you disable it, GCompris will never automatically download any additional content. --Download full word image set: if you have not already the additional image set, you can disable this option to never ask for it. +- Enable automatic downloads: if you disable it, GCompris will never automatically download any additional content. +- Download full word image set: if you have not already the additional image set, you can disable this option to never ask for it. --The activity section menu is visible: with this option you can restrict the user to the current section selected. So if you add some favorites, when starting with this option it will only show those. +- The activity section menu is visible: with this option you can restrict the user to the current section selected. So if you add some favorites, when starting with this option it will only show those. --The next setting is for the font, where you can select a different font type and adapt the size. +- The next setting is for the font, where you can select a different font type and adapt the size. We ship two fonts, Andika-R.otf which supports lots of languages, and OpenDyslexic-Regular.ttf for those who need it. Else you can select any third-party font installed in your system instead. The Default Button restores the default font size. --Then a setting about font capitalization: you can select only lower case or only upper case instead of Mixed case. +- Then a setting about font capitalization: you can select only lower case or only upper case instead of Mixed case. --You can adapt the letter spacing +- You can adapt the letter spacing --Very important setting: set the application language with the language selector +- Very important setting: set the application language with the language selector The line under shows if you already have the corresponding voices, the button next to it allows to download them. --Another very important setting: Difficulty filter +- Another very important setting: Difficulty filter with this, you can select which activities should be available depending on their difficulty level. It is a fast and simple way to adapt the content to the user level. diff --git a/org.kde.gcompris.appdata.xml b/org.kde.gcompris.appdata.xml --- a/org.kde.gcompris.appdata.xml +++ b/org.kde.gcompris.appdata.xml @@ -12,6 +12,7 @@ GCompris Educational Game Juego educativo GCompris Hariv mäng GCompris + GCompris hezkuntza-jokoa GCompris, opettavainen peli Jeu éducatif GCompris Xogo educativo GCompris @@ -44,6 +45,7 @@ Multi-Activity Educational game for children 2 to 10 Juego educativo multiactividad para niños de 2 a 10 años Rohkete tegevustega hariv mäng lastele vanuses 2-10 + Jarduera anitzeko Hezkuntza-jokoa 2 eta 10 urte arteko haurrentzat Useampitoimintoinen opettavainen peli 2–10-vuotiaille lapsille Jeu éducatif multi-activités pour les enfants de 2 à 10 ans Xogo educativo con varias actividades para nenos de entre 2 e 10 anos @@ -77,6 +79,7 @@

Το GCompris είναι μια σουίτα εκπαιδευτικού λογισμικού με πολυάριθμες δραστηριότητες για παιδιά ηλικίας 2 έως 10 ετών.

GCompris is a high quality educational software suite, including a large number of activities for children aged 2 to 10.

GCompris es un conjunto de programas educativos de alta calidad que contiene un gran número de actividades para niños entre 2 y 10 años.

+

GCompris kalitate handiko hezkuntza-softwarea multzo bat da, 2 eta 10 urte bitarteko haurrentzako jarduera ugari dituena.

GCompris on laadukas monitoimintoinen opetusohjelmisto 2–10-vuotiaille lapsille.

GCompris est un logiciel éducatif qui propose des activités variées aux enfants de 2 à 10 ans. Il est plébiscité par les écoles maternelles et primaires de part sa qualité et son spectre couvrant les cycles 1, 2 et 3.

GCompris é unha colección de programas educativos que inclúe numerosas actividades para nenas e nenos de entre 2 e 10 anos.

@@ -108,6 +111,7 @@

Some of the activities are game orientated, but nonetheless still educational.

Algunas de las actividades son juegos, aunque siguen siendo educativas.

Mõned tegevused on mängulisemad, aga siiski õppeotstarbega.

+

Jardueretako batzuk jolasera zuzenduak daude, hala eta guztiz ere, heztea dute helburu.

Jotkin toiminnoista ovat pelimäisiä mutta silti opettavaisia.

Certaines activités sont ludiques mais ont toujours un intérêt pédagogique.

Algunhas das actividades están orientadas ao xogo, pero son aínda así educativas.

@@ -141,11 +145,12 @@

Below you can find a list of categories with some of the activities available in that category.

A continuación puede encontrar una lista de categorías con algunas de las actividades disponibles en cada una de ellas.

Allpool leiab kategooriate loetelu koos mõningate neile omaste tegevustega.

+

Behean kategoria zerrenda bat aurki dezakezu, kategoria horretan erabilgarri dauden jardueretako batzuekin.

Alta löydät luettelot luokista sekä maininnan joistakin kuhunkin luokkaan kuuluvista toiminnoista.

Vous pouvez trouver ci-dessous une liste des catégories avec certaines de leurs activités.

A continuación atopará unha lista de categorías e as actividades dispoñíbeis en cada unha desas categorías.

नीचे आप उस श्रेणी में उपलब्ध कुछ गतिविधियों के साथ श्रेणियों की एक सूची पा सकते हैं।

-

Di bawah ini kamu dapat menemukan daftar kategori dengan beberapa kegiatan yang tersedia di dalam setiap kategori tersebut.

+

Di bawah ini kamu bisa menemukan daftar kategori dengan beberapa kegiatan yang tersedia di dalam setiap kategori tersebut.

Di seguito puoi trovare un elenco di categorie con alcune delle attività disponibili per categoria.

아래에서 분류 목록과 해당 분류의 활동을 찾을 수 있습니다.

താഴെ, വിഭാഗങ്ങളുടെ ഒരു പട്ടിക നിങ്ങൾക്ക് കാണാം, ആ വിഭാഗങ്ങളിൽ ചില പ്രവർത്തനങ്ങളും ലഭ്യമാണ്.

@@ -174,11 +179,12 @@
  • computer discovery: keyboard, mouse, different mouse gestures, ...
  • descubrimiento del ordenador: teclado, ratón, distintos gestos con el ratón...
  • arvuti tundmaõppimine: klaviatuur, hiir, erinevad hiireliigutused ...
  • +
  • ordenagailua ezagutzea: teklatua, sagua, saguaren mugimendu ezberdinak, ...
  • tietokoneen oppiminen: näppäimistö, hiiri, eri hiirieleet…
  • découverte de l'ordinateur : clavier, souris, mouvements de la souris…
  • Descubrimento do computador: teclado, rato, xestos do rato, etc.
  • कंप्यूटर की खोज: कीबोर्ड, माउस, अलग माउस इशारों, ...
  • -
  • Pengenalan komputer: keyboard, mouse, gerakan mouse yang berbeda, ...
  • +
  • Pengenalan komputer: keyboard, mouse, gestur mouse yang berbeda, ...
  • scoperta del computer: tastiera, mouse, vari gesti con il mouse, ...
  • 컴퓨터와 친해지기: 키보드, 마우스, 마우스 제스처, ...
  • കമ്പ്യൂട്ടർ പഠിക്കാം: കീബോർഡ്, മൗസ്, മൗസ് കൊണ്ടുള്ള വ്യത്യസ്ത ചലനങ്ങൾ, ...
  • @@ -207,6 +213,7 @@
  • arithmetic: table memory, enumeration, mirror image, balance the scale, change giving, ...
  • aritmética: memorización de tablas, enumeración, imagen especular, equilibrar la balanza, devolver cambios...
  • aritmeetika: nähtu mäletamine, loendamine, peegelpildid, kaalu tasakaalustamine, raha tagasiandmine...
  • +
  • aritmetika: eragiketa matematikoen taulak oroitzea, zenbaketa, irudi ispilatua, balantza orekatu, diru xehea itzultzea, ...
  • aritmetiikka: kertotaulujen opettelu, laskutehtävät, peilikuvan piirtäminen, vaa’an tasapainottaminen, vaihtorahan antaminen, …
  • arithmétique : apprentissage des tables d'opérations mathématiques, l'énumération, de symétrie d'image, équilibrage de la balance, rendre la monnaie…
  • Aritmética: táboas de memoria, enumeración, imaxes espello, equilibrio de balanzas, cálculo do cambio, etc.
  • @@ -239,6 +246,7 @@
  • science: the canal lock, colour mixing, gravity concept, ...
  • ciencia: la esclusa de un canal, mezcla de colores, concepto de gravedad...
  • loodusteadused: kanali lüüs, värvide segamine, gravitatsiooni mõistmine...
  • +
  • zientzia: ubidearen uhatea, koloreak nahastea, grabitate kontzeptua, ...
  • tiede: kanavasulku, värien sekoitus, painovoiman käsite…
  • science : fonctionnement d'une écluse, mélange des couleurs, concept de la gravité…
  • Ciencia: o bloqueo da canle, mestura de cores, o concepto de gravidade, etc.
  • @@ -271,6 +279,7 @@
  • games: memory, connect 4, tic tac toe, sudoku, hanoi tower, ...
  • juegos: memoria, conectar 4, tres en raya, sudoku, torres de hanoi...
  • mängud: mälu, nelja ühendamine, trips-traps-trull, sudoku, Hanoi tornid...
  • +
  • jokoak: oroimena, konektatu 4, hirutan hiru, sudoku, hani dorrea, ...
  • pelit: muisti, neljän suora, ristinolla, sudoku, Hanoin tornit…
  • jeux : trouve les paires, puissance 4, morpion, sudoku, la tour d'hanoï…
  • Xogos: memoria, conectar 4, pai nai fillo, sudoku, torre de Hanoi, etc.
  • @@ -303,6 +312,7 @@
  • reading: reading practice, ...
  • lectura: prácticas de lectura...
  • lugemine
  • +
  • irakurketa: irakurtzen trebatzea, ...
  • lukeminen: lukemisen harjoittelu…
  • lecture : entraînement à la lecture…
  • Lectura: práctica de lectura, etc.
  • @@ -336,6 +346,7 @@
  • other: learn to tell time, the braille system, maze, music instruments, ...
  • otras: aprender a decir la hora, el sistema braille, laberintos, instrumentos musicales...
  • muu: kellaaja väljendamine, Braille'i kiri, labürint, muusikariistad...
  • +
  • bestelakoak: ikasi ordua esaten, braille sistema, labirintoa, musika tresnak, ...
  • muuta: kellonajan kertominen, Braille-järjestelmä, sokkelo, soittimet…
  • autre : apprendre à dire l'heure, le système braille, le labyrinthe, les instruments de musique…
  • Outros: aprender a dicir as horas, o sistema braille, labirinto, instrumentos musicais, etc.
  • @@ -372,11 +383,12 @@

    Currently GCompris offers in excess of 100 activities and more are being developed. GCompris is free software, that means that you can adapt it to your own needs, improve it and, most importantly, share it with children everywhere.

    En la actualidad, GCompris ofrece más de 100 actividades y hay muchas más en desarrollo. GCompris es software libre, lo que significa que puede adaptarlo a sus necesidades, mejorarlo y, lo que es más importante, compartirlo con los niños de todo el mundo.

    Praegu pakub GCompris üle 100 tegevuse ja neid tuleb aina juurde. GCompris on vaba tarkvara, mis tähendab, et seda saab kohandada oma vajadustele, täiustada, ja mis peamine, jagada oma täiustusi lastega kogu maailmas.

    +

    Gaur egun GCompris-ek 100 jardueratik gora eskaintzen ditu eta gehiago garatzen ari dira. GCompris software askea da, horrek esan nahi du zure beharretara egokitu dezakezula, hobetu dezakezula eta, garrantzitsuagoa dena, haurrekin partekatu dezakezu dauden lekuan daudela.

    GComprisissa on nykyisellään yli sata toimintoa, ja lisää kehitetään. GCompris on vapaata ohjelmistoa, mikä tarkoittaa, että voit muokata sitä tarpeisiisi, parannella sitä ja mikä tärkeintä jakaa sitä lapsille kaikkialla.

    Actuellement, GCompris contient plus de 100 activités et d'autres sont en cours de développement. GCompris est un logiciel libre, ce qui veut dire que vous pouvez l'adapter à vos propres besoins, le modifier et, le plus important, le partager avec des enfants où que ce soit.

    Actualmente GCompris ofrece máis de 100 actividades e hai máis en desenvolvemento. GCompris é software libre, o que significa que pode adaptalo para axustalo ás súas necesidades, melloralo e, o máis importante, compartilo con nenos de todo o mundo.

    वर्तमान में जी कॉम्पप्रस 100 गतिविधियों से अधिक प्रदान करता है और अधिक विकसित किए जा रहे हैं। जी कॉम्पप्रस मुफ्त सॉफ्टवेयर है, इसका मतलब है कि आप इसे अपनी आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं, इसमें सुधार कर सकते हैं, और सबसे महत्वपूर्ण बात, इसे हर जगह बच्चों के साथ साझा कर सकते हैं।

    -

    Saat ini GCompris menawarkan lebih dari 100 aktivitas dan masih banyak lagi yang sedang dikembangkan. GCompris adalah software bebas, itu berarti kamu dapat menyesuaikannya dengan kebutuhanmu sendiri, memperbaikinya dan yang terpenting, bagikan dengan anak-anak di mana-mana.

    +

    Saat ini GCompris menawarkan lebih dari 100 aktivitas dan masih banyak lagi yang sedang dikembangkan. GCompris adalah software bebas, itu berarti kamu bisa menyesuaikannya dengan kebutuhanmu sendiri, memperbaikinya dan yang terpenting, bagikan dengan anak-anak di mana-mana.

    Attualmente GCompris offre più di 100 attività e altre sono in fase di sviluppo. GCompris è software libero, che significa che puoi adattarlo alle tue necessità, migliorarlo e, cosa più importante, condividerlo con tutti i bambini.

    GCompris는 100개 이상의 활동을 포함하고 있으며 더 많은 활동을 개발하고 있습니다. GCompris는 자유 소프트웨어이며, 필요에 따라서 활동을 개선할 수 있으며 전 세계의 사람들과 공유할 수 있습니다.

    ഇപ്പോൾ ജികോംപ്രിയിൽ 100 ലധികം പ്രവർത്തനങ്ങൾ ഉണ്ട്, അതിൽ കൂടുതൽ ഡെവലപ്പ് ചെയ്തുകൊണ്ടിരിക്കുന്നുമുണ്ട്. ജികോംപ്രി ഒരു സ്വതന്ത്ര സോഫ്റ്റുവെയർ ആണ്, അതായത് നിങ്ങൾക്ക് അതിനെ നിങ്ങളുടെ ആവശ്യങ്ങൾക്കനുസരിച്ച് രൂപപ്പെടുത്താം, അതിനെ മെച്ചപ്പെടുത്താം, ഏറ്റവും പ്രധാനമായി, എല്ലായിടങ്ങളിലുള്ള കുട്ടികളുമായി അത് പങ്കുവെയ്ക്കാം.

    @@ -407,6 +419,7 @@ Κύριο μενού του GCompris GCompris main menu Menú principal de GCompris + GCompris menu nagusia GComprisin päävalikko Menu principal de GCompris Menú principal de GCompris @@ -432,6 +445,7 @@ Δραστηριότητα "Κλικ σε κεφαλαίο γράμμα" "Click on an uppercase letter" activity Actividad «Pulsa en una letra mayúscula» + "Egin klik letra larri batean" jarduera ”Napsauta suuraakkosta” -toiminto L'activité « Trouver la lettre majuscule » Actividade de «Premer unha letra maiúscula» @@ -457,6 +471,7 @@ Δραστηριότητα "Ρολόι" "Learning Clock" activity Actividad «Juego del reloj» + "Erlojua ezagutzea" jarduera ”Kellon oppiminen” -toiminto L'activité « Trouver l'heure » Actividade de «Aprender o reloxo» @@ -482,6 +497,7 @@ Δραστηριότητα "Μείξη χρωμάτων" "Mixing colour of paint" activity Actividad «Mezcla de colores» + "Margo koloreak nahastea" jarduera ”Värien sekoitus” -toiminto L'activité « Mélange de la couleur de peinture » Actividade de «Mesturar a cor da pintura» @@ -507,6 +523,7 @@ Δραστηριότητα "Χρώματα" "Colours" activity Actividad «Colores» + "Koloreak" jarduera ”Värit”-toiminto L'activité « Trouver la couleur » Actividade de «Cores» @@ -532,6 +549,7 @@ Δραστηριότητα "Φτιάξε το ίδιο" "Build the same model" activity Actividad «Grúa» + "Eraiki eredu bera" jarduera ”Rakenna sama malli” -toiminto L'activité « Reconstruire le modèle » Actividade de «Constrúe o mesmo modelo» @@ -557,6 +575,7 @@ Δραστηριότητα "Μέτρα τα αντικείμενα" "Count the items" activity Actividad «Enumeración» + "Zenbatu elementuak" jarduera ”Laske kohteet” -toiminto L'activité « Compter les éléments » Actividade de «Contar os elementos» @@ -582,6 +601,7 @@ Δραστηριότητα "Δεκαπέντε" "The fifteen game" activity Actividad «Quince» + "Hamabosteko jokoa" jarduera L'activité « Le jeu du taquin » Actividade de «O xogo dos quince» Attività «Il gioco del quindici» @@ -606,6 +626,7 @@ Δραστηριότητα "Εξάγωνο" "Hexagon" activity Actividad «Hexágono» + "Hexagonoa" jarduera L'activité « Localiser la fraise » Actividade de «Hexágono» Attività «Esagono» @@ -630,6 +651,7 @@ Δραστηριότητα "Ισορρόπησε τη ζυγαριά" "Balance the scales properly" activity Actividad «Balanzas» + "Orekatu balantzak behar bezala" jarduera ”Tasapainota vaaka oikein” -toiminto L'activité « Trouver le poids » Actividade de «Equilibra a balanza de forma axeitada» @@ -655,6 +677,7 @@ Δραστηριότητα "Το σκάκι στο τέλος" "End of chess game" activity Actividad «Final de partida de ajedrez» + "Xake jokoaren amaierako zatia" jarduera ”Šakin loppupeli” -toiminto L'activité « Le jeu des échecs » Actividade de «Final dunha partida de xadrez» @@ -680,6 +703,7 @@ Δραστηριότητα "Βγάζω το αυτοκίνητο" "A sliding-block puzzle game" activity Actividad «Tráfico» + "Bloke irristagarrien puzzle joko bat" jarduera L'activité « Sortir la voiture du parking » Actividade de «Un crebacabezas de bloques que se moven» Attività «Un rompicapo con blocchi scorrevoli» diff --git a/org.kde.gcompris.desktop b/org.kde.gcompris.desktop --- a/org.kde.gcompris.desktop +++ b/org.kde.gcompris.desktop @@ -9,6 +9,7 @@ Name[en_GB]=GCompris Educational Game Name[es]=Juego educativo GCompris Name[et]=Hariv mäng GCompris +Name[eu]=GCompris hezkuntza-jokoa Name[fi]=GCompris, opettavainen peli Name[fr]=Jeu éducatif GCompris Name[gl]=Xogo educativo GCompris @@ -43,6 +44,7 @@ GenericName[en_GB]=Educational game GenericName[es]=Juego educativo GenericName[et]=Hariv mäng +GenericName[eu]=Hezkuntza-jokoa GenericName[fi]=Opettavainen peli GenericName[fr]=Jeu éducatif GenericName[gl]=Xogo educativo @@ -75,6 +77,7 @@ Comment[en_GB]=Multi-Activity Educational game for children 2 to 10 Comment[es]=Juego educativo multiactividad para niños de 2 a 10 años Comment[et]=Rohkete tegevustega hariv mäng lastele vanuses 2-10 +Comment[eu]=Jarduera anitzeko Hezkuntza-jokoa 2 eta 10 urte arteko haurrentzat Comment[fi]=Useampitoimintoinen opettavainen peli 2–10-vuotiaille lapsille Comment[fr]=Jeu éducatif multi-activités pour les enfants de 2 à 10 ans Comment[gl]=Xogo educativo con varias actividades para nenos de entre 2 e 10 anos diff --git a/platforms/sailfishOS/harbour-gcompris-qt.desktop b/platforms/sailfishOS/harbour-gcompris-qt.desktop --- a/platforms/sailfishOS/harbour-gcompris-qt.desktop +++ b/platforms/sailfishOS/harbour-gcompris-qt.desktop @@ -9,6 +9,7 @@ Name[en_GB]=GCompris Educational Game Name[es]=Juego educativo GCompris Name[et]=Hariv mäng GCompris +Name[eu]=GCompris hezkuntza-jokoa Name[fi]=GCompris, opettavainen peli Name[fr]=Jeu éducatif GCompris Name[gl]=Xogo educativo GCompris @@ -43,6 +44,7 @@ GenericName[en_GB]=Educational game GenericName[es]=Juego educativo GenericName[et]=Hariv mäng +GenericName[eu]=Hezkuntza-jokoa GenericName[fi]=Opettavainen peli GenericName[fr]=Jeu éducatif GenericName[gl]=Xogo educativo @@ -75,6 +77,7 @@ Comment[en_GB]=Multi-Activity Educational game for children 2 to 10 Comment[es]=Juego educativo multiactividad para niños de 2 a 10 años Comment[et]=Rohkete tegevustega hariv mäng lastele vanuses 2-10 +Comment[eu]=Jarduera anitzeko Hezkuntza-jokoa 2 eta 10 urte arteko haurrentzat Comment[fi]=Useampitoimintoinen opettavainen peli 2–10-vuotiaille lapsille Comment[fr]=Jeu éducatif multi-activités pour les enfants de 2 à 10 ans Comment[gl]=Xogo educativo con varias actividades para nenos de entre 2 e 10 anos diff --git a/src/activities/activities.txt b/src/activities/activities.txt --- a/src/activities/activities.txt +++ b/src/activities/activities.txt @@ -11,6 +11,7 @@ alphabet-sequence babymatch babyshapes +baby_tangram baby_wordprocessor balancebox ballcatch @@ -126,6 +127,7 @@ planegame play_piano play_rhythm +programmingMaze railroad readingh readingv diff --git a/src/activities/advanced_colors/ActivityInfo.qml b/src/activities/advanced_colors/ActivityInfo.qml --- a/src/activities/advanced_colors/ActivityInfo.qml +++ b/src/activities/advanced_colors/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("You will see dancing butterflies of different colors and a question. You have to find the correct butterfly and touch it.") credit: "" - section: "discovery colors" + section: "reading colors vocabulary" createdInVersion: 0 } diff --git a/src/activities/algebra_by/ActivityInfo.qml b/src/activities/algebra_by/ActivityInfo.qml --- a/src/activities/algebra_by/ActivityInfo.qml +++ b/src/activities/algebra_by/ActivityInfo.qml @@ -35,6 +35,7 @@ //: Help manual manual: qsTr("A multiplication is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type the product of the numbers. You have to be fast and submit the answer before the penguins in their balloon land!") credit: "" - section: "math multiplication" + section: "math multiplication arithmetic" createdInVersion: 0 + levels: "1,2,3,4" } diff --git a/src/activities/algebra_by/AlgebraBy.qml b/src/activities/algebra_by/AlgebraBy.qml --- a/src/activities/algebra_by/AlgebraBy.qml +++ b/src/activities/algebra_by/AlgebraBy.qml @@ -23,9 +23,10 @@ import "../../core" import "../algebra_by" +import "algebra.js" as Activity Algebra { onStart: { - operand.text = "x" + operand.text = Activity.OperandsEnum.TIMES_SIGN } } diff --git a/src/activities/algebra_by/algebra.js b/src/activities/algebra_by/algebra.js --- a/src/activities/algebra_by/algebra.js +++ b/src/activities/algebra_by/algebra.js @@ -27,6 +27,12 @@ var secondOperandVal var firstOperandVal var operations = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +var OperandsEnum = { + TIMES_SIGN : "\u00D7", + PLUS_SIGN : "\u002B", + MINUS_SIGN : "\u2212", + DIVIDE_SIGN : "\u2215" +} var nbLevel = operations.length @@ -40,7 +46,7 @@ // currentLevel * N (N behind random) // where the last levels will do: // N * currentLevel - if(operand.text === "x" || operand.text === "+") + if(operand.text === OperandsEnum.TIMES_SIGN || operand.text === OperandsEnum.PLUS_SIGN) nbLevel = 2 * operations.length else nbLevel = operations.length @@ -82,19 +88,19 @@ { switch(operand.text) { - case "x": + case OperandsEnum.TIMES_SIGN: firstOperandVal = coreItems.bar.level secondOperandVal = operations[coreItems.score.currentSubLevel - 1] break; - case "+": + case OperandsEnum.PLUS_SIGN: firstOperandVal = coreItems.bar.level secondOperandVal = operations[coreItems.score.currentSubLevel - 1] break; - case "-": + case OperandsEnum.MINUS_SIGN: firstOperandVal = coreItems.bar.level + 9 secondOperandVal = operations[coreItems.score.currentSubLevel - 1] break; - case "/": + case OperandsEnum.DIVIDE_SIGN: firstOperandVal = coreItems.bar.level * operations[coreItems.score.currentSubLevel - 1] secondOperandVal = coreItems.bar.level break; @@ -115,16 +121,16 @@ function getAnswer() { switch(operand.text) { - case "x": + case OperandsEnum.TIMES_SIGN: return (firstOperandVal * secondOperandVal) - case "+": + case OperandsEnum.PLUS_SIGN: return (firstOperandVal + secondOperandVal) - case "-": + case OperandsEnum.MINUS_SIGN: return (firstOperandVal - secondOperandVal) - case "/": + case OperandsEnum.DIVIDE_SIGN: return (firstOperandVal / secondOperandVal) } } diff --git a/src/activities/algebra_by/resource/1/Data.qml b/src/activities/algebra_by/resource/1/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/algebra_by/resource/1/Data.qml @@ -0,0 +1,49 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("This is a long long long long objective. We want to see it it can display long long texts. But it is not long long long enough. Or maybe it is...") + data: [ + { + "maxNumber": 1, /* Max number on each domino side */ + "minNumber": 1, + "numberOfFish": 3 + }, + { + "maxNumber": 2, + "minNumber": 1, + "numberOfFish": 4 + }, + { + "maxNumber": 3, + "minNumber": 1, + "numberOfFish": 5 + }, + { + "maxNumber": 4, + "minNumber": 1, + "numberOfFish": 5 + } + ] +} diff --git a/src/activities/algebra_by/resource/2/Data.qml b/src/activities/algebra_by/resource/2/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/algebra_by/resource/2/Data.qml @@ -0,0 +1,49 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("obj 2") + data: [ + { + "maxNumber": 1, /* Max number on each domino side */ + "minNumber": 1, + "numberOfFish": 3 + }, + { + "maxNumber": 2, + "minNumber": 1, + "numberOfFish": 4 + }, + { + "maxNumber": 3, + "minNumber": 1, + "numberOfFish": 5 + }, + { + "maxNumber": 4, + "minNumber": 1, + "numberOfFish": 5 + } + ] +} diff --git a/src/activities/algebra_by/resource/3/Data.qml b/src/activities/algebra_by/resource/3/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/algebra_by/resource/3/Data.qml @@ -0,0 +1,49 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("obj 3") + data: [ + { + "maxNumber": 1, /* Max number on each domino side */ + "minNumber": 1, + "numberOfFish": 3 + }, + { + "maxNumber": 2, + "minNumber": 1, + "numberOfFish": 4 + }, + { + "maxNumber": 3, + "minNumber": 1, + "numberOfFish": 5 + }, + { + "maxNumber": 4, + "minNumber": 1, + "numberOfFish": 5 + } + ] +} diff --git a/src/activities/algebra_by/resource/4/Data.qml b/src/activities/algebra_by/resource/4/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/algebra_by/resource/4/Data.qml @@ -0,0 +1,49 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("obj 4") + data: [ + { + "maxNumber": 1, /* Max number on each domino side */ + "minNumber": 1, + "numberOfFish": 3 + }, + { + "maxNumber": 2, + "minNumber": 1, + "numberOfFish": 4 + }, + { + "maxNumber": 3, + "minNumber": 1, + "numberOfFish": 5 + }, + { + "maxNumber": 4, + "minNumber": 1, + "numberOfFish": 5 + } + ] +} diff --git a/src/activities/algebra_div/ActivityInfo.qml b/src/activities/algebra_div/ActivityInfo.qml --- a/src/activities/algebra_div/ActivityInfo.qml +++ b/src/activities/algebra_div/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A division is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type it. You have to be fast and submit the answer before the penguins in their balloon land!") credit: "" - section: "math division" + section: "math division arithmetic" createdInVersion: 4000 } diff --git a/src/activities/algebra_div/AlgebraDiv.qml b/src/activities/algebra_div/AlgebraDiv.qml --- a/src/activities/algebra_div/AlgebraDiv.qml +++ b/src/activities/algebra_div/AlgebraDiv.qml @@ -22,9 +22,10 @@ import "../../core" import "../algebra_by/" +import "../algebra_by/algebra.js" as Activity Algebra { onStart: { - operand.text = "/" + operand.text = Activity.OperandsEnum.DIVIDE_SIGN } } diff --git a/src/activities/algebra_minus/ActivityInfo.qml b/src/activities/algebra_minus/ActivityInfo.qml --- a/src/activities/algebra_minus/ActivityInfo.qml +++ b/src/activities/algebra_minus/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A subtraction is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type it. You have to be fast and submit the answer before the penguins in their balloon land!") credit: "" - section: "math subtraction" + section: "math subtraction arithmetic" createdInVersion: 0 } diff --git a/src/activities/algebra_minus/AlgebraMinus.qml b/src/activities/algebra_minus/AlgebraMinus.qml --- a/src/activities/algebra_minus/AlgebraMinus.qml +++ b/src/activities/algebra_minus/AlgebraMinus.qml @@ -23,10 +23,10 @@ import "../../core" import "../algebra_by/" - +import "../algebra_by/algebra.js" as Activity Algebra { onStart: { - operand.text = "-" + operand.text = Activity.OperandsEnum.MINUS_SIGN } } diff --git a/src/activities/algebra_plus/ActivityInfo.qml b/src/activities/algebra_plus/ActivityInfo.qml --- a/src/activities/algebra_plus/ActivityInfo.qml +++ b/src/activities/algebra_plus/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("An addition is displayed on the screen. Quickly find the result and use your computer's keyboard or the on-screen keypad to type it. You have to be fast and submit the answer before the penguins land in their balloon!") credit: "" - section: "math addition" + section: "math addition arithmetic" createdInVersion: 0 } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/algebra_plus/AlgebraPlus.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/algebra_plus/AlgebraPlus.qml @@ -22,9 +22,10 @@ import "../../core" import "../algebra_by/" +import "../algebra_by/algebra.js" as Activity Algebra { onStart: { - operand.text = "+" + operand.text = Activity.OperandsEnum.PLUS_SIGN } } diff --git a/src/activities/algorithm/ActivityInfo.qml b/src/activities/algorithm/ActivityInfo.qml --- a/src/activities/algorithm/ActivityInfo.qml +++ b/src/activities/algorithm/ActivityInfo.qml @@ -33,6 +33,6 @@ //: Help manual manual: qsTr("Look at the two sequences. Each fruit in the first sequence has been replaced by another fruit in the second sequence. Complete the second sequence by using the correct fruits, after studying this pattern.") credit: "" - section: "discovery" + section: "discovery logic" createdInVersion: 0 } diff --git a/src/activities/alphabet-sequence/ActivityInfo.qml b/src/activities/alphabet-sequence/ActivityInfo.qml --- a/src/activities/alphabet-sequence/ActivityInfo.qml +++ b/src/activities/alphabet-sequence/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Catch the alphabet letters. With a keyboard use the arrow keys to move the helicopter. With a pointing device you just click or tap on the target location. To know which letter you have to catch you can either remember it or check the bottom right corner.") credit: "" - section: "reading" - createdInVersion: 0 + section: "reading letters" + createdInVersion: 0 } diff --git a/src/activities/hanoi/ActivityInfo.qml b/src/activities/baby_tangram/ActivityInfo.qml copy from src/activities/hanoi/ActivityInfo.qml copy to src/activities/baby_tangram/ActivityInfo.qml --- a/src/activities/hanoi/ActivityInfo.qml +++ b/src/activities/baby_tangram/ActivityInfo.qml @@ -1,6 +1,6 @@ /* GCompris - ActivityInfo.qml * - * Copyright (C) 2015 Johnny Jazeix + * Copyright (C) 2019 Johnny Jazeix * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,23 +18,23 @@ import GCompris 1.0 ActivityInfo { - name: "hanoi/Hanoi.qml" - difficulty: 2 - icon: "hanoi/hanoi.svg" + name: "baby_tangram/BabyTangram.qml" + difficulty: 1 + icon: "baby_tangram/baby_tangram.svg" author: "Johnny Jazeix <jazeix@gmail.com>" demo: true //: Activity title - title: qsTr("Simplified Tower of Hanoi") + title: qsTr("Reassemble the shapes") //: Help title - description: qsTr("Reproduce the given tower") - //intro: "Rebuild the same tower in the empty area as the one you see on the right hand side." + description: qsTr("The objective is to form a given shape") + // intro: "Click on each object to obtain the same figure. You can change their orientation by clicking on the arrows." //: Help goal - goal: qsTr("Reproduce the tower on the right in the empty space on the left") + goal: "" //: Help prerequisite prerequisite: qsTr("Mouse-manipulation") //: Help manual - manual: qsTr("Drag and Drop one top piece at a time, from one peg to another, to reproduce the tower on the right in the empty space on the left.") - credit: qsTr("Concept taken from EPI games.") + manual: qsTr("Select the object to form. Move a piece by dragging it. The symmetrical button appears on items that supports it. Click on the rotation button or drag around it to show the rotation you want. More complicated levels can be found in tangram activity.") + credit: "" section: "puzzle" - createdInVersion: 4000 + createdInVersion: 9800 } diff --git a/src/activities/find_the_day/FindTheDay.qml b/src/activities/baby_tangram/BabyTangram.qml copy from src/activities/find_the_day/FindTheDay.qml copy to src/activities/baby_tangram/BabyTangram.qml --- a/src/activities/find_the_day/FindTheDay.qml +++ b/src/activities/baby_tangram/BabyTangram.qml @@ -1,9 +1,10 @@ -/* GCompris - find_the_day.qml +/* GCompris - BabyTangram.qml * - * Copyright (C) 2018 Amit Sagtani + * Copyright (C) 2019 Johnny Jazeix * * Authors: - * Amit Sagtani + * Yves Combe / Philippe Banwarth (GTK+ version) + * Johnny Jazeix / Bruno Coudoin (Qt Quick port) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,11 +20,14 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../calendar" -import "find_the_day_dataset.js" as Dataset +import "dataset.js" as Dataset +import "../tangram" +import "." -Calendar { +Tangram { + id: activity dataset: Dataset - + resourceUrl: "qrc:/gcompris/src/activities/baby_tangram/resource/" } diff --git a/src/activities/baby_tangram/CMakeLists.txt b/src/activities/baby_tangram/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/src/activities/baby_tangram/CMakeLists.txt @@ -0,0 +1 @@ +GCOMPRIS_ADD_RCC(activities/baby_tangram *.qml *.svg dataset.js resource/*/*) diff --git a/src/activities/baby_tangram/baby_tangram.svg b/src/activities/baby_tangram/baby_tangram.svg new file mode 100644 --- /dev/null +++ b/src/activities/baby_tangram/baby_tangram.svg @@ -0,0 +1,863 @@ + + + + + + + + + + image/svg+xml + + + 2017 + + + Timothée Giet and Ilya Bizyaev + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/activities/baby_tangram/dataset.js b/src/activities/baby_tangram/dataset.js new file mode 100644 --- /dev/null +++ b/src/activities/baby_tangram/dataset.js @@ -0,0 +1,717 @@ +.pragma library + +/* dataset format + - for each level we have: + - bg: an optional background image + - colorMask: the color of the shadowed target items + - a list of pieces that each holds: + - img: piece file name + - flippable: is the piece flippable + - flipping: target flipping state + - x: target x position + - y: target y position + - width: item width + - height: item height + - rotation: item target rotation + - moduloRotation: modulo rotation + - initX: initial x position + - initY: innitial y position + - initRotation: initial rotation + - initFlipping: initial flipping +*/ + +var dataset = [ + { + 'bg': '', + 'name': 'train1', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'train/loco.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.238, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.84868, + 'initY': 0.14357, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.237, + 'x': 0.16136986301369866, + 'y': 0.5003377010125074 + }, + { + 'img': 'train/coal.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.144, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.40198, + 'initY': 0.10248, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.221, + 'x': 0.38829064919595, + 'y': 0.5456027397260274 + }, + { + 'img': 'train/wood.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.141, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.58434, + 'initY': 0.23488, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.235, + 'x': 0.6111453245979751, + 'y': 0.5469714115544966 + }, + { + 'img': 'train/passenger.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.213, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.15311, + 'initY': 0.15368, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.238, + 'x': 0.8362608695652176, + 'y': 0.5122281119714115 + }, + ] + }, + { + 'bg': '', + 'name': 'train2', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'train/loco.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.238, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.84868, + 'initY': 0.14357, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.237, + 'x': 0.16136986301369866, + 'y': 0.5003377010125074 + }, + { + 'img': 'train/coal.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.144, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.40198, + 'initY': 0.10248, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.221, + 'x': 0.6116378796902918, + 'y': 0.5491762954139369 + }, + { + 'img': 'train/wood.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.141, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.58434, + 'initY': 0.23488, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.235, + 'x': 0.8368749255509234, + 'y': 0.5493537820131029 + }, + { + 'img': 'train/passenger.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.213, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.15311, + 'initY': 0.15368, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.238, + 'x': 0.3913531864204886, + 'y': 0.5140148898153662 + }, + ] + }, + { + 'bg': '', + 'name': 'train3', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'train/loco.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.238, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.84868, + 'initY': 0.14357, + 'moduloRotation': 360, + 'rotation': 45, + 'width': 0.237, + 'x': 0.19114949374627757, + 'y': 0.22279154258487197 + }, + { + 'img': 'train/coal.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.144, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.40198, + 'initY': 0.10248, + 'moduloRotation': 360, + 'rotation': 45, + 'width': 0.221, + 'x': 0.6336748064324003, + 'y': 0.7272584871947588 + }, + { + 'img': 'train/wood.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.141, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.58434, + 'initY': 0.23488, + 'moduloRotation': 360, + 'rotation': 45, + 'width': 0.235, + 'x': 0.4801149493746279, + 'y': 0.5791334127456819 + }, + { + 'img': 'train/passenger.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.213, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.84311, + 'initY': 0.42368, + 'moduloRotation': 360, + 'rotation': 45, + 'width': 0.238, + 'x': 0.34251459201905915, + 'y': 0.3925139964264443 + }, + ] + }, + { + 'bg': '', + 'name': 'train4', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'train/loco.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.238, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.84868, + 'initY': 0.14357, + 'moduloRotation': 360, + 'rotation': 315, + 'width': 0.237, + 'x': 0.20365693865396073, + 'y': 0.4241018463371054 + }, + { + 'img': 'train/coal.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.144, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.40198, + 'initY': 0.10248, + 'moduloRotation': 360, + 'rotation': 90, + 'width': 0.221, + 'x': 0.7575580702799286, + 'y': 0.6540005955926147 + }, + { + 'img': 'train/wood.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.141, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.58434, + 'initY': 0.23488, + 'moduloRotation': 360, + 'rotation': 45, + 'width': 0.235, + 'x': 0.6689178082191782, + 'y': 0.4540589636688504 + }, + { + 'img': 'train/passenger.svg', + 'flippable': 0, + 'flipping': false, + 'height': 0.213, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.84311, + 'initY': 0.42368, + 'moduloRotation': 360, + 'rotation': 0, + 'width': 0.238, + 'x': 0.4550815961882075, + 'y': 0.3317635497319833 + }, + ] + }, + { + 'bg': '', + 'name': 'train5', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'train/loco.svg', + 'flippable': 1, + 'flipping': true, + 'height': 0.238, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.84868, + 'initY': 0.14357, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.237, + 'x': 0.8474925550923169, + 'y': 0.48902144133412745 + }, + { + 'img': 'train/coal.svg', + 'flippable': 1, + 'flipping': true, + 'height': 0.144, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.40198, + 'initY': 0.10248, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.221, + 'x': 0.619976176295414, + 'y': 0.5354776652769506 + }, + { + 'img': 'train/wood.svg', + 'flippable': 1, + 'flipping': true, + 'height': 0.141, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.58434, + 'initY': 0.2348, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.235, + 'x': 0.39375402025014905, + 'y': 0.5374419297200713 + }, + { + 'img': 'train/passenger.svg', + 'flippable': 1, + 'flipping': true, + 'height': 0.213, + 'initFlipping': 0, + 'initRotation': 0, + 'initX': 0.15311, + 'initY': 0.15368, + 'moduloRotation': 0, + 'rotation': 0, + 'width': 0.238, + 'x': 0.16741036331149514, + 'y': 0.5015074449076831 + }, + ] + }, + { + 'name': 'Level 1', + 'bg': 'truck/traffic_bg.svg', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'truck/engine.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.860, + 'y': 0.573, + 'width': 0.233, + 'height': 0.109, + 'rotation': 0, + 'moduloRotation': 0, + 'initX': 0.866, + 'initY': 0.754, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'truck/cabin.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.847, + 'y': 0.435, + 'width': 0.207, + 'height': 0.178, + 'rotation': 0, + 'moduloRotation': 0, + 'initX': 0.153, + 'initY': 0.789, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'truck/container.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.358, + 'y': 0.489, + 'width': 0.676, + 'height': 0.271, + 'rotation': 0, + 'moduloRotation': 0, + 'initX': 0.338, + 'initY': 0.135, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'truck/back_road.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.181, + 'y': 0.633, + 'width': 0.198, + 'height': 0.092, + 'rotation': 0, + 'moduloRotation': 0, + 'initX': 0.799, + 'initY': 0.146, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'truck/front_road.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.766, + 'y': 0.617, + 'width': 0.403, + 'height': 0.121, + 'rotation': 0, + 'moduloRotation': 0, + 'initX': 0.501, + 'initY': 0.760, + 'initRotation': 0, + 'initFlipping': 0 + } + ] + }, + { + 'name': 'Level 2', + 'bg': 'truck/traffic_bg.svg', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'truck/engine.svg', + 'flippable': 1, + 'flipping': 0, + 'x': 0.860, + 'y': 0.573, + 'width': 0.233, + 'height': 0.109, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.866, + 'initY': 0.754, + 'initRotation': 0, + 'initFlipping': 1 + }, + { + 'img': 'truck/cabin.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.847, + 'y': 0.435, + 'width': 0.207, + 'height': 0.178, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.153, + 'initY': 0.789, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'truck/container.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.358, + 'y': 0.489, + 'width': 0.676, + 'height': 0.271, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.338, + 'initY': 0.135, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'truck/back_road.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.181, + 'y': 0.633, + 'width': 0.198, + 'height': 0.092, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.799, + 'initY': 0.146, + 'initRotation': 270, + 'initFlipping': 0 + }, + { + 'img': 'truck/front_road.svg', + 'flippable': 1, + 'flipping': 0, + 'x': 0.766, + 'y': 0.617, + 'width': 0.403, + 'height': 0.121, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.501, + 'initY': 0.760, + 'initRotation': 90, + 'initFlipping': 1 + } + ] + }, + { + 'name': 'Level 3', + 'bg': 'truck/traffic_bg.svg', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'truck/engine.svg', + 'flippable': 1, + 'flipping': 0, + 'x': 0.860, + 'y': 0.573, + 'width': 0.233, + 'height': 0.109, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.866, + 'initY': 0.754, + 'initRotation': 0, + 'initFlipping': 1 + }, + { + 'img': 'truck/cabin.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.847, + 'y': 0.435, + 'width': 0.207, + 'height': 0.178, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.153, + 'initY': 0.789, + 'initRotation': 45, + 'initFlipping': 0 + }, + { + 'img': 'truck/container.svg', + 'flippable': 1, + 'flipping': 0, + 'x': 0.358, + 'y': 0.489, + 'width': 0.676, + 'height': 0.271, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.338, + 'initY': 0.135, + 'initRotation': 0, + 'initFlipping': 1 + }, + { + 'img': 'truck/back_road.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.181, + 'y': 0.633, + 'width': 0.198, + 'height': 0.092, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.799, + 'initY': 0.146, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'truck/front_road.svg', + 'flippable': 1, + 'flipping': 0, + 'x': 0.766, + 'y': 0.617, + 'width': 0.403, + 'height': 0.121, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.501, + 'initY': 0.760, + 'initRotation': 270, + 'initFlipping': 0 + } + ] + }, + { + 'name': 'Level 4', + 'bg': 'car1/car.svg', + 'colorMask': '#999', + 'pieces': [ + { + 'img': 'car1/windshield.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.492, + 'y': 0.309, + 'width': 0.563, + 'height': 0.227, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.301, + 'initY': 0.133, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'car1/tire_right.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.226, + 'y': 0.720, + 'width': 0.126, + 'height': 0.147, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.863, + 'initY': 0.123, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'car1/tire_right.svg', + 'flippable': 0, + 'flipping': 1, + 'x': 0.782, + 'y': 0.720, + 'width': 0.126, + 'height': 0.147, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.663, + 'initY': 0.123, + 'initRotation': 0, + 'initFlipping': 1 + }, + { + 'img': 'car1/bumper.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.502, + 'y': 0.656, + 'width': 0.710, + 'height': 0.184, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.405, + 'initY': 0.892, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'car1/grille.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.505, + 'y': 0.600, + 'width': 0.365, + 'height': 0.051, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.382, + 'initY': 0.825, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'car1/headlights.svg', + 'flippable': 0, + 'flipping': 0, + 'x': 0.782, + 'y': 0.506, + 'width': 0.134, + 'height': 0.125, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.90, + 'initY': 0.85, + 'initRotation': 0, + 'initFlipping': 0 + }, + { + 'img': 'car1/headlights.svg', + 'flippable': 0, + 'flipping': 1, + 'x': 0.222, + 'y': 0.506, + 'width': 0.134, + 'height': 0.125, + 'rotation': 0, + 'moduloRotation': 360, + 'initX': 0.90, + 'initY': 0.30, + 'initRotation': 0, + 'initFlipping': 1 + } + ] + } + ] diff --git a/src/activities/tangram/resource/README b/src/activities/baby_tangram/resource/README copy from src/activities/tangram/resource/README copy to src/activities/baby_tangram/resource/README --- a/src/activities/tangram/resource/README +++ b/src/activities/baby_tangram/resource/README @@ -9,11 +9,6 @@ car1/windshield.svg tangram/background.svg tangram/flip.svg -tangram/p0.svg -tangram/p1.svg -tangram/p2.svg -tangram/p3.svg -tangram/p4.svg train/coal.svg train/loco.svg train/passenger.svg diff --git a/src/activities/tangram/resource/car1/bumper.svg b/src/activities/baby_tangram/resource/car1/bumper.svg rename from src/activities/tangram/resource/car1/bumper.svg rename to src/activities/baby_tangram/resource/car1/bumper.svg diff --git a/src/activities/tangram/resource/car1/car.svg b/src/activities/baby_tangram/resource/car1/car.svg rename from src/activities/tangram/resource/car1/car.svg rename to src/activities/baby_tangram/resource/car1/car.svg diff --git a/src/activities/tangram/resource/car1/grille.svg b/src/activities/baby_tangram/resource/car1/grille.svg rename from src/activities/tangram/resource/car1/grille.svg rename to src/activities/baby_tangram/resource/car1/grille.svg diff --git a/src/activities/tangram/resource/car1/headlights.svg b/src/activities/baby_tangram/resource/car1/headlights.svg rename from src/activities/tangram/resource/car1/headlights.svg rename to src/activities/baby_tangram/resource/car1/headlights.svg diff --git a/src/activities/tangram/resource/car1/tire_right.svg b/src/activities/baby_tangram/resource/car1/tire_right.svg rename from src/activities/tangram/resource/car1/tire_right.svg rename to src/activities/baby_tangram/resource/car1/tire_right.svg diff --git a/src/activities/tangram/resource/car1/windshield.svg b/src/activities/baby_tangram/resource/car1/windshield.svg rename from src/activities/tangram/resource/car1/windshield.svg rename to src/activities/baby_tangram/resource/car1/windshield.svg diff --git a/src/activities/tangram/resource/m-car1/bumper.svg b/src/activities/baby_tangram/resource/m-car1/bumper.svg rename from src/activities/tangram/resource/m-car1/bumper.svg rename to src/activities/baby_tangram/resource/m-car1/bumper.svg diff --git a/src/activities/tangram/resource/m-car1/grille.svg b/src/activities/baby_tangram/resource/m-car1/grille.svg rename from src/activities/tangram/resource/m-car1/grille.svg rename to src/activities/baby_tangram/resource/m-car1/grille.svg diff --git a/src/activities/tangram/resource/m-car1/headlights.svg b/src/activities/baby_tangram/resource/m-car1/headlights.svg rename from src/activities/tangram/resource/m-car1/headlights.svg rename to src/activities/baby_tangram/resource/m-car1/headlights.svg diff --git a/src/activities/tangram/resource/m-car1/tire_right.svg b/src/activities/baby_tangram/resource/m-car1/tire_right.svg rename from src/activities/tangram/resource/m-car1/tire_right.svg rename to src/activities/baby_tangram/resource/m-car1/tire_right.svg diff --git a/src/activities/tangram/resource/m-car1/windshield.svg b/src/activities/baby_tangram/resource/m-car1/windshield.svg rename from src/activities/tangram/resource/m-car1/windshield.svg rename to src/activities/baby_tangram/resource/m-car1/windshield.svg diff --git a/src/activities/tangram/resource/m-train/coal.svg b/src/activities/baby_tangram/resource/m-train/coal.svg rename from src/activities/tangram/resource/m-train/coal.svg rename to src/activities/baby_tangram/resource/m-train/coal.svg diff --git a/src/activities/tangram/resource/m-train/loco.svg b/src/activities/baby_tangram/resource/m-train/loco.svg rename from src/activities/tangram/resource/m-train/loco.svg rename to src/activities/baby_tangram/resource/m-train/loco.svg diff --git a/src/activities/tangram/resource/m-train/passenger.svg b/src/activities/baby_tangram/resource/m-train/passenger.svg rename from src/activities/tangram/resource/m-train/passenger.svg rename to src/activities/baby_tangram/resource/m-train/passenger.svg diff --git a/src/activities/tangram/resource/m-train/wood.svg b/src/activities/baby_tangram/resource/m-train/wood.svg rename from src/activities/tangram/resource/m-train/wood.svg rename to src/activities/baby_tangram/resource/m-train/wood.svg diff --git a/src/activities/tangram/resource/m-truck/back_road.svg b/src/activities/baby_tangram/resource/m-truck/back_road.svg rename from src/activities/tangram/resource/m-truck/back_road.svg rename to src/activities/baby_tangram/resource/m-truck/back_road.svg diff --git a/src/activities/tangram/resource/m-truck/cabin.svg b/src/activities/baby_tangram/resource/m-truck/cabin.svg rename from src/activities/tangram/resource/m-truck/cabin.svg rename to src/activities/baby_tangram/resource/m-truck/cabin.svg diff --git a/src/activities/tangram/resource/m-truck/container.svg b/src/activities/baby_tangram/resource/m-truck/container.svg rename from src/activities/tangram/resource/m-truck/container.svg rename to src/activities/baby_tangram/resource/m-truck/container.svg diff --git a/src/activities/tangram/resource/m-truck/engine.svg b/src/activities/baby_tangram/resource/m-truck/engine.svg rename from src/activities/tangram/resource/m-truck/engine.svg rename to src/activities/baby_tangram/resource/m-truck/engine.svg diff --git a/src/activities/tangram/resource/m-truck/front_road.svg b/src/activities/baby_tangram/resource/m-truck/front_road.svg rename from src/activities/tangram/resource/m-truck/front_road.svg rename to src/activities/baby_tangram/resource/m-truck/front_road.svg diff --git a/src/activities/baby_tangram/resource/tangram/background.svg b/src/activities/baby_tangram/resource/tangram/background.svg new file mode 100644 --- /dev/null +++ b/src/activities/baby_tangram/resource/tangram/background.svg @@ -0,0 +1,69 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/activities/baby_tangram/resource/tangram/flip.svg b/src/activities/baby_tangram/resource/tangram/flip.svg new file mode 100644 --- /dev/null +++ b/src/activities/baby_tangram/resource/tangram/flip.svg @@ -0,0 +1,86 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/activities/tangram/resource/train/README b/src/activities/baby_tangram/resource/train/README rename from src/activities/tangram/resource/train/README rename to src/activities/baby_tangram/resource/train/README diff --git a/src/activities/tangram/resource/train/coal.svg b/src/activities/baby_tangram/resource/train/coal.svg rename from src/activities/tangram/resource/train/coal.svg rename to src/activities/baby_tangram/resource/train/coal.svg diff --git a/src/activities/tangram/resource/train/loco.svg b/src/activities/baby_tangram/resource/train/loco.svg rename from src/activities/tangram/resource/train/loco.svg rename to src/activities/baby_tangram/resource/train/loco.svg diff --git a/src/activities/tangram/resource/train/passenger.svg b/src/activities/baby_tangram/resource/train/passenger.svg rename from src/activities/tangram/resource/train/passenger.svg rename to src/activities/baby_tangram/resource/train/passenger.svg diff --git a/src/activities/tangram/resource/train/wood.svg b/src/activities/baby_tangram/resource/train/wood.svg rename from src/activities/tangram/resource/train/wood.svg rename to src/activities/baby_tangram/resource/train/wood.svg diff --git a/src/activities/tangram/resource/truck/back_road.svg b/src/activities/baby_tangram/resource/truck/back_road.svg rename from src/activities/tangram/resource/truck/back_road.svg rename to src/activities/baby_tangram/resource/truck/back_road.svg diff --git a/src/activities/tangram/resource/truck/cabin.svg b/src/activities/baby_tangram/resource/truck/cabin.svg rename from src/activities/tangram/resource/truck/cabin.svg rename to src/activities/baby_tangram/resource/truck/cabin.svg diff --git a/src/activities/tangram/resource/truck/container.svg b/src/activities/baby_tangram/resource/truck/container.svg rename from src/activities/tangram/resource/truck/container.svg rename to src/activities/baby_tangram/resource/truck/container.svg diff --git a/src/activities/tangram/resource/truck/engine.svg b/src/activities/baby_tangram/resource/truck/engine.svg rename from src/activities/tangram/resource/truck/engine.svg rename to src/activities/baby_tangram/resource/truck/engine.svg diff --git a/src/activities/tangram/resource/truck/front_road.svg b/src/activities/baby_tangram/resource/truck/front_road.svg rename from src/activities/tangram/resource/truck/front_road.svg rename to src/activities/baby_tangram/resource/truck/front_road.svg diff --git a/src/activities/tangram/resource/truck/traffic_bg.svg b/src/activities/baby_tangram/resource/truck/traffic_bg.svg rename from src/activities/tangram/resource/truck/traffic_bg.svg rename to src/activities/baby_tangram/resource/truck/traffic_bg.svg diff --git a/src/activities/baby_wordprocessor/ActivityInfo.qml b/src/activities/baby_wordprocessor/ActivityInfo.qml --- a/src/activities/baby_wordprocessor/ActivityInfo.qml +++ b/src/activities/baby_wordprocessor/ActivityInfo.qml @@ -38,6 +38,6 @@ Press 'Shift' and use the arrow keys to select the text. Use Ctrl+C to copy, Ctrl+V to paste and Crtl+X to cut text. Ctrl+Z can be used to undo changes. Try to fiddle around and find more shortcuts. For example, what is the shortcut to select all the text?") credit: "" - section: "computer keyboard reading" + section: "computer keyboard reading letters" createdInVersion: 6000 } diff --git a/src/activities/babymatch/ActivityInfo.qml b/src/activities/babymatch/ActivityInfo.qml --- a/src/activities/babymatch/ActivityInfo.qml +++ b/src/activities/babymatch/ActivityInfo.qml @@ -38,6 +38,6 @@ //: Help manual manual: qsTr("In the main board area, a set of objects is displayed. In the vertical box (at the left of the main board) another set of objects is shown, each object in the group on the left matching exactly one object in the main board area. This game challenges you to find the logical link between these objects. How do they fit together? Drag each object to the correct red space in the main area.") credit: "" - section: "discovery" + section: "reading vocabulary" createdInVersion: 4000 } diff --git a/src/activities/babyshapes/ActivityInfo.qml b/src/activities/babyshapes/ActivityInfo.qml --- a/src/activities/babyshapes/ActivityInfo.qml +++ b/src/activities/babyshapes/ActivityInfo.qml @@ -39,6 +39,6 @@ //: Help manual manual: qsTr("Complete the puzzle by dragging each piece from the set of pieces on the left, to the matching space in the puzzle.") credit: qsTr("The dog is provided by Andre Connes and released under the GPL") - section: "discovery" + section: "computer" createdInVersion: 4000 } diff --git a/src/activities/binary_bulb/ActivityInfo.qml b/src/activities/binary_bulb/ActivityInfo.qml --- a/src/activities/binary_bulb/ActivityInfo.qml +++ b/src/activities/binary_bulb/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Turn on the right bulbs to represent the binary of the given decimal number. When you have achieved it, press OK.") credit: "" - section: "experiment" + section: "sciences experiment" createdInVersion: 9500 } diff --git a/src/activities/braille_alphabets/ActivityInfo.qml b/src/activities/braille_alphabets/ActivityInfo.qml --- a/src/activities/braille_alphabets/ActivityInfo.qml +++ b/src/activities/braille_alphabets/ActivityInfo.qml @@ -36,6 +36,6 @@ manual: qsTr("The screen has 3 sections: an interactive braille cell, an instruction telling you the letter to reproduce, " + "and at the top the Braille letters to use as a reference. Each level teaches a set of 10 letters.") credit: "" - section: "discovery braille" + section: "reading letters braille" createdInVersion: 0 } diff --git a/src/activities/braille_fun/ActivityInfo.qml b/src/activities/braille_fun/ActivityInfo.qml --- a/src/activities/braille_fun/ActivityInfo.qml +++ b/src/activities/braille_fun/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Enter the braille code in the tile for the letters on the banner pulled by Tux in his plane across the screen. Check the braille chart by clicking on the toggle button for help.") credit: "" - section: "discovery braille" + section: "reading braille letters" createdInVersion: 4000 } diff --git a/src/activities/calendar/ActivityInfo.qml b/src/activities/calendar/ActivityInfo.qml --- a/src/activities/calendar/ActivityInfo.qml +++ b/src/activities/calendar/ActivityInfo.qml @@ -35,6 +35,7 @@ //: Help manual manual: qsTr("Read the instructions and select the correct date on the calendar.") credit: "" - section: "discovery" + section: "math measures" createdInVersion: 9000 + levels: "1,2,3" } diff --git a/src/activities/calendar/CMakeLists.txt b/src/activities/calendar/CMakeLists.txt --- a/src/activities/calendar/CMakeLists.txt +++ b/src/activities/calendar/CMakeLists.txt @@ -1 +1 @@ -GCOMPRIS_ADD_RCC(activities/calendar *.qml *.svg *.js) +GCOMPRIS_ADD_RCC(activities/calendar *.qml *.svg *.js resource/* resource/*/*/*.qml) diff --git a/src/activities/calendar/Calendar.qml b/src/activities/calendar/Calendar.qml --- a/src/activities/calendar/Calendar.qml +++ b/src/activities/calendar/Calendar.qml @@ -27,13 +27,17 @@ import "../../core" import "calendar.js" as Activity import "calendar_dataset.js" as Dataset +import "tutorial_instructions.js" as Instructions ActivityBase { id: activity property var dataset: Dataset onStart: focus = true onStop: {} + property var tutorialInstructions: Instructions.get() + property bool showTutorial: true + pageComponent: Image { id: background signal start @@ -43,6 +47,7 @@ sourceSize.width: Math.max(parent.width, parent.height) Component.onCompleted: { + dialogActivityConfig.initialize() activity.start.connect(start) activity.stop.connect(stop) } @@ -57,15 +62,17 @@ property alias calendar: calendar property alias okButton: okButton property alias questionItem: questionItem + property var levels: activity.datasetLoader.item.data property alias score: score property alias answerChoices: answerChoices property alias questionDelay: questionDelay property alias okButtonParticles: okButtonParticles property bool horizontalLayout: background.width >= background.height * 1.5 property alias daysOfTheWeekModel: daysOfTheWeekModel + property bool showTutorial: activity.showTutorial } - onStart: { Activity.start(items, dataset) } + onStart: { Activity.start(items) } onStop: { Activity.stop() } Keys.onPressed: (answerChoices.visible) ? answerChoices.handleKeys(event) : handleKeys(event); @@ -345,6 +352,7 @@ Rectangle { id: questionItemBackground + visible: !showTutorial color: "#373737" border.width: 2 border.color: "#f2f2f2" @@ -362,6 +370,7 @@ // Displays the question. GCText { id: questionItem + visible: !showTutorial anchors.fill: questionItemBackground anchors.bottom: questionItemBackground.bottom fontSizeMode: Text.Fit @@ -372,15 +381,42 @@ horizontalAlignment: Text.AlignHCenter } + //Tutorial section starts + Loader { + active: showTutorial + anchors.fill: parent + z: 1 + sourceComponent: tutorialComponent + Component { + id: tutorialComponent + Image { + id: tutorialImage + source: "../digital_electricity/resource/texture01.png" + anchors.fill: parent + fillMode: Image.Tile + Tutorial { + id: tutorialSection + tutorialDetails: tutorialInstructions + useImage: false + onSkipPressed: { + showTutorial = false + Activity.initLevel() + } + } + } + } + } + // Tutorial section ends + // Answer Submission button. BarButton { id: okButton source: "qrc:/gcompris/src/core/resource/bar_ok.svg" + visible: !showTutorial height: bar.height * 0.8 width: okButton.height sourceSize.width: okButton.width sourceSize.height: okButton.height - z: 10 anchors.top: calendarBox.bottom anchors.right: calendarBox.right anchors.margins: items.horizontalLayout ? 30 : 6 @@ -397,17 +433,39 @@ } } + DialogChooseLevel { + id: dialogActivityConfig + currentActivity: activity.activityInfo + + onSaveData: { + levelFolder = dialogActivityConfig.chosenLevel + currentActivity.currentLevel = dialogActivityConfig.chosenLevel + ApplicationSettings.setCurrentLevel(currentActivity.name, dialogActivityConfig.chosenLevel) + background.start() + home() + } + onClose: { + home() + } + onStartActivity: { + background.start() + } + } + DialogHelp { id: dialogHelp onClose: home() } Bar { id: bar - content: BarEnumContent { value: help | home | level } + content: BarEnumContent { value: items.showTutorial ? (help | home) : (help | home | level | activityConfig)} onHelpClicked: { displayDialog(dialogHelp) } + onActivityConfigClicked: { + displayDialog(dialogActivityConfig) + } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() @@ -420,6 +478,7 @@ Score { id: score + visible: !showTutorial height: okButton.height width: height anchors.top: calendarBox.bottom diff --git a/src/activities/calendar/calendar.js b/src/activities/calendar/calendar.js --- a/src/activities/calendar/calendar.js +++ b/src/activities/calendar/calendar.js @@ -40,11 +40,11 @@ var maxRange //sum of max. visible month and year on calendar for navigation bar next/prev button visibility. var correctAnswer var mode +var daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] -function start(items_, dataset_) { +function start(items_) { items = items_ - dataset = dataset_.get() - numberOfLevel = dataset.length + numberOfLevel = items.levels.length currentLevel = 0 if(Qt.locale(GCompris.ApplicationSettings.locale).firstDayOfWeek == Qml.Locale.Monday) { @@ -59,7 +59,7 @@ function initLevel() { currentSubLevel = 1; items.bar.level = currentLevel + 1 - currentLevelConfig = dataset[currentLevel][0][0] + currentLevelConfig = items.levels[currentLevel] setCalendarConfigurations() initQuestion(); } @@ -92,20 +92,117 @@ monthSelected = currentLevelConfig["visibleMonth"] items.answerChoices.visible = (mode === "findDayOfWeek") ? true : false items.okButton.visible = !items.answerChoices.visible - currentDataSet = dataset[currentLevel][1] + currentDataSet = currentLevelConfig["questionAnswers"] currentDataSet = Core.shuffle(currentDataSet) items.score.numberOfSubLevels = currentDataSet.length items.score.currentSubLevel = currentSubLevel } +function isLeapYear(year) { + if(year % 100 == 0 && year % 400 != 0) { + return false + } else if(year % 4 == 0) { + return true + } else { + return false + } +} + +function getDateInLongFormat(date) { + var months = [qsTr("January"), qsTr("February"), qsTr("March"), qsTr("April"), qsTr("May"), qsTr("June"), qsTr("July"), + qsTr("August"), qsTr("September"), qsTr("October"), qsTr("November"), qsTr("December")]; + //: return current date with format including current day, current month(in textual format) and current year + return qsTr("%1 %2 %3").arg(date.day).arg(months[date.month]).arg(date.year) +} + +function generateRandomYearMonthDay(minimumDate, maximumDate) { + var minYear = Number(minimumDate.slice(0, 4)) + var maxYear = Number(maximumDate.slice(0, 4)) + var minMonth = Number(minimumDate.slice(5, 7)) + var maxMonth = Number(maximumDate.slice(5, 7)) + var minDate = Number(minimumDate.slice(8, 10)) + var currentYear = minYear + Math.floor(Math.random() * Math.floor((maxYear - minYear + 1))) + var currentMonth + if(currentLevelConfig.questionAnswers.maxOffset) { + currentMonth = minMonth + Math.floor(Math.random() * Math.floor((maxMonth - minMonth - currentLevelConfig.questionAnswers.maxOffset / 30))) + } else { + currentMonth = minMonth + Math.floor(Math.random() * Math.floor((maxMonth - minMonth + 1))) + } + currentMonth = Math.max(currentMonth, 1) + var currentDate + daysInMonths[1] = (isLeapYear(currentYear)) ? 29 : 28; + currentDate = minDate + Math.floor(Math.random() * Math.floor((daysInMonths[currentMonth - 1] - minDate + 1))) + return { year: currentYear, month: currentMonth - 1, day: currentDate } +} + +function addOffsetToCurrentDate(currentDate) { + var maxOffset = currentLevelConfig.questionAnswers.maxOffset + var offset = Math.floor(maxOffset / 2) + Math.floor(Math.random() * Math.floor(maxOffset)) + var storedOffset = offset + daysInMonths[1] = (isLeapYear(currentDate.year)) ? 29 : 28; + offset += currentDate.day + var answerDate = 1; + var answerMonth = currentDate.month + var answerYear = currentDate.year + while(offset > 0) { + if(offset - daysInMonths[answerMonth] > 0) { + offset -= daysInMonths[answerMonth] + answerMonth++; + } else { + answerDate = offset; + offset = 0 + } + if(answerMonth > 11) { + answerYear++; + daysInMonths[1] = (isLeapYear(answerYear)) ? 29 : 28; + answerMonth = 0; + } + } + return { year: answerYear, month: answerMonth, day: answerDate, offset: storedOffset } +} + +function getTemplateQuestionText(mode, date) { + var questionText + if(mode == "findDayOfWeek") { + questionText = qsTr("What day of the week is on %1 of given month?").arg(date.day) + } else if(mode == "findDay") { + questionText = qsTr("Select day %1").arg(date.day) + } else if(mode == "findMonthOnly") { + questionText = qsTr("Find month number %1").arg(date.month + 1) + } else { + if(date.offset) { + //: The second argument represents the given date in complete format(with complete month name) and the first argument represents the difference in days between given date and answer date. + questionText = qsTr("Find the date %1 days after %2").arg(date.offset).arg(getDateInLongFormat(date)) + } else + //: The argument represents the answer date in complete format(with complete month name) + questionText = qsTr("Find the date %1").arg(getDateInLongFormat(date)) + } + return questionText +} + function initQuestion() { if(currentDataSet.length < currentSubLevel) { items.bonus.good("lion") } else { - items.score.currentSubLevel = currentSubLevel - items.questionItem.text = currentDataSet[currentSubLevel-1]["question"] - correctAnswer = currentDataSet[currentSubLevel-1]["answer"] + if(!currentLevelConfig.questionsExplicitlyGiven) { + var randomDate = generateRandomYearMonthDay(currentLevelConfig.minimumDate, currentLevelConfig.maximumDate) + items.score.currentSubLevel = currentSubLevel + if(currentLevelConfig.mode == "findDayOfWeek") { + var selectedDate = new Date(randomDate.year, randomDate.month - 1, randomDate.day) + correctAnswer.dayOfWeek = Number(selectedDate.getDay()) + } else if(currentLevelConfig.mode == "findYearMonthDay" && currentLevelConfig.questionAnswers.maxOffset) { + correctAnswer = addOffsetToCurrentDate(randomDate) + randomDate.offset = correctAnswer.offset + } else { + correctAnswer = randomDate + } + items.questionItem.text = getTemplateQuestionText(currentLevelConfig.mode, randomDate) + } else { + items.score.currentSubLevel = currentSubLevel + items.questionItem.text = currentDataSet[currentSubLevel-1]["question"] + correctAnswer = currentDataSet[currentSubLevel-1]["answer"] + } } } @@ -134,8 +231,14 @@ isCorrectAnswer = true } } + // For levels having question based on day only. + else if(mode === "findDay") { + if(daySelected === correctAnswer["day"]) { + isCorrectAnswer = true + } + } // For levels having questions based on dayOfWeek, month and year. - else if(mode !== "findDayOfWeek") { + else { if(monthSelected === correctAnswer["month"] && daySelected === correctAnswer["day"] && yearSelected === correctAnswer["year"]) { isCorrectAnswer = true } diff --git a/src/activities/calendar/calendar_dataset.js b/src/activities/calendar/calendar_dataset.js --- a/src/activities/calendar/calendar_dataset.js +++ b/src/activities/calendar/calendar_dataset.js @@ -38,7 +38,8 @@ "maximumDate": "2018-03-31", "visibleMonth": 2, "visibleYear": 2018, - "mode": "findDay" + "mode": "findDay", + "questionsExplicitly": false } ], [ // Level 1 Questions @@ -78,7 +79,8 @@ "maximumDate": "2018-03-31", "visibleMonth": 2, "visibleYear": 2018, - "mode": "findDayOfWeek" + "mode": "findDayOfWeek", + "questionsExplicitly": false } ], [ // Level 2 Questions @@ -121,7 +123,8 @@ "maximumDate": "2018-03-31", "visibleMonth": 2, "visibleYear": 2018, - "mode": "findDay" + "mode": "findDay", + "questionsExplicitly": false } ], @@ -165,7 +168,8 @@ "maximumDate": "2018-03-31", "visibleMonth": 2, "visibleYear": 2018, - "mode": "findDay" + "mode": "findDay", + "questionsExplicitly": false } ], [ // Level 4 Questions @@ -200,7 +204,8 @@ "maximumDate": "2018-12-31", "visibleMonth": 1, "visibleYear": 2018, - "mode": "findMonthOnly" + "mode": "findMonthOnly", + "questionsExplicitly": false } ], [ // Level 5 Questions @@ -231,11 +236,13 @@ [ // Level 6 Configurations { "navigationBarVisible" : true, - "minimumDate": "2017-01-01", - "maximumDate": "2019-12-31", - "visibleMonth": 2, + "minimumDate": "2018-09-01", + "maximumDate": "2019-01-31", + "visibleMonth": 10, "visibleYear": 2018, - "mode": "findYearMonthDay" + "mode": "findYearMonthDay", + "questionsExplicitly": true, + "maxOffset": 30, } ], @@ -287,7 +294,8 @@ "maximumDate": "2019-12-31", "visibleMonth": 1, "visibleYear": 2018, - "mode": "findYearMonthDay" + "mode": "findYearMonthDay", + "questionsExplicitly": true } ], [ // Level 7 Questions diff --git a/src/activities/calendar/resource/1/Data.qml b/src/activities/calendar/resource/1/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/calendar/resource/1/Data.qml @@ -0,0 +1,223 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +/* +Contains the questions, answers and calendar configurations of every level. +Add more levels by inserting questions and answers below. +Days of weeks are indexed from 0 i.e (Sunday = 0, Monday = 1, Tuesday = 2, .... ..... .... , Saturday = 6) +Months of year are indexed from 0 i.e (January = 0, February = 1, March = 2, .... ..... ...., December = 11) +If questions are provided explicitly field questionAnswers contains an array of questions and answers and +if they are not provided, then questionAnswers field contains parameter length signifying the number of questions, and optional +parameter maxOffset for questions where the user has to find date some days ahead of the given date. +[ + //MODES + // findMonthOnly --> For questions based on finding month only. + // findYearMonthDay --> For questions based on finding year, month and day. + // findDayOfWeek --> For questions based on finding day of week only. + // findDay --> For questions based on finding day of a given month and year. + ] +*/ + +Dataset { + objective: qsTr("Calendar Questions for a single month") + difficulty: 4 + data: [ + { + "navigationBarVisible" : false, + "minimumDate": "2018-03-01", + "maximumDate": "2018-03-31", + "visibleMonth": 2, + "visibleYear": 2018, + "mode": "findDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5 + } + }, + { + "navigationBarVisible" : false, + "minimumDate": "2018-03-01", + "maximumDate": "2018-03-31", + "visibleMonth": 2, + "visibleYear": 2018, + "mode": "findDay", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Select day 23"), + "answer": {"year": 2018, "month": 2, "day": 23} + }, + { + "question": qsTr("Select day 1"), + "answer": {"year": 2018, "month": 2, "day": 1} + }, + { + "question": qsTr("Select day 16"), + "answer": {"year": 2018, "month": 2, "day": 16} + }, + { + "question": qsTr("Select day 28"), + "answer": {"year": 2018, "month": 2, "day": 28} + }, + { + "question": qsTr("Select day 11"), + "answer": {"year": 2018, "month": 2, "day": 11} + }, + { + "question": qsTr("Select day 20"), + "answer": {"year": 2018, "month": 2, "day": 20} + } + ] + }, + { + "navigationBarVisible" : false, + "minimumDate": "2018-03-01", + "maximumDate": "2018-03-31", + "visibleMonth": 2, + "visibleYear": 2018, + "mode": "findDayOfWeek", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 7 + } + }, + { + "navigationBarVisible" : false, + "minimumDate": "2018-03-01", + "maximumDate": "2018-03-31", + "visibleMonth": 2, + "visibleYear": 2018, + "mode": "findDayOfWeek", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("What day of week is the 4th of given month?"), + "answer": {"dayOfWeek": 0} + }, + { + "question": qsTr("What day of the week is the 12th of given month?"), + "answer": {"dayOfWeek": 1} + }, + { + "question": qsTr("What day of the week is the 20th of given month?"), + "answer": {"dayOfWeek": 2} + }, + { + "question": qsTr("What day of the week is the 28th of given month?"), + "answer": {"dayOfWeek": 3} + }, + { + "question": qsTr("What day of the week is the 22nd of given month?"), + "answer": {"dayOfWeek": 4} + }, + { + "question": qsTr("What day of the week is the 16th of given month?"), + "answer": {"dayOfWeek": 5} + }, + { + "question": qsTr("What day of the week is the 10th of given month?"), + "answer": {"dayOfWeek": 6} + } + ] + }, + { + "navigationBarVisible": false, + "minimumDate": "2018-03-01", + "maximumDate": "2018-03-31", + "visibleMonth": 2, + "visibleYear": 2018, + "mode": "findDay", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Select a Monday between days 1 and 7 of given month"), + "answer": {"year": 2018, "month": 2, "day": 5} + }, + { + "question": qsTr("Select a Tuesday between days 8 and 16 of given month"), + "answer": {"year": 2018, "month": 2, "day": 13} + }, + { + "question": qsTr("Select a Wednesday between days 15 and 22 of given month"), + "answer": {"year": 2018, "month": 2, "day": 21} + }, + { + "question": qsTr("Select a Thursday between days 26 and 31 of given month"), + "answer": {"year": 2018, "month": 2, "day": 29} + }, + { + "question": qsTr("Select a Friday between days 20 and 25 of given month"), + "answer": {"year": 2018, "month": 2, "day": 23} + }, + { + "question": qsTr("Select a Saturday between days 13 and 23 of given month"), + "answer": {"year": 2018, "month": 2, "day": 17} + }, + { + "question": qsTr("Select a Sunday between days 5 and 17 of given month"), + "answer": {"year": 2018, "month": 2, "day": 11} + } + ] + }, + { + "navigationBarVisible" : false, + "minimumDate": "2018-03-01", + "maximumDate": "2018-03-31", + "visibleMonth": 2, + "visibleYear": 2018, + "mode": "findDay", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Select a Monday between days 1 and 7 of given month"), + "answer": {"year": 2018, "month": 2, "day": 5} + }, + { + "question": qsTr("Select a Tuesday between days 8 and 16 of given month"), + "answer": {"year": 2018, "month": 2, "day": 13} + }, + { + "question": qsTr("Select a Wednesday between days 15 and 22 of given month"), + "answer": {"year": 2018, "month": 2, "day": 21} + }, + { + "question": qsTr("Select a Thursday between days 26 and 31 of given month"), + "answer": {"year": 2018, "month": 2, "day": 29} + }, + { + "question": qsTr("Select a Friday between days 20 and 25 of given month"), + "answer": {"year": 2018, "month": 2, "day": 23} + }, + { + "question": qsTr("Select a Saturday between days 13 and 23 of given month"), + "answer": {"year": 2018, "month": 2, "day": 17} + }, + { + "question": qsTr("Select a Sunday between days 5 and 17 of given month"), + "answer": {"year": 2018, "month": 2, "day": 11} + } + ] + } + ] +} diff --git a/src/activities/calendar/resource/2/Data.qml b/src/activities/calendar/resource/2/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/calendar/resource/2/Data.qml @@ -0,0 +1,135 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +/* +Contains the questions, answers and calendar configurations of every level. +Add more levels by inserting questions and answers below. +Days of weeks are indexed from 0 i.e (Sunday = 0, Monday = 1, Tuesday = 2, .... ..... .... , Saturday = 6) +Months of year are indexed from 0 i.e (January = 0, February = 1, March = 2, .... ..... ...., December = 11) +If questions are provided explicitly field questionAnswers contains an array of questions and answers and +if they are not provided, then questionAnswers field contains parameter length signifying the number of questions, and optional +parameter maxOffset for questions where the user has to find date some days ahead of the given date. +[ + //MODES + // findMonthOnly --> For questions based on finding month only. + // findYearMonthDay --> For questions based on finding year, month and day. + // findDayOfWeek --> For questions based on finding day of week only. + // findDay --> For questions based on finding day of a given month and year. + ] +*/ + +Dataset { + objective: qsTr("Calendar Questions involving 2 months") + difficulty: 5 + data: [ + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 30 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-12-31", + "visibleMonth": 2, + "visibleYear": 2018, + "mode": "findDayOfWeek", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("What day of week is 30 days after 10 March?"), + "answer": {"dayOfWeek": 1} + }, + { + "question": qsTr("What day of the week is 40 days after 15 July?"), + "answer": {"dayOfWeek": 5} + }, + { + "question": qsTr("What day of the week is 20 days after 1 June?"), + "answer": {"dayOfWeek": 5} + }, + { + "question": qsTr("What day of the week is 60 days after 10 April?"), + "answer": {"dayOfWeek": 6} + }, + { + "question": qsTr("What day of the week is 10 days after 15 December?"), + "answer": {"dayOfWeek": 2} + } + ] + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 60 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2017-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 1, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Human Rights Day is celebrated five days after December 5.
    Find the date of Human Rights Day in 2017."), + "answer": {"year": 2017, "month": 11, "day": 10} + }, + { + "question": qsTr("Braille Day is celebrated one day before January 5.
    Find the date of Braille Day in 2018"), + "answer": {"year": 2018, "month": 0, "day": 4} + }, + { + "question": qsTr("Mark's birthday is on November 4. In 2017 his party was exactly two weeks later.
    Find the date of his party in 2017"), + "answer": {"year": 2017, "month": 10, "day": 18} + }, + { + "question": qsTr("International Women's Day is celebrated two days before March 10.
    Find the date of International Women's Day in 2018."), + "answer": {"year": 2018, "month": 2, "day": 8} + }, + { + "question": qsTr("Sports competition was held on last Friday of September 2017.
    Select the date of sports competition on the calendar."), + "answer": {"year": 2017, "month": 8, "day": 29} + } + ] + } + ] +} diff --git a/src/activities/calendar/resource/3/Data.qml b/src/activities/calendar/resource/3/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/calendar/resource/3/Data.qml @@ -0,0 +1,151 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +/* +Contains the questions, answers and calendar configurations of every level. +Add more levels by inserting questions and answers below. +Days of weeks are indexed from 0 i.e (Sunday = 0, Monday = 1, Tuesday = 2, .... ..... .... , Saturday = 6) +Months of year are indexed from 0 i.e (January = 0, February = 1, March = 2, .... ..... ...., December = 11) +If questions are provided explicitly field questionAnswers contains an array of questions and answers and +if they are not provided, then questionAnswers field contains parameter length signifying the number of questions, and optional +parameter maxOffset for questions where the user has to find date some days ahead of the given date. +[ + //MODES + // findMonthOnly --> For questions based on finding month only. + // findYearMonthDay --> For questions based on finding year, month and day. + // findDayOfWeek --> For questions based on finding day of week only. + // findDay --> For questions based on finding day of a given month and year. + ] +*/ + +Dataset { + objective: qsTr("Calendar Questions involving several months") + difficulty: 6 + data: [ + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-12-31", + "visibleMonth": 1, + "visibleYear": 2018, + "mode": "findMonthOnly", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Find the month starting a Thursday and having 28 days"), + "answer": {"month": [1]} + }, + { + "question": qsTr("Find a month starting a Monday and having 31 days"), + "answer": {"month": [0, 9]} + }, + { + "question": qsTr("Find the month between June and August"), + "answer": {"month": [6]} + }, + { + "question": qsTr("Find a month starting a Saturday"), + "answer": {"month": [8, 11]} + }, + { + "question": qsTr("Find a month having 30 days"), + "answer": {"month": [3, 5, 8, 10]} + } + ] + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 90 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 120 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Find the first Monday of January month of year 2019"), + "answer": {"year": 2019, "month": 0, "day": 7} + }, + { + "question": qsTr("Find the second Wednesday of February month of year 2019"), + "answer": {"year": 2019, "month": 1, "day": 13} + }, + { + "question": qsTr("Find the third Friday of March month of year 2019"), + "answer": {"year": 2019, "month": 2, "day": 15} + }, + { + "question": qsTr("Find the fifth Sunday of April month of year 2018"), + "answer": {"year": 2018, "month": 3, "day": 29} + }, + { + "question": qsTr("Find the fourth Tuesday of July month of year 2018"), + "answer": {"year": 2018, "month": 6, "day": 24} + }, + { + "question": qsTr("Find the first Monday of August month of year 2018"), + "answer": {"year": 2018, "month": 7, "day": 6} + }, + { + "question": qsTr("Find the third Thursday of September month of year 2017"), + "answer": {"year": 2017, "month": 8, "day": 21} + }, + { + "question": qsTr("Find the fifth Sunday of October month of year 2017"), + "answer": {"year": 2017, "month": 9, "day": 29} + }, + { + "question": qsTr("Find the second Friday of December month of year 2017"), + "answer": {"year": 2017, "month": 11, "day": 8} + } + ] + } + ] +} diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/calendar/resource/Tutorial1.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/calendar/resource/Tutorial1.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/calendar/resource/Tutorial1.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial1.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,11 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("January \t February \t March \t April \t May \t June \t July \t August \t September \t October \t November \t December.") } + diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/calendar/resource/Tutorial2.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/calendar/resource/Tutorial2.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/calendar/resource/Tutorial2.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial2.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,10 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("Sunday \t Monday \t Tuesday \t Wednesday \t Thusday \t Friday \t Saturday \t") } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/calendar/resource/Tutorial3.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/calendar/resource/Tutorial3.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/calendar/resource/Tutorial3.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial3.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,10 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("February has 29 days if the year is a leap year and 28 days if it is not.") } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/calendar/resource/Tutorial4.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/calendar/resource/Tutorial4.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/calendar/resource/Tutorial4.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial4.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,10 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("If an year is divisible by 400 then it is a leap year.\nIf an year is divisible by 100 and not 400 then it is not a leap year.\nIf none of the above cases hold then only the years which are divisible by 4 are leap years.") } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/calendar/resource/Tutorial5.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/calendar/resource/Tutorial5.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/calendar/resource/Tutorial5.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial5.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,13 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("Select Leap year") + firstNumber: qsTr("2018") + secondNumber: qsTr("2016") + answer: 2016 } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/calendar/resource/Tutorial6.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/calendar/resource/Tutorial6.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/calendar/resource/Tutorial6.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial6.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,11 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + firstNumber: qsTr("111") + secondNumber: qsTr("108") } diff --git a/src/activities/calendar/resource/TutorialBase.qml b/src/activities/calendar/resource/TutorialBase.qml new file mode 100644 --- /dev/null +++ b/src/activities/calendar/resource/TutorialBase.qml @@ -0,0 +1,126 @@ +/* GCompris - TutorialBase.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import "../../../core" + +Rectangle { + id: tutorialRectangle + anchors.fill: parent + color: "#80FFFFFF" + property alias firstNumber: firstNumber.textLabel + property alias secondNumber: secondNumber.textLabel + property alias questionText: question.text + property int answer + + GCText { + id: question + fontSizeMode: Text.Fit + fontSize: mediumSize + anchors.left: tutorialRectangle.left + anchors.leftMargin: parent.height * 0.01 + color: "black" + horizontalAlignment: Text.AlignLeft + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } + + AnswerButton { + id: firstNumber + visible: answer + textLabel: "" + anchors { + top: parent.top + topMargin: parent.height * 0.3 + left: parent.left + leftMargin: parent.width * 0.2 + } + width: parent.width * 0.2 + height: parent.height * 0.4 + isCorrectAnswer: Number(textLabel) === tutorialRectangle.answer + onPressed: { + if(isCorrectAnswer) { + message.text = qsTr("Great") + message.visible = true + messageRectangle.visible = true + } + } + } + + AnswerButton { + id: secondNumber + textLabel: "" + visible: answer + anchors { + top: parent.top + topMargin: parent.height * 0.3 + left: parent.left + leftMargin: parent.width * 0.65 + } + width: parent.width * 0.2 + height: parent.height * 0.4 + isCorrectAnswer: Number(textLabel) === tutorialRectangle.answer + onPressed: { + if(isCorrectAnswer) { + message.text = qsTr("Great") + message.visible = true + messageRectangle.visible = true + } + } + + } + + Rectangle { + id: messageRectangle + anchors { + horizontalCenter: parent.horizontalCenter + top: parent.top + topMargin: parent.height * 0.75 + } + opacity: 0.8 + radius: 10 + border.width: 6 + color: "white" + border.color: "#87A6DD" + width: parent.width * 1.15 + height: parent.height * 0.4 + visible: false + + GCText { + id: message + anchors { + centerIn: parent + margins: parent.border.width+1 + } + text: "" + fontSizeMode: Text.Fit + fontSize: smallSize + color: "black" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } + } +} diff --git a/src/activities/calendar/tutorial_instructions.js b/src/activities/calendar/tutorial_instructions.js new file mode 100644 --- /dev/null +++ b/src/activities/calendar/tutorial_instructions.js @@ -0,0 +1,51 @@ +/* GCompris - tutorial_instructions.js + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +function get() { + return [ + { + "instruction": qsTr("This activity teaches how to use a calendar."), + "instructionQml": "" + }, + { + "instruction": qsTr("For every year there are 12 months namely,"), + "instructionQml": "qrc:/gcompris/src/activities/calendar/resource/Tutorial1.qml" + }, + + { + "instruction": qsTr("For every week there are 7 days namely,"), + "instructionQml" : "qrc:/gcompris/src/activities/calendar/resource/Tutorial2.qml" + }, + + { + "instruction": qsTr("The number of days in a month are fixed for every year, except for february."), + "instructionQml" : "qrc:/gcompris/src/activities/calendar/resource/Tutorial3.qml" + }, + { + "instruction": qsTr("Calculating Leap years."), + "instructionQml": "qrc:/gcompris/src/activities/calendar/resource/Tutorial4.qml" + }, + { + "instruction": qsTr("Select the leap year out of the two."), + "instructionQml": "qrc:/gcompris/src/activities/calendar/resource/Tutorial5.qml" + } + ] +} diff --git a/src/activities/canal_lock/ActivityInfo.qml b/src/activities/canal_lock/ActivityInfo.qml --- a/src/activities/canal_lock/ActivityInfo.qml +++ b/src/activities/canal_lock/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("You are in charge of the canal lock. Open the gates and the locks in the right order, so Tux can travel through the gates in both directions.") credit: qsTr("Drawing by Stephane Cabaraux.") - section: "experiment" + section: "sciences experiment" createdInVersion: 0 } diff --git a/src/activities/categorization/ActivityInfo.qml b/src/activities/categorization/ActivityInfo.qml --- a/src/activities/categorization/ActivityInfo.qml +++ b/src/activities/categorization/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Review the instructions and then drag and drop the elements as specified") credit: "" - section: "fun" + section: "reading vocabulary" createdInVersion: 8000 } diff --git a/src/activities/categorization/resource/board/category_colors.qml b/src/activities/categorization/resource/board/category_colors.qml --- a/src/activities/categorization/resource/board/category_colors.qml +++ b/src/activities/categorization/resource/board/category_colors.qml @@ -31,25 +31,25 @@ "image": imagesPrefix + "others/color2.png", "content": [ { - "instructions": "Place the objects matching GREEN color to right and others to the left", + "instructions": qsTr("Place the objects matching GREEN color to right and others to the left"), "image": imagesPrefix + "green.png", "maxNumberOfGood": 5, "maxNumberOfBad": 4, "prefix": "qrc:/gcompris/data/words/", "good": ["artichoke.png","cabbage.png","cucumber.png","cactus.png","clover.png"], "bad": ["left.png","lobster.png","mail.png","post.png"] }, { - "instructions": "Place the objects matching WHITE color to right and others to the left", + "instructions": qsTr("Place the objects matching WHITE color to right and others to the left"), "image": imagesPrefix + "white.png", "maxNumberOfGood": 6, "maxNumberOfBad": 6, "prefix": "qrc:/gcompris/data/words/", "good": ["milk.png","paper.png","dove.png","mail.png","egg.png", "bead.png"], "bad": ["flash.png","plum.png","potato.png","pumpkin.png","rabbit.png","kiwi.png"] }, { - "instructions": "Place the objects matching PINK color to right and others to the left", + "instructions": qsTr("Place the objects matching PINK color to right and others to the left"), "image": imagesPrefix + "pink.png", "maxNumberOfGood": 5, "maxNumberOfBad": 4, @@ -59,25 +59,25 @@ }, { "tags": ["red"], - "instructions": "Place the objects matching RED color to right and others to the left", + "instructions": qsTr("Place the objects matching RED color to right and others to the left"), "image": imagesPrefix + "red.png", "maxNumberOfGood": 5, "maxNumberOfBad": 4, "prefix": "qrc:/gcompris/data/words/", "good": ["shapes/dice.svg","lobster.png","pair.png","ladybug.png","post.png"], "bad": ["shapes/halforange.svg","radio.png","ramp.png","wheat.png"] }, { - "instructions": "Place the objects matching BROWN color to right and others to the left", + "instructions": qsTr("Place the objects matching BROWN color to right and others to the left"), "image": imagesPrefix + "brown.png", "maxNumberOfGood": 6, "maxNumberOfBad": 6, "prefix": "qrc:/gcompris/data/words/", "good": ["shapes/cookie.svg","date_fruit.png","chocolate.png","board.png","potato.png","kiwi.png"], "bad": ["cheese.png","bright.png","shapes/conehat.svg","dolphin.png","shapes/cd.svg","drip.png"] }, { - "instructions": "Place the objects matching PURPLE color to right and others to the left", + "instructions": qsTr("Place the objects matching PURPLE color to right and others to the left"), "categorise": "PURPLE", "image": imagesPrefix + "others/purple.png", "maxNumberOfGood": 6, @@ -87,25 +87,25 @@ "bad": ["bulb.png","bell.png","blackbird.png","umbrella.png","pumpkin.png","shapes/halfmoon.svg"] }, { - "instructions": "Place the objects matching GREY color to right and others to the left", + "instructions": qsTr("Place the objects matching GREY color to right and others to the left"), "image": imagesPrefix + "gray.png", "maxNumberOfGood": 6, "maxNumberOfBad": 6, "prefix": "qrc:/gcompris/data/words/", "good": ["chain.png","rabbit.png","ramp.png","dolphin.png","faucet.png","shapes/halfmoon.svg"], "bad": ["shapes/backcard.svg","radio.png","clover.png","left.png","flash.png","ink.png"] }, { - "instructions": "Place the objects matching ORANGE color to right and others to the left", + "instructions": qsTr("Place the objects matching ORANGE color to right and others to the left"), "image": imagesPrefix + "orange-color.png", "maxNumberOfGood": 3, "maxNumberOfBad": 3, "prefix": "qrc:/gcompris/data/words/", "good": ["pumpkin.png","shapes/halforange.svg","orange.png"], "bad": ["plum.png","potato.png","post.png"] }, { - "instructions": "Place the objects matching YELLOW color to right and others to the left", + "instructions": qsTr("Place the objects matching YELLOW color to right and others to the left"), "categorise":"YELLOW", "image": imagesPrefix + "yellow.png", "maxNumberOfGood": 6, diff --git a/src/activities/chronos/ActivityInfo.qml b/src/activities/chronos/ActivityInfo.qml --- a/src/activities/chronos/ActivityInfo.qml +++ b/src/activities/chronos/ActivityInfo.qml @@ -39,6 +39,6 @@ //: Help manual manual: qsTr("Pick from the pictures on the left and put them on the red dots") credit: qsTr("Moon photo is copyright NASA. The space sounds come from Tuxpaint and Vegastrike which are released under the GPL license. The transportation images are copyright Franck Doucet. Dates of Transportation are based on those found in <http://www.wikipedia.org>.") - section: "discovery" + section: "sciences history" createdInVersion: 4000 } diff --git a/src/activities/click_on_letter/ActivityInfo.qml b/src/activities/click_on_letter/ActivityInfo.qml --- a/src/activities/click_on_letter/ActivityInfo.qml +++ b/src/activities/click_on_letter/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A letter is spoken. Click on the matching letter in the main area. You can listen to the letter again, by clicking on the mouth icon.") credit: "" - section: "reading" + section: "reading letters" createdInVersion: 0 } diff --git a/src/activities/click_on_letter_up/ActivityInfo.qml b/src/activities/click_on_letter_up/ActivityInfo.qml --- a/src/activities/click_on_letter_up/ActivityInfo.qml +++ b/src/activities/click_on_letter_up/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A letter is spoken. Click on the matching letter in the main area. You can listen to the letter again, by clicking on the mouth icon in the bottom box.") credit: "" - section: "reading" + section: "reading letters" createdInVersion: 0 } diff --git a/src/activities/clockgame/ActivityInfo.qml b/src/activities/clockgame/ActivityInfo.qml --- a/src/activities/clockgame/ActivityInfo.qml +++ b/src/activities/clockgame/ActivityInfo.qml @@ -35,6 +35,7 @@ //: Help manual manual: qsTr("Set the clock to the given time, in the time-units shown (hours:minutes or hours:minutes:seconds). Drag the different arrows, to make the respective time unit go up or down.") credit: "" - section: "discovery" + section: "math measures" createdInVersion: 0 + levels: "1,2" } diff --git a/src/activities/clockgame/CMakeLists.txt b/src/activities/clockgame/CMakeLists.txt --- a/src/activities/clockgame/CMakeLists.txt +++ b/src/activities/clockgame/CMakeLists.txt @@ -1 +1 @@ -GCOMPRIS_ADD_RCC(activities/clockgame *.qml *.svg *.js resource/*) +GCOMPRIS_ADD_RCC(activities/clockgame *.qml *.svg *.js resource/* resource/*/*/*.qml) diff --git a/src/activities/clockgame/Clockgame.qml b/src/activities/clockgame/Clockgame.qml --- a/src/activities/clockgame/Clockgame.qml +++ b/src/activities/clockgame/Clockgame.qml @@ -44,6 +44,7 @@ signal stop Component.onCompleted: { + dialogActivityConfig.initialize() activity.start.connect(start) activity.stop.connect(stop) } @@ -62,6 +63,10 @@ property int currentS: 43 property int numberOfTry: 3 property int currentTry: 0 + property var levels: activity.datasetLoader.item.data + property bool minutesHandVisible + property bool secondsHandVisible + property bool zonesVisible } onStart: { @@ -135,7 +140,7 @@ /* The clock */ Image { id: clock - source: Activity.url + "clock_bg.svg" + source: activity.resourceUrl + "clock_bg.svg" anchors.centerIn: parent fillMode: Image.PreserveAspectFit sourceSize.height: parent.height @@ -145,18 +150,18 @@ /* The yellow zones */ Image { id: zones - source: Activity.url + "clock_zones.svg" + source: activity.resourceUrl + "clock_zones.svg" anchors.centerIn: parent fillMode: Image.PreserveAspectFit sourceSize.height: parent.height * 0.7 - visible: items.bar.level < 5 + visible: items.zonesVisible z: 2 } /* The setter */ Image { id: setter - source: Activity.url + "clock_setter.svg" + source: activity.resourceUrl + "clock_setter.svg" anchors { verticalCenter: parent.verticalCenter left: parent.right @@ -189,10 +194,10 @@ } z: 4 color: "#d56a3a" - visible: items.bar.level < 6 + visible: items.minutesHandVisible } } - + /* The seconds */ Repeater { model: 60 @@ -211,7 +216,7 @@ (index + 1) * 2 * Math.PI / 60) } z: 4 - visible: items.bar.level < 8 + visible: items.secondsHandVisible } } @@ -279,7 +284,7 @@ } z: 4 color: "#2a2a2a" - visible: items.bar.level < 4 + visible: false } /* Arrow H */ @@ -319,6 +324,7 @@ width: height / 20 radius: width / 2 color: "#d56a3a" + visible: items.minutesHandVisible transform: Rotation { id: rotm origin.x: m.width / 2 @@ -348,6 +354,7 @@ width: height / 30 radius: width / 2 color: "#2ccf4b" + visible: items.secondsHandVisible transform: Rotation { id: rots origin.x: s.width / 2 @@ -367,7 +374,6 @@ verticalCenterOffset: s.height / 2 } z: 7 - visible: items.bar.level > 2 } /* Center */ @@ -396,9 +402,9 @@ var dh = Math.min(Math.abs(a - agnh), Math.abs(a - agnh - 360), Math.abs(a - agnh + 360)) - var dm = Math.min(Math.abs(a - angm), - Math.abs(a - angm - 360), - Math.abs(a - angm + 360)) + var dm = m.visible ? Math.min(Math.abs(a - angm), + Math.abs(a - angm - 360), + Math.abs(a - angm + 360)) : 9999 var ds = s.visible ? Math.min( Math.abs(a - angs), Math.abs(a - angs - 360), @@ -416,6 +422,7 @@ onReleased: { Activity.selectedArrow = null + //todo replace this with Ok button if (items.currentH === items.targetH && items.currentM === items.targetM && items.currentS === items.targetS) { @@ -457,19 +464,43 @@ } } + DialogChooseLevel { + id: dialogActivityConfig + currentActivity: activity.activityInfo + + onSaveData: { + levelFolder = dialogActivityConfig.chosenLevel + currentActivity.currentLevel = dialogActivityConfig.chosenLevel + ApplicationSettings.setCurrentLevel(currentActivity.name, dialogActivityConfig.chosenLevel) + home() + } + onClose: { + home() + } + onStartActivity: { + background.start() + } + } + DialogHelp { id: dialogHelp onClose: home() } Bar { id: bar content: BarEnumContent { - value: help | home | level + value: help | home | level | hint | activityConfig } onHelpClicked: { displayDialog(dialogHelp) } + onHintClicked: { + helper.visible = !helper.visible + } + onActivityConfigClicked: { + displayDialog(dialogActivityConfig) + } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() diff --git a/src/activities/clockgame/clockgame.js b/src/activities/clockgame/clockgame.js --- a/src/activities/clockgame/clockgame.js +++ b/src/activities/clockgame/clockgame.js @@ -19,49 +19,60 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ -var url = "qrc:/gcompris/src/activities/clockgame/resource/" var currentLevel = 0 var numberOfLevel = 10 var items var selectedArrow function start(items_) { items = items_ currentLevel = 0 + numberOfLevel = items.levels.length initLevel() } function stop() {} function initLevel() { items.bar.level = currentLevel + 1 + items.numberOfTry = items.levels[currentLevel].numberOfSubLevels items.currentH = Math.floor(Math.random() * 12) items.targetH = Math.floor(Math.random() * 12) - - /* Set hours */ - switch (items.bar.level) { - case 1: - items.currentM = Math.floor(Math.random() * 4) * 15 - items.targetM = Math.floor(Math.random() * 4) * 15 - break - case 2: - items.currentM = Math.floor(Math.random() * 12) * 5 - items.targetM = Math.floor(Math.random() * 12) * 5 - break - default: + items.minutesHandVisible = items.levels[currentLevel].displayMinutesHand + if(!items.minutesHandVisible) { + items.currentM = 0 + items.targetM = 0 + } + else if(items.levels[currentLevel].fixedMinutes !== undefined) { + items.currentM = Math.floor(Math.random() * 60) + items.targetM = items.levels[currentLevel].fixedMinutes + } + else { items.currentM = Math.floor(Math.random() * 60) items.targetM = Math.floor(Math.random() * 60) - break } - if (items.bar.level > 3) { - items.currentS = Math.floor(Math.random() * 60) - items.targetS = Math.floor(Math.random() * 60) - } else { + items.secondsHandVisible = items.levels[currentLevel].displaySecondsHand + if(!items.secondsHandVisible) { items.currentS = 0 items.targetS = 0 } + else if(items.levels[currentLevel].fixedSeconds !== undefined) { + items.currentS = Math.floor(Math.random() * 60) + items.targetS = items.levels[currentLevel].fixedSeconds + } + else { + items.currentS = Math.floor(Math.random() * 60) + items.targetS = Math.floor(Math.random() * 60) + } + + if(items.levels[currentLevel].zonesVisible !== undefined) { + items.zonesVisible = items.levels[currentLevel].zonesVisible + } + else { + items.zonesVisible = true + } } function nextTry() { diff --git a/src/activities/clockgame/resource/1/Data.qml b/src/activities/clockgame/resource/1/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/clockgame/resource/1/Data.qml @@ -0,0 +1,58 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("Set and display time on analog clock for full half and quarters of an hour.") + difficulty: 2 + data: [ + { + "numberOfSubLevels": 5, + "fixedMinutes": 0, + "displayMinutesHand": false, + "fixedSeconds": 0, + "displaySecondsHand": false + }, + { + "numberOfSubLevels": 5, + "fixedMinutes": 15, + "displayMinutesHand": true, + "fixedSeconds": 0, + "displaySecondsHand": false + }, + { + "numberOfSubLevels": 5, + "fixedMinutes": 30, + "displayMinutesHand": true, + "fixedSeconds": 0, + "displaySecondsHand": false + }, + { + "numberOfSubLevels": 5, + "fixedMinutes": 45, + "displayMinutesHand": true, + "fixedSeconds": 0, + "displaySecondsHand": false + } + ] +} diff --git a/src/activities/clockgame/resource/2/Data.qml b/src/activities/clockgame/resource/2/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/clockgame/resource/2/Data.qml @@ -0,0 +1,54 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("Set and display time on analog clock for a time containing minutes and seconds.") + difficulty: 4 + data: [ + { + "numberOfSubLevels": 5, + "displayMinutesHand": true, + "fixedSeconds": 0, + "displaySecondsHand": false + }, + { + "numberOfSubLevels": 5, + "fixedMinutes": 0, + "displayMinutesHand": true, + "fixedSeconds": 30, + "displaySecondsHand": true + }, + { + "numberOfSubLevels": 5, + "displayMinutesHand": true, + "displaySecondsHand": true + }, + { + "numberOfSubLevels": 10, + "displayMinutesHand": true, + "displaySecondsHand": true, + "zonesVisible": false + } + ] +} diff --git a/src/activities/color_mix/ActivityInfo.qml b/src/activities/color_mix/ActivityInfo.qml --- a/src/activities/color_mix/ActivityInfo.qml +++ b/src/activities/color_mix/ActivityInfo.qml @@ -39,6 +39,6 @@ In case of paints the inks absorb different colors of light falling on it, subtracting it from what you see. The more ink you add, the more light is absorbed, and the darker the combined color gets. We can mix just three primary colors to make many new colors. The primary colors for paint/ink are cyan (a special shade of blue), magenta (a special shade of pink), and yellow. ") credit: qsTr("Images from http://openclipart.org") - section: "experiment color" + section: "sciences experiment color" createdInVersion: 0 } diff --git a/src/activities/color_mix_light/ActivityInfo.qml b/src/activities/color_mix_light/ActivityInfo.qml --- a/src/activities/color_mix_light/ActivityInfo.qml +++ b/src/activities/color_mix_light/ActivityInfo.qml @@ -38,6 +38,6 @@ In case of light it is just the opposite of mixing color with paints! The more light you add the lighter the resultant color will get. Primary colors of light are red, green and blue.") credit: qsTr("Images from http://openclipart.org") - section: "experiment color" + section: "sciences experiment color" createdInVersion: 0 } diff --git a/src/activities/colors/ActivityInfo.qml b/src/activities/colors/ActivityInfo.qml --- a/src/activities/colors/ActivityInfo.qml +++ b/src/activities/colors/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Listen to the color and touch the matching duck.") credit: "" - section: "discovery color" + section: "reading color vocabulary" createdInVersion: 0 } diff --git a/src/activities/details/ActivityInfo.qml b/src/activities/details/ActivityInfo.qml --- a/src/activities/details/ActivityInfo.qml +++ b/src/activities/details/ActivityInfo.qml @@ -38,6 +38,6 @@ //: Help manual manual: qsTr("Complete the puzzle by dragging each piece from the set of pieces on the left, to the matching space in the puzzle.") credit: qsTr("The images are from Wikimedia Commons.") - section: "discovery" + section: "discovery arts" createdInVersion: 4000 } diff --git a/src/activities/digital_electricity/ActivityInfo.qml b/src/activities/digital_electricity/ActivityInfo.qml --- a/src/activities/digital_electricity/ActivityInfo.qml +++ b/src/activities/digital_electricity/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Drag electrical components from the selector and drop them in the working area. In the working area, you can move the components by dragging them. To delete a component, select the deletion tool on top of the component selector, and select the component. You can click on the component and then on the rotate button to rotate it or info button to get information about it. You can click on the switch to open and close it. To connect two terminals, click on first terminal, then on second terminal. To deselect terminal or delete tool, click on any empty area. The simulation is updated in real time by any user action.") credit: "" - section: "experimental" + section: "sciences experiment" createdInVersion: 9000 } diff --git a/src/activities/drawletters/ActivityInfo.qml b/src/activities/drawletters/ActivityInfo.qml --- a/src/activities/drawletters/ActivityInfo.qml +++ b/src/activities/drawletters/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Draw the letter by connecting the dots in the correct order") credit: "" - section: "reading" + section: "reading letters" createdInVersion: 7000 } diff --git a/src/activities/explore_farm_animals/ActivityInfo.qml b/src/activities/explore_farm_animals/ActivityInfo.qml --- a/src/activities/explore_farm_animals/ActivityInfo.qml +++ b/src/activities/explore_farm_animals/ActivityInfo.qml @@ -42,6 +42,6 @@ In level three, a random text prompt is displayed and you must click on the animal that matches the text. When you have matched all texts correctly, you win! ") credit: "" - section: "discovery sound_group" + section: "sciences experiment" createdInVersion: 0 } diff --git a/src/activities/explore_monuments/ActivityInfo.qml b/src/activities/explore_monuments/ActivityInfo.qml --- a/src/activities/explore_monuments/ActivityInfo.qml +++ b/src/activities/explore_monuments/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on the given keys to learn more of the monuments and then identify where the monuments is on the map by its name.") credit: qsTr("Photos taken from Wikipedia.") - section: "discovery" + section: "discovery arts" createdInVersion: 6000 } diff --git a/src/activities/explore_world_animals/ActivityInfo.qml b/src/activities/explore_world_animals/ActivityInfo.qml --- a/src/activities/explore_world_animals/ActivityInfo.qml +++ b/src/activities/explore_world_animals/ActivityInfo.qml @@ -44,6 +44,6 @@ In level two, a random text prompt is displayed and you must click on the animal that matches the text. When you have matched all texts correctly, you win! ") credit: "" - section: "discovery miscellaneous" + section: "sciences experiment" createdInVersion: 0 } diff --git a/src/activities/explore_world_music/ActivityInfo.qml b/src/activities/explore_world_music/ActivityInfo.qml --- a/src/activities/explore_world_music/ActivityInfo.qml +++ b/src/activities/explore_world_music/ActivityInfo.qml @@ -42,6 +42,6 @@ The third level is also a matching game. You must select the location that matches the text description on the screen. You win the level when you have correctly matched all text prompts. ") credit: qsTr("Images from http://commons.wikimedia.org/wiki, http://archive.org") - section: "discovery sound_group" + section: "discovery music" createdInVersion: 0 } diff --git a/src/activities/family/ActivityInfo.qml b/src/activities/family/ActivityInfo.qml --- a/src/activities/family/ActivityInfo.qml +++ b/src/activities/family/ActivityInfo.qml @@ -37,6 +37,6 @@ "The circles are linked with lines to mark the relations. Married couples are marked with a ring on the link.\n" + "You are the person in the white circle. Select the name you should call the person in the orange circle.\n") credit: "" - section: "discovery" + section: "sciences history" createdInVersion: 9000 } diff --git a/src/activities/family_find_relative/ActivityInfo.qml b/src/activities/family_find_relative/ActivityInfo.qml --- a/src/activities/family_find_relative/ActivityInfo.qml +++ b/src/activities/family_find_relative/ActivityInfo.qml @@ -37,6 +37,6 @@ "The circles are linked with lines to mark the relations. Married couples are marked with a ring on the link.\n" + "Click on a pair of family members which corresponds to the given relation.") credit: "" - section: "discovery" + section: "sciences history" createdInVersion: 9000 } diff --git a/src/activities/fifteen/ActivityInfo.qml b/src/activities/fifteen/ActivityInfo.qml --- a/src/activities/fifteen/ActivityInfo.qml +++ b/src/activities/fifteen/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click or drag on any pieces that has a free block beside it, and it will be swapped with the empty one.") credit: "" - section: "puzzle" + section: "discovery logic" createdInVersion: 0 } diff --git a/src/activities/find_the_day/ActivityInfo.qml b/src/activities/find_the_day/ActivityInfo.qml --- a/src/activities/find_the_day/ActivityInfo.qml +++ b/src/activities/find_the_day/ActivityInfo.qml @@ -35,6 +35,7 @@ //: Help manual manual: qsTr("Read the instructions and perform the requested calculation to find a date. Then select this date on the calendar.") credit: "" - section: "discovery" + section: "math measures" createdInVersion: 9000 + levels: "1,2,3" } diff --git a/src/activities/find_the_day/FindTheDay.qml b/src/activities/find_the_day/FindTheDay.qml --- a/src/activities/find_the_day/FindTheDay.qml +++ b/src/activities/find_the_day/FindTheDay.qml @@ -22,8 +22,9 @@ import "../calendar" import "find_the_day_dataset.js" as Dataset +import "tutorial_instructions.js" as Instructions Calendar { dataset: Dataset - + tutorialInstructions: Instructions.get() } diff --git a/src/activities/find_the_day/resource/1/Data.qml b/src/activities/find_the_day/resource/1/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/find_the_day/resource/1/Data.qml @@ -0,0 +1,142 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +/* +Contains the questions, answers and calendar configurations of every level. +Add more levels by inserting questions and answers below. +Days of weeks are indexed from 0 i.e (Sunday = 0, Monday = 1, Tuesday = 2, .... ..... .... , Saturday = 6) +Months of year are indexed from 0 i.e (January = 0, February = 1, March = 2, .... ..... ...., December = 11) +If questions are provided explicitly field questionAnswers contains an array of questions and answers and +if they are not provided, then questionAnswers field contains parameter length signifying the number of questions, and optional +parameter maxOffset for questions where the user has to find date some days ahead of the given date. +[ + //MODES + // findMonthOnly --> For questions based on finding month only. + // findYearMonthDay --> For questions based on finding year, month and day. + // findDayOfWeek --> For questions based on finding day of week only. + // findDay --> For questions based on finding day of a given month and year. + ] +*/ + +Dataset { + objective: qsTr("Find the date less than one month away") + difficulty: 4 + data: [ + + { + "navigationBarVisible": true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-01-31", + "visibleMonth": 0, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + } + }, + { + "navigationBarVisible": true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5 + } + }, + { + "navigationBarVisible": true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-03-31", + "visibleMonth": 1, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 10 + } + }, + { + "navigationBarVisible": true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-03-31", + "visibleMonth": 1, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 20 + } + }, + { + "navigationBarVisible": true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-12-31", + "visibleMonth": 7, + "visibleYear": 2018, + "mode": "findDayOfWeek", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Find day of week 3 days after December 5."), + "answer": {"dayOfWeek": 6} + }, + { + "question": qsTr("Find day of week 12 days before November 12."), + "answer": {"dayOfWeek": 3} + }, + { + "question": qsTr("Find day of week 32 days after January 5."), + "answer": {"dayOfWeek": 2} + }, + { + "question": qsTr("Find day of week 5 days after February 23."), + "answer": {"dayOfWeek": 3} + }, + { + "question": qsTr("Find day of week 17 days before August 16."), + "answer": {"dayOfWeek": 1} + } + ] + }, + { + "navigationBarVisible": true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-05-31", + "visibleMonth": 1, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 30 + } + } + ] +} diff --git a/src/activities/find_the_day/resource/2/Data.qml b/src/activities/find_the_day/resource/2/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/find_the_day/resource/2/Data.qml @@ -0,0 +1,129 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +/* +Contains the questions, answers and calendar configurations of every level. +Add more levels by inserting questions and answers below. +Days of weeks are indexed from 0 i.e (Sunday = 0, Monday = 1, Tuesday = 2, .... ..... .... , Saturday = 6) +Months of year are indexed from 0 i.e (January = 0, February = 1, March = 2, .... ..... ...., December = 11) +If questions are provided explicitly field questionAnswers contains an array of questions and answers and +if they are not provided, then questionAnswers field contains parameter length signifying the number of questions, and optional +parameter maxOffset for questions where the user has to find date some days ahead of the given date. +[ + //MODES + // findMonthOnly --> For questions based on finding month only. + // findYearMonthDay --> For questions based on finding year, month and day. + // findDayOfWeek --> For questions based on finding day of week only. + // findDay --> For questions based on finding day of a given month and year. + ] +*/ + +Dataset { + objective: qsTr("Find the date less than two month away") + difficulty: 5 + data: [ + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-03-31", + "visibleMonth": 1, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 30 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 45 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 60 + } + }, + { + "navigationBarVisible": true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-12-31", + "visibleMonth": 7, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Find the date 2 weeks and 3 days after January 12."), + "answer": {"year": 2018, "month": 0, "day": 29} + }, + { + "question": qsTr("Find the date 3 weeks and 2 days after March 22."), + "answer": {"year": 2018, "month": 3, "day": 14} + }, + { + "question": qsTr("Find the date 5 weeks and 6 days after October 5."), + "answer": {"year": 2018, "month": 10, "day": 15} + }, + { + "question": qsTr("Find the date 1 week and 1 day before August 8."), + "answer": {"year": 2018, "month": 6, "day": 31} + }, + { + "question": qsTr("Find the date 2 weeks and 5 days before July 2."), + "answer": {"year": 2018, "month": 5, "day": 13} + } + ] + } + ] +} diff --git a/src/activities/find_the_day/resource/3/Data.qml b/src/activities/find_the_day/resource/3/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/find_the_day/resource/3/Data.qml @@ -0,0 +1,147 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +/* +Contains the questions, answers and calendar configurations of every level. +Add more levels by inserting questions and answers below. +Days of weeks are indexed from 0 i.e (Sunday = 0, Monday = 1, Tuesday = 2, .... ..... .... , Saturday = 6) +Months of year are indexed from 0 i.e (January = 0, February = 1, March = 2, .... ..... ...., December = 11) +If questions are provided explicitly field questionAnswers contains an array of questions and answers and +if they are not provided, then questionAnswers field contains parameter length signifying the number of questions, and optional +parameter maxOffset for questions where the user has to find date some days ahead of the given date. +[ + //MODES + // findMonthOnly --> For questions based on finding month only. + // findYearMonthDay --> For questions based on finding year, month and day. + // findDayOfWeek --> For questions based on finding day of week only. + // findDay --> For questions based on finding day of a given month and year. + ] +*/ + +Dataset { + objective: qsTr("Find the date several months away") + difficulty: 6 + data: [ + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-12-31", + "visibleMonth": 0, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 60 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2019-12-31", + "visibleMonth": 10, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": false, + "questionAnswers": { + "length": 5, + "maxOffset": 90 + } + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-12-31", + "visibleMonth": 7, + "visibleYear": 2018, + "mode": "findDayOfWeek", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Find day of week 5 months and 2 days after July 3."), + "answer": {"dayOfWeek": 3} + }, + { + "question": qsTr("Find day of week 2 months and 4 days after October 8."), + "answer": {"dayOfWeek": 3} + }, + { + "question": qsTr("Find day of week 1 month and 3 days before December 28."), + "answer": {"dayOfWeek": 0} + }, + { + "question": qsTr("Find day of week 8 months and 7 days after February 28."), + "answer": {"dayOfWeek": 0} + }, + { + "question": qsTr("Find day of week 3 months and 3 days before September 15."), + "answer": {"dayOfWeek": 2} + } + ] + }, + { + "navigationBarVisible" : true, + "minimumDate": "2018-01-01", + "maximumDate": "2018-12-31", + "visibleMonth": 7, + "visibleYear": 2018, + "mode": "findYearMonthDay", + "questionsExplicitlyGiven": true, + "questionAnswers": [ + { + "question": qsTr("Find the date 2 months, 1 week and 5 days after January 12."), + "answer": {"year": 2018, "month": 2, "day": 24} + }, + { + "question": qsTr("Find the date 3 months, 2 weeks and 1 day after August 23."), + "answer": {"year": 2018, "month": 11, "day": 8} + }, + { + "question": qsTr("Find the date 5 months, 3 weeks and 2 days after March 20."), + "answer": {"year": 2018, "month": 8, "day": 12} + }, + { + "question": qsTr("Find the date 1 month 1 week and 1 day before September 10."), + "answer": {"year": 2018, "month": 7, "day": 2} + }, + { + "question": qsTr("Find the date 2 months, 1 week and 8 days before April 7."), + "answer": {"year": 2018, "month": 0, "day": 23} + } + ] + } + ] +} diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/find_the_day/resource/Tutorial1.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/find_the_day/resource/Tutorial1.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/find_the_day/resource/Tutorial1.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial1.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,11 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("We add 5 to the current date, which gives us the new date 20, and since December has 31 days and the new date is less than that. So the answer will be 20 December 2018.") } + diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/find_the_day/resource/Tutorial2.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/find_the_day/resource/Tutorial2.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/find_the_day/resource/Tutorial2.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial2.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,10 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("Since July has 31 days, out of 20 the first 7 days will change the month from July to August. Now we have to add the remaining 20 - 7 = 14 days to 1 August 2018 which will make the final date equal to 14 August 2018") } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/find_the_day/resource/Tutorial3.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/find_the_day/resource/Tutorial3.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/find_the_day/resource/Tutorial3.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial3.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,13 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("Select the correct option") + firstNumber: qsTr("16") + secondNumber: qsTr("14") + answer: 16 } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/find_the_day/resource/Tutorial4.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/find_the_day/resource/Tutorial4.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/find_the_day/resource/Tutorial4.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial4.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Akshay Kumar * * Authors: - * Bruno Coudoin + * Akshay Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +19,13 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +import "../../../core" -Algebra { - onStart: { - operand.text = "+" - } +TutorialBase { + questionText: qsTr("Select the correct option") + firstNumber: qsTr("18") + secondNumber: qsTr("13") + answer: 13 } diff --git a/src/activities/find_the_day/resource/TutorialBase.qml b/src/activities/find_the_day/resource/TutorialBase.qml new file mode 100644 --- /dev/null +++ b/src/activities/find_the_day/resource/TutorialBase.qml @@ -0,0 +1,126 @@ +/* GCompris - TutorialBase.qml + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import "../../../core" + +Rectangle { + id: tutorialRectangle + anchors.fill: parent + color: "#80FFFFFF" + property alias firstNumber: firstNumber.textLabel + property alias secondNumber: secondNumber.textLabel + property alias questionText: question.text + property int answer + + GCText { + id: question + fontSizeMode: Text.Fit + fontSize: mediumSize + anchors.left: tutorialRectangle.left + anchors.leftMargin: parent.height * 0.01 + color: "black" + horizontalAlignment: Text.AlignLeft + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } + + AnswerButton { + id: firstNumber + visible: answer + textLabel: "" + anchors { + top: parent.top + topMargin: parent.height * 0.3 + left: parent.left + leftMargin: parent.width * 0.2 + } + width: parent.width * 0.2 + height: parent.height * 0.4 + isCorrectAnswer: Number(textLabel) === tutorialRectangle.answer + onPressed: { + if(isCorrectAnswer) { + message.text = qsTr("Great") + message.visible = true + messageRectangle.visible = true + } + } + } + + AnswerButton { + id: secondNumber + textLabel: "" + visible: answer + anchors { + top: parent.top + topMargin: parent.height * 0.3 + left: parent.left + leftMargin: parent.width * 0.65 + } + width: parent.width * 0.2 + height: parent.height * 0.4 + isCorrectAnswer: Number(textLabel) === tutorialRectangle.answer + onPressed: { + if(isCorrectAnswer) { + message.text = qsTr("Great") + message.visible = true + messageRectangle.visible = true + } + } + + } + + Rectangle { + id: messageRectangle + anchors { + horizontalCenter: parent.horizontalCenter + top: parent.top + topMargin: parent.height * 0.75 + } + opacity: 0.8 + radius: 10 + border.width: 6 + color: "white" + border.color: "#87A6DD" + width: parent.width * 1.15 + height: parent.height * 0.4 + visible: false + + GCText { + id: message + anchors { + centerIn: parent + margins: parent.border.width+1 + } + text: "" + fontSizeMode: Text.Fit + fontSize: smallSize + color: "black" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } + } +} diff --git a/src/activities/find_the_day/tutorial_instructions.js b/src/activities/find_the_day/tutorial_instructions.js new file mode 100644 --- /dev/null +++ b/src/activities/find_the_day/tutorial_instructions.js @@ -0,0 +1,45 @@ +/* GCompris - tutorial_instructions.js + * + * Copyright (C) 2019 Akshay Kumar + * + * Authors: + * Akshay Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +function get() { + return [ + { + "instruction": qsTr("This activity teaches students to find the exact date."), + "instructionQml": "" + }, + { + "instruction": qsTr("For example if today is 15 December 2019, find the date 5 days after today,"), + "instructionQml": "qrc:/gcompris/src/activities/find_the_day/resource/Tutorial1.qml" + }, + { + "instruction": qsTr("What will be the date 20 days after 25 July 2018"), + "instructionQml" : "qrc:/gcompris/src/activities/find_the_day/resource/Tutorial2.qml" + }, + { + "instruction": qsTr("What will be the date 5 days after 11 August 2018."), + "instructionQml" : "qrc:/gcompris/src/activities/find_the_day/resource/Tutorial3.qml" + }, + { + "instruction": qsTr("What will be the date 25 days after 18 April 2018."), + "instructionQml": "qrc:/gcompris/src/activities/find_the_day/resource/Tutorial4.qml" + } + ] +} diff --git a/src/activities/geo-country/ActivityInfo.qml b/src/activities/geo-country/ActivityInfo.qml --- a/src/activities/geo-country/ActivityInfo.qml +++ b/src/activities/geo-country/ActivityInfo.qml @@ -39,6 +39,6 @@ //: Help manual manual: qsTr("Drag and drop different regions of the country to correct locations to redraw the whole country.") credit: "" - section: "discovery" + section: "sciences geography" createdInVersion: 4000 } diff --git a/src/activities/geography/ActivityInfo.qml b/src/activities/geography/ActivityInfo.qml --- a/src/activities/geography/ActivityInfo.qml +++ b/src/activities/geography/ActivityInfo.qml @@ -39,6 +39,6 @@ //: Help manual manual: qsTr("Drag and drop the map pieces to correct locations to redraw the whole map.") credit: "" - section: "discovery" + section: "sciences geography" createdInVersion: 4000 } diff --git a/src/activities/gletters/ActivityInfo.qml b/src/activities/gletters/ActivityInfo.qml --- a/src/activities/gletters/ActivityInfo.qml +++ b/src/activities/gletters/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Type the falling letters before they reach the ground") credit: "" - section: "computer keyboard reading" + section: "computer keyboard reading letters" createdInVersion: 0 } diff --git a/src/activities/gletters/resource/default-ml.json b/src/activities/gletters/resource/default-ml.json new file mode 100644 --- /dev/null +++ b/src/activities/gletters/resource/default-ml.json @@ -0,0 +1,256 @@ +{ + "levels" : [ + { + "level" : "1", + "words" : [ + "അ", + "ആ", + "ഇ", + "ഈ", + "ഉ", + "ഊ", + "ഋ" + ] + }, + { + "level" : "2", + "words" : [ + "എ", + "ഏ", + "ഐ", + "ഒ", + "ഓ", + "ഔ", + "അം", + "അഃ" + ] + }, + { + "level" : "3", + "words" : [ + "അ", + "ആ", + "ഇ", + "ഈ", + "ഉ", + "ഊ", + "ഋ", + "എ", + "ഏ", + "ഐ", + "ഒ", + "ഓ", + "ഔ", + "അം", + "അഃ" + ] + }, + { + "level" : "4", + "words" : [ + "ക", + "ഖ", + "ഗ", + "ഘ", + "ങ", + "ച", + "ഛ", + "ജ", + "ഝ", + "ഞ", + "ട", + "ഠ", + "ഡ", + "ഢ", + "ണ" + ] + }, + { + "level" : "5", + "words" : [ + "ട", + "ഠ", + "ഡ", + "ഢ", + "ണ", + "ത", + "ഥ", + "ദ", + "ധ", + "ന", + "പ", + "ഫ", + "ബ", + "ഭ", + "മ" + ] + }, + { + "level" : "6", + "words" : [ + "പ", + "ഫ", + "ബ", + "ഭ", + "മ", + "യ", + "ര", + "ല", + "വ", + "ശ", + "ഷ", + "സ", + "ഹ", + "ള", + "ഴ", + "റ" + ] + }, + { + "level" : "7", + "words" : [ + "യ", + "ര", + "ല", + "വ", + "ശ", + "ഷ", + "സ", + "ഹ", + "ള", + "ഴ", + "റ", + "ൻ", + "ൾ", + "ർ", + "ൺ", + "ൽ" + ] + }, + { + "level" : "8", + "words" : [ + "ക", + "ഖ", + "ഗ", + "ഘ", + "ങ", + "ച", + "ഛ", + "ജ", + "ഝ", + "ഞ", + "ട", + "ഠ", + "ഡ", + "ഢ", + "ണ", + "ത", + "ഥ", + "ദ", + "ധ", + "ന", + "പ", + "ഫ", + "ബ", + "ഭ", + "മ", + "യ", + "ര", + "ല", + "വ", + "ശ", + "ഷ", + "സ", + "ഹ", + "ള", + "ഴ", + "റ", + "ൻ", + "ൾ", + "ർ", + "ൺ", + "ൽ" + ] + }, + { + "level" : "9", + "words" : [ + "അ", + "ആ", + "ഇ", + "ഈ", + "ഉ", + "ഊ", + "ഋ", + "എ", + "ഏ", + "ഐ", + "ഒ", + "ഓ", + "ഔ", + "അം", + "അഃ", + "ക", + "ഖ", + "ഗ", + "ഘ", + "ങ", + "ച", + "ഛ", + "ജ", + "ഝ", + "ഞ", + "ട", + "ഠ", + "ഡ", + "ഢ", + "ണ", + "ത", + "ഥ", + "ദ", + "ധ", + "ന", + "പ", + "ഫ", + "ബ", + "ഭ", + "മ", + "യ", + "ര", + "ല", + "വ", + "ശ", + "ഷ", + "സ", + "ഹ", + "ള", + "ഴ", + "റ", + "ൻ", + "ൾ", + "ർ", + "ൺ", + "ൽ" + ] + }, + { + "level" : "10", + "words" : [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "0" + ] + } + ], + "name" : "default-ml", + "locale" : "ml", + "description" : "Malayalam" +} diff --git a/src/activities/gnumch-equality/ActivityInfo.qml b/src/activities/gnumch-equality/ActivityInfo.qml --- a/src/activities/gnumch-equality/ActivityInfo.qml +++ b/src/activities/gnumch-equality/ActivityInfo.qml @@ -39,6 +39,6 @@ "

    " + qsTr("Take care to avoid the Troggles.") credit: "" - section: "math" + section: "math arithmetic" createdInVersion: 0 } diff --git a/src/activities/gnumch-factors/ActivityInfo.qml b/src/activities/gnumch-factors/ActivityInfo.qml --- a/src/activities/gnumch-factors/ActivityInfo.qml +++ b/src/activities/gnumch-factors/ActivityInfo.qml @@ -17,7 +17,6 @@ */ import GCompris 1.0 -// Must be updated once GnumchEquality is reviewed ActivityInfo { name: "gnumch-factors/GnumchFactors.qml" difficulty: 5 @@ -40,6 +39,6 @@ "

    " + qsTr("Take care to avoid the Troggles.") credit: "" - section: "math" + section: "math arithmetic" createdInVersion: 0 } diff --git a/src/activities/gnumch-inequality/ActivityInfo.qml b/src/activities/gnumch-inequality/ActivityInfo.qml --- a/src/activities/gnumch-inequality/ActivityInfo.qml +++ b/src/activities/gnumch-inequality/ActivityInfo.qml @@ -38,6 +38,6 @@ "

    " + qsTr("Take care to avoid the Troggles.") credit: "" - section: "math" + section: "math arithmetic" createdInVersion: 0 } diff --git a/src/activities/gnumch-multiples/ActivityInfo.qml b/src/activities/gnumch-multiples/ActivityInfo.qml --- a/src/activities/gnumch-multiples/ActivityInfo.qml +++ b/src/activities/gnumch-multiples/ActivityInfo.qml @@ -39,6 +39,6 @@ "

    " + qsTr("Take care to avoid the Troggles.") credit: "" - section: "math" + section: "math arithmetic" createdInVersion: 0 } diff --git a/src/activities/gnumch-primes/ActivityInfo.qml b/src/activities/gnumch-primes/ActivityInfo.qml --- a/src/activities/gnumch-primes/ActivityInfo.qml +++ b/src/activities/gnumch-primes/ActivityInfo.qml @@ -17,7 +17,6 @@ */ import GCompris 1.0 -// Must be updated once GnumchEquality is reviewed ActivityInfo { name: "gnumch-primes/GnumchPrimes.qml" difficulty: 6 @@ -40,6 +39,6 @@ "

    " + qsTr("Take care to avoid the Troggles.") credit: "" - section: "math" + section: "math arithmetic" createdInVersion: 0 } diff --git a/src/activities/graph-coloring/ActivityInfo.qml b/src/activities/graph-coloring/ActivityInfo.qml --- a/src/activities/graph-coloring/ActivityInfo.qml +++ b/src/activities/graph-coloring/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: "" credit: "" - section: "math" + section: "discovery logic" createdInVersion: 6000 } diff --git a/src/activities/guesscount/ActivityInfo.qml b/src/activities/guesscount/ActivityInfo.qml --- a/src/activities/guesscount/ActivityInfo.qml +++ b/src/activities/guesscount/ActivityInfo.qml @@ -39,6 +39,6 @@ //: Help manual manual: qsTr("Drag the appropriate numbers and the operators to the boxes to obtain the number to guess in the instruction.") credit: "" - section: "math" + section: "math arithmetic" createdInVersion: 8000 } diff --git a/src/activities/hangman/ActivityInfo.qml b/src/activities/hangman/ActivityInfo.qml --- a/src/activities/hangman/ActivityInfo.qml +++ b/src/activities/hangman/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("You can enter the letters using the virtual keyboard on the screen or with the real keyboard.") credit: "" - section: "keyboard reading" + section: "keyboard reading words" createdInVersion: 5000 } diff --git a/src/activities/hanoi/ActivityInfo.qml b/src/activities/hanoi/ActivityInfo.qml --- a/src/activities/hanoi/ActivityInfo.qml +++ b/src/activities/hanoi/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Drag and Drop one top piece at a time, from one peg to another, to reproduce the tower on the right in the empty space on the left.") credit: qsTr("Concept taken from EPI games.") - section: "puzzle" + section: "discovery logic" createdInVersion: 4000 } diff --git a/src/activities/hanoi_real/ActivityInfo.qml b/src/activities/hanoi_real/ActivityInfo.qml --- a/src/activities/hanoi_real/ActivityInfo.qml +++ b/src/activities/hanoi_real/ActivityInfo.qml @@ -38,6 +38,6 @@ //: Help manual manual: qsTr("Drag and drop the top pieces only from one peg to another, to reproduce the initial left side tower on the right peg.") credit: qsTr("The puzzle was invented by the French mathematician Edouard Lucas in 1883. There is a legend about a Hindu temple whose priests were constantly engaged in moving a set of 64 discs according to the rules of the Tower of Hanoi puzzle. According to the legend, the world would end when the priests finished their work. The puzzle is therefore also known as the Tower of Brahma puzzle. It is not clear whether Lucas invented this legend or was inspired by it. (source Wikipedia: http://en.wikipedia.org/wiki/Tower_of_hanoi)") - section: "puzzle" + section: "discovery logic" createdInVersion: 4000 } diff --git a/src/activities/imagename/ActivityInfo.qml b/src/activities/imagename/ActivityInfo.qml --- a/src/activities/imagename/ActivityInfo.qml +++ b/src/activities/imagename/ActivityInfo.qml @@ -37,6 +37,6 @@ prerequisite: qsTr("Reading") //: Help manual manual: qsTr("Drag each image from the (vertical) box on the left to its (corresponding) name on the right. Click the OK button to check your answer.") - section: "reading" + section: "reading words" createdInVersion: 4000 } diff --git a/src/activities/intro_gravity/ActivityInfo.qml b/src/activities/intro_gravity/ActivityInfo.qml --- a/src/activities/intro_gravity/ActivityInfo.qml +++ b/src/activities/intro_gravity/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Follow the instructions when you run the activity.") credit: "" - section: "experiment" + section: "sciences experiment" createdInVersion: 4000 } diff --git a/src/activities/land_safe/ActivityInfo.qml b/src/activities/land_safe/ActivityInfo.qml --- a/src/activities/land_safe/ActivityInfo.qml +++ b/src/activities/land_safe/ActivityInfo.qml @@ -43,7 +43,7 @@ The landing platform is green if your speed is fine for a safe landing.") credit: "" - section: "experiment" + section: "sciences experiment" enabled: ApplicationInfo.isBox2DInstalled //ApplicationInfo.hasShader createdInVersion: 6000 } diff --git a/src/activities/lang/ActivityInfo.qml b/src/activities/lang/ActivityInfo.qml --- a/src/activities/lang/ActivityInfo.qml +++ b/src/activities/lang/ActivityInfo.qml @@ -43,6 +43,6 @@ + "When done, you are suggested an exercise in which, given the voice, " + "you must find the right word. In the configuration, you can select the language you want to learn.") credit: qsTr("The images and voices come from the Art4Apps project: http://www.art4apps.org/.") - section: "reading" + section: "reading vocabulary" createdInVersion: 5000 } diff --git a/src/activities/lang/resource/content-be.json b/src/activities/lang/resource/content-be.json --- a/src/activities/lang/resource/content-be.json +++ b/src/activities/lang/resource/content-be.json @@ -464,4 +464,4 @@ "wrist.ogg": "запясце", "write.ogg": "пісаць", "zoo.ogg": "заапарк" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-br.json b/src/activities/lang/resource/content-br.json --- a/src/activities/lang/resource/content-br.json +++ b/src/activities/lang/resource/content-br.json @@ -3,7 +3,7 @@ "11.ogg": "unnek", "12.ogg": "daouzek", "16.ogg": "c'hwezek", - "U0030.ogg": "zero", + "U0030.ogg": "mann", "U0031.ogg": "unan", "U0032.ogg": "daou", "U0033.ogg": "tri", @@ -18,33 +18,33 @@ "acorn.ogg": "ur vezenn", "actor.ogg": "un aktour", "air_horn.ogg": "ur c'horn", - "alarmclock.ogg": "ur munuter", + "alarmclock.ogg": "un dihuner", "alligator.ogg": "un aligator", "alphabet.ogg": "ul lizherenneg", "anchor.ogg": "un eor", "angel.ogg": "un ael", "angry.ogg": "kounnaret", - "animal.ogg": "ul loen", + "animal.ogg": "loened ", "ankle.ogg": "an ibil-troad", "ant.ogg": "ur verienenn", "anteater.ogg": "ur merionaer", "antelope.ogg": "un antilopenn", "apple.ogg": "un aval", "apple_tree.ogg": "ur wezenn avaloù", "appliance.ogg": "un ardivink", - "apricot.ogg": "un abrikezenn", + "apricot.ogg": "abrikez", "arm.ogg": "ar vrec'h", "armchair.ogg": "ur gador-vrec'h", - "artichoke.ogg": "un artichaodenn", + "artichoke.ogg": "artichaod", "artist.ogg": "un arzour", - "asparagus.ogg": "un asperjezenn", + "asparagus.ogg": "asperjez", "astronaut.ogg": "un egoraer", "athlete.ogg": "ur sportour", - "avocado.ogg": "un avoukezenn", + "avocado.ogg": "avoukez", "ax.ogg": "ur vouc'hal", "baby_bottle.ogg": "ur vured", "back.ogg": "ar c'hein", - "badge.ogg": "ur badj", + "badge.ogg": "ur vedalenn", "bag.ogg": "ur sac'h", "bait.ogg": "ur vouedenn", "balance.ogg": "ur valañs", @@ -62,7 +62,7 @@ "bathing_suit.ogg": "ur sae gouronkañ", "bay.ogg": "un hugenn", "beach.ogg": "un draezhenn", - "bean.ogg": "ur favenn", + "bean.ogg": "fav", "bear.ogg": "un arzh", "beard.ogg": "ar barv", "beat.ogg": "skeiñ", @@ -78,7 +78,7 @@ "bench.ogg": "ur bank", "bib.ogg": "un divabouzouer", "big.ogg": "bras", - "big_top.ogg": "un uhelenn", + "big_top.ogg": "ur babell", "bike.ogg": "ur velo", "bird.ogg": "un evn", "bit.ogg": "un tamm", @@ -97,7 +97,7 @@ "board.ogg": "ur plankenn", "boat.ogg": "ur vag", "boil.ogg": "birviñ", - "bolt.ogg": "ur prenn", + "bolt.ogg": "ur boulon", "bomb.ogg": "ur vombezenn", "bone.ogg": "un askorn", "book.ogg": "ul levr", @@ -126,7 +126,7 @@ "bud.ogg": "ur vroñsenn", "buffalo.ogg": "ur bizon", "bug.ogg": "un amprevan", - "bulb.ogg": "ur glogorenn", + "bulb.ogg": "ur glogorenn dredan", "bull.ogg": "un tarv", "bump.ogg": "ur bos", "bun.ogg": "bara dous", @@ -137,87 +137,87 @@ "butterfly.ogg": "ur valafenn", "button.ogg": "ur bouton", "cabbage.ogg": "ur gaolenn", - "cabin.ogg": "ur gabinenn", + "cabin.ogg": "ur gabanenn", "cacao.ogg": "kakao", "cactus.ogg": "ur gaktuzenn", "cage.ogg": "ur gaoued", "cake.ogg": "ur wastell", "call.ogg": "gervel", "camel.ogg": "ur c'hañval", - "camera.ogg": "ur c'hamera", + "camera.ogg": "ur poltreder", "camp.ogg": "ar c'hampiñ", - "can.ogg": "ur boubellenn", + "can.ogg": "boestoù-mir", "canary.ogg": "ur c'hanari", "candle.ogg": "ur c'houlaouenn", "candy.ogg": "ur madig", "cane.ogg": "ur vazh-kamm", "canoe.ogg": "ur c'hanoe", "canon.ogg": "ur c'hanol", "canyon.ogg": "ur c'hanion", - "cap.ogg": "ur boned", - "cape.ogg": "ur c'habell", + "cap.ogg": "ur gasketenn", + "cape.ogg": "ur c'hab", "car.ogg": "ur c'harr", "carafe.ogg": "ur garafenn", "card.ogg": "ur gartenn", "carnival.ogg": "ar Meurlarjez", "carpenter.ogg": "ur c'halvez", "carpet.ogg": "un tapis", "carrot.ogg": "ur garotezenn", "cart.ogg": "ur garrigell", - "cash.ogg": "pezhioù moneiz", + "cash.ogg": "arc'hant", "castle.ogg": "ur c'hastell", "cat.ogg": "ur c'hazh", "cat_female.ogg": "ur gazhez", "catch.ogg": "tapout", "caterpillar.ogg": "ur viskoulenn", "cauldron.ogg": "ur chaodouron", "cauliflower.ogg": "ur gaolenn-fleur", - "cave.ogg": "ur c'hav", + "cave.ogg": "ur c'hroc'h", "cavern.ogg": "ur vougev", "celery.ogg": "un achenn", "centipede.ogg": "ur mil-kraban", - "cereal.ogg": "edaj", + "cereal.ogg": "ed", "chain.ogg": "ur chadenn", "chair.ogg": "ur gador", "chalk.ogg": "krei", "chameleon.ogg": "ur c'hameleon", "chandelier.ogg": "ur c'hantoller", "chat.ogg": "flapiñ", "cheek.ogg": "ur jod", - "cheer.ogg": "strakal an daouarn", + "cheer.ogg": "youc'hal", "cheese.ogg": "fourmaj", - "chef.ogg": "ur chef", + "chef.ogg": "ur mestr-keginer", "cherry.ogg": "kerez", "chest.ogg": "ur c'hofr", "chick.ogg": "ur pousin", "chicken.ogg": "ur yarig", "child.ogg": "ur bugel", "chimney.ogg": "ur siminal", "chimp.ogg": "ur chimpanze", - "chin.ogg": "un elgezh", + "chin.ogg": "an elgezh", "chocolate.ogg": "chokolad", "chop.ogg": "troc'hañ", "chores.ogg": "labourioù an ti", "christmas.ogg": "an Nedeleg", "cigar.ogg": "ur segalenn", "circus.ogg": "ur sirk", "city.ogg": "ur gêr", - "clam.ogg": "ur bilorenn", + "clam.ogg": "ur c'hrogen Sant-Jakez", "clap.ogg": "stlakal", "class.ogg": "ur c'hlas", - "claw.ogg": "skilf", + "claw.ogg": "ur skilf", "clay.ogg": "pri", "clean.ogg": "naetaat", "cleaning_lady.ogg": "ur plac'h-ti", - "cliff.ogg": "un tornaod", + "cliff.ogg": "un tarroz", "climb.ogg": "pignat", "clock.ogg": "un horolaj", - "cloth.ogg": "dilhad", - "clothes_hanger.ogg": "ur doug-dilhad", + "cloth.ogg": "gwiad", + "clothes_hanger.ogg": "un doug-dilhad", "cloud.ogg": "ur goumoulenn", "cloudy.ogg": "koumoulek", "clover.ogg": "ur velchonenn", - "clown.ogg": "furlukin", + "clown.ogg": "ur furlukin", "coach.ogg": "ur gourdoner", "coast.ogg": "un aod", "coat.ogg": "ur vantell", @@ -234,20 +234,20 @@ "cook.ogg": "keginañ", "cookie.ogg": "kouign", "cork.ogg": "ur stouv", - "corn.ogg": "ed", + "corn.ogg": "maiz", "couch.ogg": "ur gourvezvank", "cough.ogg": "pasaat", "couple.ogg": "ur c'houblad", "cow.ogg": "ur vuoc'h", "cowboy.ogg": "ur c'howboy", "crab.ogg": "ur c'hrank", "cradle.ogg": "ur gwele-babig", - "craft.ogg": "ur vicher", + "craft.ogg": "labour dorn", "crawl.ogg": "skrampañ", "crazy.ogg": "foll", - "creek.ogg": "un ouf", + "creek.ogg": "ur stêrig", "crepe.ogg": "ur grampouezhenn", - "crib.ogg": "ur c'havell", + "crib.ogg": "kevell", "croak.ogg": "koagal", "crocodile.ogg": "ur c'hrokodil", "cross.ogg": "ur groaz", @@ -258,26 +258,26 @@ "cry.ogg": "leñvañ", "crystal.ogg": "ur strinkenn", "cube.ogg": "ur c'hub", - "cucumber.ogg": "ur gokombrezenn", - "curtain.ogg": "ur rideoz", + "cucumber.ogg": "kokombrez", + "curtain.ogg": "rideozioù", "cut.ogg": "troc'hañ", "cute.ogg": "moutig", "dad.ogg": "un tad", - "daffodil.ogg": "ur foeonenn", + "daffodil.ogg": "roz-kamm", "daisy.ogg": "un tommheolig", "dam.ogg": "ur stankell", "dance.ogg": "dañsal", "dandelion.ogg": "ur c'hwervizon", "dart_board.ogg": "ur c'hoari biroùigoù", - "date_fruit.ogg": "un datezenn", + "date_fruit.ogg": "datez", "deer.ogg": "ur c'harv", "den.ogg": "un douarenn", "desert.ogg": "un dezerzh", "desk.ogg": "ur burev", "dessert.ogg": "un dibenn-pred", "diamond.ogg": "un diamant", "dig.ogg": "kleuziañ", - "dirt.ogg": "loustoni", + "dirt.ogg": "douar", "dirty.ogg": "lous", "dish.ogg": "ur plad", "dishcloth.ogg": "un torch", @@ -299,7 +299,7 @@ "drawer.ogg": "un diretenn", "dream.ogg": "huñvreal", "dress.ogg": "ur sae", - "drink.ogg": "un evaj", + "drink.ogg": "evañ", "drip.ogg": "un dakenn", "drive.ogg": "bleniañ", "drool.ogg": "babouzat", @@ -311,7 +311,7 @@ "dwarf.ogg": "ur c'horr", "eagle.ogg": "un erer", "ear.ogg": "ur skouarn", - "earth.ogg": "douar", + "earth.ogg": "an douar", "eat.ogg": "debriñ", "egg.ogg": "ur vi", "eggplant.ogg": "ur verjinezenn", @@ -337,13 +337,13 @@ "fat.ogg": "tev", "faucet.ogg": "ur c'hog-dour", "fawn.ogg": "ur menn-karv", - "fear.ogg": "un aon", + "fear.ogg": "ar spont", "feast.ogg": "ur fest", "feather.ogg": "ur bluñvenn", "feed.ogg": "magañ", "femur.ogg": "gwerzhid ur vorzhed", "fetch.ogg": "mont da gerc'hat", - "fig.ogg": "ur figezenn", + "fig.ogg": "figez", "fin.ogg": "un angell", "find.ogg": "kavout", "finger.ogg": "ur biz", @@ -355,9 +355,9 @@ "fist.ogg": "un dorn", "flacon.ogg": "ur flask", "flag.ogg": "ur banniel", - "flame.ogg": "flammenn", + "flame.ogg": "ur flammenn", "flamingo.ogg": "ur flammeg", - "flash.ogg": "ur gouloù godell", + "flash.ogg": "un etev tredan", "flat.ogg": "ranntiez", "flies.ogg": "kelien", "float.ogg": "flotañ", @@ -368,31 +368,31 @@ "fly.ogg": "nijal", "foam.ogg": "spoum", "foot.ogg": "un troad", - "forest.ogg": "koadeg", + "forest.ogg": "ur c'hoad", "fork.ogg": "ur fourchetezenn", "fountain.ogg": "ur feunteun", "fox.ogg": "ul louarn", "freeze.ogg": "skornañ", - "friend.ogg": "ur mignon", + "friend.ogg": "mignoned", "fries.ogg": "fritez", "frog.ogg": "ur ran", "front.ogg": "dirak", - "fruit.ogg": "ur frouezhenn", - "fudge.ogg": "ur garamellenn", + "fruit.ogg": "frouezh", + "fudge.ogg": "karamell", "full.ogg": "leun", "fur.ogg": "ur feur", "game.ogg": "ur c'hoari", "garage.ogg": "ur c'harrdi", - "garden.ogg": "liorzh", + "garden.ogg": "ul liorzh", "garlic.ogg": "ur penn-kignen", "gem.ogg": "ur maen-sked", "giant.ogg": "ur ramz", "gift.ogg": "ur prof", "giraffe.ogg": "ur jirafenn", "girl.ogg": "ur plac'h", "glass.ogg": "ur werenn", "glasses.ogg": "ur re lunedoù", - "glove.ogg": "ur vanegenn", + "glove.ogg": "manegoù", "glue.ogg": "peg", "gnome.ogg": "ur c'horrigan", "goat.ogg": "ur c'havr", @@ -403,7 +403,7 @@ "grain.ogg": "greun", "grandmother.ogg": "ur vamm-gozh", "grape.ogg": "rezin", - "grapefruit.ogg": "ur bampelenn", + "grapefruit.ogg": "pampel", "grass.ogg": "geot", "grave.ogg": "ur bez", "gray.ogg": "griz", @@ -417,7 +417,7 @@ "gum.ogg": "gom-chaokat", "hair.ogg": "blev", "hair_dryer.ogg": "ur sec'her-blev", - "half.ogg": "hanter", + "half.ogg": "an hanter", "ham.ogg": "morzhed-hoc'h", "hamburger.ogg": "un hamburger", "hammer.ogg": "ur morzhol", @@ -430,7 +430,7 @@ "hay.ogg": "foenn", "head.ogg": "ur penn", "hear.ogg": "klevout", - "heat.ogg": "ur wrez", + "heat.ogg": "ar wrez", "hedge.ogg": "ur c'harzh", "hedgehog.ogg": "un avalaouer", "heel.ogg": "ur seul", @@ -448,7 +448,7 @@ "hole.ogg": "un toull", "home.ogg": "ar gêr", "hook.ogg": "ur c'hrog", - "hop.ogg": "lammig", + "hop.ogg": "dilammat", "horse.ogg": "ul loen-kezeg", "hose.ogg": "ur gorzenn", "hospital.ogg": "un ospital", @@ -472,32 +472,32 @@ "ink.ogg": "ankr", "island.ogg": "un enezenn", "jacket.ogg": "ur porpant", - "jaguar.ogg": "jagoar", + "jaguar.ogg": "ur jagoar", "jam.ogg": "koñfitur", "jay.ogg": "ur gegin", "jelly.ogg": "kaotigell", "jellyfish.ogg": "ur vorglaouenn", "jewel.ogg": "ur bravig", - "job.ogg": "ur vicher", + "job.ogg": "micherioù", "jockey.ogg": "ur joke", "jog.ogg": "trotadenn", - "joy.ogg": "ur joa", + "joy.ogg": "plijadur", "judge.ogg": "ur barner", "judo.ogg": "judo", - "juggler.ogg": "ur jangler", + "juggler.ogg": "ur janglerez", "juice.ogg": "jug", "jump.ogg": "lammat", "kangaroo.ogg": "ur c'hangourou", - "keel.ogg": "ur c'hein", - "kernel.ogg": "un alamandezenn", + "keel.ogg": "kilhoù", + "kernel.ogg": "un maen", "keyboard.ogg": "ur c'hlavier", "kimono.ogg": "ur c'himono", "king.ogg": "ur roue", "kiss.ogg": "pokat", "kitchen.ogg": "ur gegin", "kite.ogg": "ur sarpant-nij", "kitten.ogg": "ur c'hazhig", - "kiwi.ogg": "ur giwienn", + "kiwi.ogg": "kiwi", "knee.ogg": "ur glin", "kneel.ogg": "daoulinañ", "knife.ogg": "ur gountell", @@ -513,40 +513,40 @@ "lamb.ogg": "un oan", "lamp.ogg": "ul lamp", "land.ogg": "an douar", - "lane.ogg": "un alez", + "lane.ogg": "un hent", "lap.ogg": "ur varlenn", "lasso.ogg": "ul lasso", "laugh.ogg": "c'hoarzhin", "lava.ogg": "maen teuz", "lawn.ogg": "ul letonenn", "lawyer.ogg": "un avokad", - "leaf.ogg": "un delienn", + "leaf.ogg": "delioù", "ledge.ogg": "ur rizenn", "leek.ogg": "ur bourenn", "left.ogg": "kleiz", "leg.ogg": "ur c'har", "lemon.ogg": "ur sitroñs", - "lemonade.ogg": "dour pik-pik", + "lemonade.ogg": "dour-sitroñs", "lemur.ogg": "ul lemur", "leopard.ogg": "ul loupard", "lettuce.ogg": "ur saladenn", - "librarian.ogg": "ul levraoueger", + "librarian.ogg": "ul levraouegerez", "lick.ogg": "lipat", "lid.ogg": "ur golo", "lift.ogg": "sevel", "light.ogg": "ar gouloù", "lighthouse.ogg": "un tour-tan", "lightning.ogg": "ar c'hurun", "lilac.ogg": "ul lireuenn", "lime.ogg": "ur sitroñs glas", - "line.ogg": "ul linenn", + "line.ogg": "linennoù", "link.ogg": "ul liamm", "lion.ogg": "ul leon", "lion_cub.ogg": "ul leonig", - "lip.ogg": "ur vuzell", + "lip.ogg": "muzelloù", "liquid.ogg": "dourennek", "lizard.ogg": "ur glazard", - "lobster.ogg": "ur legestr", + "lobster.ogg": "ul legestr", "log.ogg": "ur geuneudenn", "look.ogg": "sellout", "lunch.ogg": "merenn", @@ -556,32 +556,32 @@ "magnifying_glass.ogg": "ur werenn-greskiñ", "magpie.ogg": "ur big", "mail.ogg": "ul lizher", - "man.ogg": "tud", + "man.ogg": "ur gwaz", "mane.ogg": "ur moue", - "mango.ogg": "ur vangezenn", + "mango.ogg": "mangez", "map.ogg": "ur gartenn", "maple.ogg": "ur skavenn-wrac'h", - "marble.ogg": "ur ganetenn", + "marble.ogg": "kanetennoù", "mashed_potatoes.ogg": "yod patatez", "mask.ogg": "ur maskl", "mast.ogg": "ur wern", "mat.ogg": "un tamm tapis", - "match.ogg": "ur c'hrogad", + "match.ogg": "alumetez", "mate.ogg": "ur c'hamalad", "mattress.ogg": "ur vatarasenn", "mauve.ogg": "limestra", - "meal.ogg": "pred", + "meal.ogg": "ur pred", "meat.ogg": "kig", "mechanic.ogg": "ur mekaniker", "medal.ogg": "ur vedalenn", "meet.ogg": "kejañ", - "melon.ogg": "ur meloñs", + "melon.ogg": "meloñs", "merry-go-round.ogg": "ur manej", "mice.ogg": "logod", "microphone.ogg": "ur mikrofon", "milk.ogg": "laezh", "mill.ogg": "ur vilin", - "mimosa.ogg": "ur wezenn-vimoza", + "mimosa.ogg": "mimoza", "mirror.ogg": "ur melezour", "mixer.ogg": "ur frikerez", "mole.ogg": "ur c'hoz", @@ -601,9 +601,9 @@ "mud.ogg": "fank", "mug.ogg": "un tas bras", "mule.ogg": "ur vulez", - "muscle.ogg": "ur c'higenn", + "muscle.ogg": "kigennoù", "mushroom.ogg": "ur c'habell-touseg", - "music.ogg": "ur sonerezh", + "music.ogg": "sonerezh", "musician.ogg": "ur soner", "naked.ogg": "noazh", "nap.ogg": "morgousket", @@ -619,15 +619,15 @@ "nose.ogg": "ur fri", "nostril.ogg": "ur fronell", "notebook.ogg": "ur c'harned", - "number.ogg": "un niver", + "number.ogg": "niveroù", "nun.ogg": "ur seurez", "nurse.ogg": "ur glañvdiourez", "nurse_male.ogg": "ur c'hlañvdiour", - "nut.ogg": "ur graoñenn", - "oar.ogg": "ur roeñv", + "nut.ogg": "kakaouetez", + "oar.ogg": "roeñvioù", "ocean.ogg": "ur meurvor", "office.ogg": "un ofis", - "olive.ogg": "un olivezenn", + "olive.ogg": "olivez", "on.ogg": "war", "onion.ogg": "ur penn-ognon", "open.ogg": "digor", @@ -642,28 +642,28 @@ "oyster.ogg": "un istrenn", "pacifier.ogg": "ur chutenn", "page.ogg": "ur bajenn", - "pair.ogg": "ur c'houblad", + "pair.ogg": "ur re", "pajamas.ogg": "ur pijama", "pal.ogg": "ur c'homper", "palm_tree.ogg": "ur wezenn-balm", "pan.ogg": "ur baelon", "panda.ogg": "ur panda", "panther.ogg": "ur banterenn", - "panties.ogg": "ur slip", + "panties.ogg": "brageier dindan", "pants.ogg": "ur re vragoù", - "papaya.ogg": "ur bapaiezenn", + "papaya.ogg": "bapaiez", "paper.ogg": "paper", "parachute.ogg": "un harz-lamm", "parakeet.ogg": "ur c'hrakperoked", "parrot.ogg": "ur peroked", "patch.ogg": "un dres", "path.ogg": "ur wenojenn", "paw.ogg": "ur pav", - "pea.ogg": "ur bizenn", - "peach.ogg": "ur bechenn", + "pea.ogg": "piz", + "peach.ogg": "pechez", "peacock.ogg": "ur paun", "peak.ogg": "ur c'hrec'h", - "pear.ogg": "ur berenn", + "pear.ogg": "per", "pearl.ogg": "ur berlezenn", "peck.ogg": "beketa", "pedal.ogg": "ur bedalenn", @@ -674,15 +674,15 @@ "people.ogg": "tud", "pepper.ogg": "pepr", "peppers.ogg": "pebr-Spagn", - "pet.ogg": "ul loen-ti", + "pet.ogg": "loened-ti", "petal.ogg": "ur betalenn", "phone.ogg": "ur pellgomzer", "piano.ogg": "ur piano", - "picture.ogg": "ur skeudenn", + "picture.ogg": "un daolenn", "pie.ogg": "un dartezenn", "pig.ogg": "ur pemoc'h", "pigeon.ogg": "ur pichon", - "pill.ogg": "ur bilulenn", + "pill.ogg": "pilulennoù", "pillow.ogg": "ur goubenner", "pilot.ogg": "un nijer", "pine.ogg": "ur wezenn-bin", @@ -695,27 +695,27 @@ "pizza.ogg": "ur pizza", "plane.ogg": "ur c'harr-nij", "planet.ogg": "ur blanedenn", - "plant.ogg": "ur blantenn", + "plant.ogg": "plant", "plate.ogg": "un asied", "play.ogg": "c'hoari", "pliers.ogg": "piñsetoù", "plow.ogg": "arat", - "plum.ogg": "ur brunenn", + "plum.ogg": "prun", "plumber.ogg": "ur plomer", "pocket.ogg": "ur c'hodell", - "pod.ogg": "ur glorenn", + "pod.ogg": "klorennoù", "pole.ogg": "ur peul", "police.ogg": "un archer", - "pompon.ogg": "ur bichourell", + "pompon.ogg": "pichourelloù", "pond.ogg": "ur poull-dour", "pony.ogg": "ur pone", - "pool.ogg": "ur poull", + "pool.ogg": "ur poull-dour", "popcorn.ogg": "popkorn", "pope.ogg": "ur pab", "porthole.ogg": "ul lomber", - "post.ogg": "un ti-post", + "post.ogg": "boest al lizhiri", "pot.ogg": "ur pod", - "potato.ogg": "ur batatezenn", + "potato.ogg": "patatez", "pounce.ogg": "lammat", "president.ogg": "ur prezidant", "pretty.ogg": "koant", @@ -744,7 +744,7 @@ "radish.ogg": "un irvinenn ruz", "raft.ogg": "ur radell", "rag.ogg": "ur bilhenn", - "rage.ogg": "ur gounnar", + "rage.ogg": "ar gounnar", "rain.ogg": "glav", "raincoat.ogg": "ur vantell c'hlav", "rake.ogg": "ur rastell", @@ -758,7 +758,7 @@ "reptile.ogg": "ur stlejvil", "rhinoceros.ogg": "ur frikorneg", "rice.ogg": "riz", - "ride.ogg": "mont war varc'h", + "ride.ogg": "mont war velo", "rifle.ogg": "ur fuzuilh", "right.ogg": "dehoù", "rip.ogg": "regiñ", @@ -783,7 +783,7 @@ "run.ogg": "redek", "sad.ogg": "trist", "saddle.ogg": "un dibr", - "sail.ogg": "ur ouel", + "sail.ogg": "bageal", "sailor.ogg": "ur martolod", "salamander.ogg": "ur sourd", "salmon.ogg": "un eog", @@ -810,9 +810,9 @@ "sea.ogg": "ar mor", "seat.ogg": "ur sez", "see.ogg": "gwelout", - "seed.ogg": "un hadenn", + "seed.ogg": "had", "shadow.ogg": "ur skeud", - "shake.ogg": "krenañ", + "shake.ogg": "hejañ", "shark.ogg": "ur rinkin", "shave.ogg": "aotennañ", "shed.ogg": "ur c'houdorenn", @@ -826,36 +826,36 @@ "shop.ogg": "ur stal", "shore.ogg": "un aod", "short.ogg": "ur re vragoù berr", - "shovel.ogg": "ur bal", + "shovel.ogg": "ur balig", "shower.ogg": "ur strinkerez", "shrimp.ogg": "ur chevrenn", "shrub.ogg": "ur vrousgwezenn", "shut.ogg": "serret", - "shutter.ogg": "ur stalaf", + "shutter.ogg": "stalafioù", "sick.ogg": "klañv", "sidewalk.ogg": "ur riblenn", - "sign.ogg": "ur skritell", + "sign.ogg": "skritelloù", "sing.ogg": "kanañ", "sink.ogg": "un dar", "sip.ogg": "lapat", "sister.ogg": "ur c'hoar", "sit.ogg": "azezañ", - "skate.ogg": "plankenn-ruilh", + "skate.ogg": "ur plankenn-ruilh", "skeleton.ogg": "un eskeled", "ski.ogg": "ski", "skimmer.ogg": "ul loa-sil", - "skin.ogg": "ur c'hroc'hen", + "skin.ogg": "ar c'hroc'hen", "skirt.ogg": "ur vrozh", "skunk.ogg": "ur pudask", "sky.ogg": "an oabl", - "slam.ogg": "stlakal", + "slam.ogg": "kas er baner", "sled.ogg": "ul luj", "sleep.ogg": "kousket", "sleeve.ogg": "ur milgin", "sleigh.ogg": "ur stlejell", - "slide.ogg": "un diapozitiv", + "slide.ogg": "ur ruz-revr", "slim.ogg": "moan", - "slime.ogg": "ul lec'hid", + "slime.ogg": "glaour", "slippers.ogg": "kofignonoù", "slope.ogg": "un diribin", "sloppy.ogg": "digempenn ", @@ -879,68 +879,68 @@ "sock.ogg": "ul loer", "soldier.ogg": "ur soudard", "sole.ogg": "ul leizenn", - "sole_shoe.ogg": "ur sol-votez", + "sole_shoe.ogg": "solioù-botez", "son.ogg": "ur mab", "soup.ogg": "soubenn", - "spade.ogg": "ur rañv", + "spade.ogg": "ur bal", "spaghetti.ogg": "spageti", "spark.ogg": "ur fulenn", "sparrow.ogg": "ur golvan", "spatula.ogg": "ur spanell", "speak.ogg": "komz", "spear.ogg": "ur goaf", - "spice.ogg": "spis", + "spice.ogg": "spisoù", "spider.ogg": "ur gevnidenn", "spider_web.ogg": "ur gwiad-kevnid", "spike.ogg": "un draen", "spill.ogg": "fuilhañ", - "spinach.ogg": "ur binochezenn", + "spinach.ogg": "pinochez", "spine.ogg": "ul livenn-gein", "spinning_top.ogg": "un toumpi", "splash.ogg": "strinkañ", - "splatter.ogg": "strinkañ", + "splatter.ogg": "ur strinkadenn", "sponge.ogg": "ur spoueenn", "spool.ogg": "ur ganell", "spoon.ogg": "ul loa", "sport.ogg": "sport", - "spot.ogg": "ur saotr", - "spray.ogg": "glizhenniñ", - "spread.ogg": "skignañ", + "spot.ogg": "pikoù", + "spray.ogg": "flistrañ", + "spread.ogg": "ledañ", "spring.ogg": "lammat", "spring_season.ogg": "an nevez-amzer", "sprinkle.ogg": "poultrenniñ", - "square.ogg": "ur c'harrez", - "squash.ogg": "ur potiron", + "square.ogg": "karrez", + "squash.ogg": "koulourdrez", "squat.ogg": "kluchañ", "squid.ogg": "ur stivelleg", "squirrel.ogg": "ur razh-koad", - "squirt.ogg": "ur flistradenn", + "squirt.ogg": "ur flistrer", "stack.ogg": "ur bern", "stage.ogg": "ul leurenn", "staircase.ogg": "derezioù", "stamp.ogg": "un timbr", - "stand.ogg": "ur stand", + "stand.ogg": "chom a-sav", "star.ogg": "ur steredenn", "stare.ogg": "parañ e selloù", "starfish.ogg": "ur steredenn-vor", - "steam.ogg": "ur c'hlizhenn", + "steam.ogg": "an aezhenn", "steep.ogg": "sonn", "steeple.ogg": "ur c'hloc'hdi", - "stem.ogg": "ur c'hef ", + "stem.ogg": "ur gorzenn", "step.ogg": "un derez", - "stew.ogg": "ragoud", + "stew.ogg": "ur ragoud", "stick.ogg": "ur vriñsenn", "sting.ogg": "flemmañ", "stinky.ogg": "flaerius", "stitch.ogg": "gwriat", "stomach.ogg": "ur stomok", - "stone.ogg": "ur maen", - "stop.ogg": "paouez", + "stone.ogg": "mein", + "stop.ogg": "herzel", "store.ogg": "ur stal", "stove.ogg": "ur geginerez", "straight.ogg": "eeun", "strainer.ogg": "ur sil", - "straw.ogg": "plouz", + "straw.ogg": "plouzennoù", "strawberry.ogg": "ur sivienn", "stream.ogg": "ur red-dour", "street.ogg": "ur straed", @@ -963,14 +963,14 @@ "swim.ogg": "neuial", "table.ogg": "un daol", "tablecloth.ogg": "ul lienn-daol", - "tadpole.ogg": "ur penndolog", + "tadpole.ogg": "penndologed", "tag.ogg": "un diketenn", "tail.ogg": "ul lost", "tall.ogg": "bras", "tape_measure.ogg": "ur metr-seizenn", "taxi.ogg": "un taksi", "teach.ogg": "kelenn", - "teacher.ogg": "ur c'helenner", + "teacher.ogg": "ur gelennerez", "tear.ogg": "drailhañ", "teddy.ogg": "un nanarzh", "teeth.ogg": "an dent", @@ -991,7 +991,7 @@ "ticket.ogg": "un tiked", "tiger.ogg": "un tigr", "time.ogg": "an amzer", - "tin.ogg": "ur vouest-mir", + "tin.ogg": "ur bok", "tire.ogg": "ur pneu", "tired.ogg": "skuizh", "tissue.ogg": "paper-torch", @@ -1003,26 +1003,26 @@ "tomatoe.ogg": "un domatezenn", "tongs.ogg": "ur wask", "tongue.ogg": "un teod", - "tool.ogg": "ur beñveg", + "tool.ogg": "benvegoù", "top.ogg": "al lein", - "torch.ogg": "un flammerenn", + "torch.ogg": "ur flammerenn", "touch.ogg": "touchañ", "towel.ogg": "ur serviedenn", "toy.ogg": "ur c'hoariell", "trail.ogg": "ur riboul", "train.ogg": "un tren", "train_station.ogg": "ur porzh-houarn", "trap.ogg": "un trap", "trash.ogg": "al lastez", - "tray.ogg": "ur pladenn", - "treat.ogg": "chervad", + "tray.ogg": "ur bladenn", + "treat.ogg": "madigoù", "tree.ogg": "ur wezenn", "triangle.ogg": "un tric'horn", "tribe.ogg": "ur meuriad", "trip.ogg": "ur veaj", "truck.ogg": "ur c'harr-samm", - "tube.ogg": "un duellenn", - "tulip.ogg": "un dulipezenn", + "tube.ogg": "ruz-muzelloù", + "tulip.ogg": "tulipez", "tune.ogg": "un ton", "turkey.ogg": "ur yar indez", "turnip.ogg": "un irvinenn", @@ -1034,20 +1034,20 @@ "under.ogg": "dindan", "uniform.ogg": "ul lifre", "van.ogg": "ur sammorell", - "vapor.ogg": "un aezhenn", + "vapor.ogg": "aezhenn", "vase.ogg": "ul lestr", "vegetable.ogg": "legumaj", - "vein.ogg": "ur wazhienn", + "vein.ogg": "gwazhied", "verdure.ogg": "glasvez", "vest.ogg": "ur chupenn", "vet.ogg": "ur mezeg loened", "viper.ogg": "ur wiber", "vowel.ogg": "ur vogalenn", "vulture.ogg": "ur gup", - "wag.ogg": "meskañ", + "wag.ogg": "fistoulat", "walk.ogg": "bale", "wall.ogg": "ur voger", - "walnut.ogg": "ur graonenn", + "walnut.ogg": "kraoñ", "wart.ogg": "ur wenaenn", "wash.ogg": "gwalc'hiñ", "wasp.ogg": "ur wespedenn", @@ -1068,7 +1068,7 @@ "wife.ogg": "ur wreg", "wig.ogg": "ur berukenn", "win.ogg": "gounit", - "wind.ogg": "an avel", + "wind.ogg": "avel", "window.ogg": "ur prenestr", "window_glass.ogg": "ur werenn-brenestr", "wing.ogg": "un askell", @@ -1079,14 +1079,14 @@ "word.ogg": "ur ger", "worker.ogg": "ul labourer", "world.ogg": "ar bed", - "wreath.ogg": "ur garlantezenn", + "wreath.ogg": "ur gurunenn", "wrench.ogg": "ur gwask", "wrist.ogg": "un arzorn", "write.ogg": "skrivañ", "yellow.ogg": "melen", "yogurt.ogg": "ur yaourt", - "yum.ogg": "nenam", + "yum.ogg": "menam", "zebra.ogg": "ur roudenneg", "zipper.ogg": "ur serr-prim", "zoo.ogg": "ur zoo" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-ca.json b/src/activities/lang/resource/content-ca.json --- a/src/activities/lang/resource/content-ca.json +++ b/src/activities/lang/resource/content-ca.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "cremallera", "zoo.ogg": "zoològic" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-ca@valencia.json b/src/activities/lang/resource/content-ca@valencia.json --- a/src/activities/lang/resource/content-ca@valencia.json +++ b/src/activities/lang/resource/content-ca@valencia.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "cremallera", "zoo.ogg": "zoològic" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-cs.json b/src/activities/lang/resource/content-cs.json deleted file mode 100644 --- a/src/activities/lang/resource/content-cs.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "alphabet.ogg": "abeceda", - "angel.ogg": "anděl" -} \ No newline at end of file diff --git a/src/activities/lang/resource/content-de.json b/src/activities/lang/resource/content-de.json --- a/src/activities/lang/resource/content-de.json +++ b/src/activities/lang/resource/content-de.json @@ -1073,4 +1073,4 @@ "zebra.ogg": "das Zebra", "zipper.ogg": "der Reißverschluss", "zoo.ogg": "der Zoo" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-el.json b/src/activities/lang/resource/content-el.json --- a/src/activities/lang/resource/content-el.json +++ b/src/activities/lang/resource/content-el.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "ζέβρα", "zipper.ogg": "φερμουάρ", "zoo.ogg": "ζωολογικός κήπος" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-en_GB.json b/src/activities/lang/resource/content-en_GB.json --- a/src/activities/lang/resource/content-en_GB.json +++ b/src/activities/lang/resource/content-en_GB.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "zipper", "zoo.ogg": "zoo" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-es.json b/src/activities/lang/resource/content-es.json --- a/src/activities/lang/resource/content-es.json +++ b/src/activities/lang/resource/content-es.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "cebra", "zipper.ogg": "cremallera", "zoo.ogg": "zoológico" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-fr.json b/src/activities/lang/resource/content-fr.json --- a/src/activities/lang/resource/content-fr.json +++ b/src/activities/lang/resource/content-fr.json @@ -1076,4 +1076,4 @@ "zebra.ogg": "un zèbre", "zipper.ogg": "une fermeture éclair", "zoo.ogg": "un zoo" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-ga.json b/src/activities/lang/resource/content-ga.json --- a/src/activities/lang/resource/content-ga.json +++ b/src/activities/lang/resource/content-ga.json @@ -1080,4 +1080,4 @@ "zebra.ogg": "séabra", "zipper.ogg": "zip", "zoo.ogg": "zú" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-gd.json b/src/activities/lang/resource/content-gd.json --- a/src/activities/lang/resource/content-gd.json +++ b/src/activities/lang/resource/content-gd.json @@ -561,4 +561,4 @@ "write.ogg": "a' sgrìobhadh", "yum.ogg": "blasta", "zoo.ogg": "sutha beag" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-gl.json b/src/activities/lang/resource/content-gl.json --- a/src/activities/lang/resource/content-gl.json +++ b/src/activities/lang/resource/content-gl.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "cebra", "zipper.ogg": "cremalleira", "zoo.ogg": "zoo" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-hu.json b/src/activities/lang/resource/content-hu.json --- a/src/activities/lang/resource/content-hu.json +++ b/src/activities/lang/resource/content-hu.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "cipzár", "zoo.ogg": "állatkert" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-id.json b/src/activities/lang/resource/content-id.json --- a/src/activities/lang/resource/content-id.json +++ b/src/activities/lang/resource/content-id.json @@ -558,7 +558,7 @@ "melon.ogg": "melon", "merry-go-round.ogg": "komedi putar", "mice.ogg": "tikus", - "microphone.ogg": "mikropon", + "microphone.ogg": "mikrofon", "milk.ogg": "susu", "mirror.ogg": "cermin", "mixer.ogg": "alat pengaduk listrik", @@ -1049,4 +1049,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "ritsleting", "zoo.ogg": "kebun binatang" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-it.json b/src/activities/lang/resource/content-it.json --- a/src/activities/lang/resource/content-it.json +++ b/src/activities/lang/resource/content-it.json @@ -13,447 +13,1080 @@ "U0037.ogg": "sette", "U0038.ogg": "otto", "U0039.ogg": "nove", - "alligator.ogg": "l'alligatore", - "anchor.ogg": "l'ancora", - "animal.ogg": "gli animali", - "athlete.ogg": "l'atleta", - "back.ogg": "la schiena", - "badge.ogg": "la medaglia", - "bag.ogg": "lo zaino", - "balance.ogg": "la bilancia", - "ball.ogg": "la palla", - "ballet.ogg": "il balletto", - "bank.ogg": "la banca", + "accountant.ogg": "contabile", + "ache.ogg": "dolore", + "acorn.ogg": "ghianda", + "actor.ogg": "attore", + "air_horn.ogg": "tromba", + "alarmclock.ogg": "sveglia", + "alligator.ogg": "alligatore", + "alphabet.ogg": "alfabeto", + "anchor.ogg": "ancora", + "angel.ogg": "angelo", + "angry.ogg": "furiosa", + "animal.ogg": "animale", + "ankle.ogg": "caviglia", + "ant.ogg": "formica", + "anteater.ogg": "formichiere", + "antelope.ogg": "antilope", + "apple.ogg": "mela", + "apple_tree.ogg": "melo", + "appliance.ogg": "elettrodomestico", + "apricot.ogg": "albicocca", + "arm.ogg": "braccio", + "armchair.ogg": "poltrona", + "artichoke.ogg": "carciofo", + "artist.ogg": "artista", + "asparagus.ogg": "asparago", + "astronaut.ogg": "astronauta", + "athlete.ogg": "atleta", + "avocado.ogg": "avocado", + "ax.ogg": "ascia", + "baby_bottle.ogg": "biberon", + "back.ogg": "schiena", + "badge.ogg": "medaglia", + "bag.ogg": "zaino", + "bait.ogg": "esca", + "balance.ogg": "bilancia", + "bald.ogg": "calvo", + "ball.ogg": "palla", + "ball_of_yarn.ogg": "gomitolo", + "ball_soccer.ogg": "pallone da calcio", + "ballet.ogg": "balletto", + "bank.ogg": "banca", + "banker_female.ogg": "bancaria", "bark.ogg": "abbaiare", - "barn.ogg": "il fienile", - "bat.ogg": "il pipistrello", - "bath.ogg": "la vasca da bagno", - "bay.ogg": "la baia", - "beach.ogg": "la spiaggia", - "bed.ogg": "il letto", - "bee.ogg": "l'ape", - "beetle.ogg": "lo scarabeo", + "barn.ogg": "fienile", + "bat.ogg": "pipistrello", + "bath.ogg": "vasca", + "bathing_suit.ogg": "costume", + "bay.ogg": "baia", + "beach.ogg": "spiaggia", + "bean.ogg": "fagioli", + "bear.ogg": "orso", + "beard.ogg": "barba", + "beat.ogg": "picchiare", + "beaver.ogg": "castoro", + "bed.ogg": "letto", + "bedroom.ogg": "stanza da letto", + "bee.ogg": "ape", + "beetle.ogg": "scarabeo", "beg.ogg": "pregare", - "bench.ogg": "la panchina", - "bib.ogg": "il bavaglino", - "bike.ogg": "la bicicletta", - "bird.ogg": "l'uccello", - "bit.ogg": "il bocconcino", + "behind.ogg": "dietro", + "bell.ogg": "campana", + "belly.ogg": "pancia", + "bench.ogg": "panchina", + "bib.ogg": "bavaglino", + "big.ogg": "grande", + "big_top.ogg": "tendone", + "bike.ogg": "bicicletta", + "bird.ogg": "uccello", + "bit.ogg": "morso", "bite.ogg": "mordere", "black.ogg": "nero", - "block.ogg": "il cubo", + "blackberry.ogg": "mora", + "blackbird.ogg": "merlo", + "blade.ogg": "lama", + "blind.ogg": "cieco", + "blink.ogg": "ammiccare", + "block.ogg": "cubo", + "blond.ogg": "biondo", "blue.ogg": "blu", - "board.ogg": "il cartello", - "boat.ogg": "la barca", + "blueberry.ogg": "mirtillo", + "blush.ogg": "arrossita", + "board.ogg": "cartello", + "boat.ogg": "barca", "boil.ogg": "bollire", - "bomb.ogg": "la bomba", - "bone.ogg": "l'osso", - "book.ogg": "il libro", - "box.ogg": "la scatola", - "boy.ogg": "il ragazzo", - "braid.ogg": "la treccia", - "brain.ogg": "il cervello", - "branch.ogg": "il ramo", - "bread.ogg": "il pane", - "brick.ogg": "i mattoni", - "bride.ogg": "la sposa", - "bridge.ogg": "il ponte", - "brother.ogg": "il fratello", + "bolt.ogg": "bullone", + "bomb.ogg": "bomba", + "bone.ogg": "osso", + "book.ogg": "libro", + "bookcase.ogg": "libreria", + "bottom.ogg": "sedere", + "box.ogg": "scatola", + "boxer.ogg": "pugile", + "boy.ogg": "ragazzo", + "braid.ogg": "treccia", + "brain.ogg": "cervello", + "branch.ogg": "ramo", + "bread.ogg": "pane", + "break.ogg": "rompere", + "breast.ogg": "seno", + "brick.ogg": "mattoni", + "bricklayer.ogg": "muratore", + "bride.ogg": "sposa", + "bridge.ogg": "ponte", + "bright.ogg": "luminoso", + "broccoli.ogg": "broccoli", + "brother.ogg": "fratello", "brown.ogg": "marrone", - "brush.ogg": "il pennello", - "bud.ogg": "la gemma", - "bug.ogg": "l'insetto", - "bump.ogg": "il bernoccolo", - "bun.ogg": "il panino", - "bush.ogg": "il cespuglio", - "cage.ogg": "la gabbia", - "cake.ogg": "il dolce", + "brush.ogg": "pennello", + "bubble.ogg": "bolla", + "bucket.ogg": "secchio", + "bud.ogg": "germoglio", + "buffalo.ogg": "bufalo", + "bug.ogg": "insetto", + "bulb.ogg": "lampadina", + "bull.ogg": "toro", + "bump.ogg": "bernoccolo", + "bun.ogg": "panino", + "bus.ogg": "autobus", + "bush.ogg": "cespuglio", + "butcher.ogg": "macellaio", + "butter.ogg": "burro", + "butterfly.ogg": "farfalla", + "button.ogg": "bottone", + "cabbage.ogg": "cavolo", + "cabin.ogg": "baita", + "cacao.ogg": "cacao", + "cactus.ogg": "cactus", + "cage.ogg": "gabbia", + "cake.ogg": "dolce", "call.ogg": "chiamare", - "camel.ogg": "il cammello", - "can.ogg": "i barattoli", - "candle.ogg": "la candela", - "candy.ogg": "la caramella", - "cane.ogg": "il bastone", - "canoe.ogg": "la canoa", - "cap.ogg": "il cappellino", - "cape.ogg": "il mantello", - "car.ogg": "l'automobile", - "card.ogg": "la cartolina", - "carrot.ogg": "la carota", - "cart.ogg": "il carrello", - "cash.ogg": "i soldi", - "castle.ogg": "il castello", - "cat.ogg": "il gatto", + "camel.ogg": "cammello", + "camera.ogg": "fotocamera", + "camp.ogg": "accampamento", + "can.ogg": "barattolo", + "canary.ogg": "canarino", + "candle.ogg": "candela", + "candy.ogg": "caramella", + "cane.ogg": "bastone", + "canoe.ogg": "canoa", + "canon.ogg": "cannone", + "canyon.ogg": "canyon", + "cap.ogg": "cappellino", + "cape.ogg": "cappa", + "car.ogg": "automobile", + "carafe.ogg": "caraffa", + "card.ogg": "cartolina", + "carnival.ogg": "carnevale", + "carpenter.ogg": "carpentiere", + "carpet.ogg": "tappeto", + "carrot.ogg": "carota", + "cart.ogg": "carrello", + "cash.ogg": "soldi", + "castle.ogg": "castello", + "cat.ogg": "gatto", + "cat_female.ogg": "gatta", "catch.ogg": "pescare", - "cave.ogg": "la grotta", - "centipede.ogg": "il centipede", - "chair.ogg": "la sedia", - "chalk.ogg": "il gesso", + "caterpillar.ogg": "bruco", + "cauldron.ogg": "calderone", + "cauliflower.ogg": "cavolfiore", + "cave.ogg": "grotta", + "cavern.ogg": "caverna", + "celery.ogg": "sedano", + "centipede.ogg": "millepiedi", + "cereal.ogg": "cereale", + "chain.ogg": "catena", + "chair.ogg": "sedia", + "chalk.ogg": "gesso", + "chameleon.ogg": "camaleonte", + "chandelier.ogg": "candeliere", "chat.ogg": "bisbigliare", - "cheese.ogg": "il formaggio", - "cherry.ogg": "le ciliegie", - "chest.ogg": "il forziere", - "chick.ogg": "il pulcino", - "chicken.ogg": "la gallina", - "child.ogg": "il bambino", - "chimp.ogg": "la scimmia", - "chin.ogg": "il mento", - "chocolate.ogg": "il cioccolato", + "cheek.ogg": "guancia", + "cheer.ogg": "incitamento", + "cheese.ogg": "formaggio", + "chef.ogg": "cuoco", + "cherry.ogg": "ciliegia", + "chest.ogg": "baule", + "chick.ogg": "pulcino", + "chicken.ogg": "gallina", + "child.ogg": "bambino", + "chimney.ogg": "comignolo", + "chimp.ogg": "scimpanzé", + "chin.ogg": "mento", + "chocolate.ogg": "cioccolato", "chop.ogg": "affettare", - "clam.ogg": "la conchiglia", - "class.ogg": "i compiti", - "claw.ogg": "gli artigli", - "clay.ogg": "l'argilla", - "cliff.ogg": "il burrone", - "clock.ogg": "la sveglia", - "cloth.ogg": "il tessuto", - "cloud.ogg": "la nuvola", - "clown.ogg": "il pagliaccio", - "coach.ogg": "l'allenatrice", - "coat.ogg": "il cappotto", - "coin.ogg": "le monete", - "comb.ogg": "il pettine", + "chores.ogg": "faccende domestiche", + "christmas.ogg": "natale", + "cigar.ogg": "sigaro", + "circus.ogg": "circo", + "city.ogg": "città", + "clam.ogg": "conchiglia", + "clap.ogg": "battere le mani", + "class.ogg": "lezione", + "claw.ogg": "artiglio", + "clay.ogg": "argilla", + "clean.ogg": "pulire", + "cleaning_lady.ogg": "donna delle pulizie", + "cliff.ogg": "burrone", + "climb.ogg": "scalata", + "clock.ogg": "orologio", + "cloth.ogg": "tessuto", + "clothes_hanger.ogg": "gruccia", + "cloud.ogg": "nuvola", + "cloudy.ogg": "nuvoloso", + "clover.ogg": "quadrifoglio", + "clown.ogg": "pagliaccio", + "coach.ogg": "allenatrice", + "coast.ogg": "costa", + "coat.ogg": "cappotto", + "cobra.ogg": "cobra", + "coconut.ogg": "noce di cocco", + "cod.ogg": "merluzzo", + "coffee.ogg": "caffè", + "coin.ogg": "monete", + "cold.ogg": "freddo", + "color.ogg": "colore", + "colt.ogg": "puledro", + "comb.ogg": "pettine", + "cone.ogg": "cono", "cook.ogg": "cucinare", - "cookie.ogg": "i biscotti", - "corn.ogg": "la pannocchia", - "couch.ogg": "il divano", - "cow.ogg": "la mucca", - "cowboy.ogg": "il cowboy", - "crab.ogg": "il granchio", + "cookie.ogg": "biscotto", + "cork.ogg": "tappo", + "corn.ogg": "granturco", + "couch.ogg": "divano", + "cough.ogg": "tossire", + "couple.ogg": "coppia", + "cow.ogg": "mucca", + "cowboy.ogg": "cowboy", + "crab.ogg": "granchio", + "cradle.ogg": "culla", + "craft.ogg": "artigianato", "crawl.ogg": "gattonare", - "crib.ogg": "la culla", + "crazy.ogg": "pazzo", + "creek.ogg": "torrente", + "crepe.ogg": "crespella", + "crib.ogg": "lettino", "croak.ogg": "gracidare", - "crocodile.ogg": "il coccodrillo", - "crow.ogg": "il corvo", - "crown.ogg": "la corona", - "crumb.ogg": "la briciola", - "crust.ogg": "la crosta", + "crocodile.ogg": "coccodrillo", + "cross.ogg": "croce", + "crow.ogg": "corvo", + "crown.ogg": "corona", + "crumb.ogg": "briciola", + "crust.ogg": "crosta", "cry.ogg": "piangere", - "cube.ogg": "il cubo", - "cucumber.ogg": "il cetriolo", + "crystal.ogg": "cristallo", + "cube.ogg": "cubo", + "cucumber.ogg": "cetriolo", + "curtain.ogg": "tenda", "cut.ogg": "tagliare", - "dad.ogg": "il papà", - "den.ogg": "la tana", - "desk.ogg": "la scrivania", + "cute.ogg": "carina", + "dad.ogg": "papà", + "daffodil.ogg": "narciso giallo", + "daisy.ogg": "margherita", + "dam.ogg": "diga", + "dance.ogg": "danza", + "dandelion.ogg": "dente di leone", + "dart_board.ogg": "bersaglio", + "date_fruit.ogg": "dattero", + "deer.ogg": "cervo", + "den.ogg": "tana", + "desert.ogg": "deserto", + "desk.ogg": "scrivania", + "dessert.ogg": "dessert", + "diamond.ogg": "diamante", "dig.ogg": "scavare", + "dirt.ogg": "sporco", "dirty.ogg": "sporco", - "dish.ogg": "la zuppiera", - "dog.ogg": "il cane", - "door.ogg": "la porta", - "dragon.ogg": "il drago", + "dish.ogg": "zuppiera", + "dishcloth.ogg": "strofinaccio", + "dive.ogg": "immersione", + "doctor.ogg": "medico", + "doe.ogg": "daino", + "dog.ogg": "cane", + "doll.ogg": "bambola", + "dolphin.ogg": "delfino", + "domino.ogg": "domino", + "door.ogg": "porta", + "doormat.ogg": "tappetino", + "dot.ogg": "punto", + "doughnut.ogg": "ciambella", + "dove.ogg": "colomba", + "dragon.ogg": "drago", + "dragonfly.ogg": "libellula", "draw.ogg": "disegnare", + "drawer.ogg": "cassetto", "dream.ogg": "sognare", - "dress.ogg": "il vestito", - "drink.ogg": "il caffè", - "drive.ogg": "guida", - "drool.ogg": "sbava", - "drum.ogg": "il tamburo", - "duck.ogg": "l'anatra", - "dune.ogg": "la duna", - "ear.ogg": "l'orecchio", - "earth.ogg": "la terra", + "dress.ogg": "vestito", + "drink.ogg": "bevanda", + "drip.ogg": "goccia", + "drive.ogg": "guidare", + "drool.ogg": "sbavare", + "drum.ogg": "tamburo", + "dry.ogg": "asciugare", + "duck.ogg": "anatra", + "duck_mother.ogg": "mamma oca", + "dune.ogg": "duna", + "dwarf.ogg": "nano", + "eagle.ogg": "aquila", + "ear.ogg": "orecchio", + "earth.ogg": "terra", "eat.ogg": "mangiare", - "face.ogg": "la faccia", - "fan.ogg": "il ventilatore", - "farm.ogg": "la fattoria", + "egg.ogg": "uovo", + "eggplant.ogg": "melanzana", + "elbow.ogg": "gomito", + "electrician.ogg": "elettricista", + "elk.ogg": "alce", + "empty.ogg": "vuoto", + "engine.ogg": "motore", + "engineer.ogg": "ingegnere", + "eraser.ogg": "gomma", + "explore.ogg": "esplorazione", + "eyelash.ogg": "ciglio", + "eyes.ogg": "occhi", + "face.ogg": "viso", + "fair.ogg": "luna park", + "fairy.ogg": "fata", + "fall.ogg": "cadere", + "fall_season.ogg": "stagione autunnale", + "family.ogg": "famiglia", + "fan.ogg": "ventilatore", + "farm.ogg": "fattoria", + "farmer.ogg": "contadino", + "fat.ogg": "grasso", + "faucet.ogg": "rubinetto", + "fawn.ogg": "cerbiatto", + "fear.ogg": "paura", + "feast.ogg": "banchetto", + "feather.ogg": "piuma", + "feed.ogg": "nutrire", + "femur.ogg": "femore", "fetch.ogg": "riportare", - "fin.ogg": "la pinna", + "fig.ogg": "fico", + "fin.ogg": "pinna", "find.ogg": "trovare", - "fire.ogg": "il fuoco", - "fish.ogg": "il pesce", - "fist.ogg": "il pugno", - "flag.ogg": "la bandiera", - "flame.ogg": "la fiamma", - "flash.ogg": "la torcia elettrica", - "flies.ogg": "la mosca", + "finger.ogg": "dito", + "fire.ogg": "fuoco", + "fire_extinguisher.ogg": "estintore", + "fireman.ogg": "pompiere", + "fish.ogg": "pesce", + "fisherman.ogg": "pescatore", + "fist.ogg": "pugno", + "flacon.ogg": "flacone", + "flag.ogg": "bandiera", + "flame.ogg": "fiamma", + "flamingo.ogg": "fenicottero", + "flash.ogg": "torcia elettrica", + "flat.ogg": "pianura", + "flies.ogg": "mosca", "float.ogg": "galleggiare", - "flour.ogg": "la farina", - "flower.ogg": "il fiore", - "flute.ogg": "il flauto", + "flour.ogg": "farina", + "flower.ogg": "fiore", + "fluff.ogg": "lanugine", + "flute.ogg": "flauto", "fly.ogg": "volare", - "foot.ogg": "il piede", - "fork.ogg": "la forchetta", - "fountain.ogg": "la fontana", - "fox.ogg": "la volpe", + "foam.ogg": "schiuma", + "foot.ogg": "piede", + "forest.ogg": "foresta", + "fork.ogg": "forchetta", + "fountain.ogg": "fontana", + "fox.ogg": "volpe", "freeze.ogg": "congelare", - "friend.ogg": "gli amici", - "frog.ogg": "la rana", - "fruit.ogg": "la frutta", - "fur.ogg": "la pelliccia", - "game.ogg": "il giocattolo", - "garden.ogg": "il giardino", - "gift.ogg": "il regalo", - "giraffe.ogg": "la giraffa", - "girl.ogg": "la ragazza", - "glass.ogg": "il bicchiere", - "glove.ogg": "i guanti", - "glue.ogg": "la colla", - "gnome.ogg": "lo gnomo", - "goat.ogg": "la capra", - "grass.ogg": "l'erba", - "grave.ogg": "la tomba", + "friend.ogg": "amici", + "fries.ogg": "patatine fritte", + "frog.ogg": "rana", + "front.ogg": "davanti", + "fruit.ogg": "frutta", + "fudge.ogg": "fudge", + "full.ogg": "pieno", + "fur.ogg": "pelliccia", + "game.ogg": "giocattolo", + "garage.ogg": "garage", + "garden.ogg": "giardino", + "garlic.ogg": "aglio", + "gem.ogg": "gemma", + "giant.ogg": "gigante", + "gift.ogg": "regalo", + "giraffe.ogg": "giraffa", + "girl.ogg": "ragazza", + "glass.ogg": "bicchiere", + "glasses.ogg": "occhiali", + "glove.ogg": "guanto", + "glue.ogg": "colla", + "gnome.ogg": "gnomo", + "goat.ogg": "capra", + "golden.ogg": "dorato", + "golf.ogg": "golf", + "goose.ogg": "oca", + "gorilla.ogg": "gorilla", + "grain.ogg": "grano", + "grandmother.ogg": "nonna", + "grape.ogg": "uva", + "grapefruit.ogg": "pompelmo", + "grass.ogg": "erba", + "grave.ogg": "tomba", "gray.ogg": "grigio", "green.ogg": "verde", - "grin.ogg": "il ghigno", - "ground.ogg": "la terra", + "grill.ogg": "griglia", + "grin.ogg": "ghigno", + "ground.ogg": "suolo", "growl.ogg": "ringhiare", - "gum.ogg": "la gomma da masticare", - "hair.ogg": "i capelli", - "hand.ogg": "la mano", - "hat.ogg": "il cappello", + "guignol.ogg": "burattino", + "guinea_pig.ogg": "cavia", + "gum.ogg": "gomma da masticare", + "hair.ogg": "capelli", + "hair_dryer.ogg": "asciugacapelli", + "half.ogg": "metà", + "ham.ogg": "gomma da masticare", + "hamburger.ogg": "hamburger", + "hammer.ogg": "martello", + "hand.ogg": "mano", + "handlebar.ogg": "manubrio", + "happy.ogg": "felice", + "harp.ogg": "arpa", + "hat.ogg": "cappello", "hatch.ogg": "schiudere", - "hay.ogg": "la paglia", - "head.ogg": "la testa", + "hay.ogg": "paglia", + "head.ogg": "testa", "hear.ogg": "ascoltare", - "heat.ogg": "il caldo", - "hedge.ogg": "la siepe", - "hen.ogg": "la gallina", - "herd.ogg": "il gregge", - "hip.ogg": "i fianchi", - "hole.ogg": "il buco", - "home.ogg": "la casa", - "hook.ogg": "l'amo", - "hound.ogg": "il segugio", + "heat.ogg": "caldo", + "hedge.ogg": "siepe", + "hedgehog.ogg": "riccio", + "heel.ogg": "tacco", + "helmet.ogg": "casco", + "hen.ogg": "chioccia", + "herd.ogg": "gregge", + "high.ogg": "alto", + "hike.ogg": "escursione", + "hill.ogg": "collina", + "hip.ogg": "fianchi", + "hippopotamus.ogg": "ippopotamo", + "hit.ogg": "colpo", + "hive.ogg": "alveare", + "hockey.ogg": "hockey", + "hole.ogg": "buco", + "home.ogg": "casa", + "hook.ogg": "amo", + "hop.ogg": "saltellare", + "horse.ogg": "cavallo", + "hose.ogg": "tubo", + "hospital.ogg": "ospedale", + "hot.ogg": "caldo", + "hot_dog.ogg": "hot dog", + "hound.ogg": "segugio", + "house.ogg": "casa", "howl.ogg": "ululare", "hug.ogg": "abbracciare", - "hunter.ogg": "il cacciatore", - "hut.ogg": "la capanna", - "ice.ogg": "il ghiaccio", - "ink.ogg": "l'inchiostro", - "jewel.ogg": "il gioiello", + "huge.ogg": "enorme", + "hummingbird.ogg": "colibrì", + "hunchbacked.ogg": "gobbo", + "hunter.ogg": "cacciatore", + "husband.ogg": "padre", + "hut.ogg": "capanna", + "hyena.ogg": "iena", + "ice.ogg": "ghiaccio", + "iceberg.ogg": "iceberg", + "iguana.ogg": "iguana", + "ill.ogg": "malato", + "ink.ogg": "inchiostro", + "island.ogg": "isola", + "jacket.ogg": "giacca", + "jaguar.ogg": "giaguaro", + "jam.ogg": "marmellata", + "jay.ogg": "ghiandaia", + "jelly.ogg": "gelatina", + "jellyfish.ogg": "medusa", + "jewel.ogg": "gioiello", + "job.ogg": "lavoro", + "jockey.ogg": "fantino", "jog.ogg": "correre", - "judge.ogg": "il giudice", - "juice.ogg": "il succo d'arancia", + "joy.ogg": "gioia", + "judge.ogg": "giudice", + "judo.ogg": "judo", + "juggler.ogg": "giocoliere", + "juice.ogg": "succo", "jump.ogg": "saltare", - "kite.ogg": "l'aquilone", - "knee.ogg": "il ginocchio", - "knife.ogg": "il coltello", - "knight.ogg": "il cavaliere", + "kangaroo.ogg": "canguro", + "keel.ogg": "crollo", + "kernel.ogg": "nocciolo", + "keyboard.ogg": "tastiera", + "kimono.ogg": "kimono", + "king.ogg": "re", + "kiss.ogg": "baciare", + "kitchen.ogg": "cucina", + "kite.ogg": "aquilone", + "kitten.ogg": "gattino", + "kiwi.ogg": "kiwi", + "knee.ogg": "ginocchio", + "kneel.ogg": "inginocchiarsi", + "knife.ogg": "coltello", + "knight.ogg": "cavaliere", "knit.ogg": "lavorare ai ferri", - "knot.ogg": "il nodo", - "lake.ogg": "il lago", - "lamb.ogg": "l'agnello", - "lamp.ogg": "la lampada", - "land.ogg": "la terra", - "lane.ogg": "la strada", - "lap.ogg": "il grembo", - "lawn.ogg": "il prato", + "knot.ogg": "nodo", + "koala.ogg": "koala", + "lad.ogg": "ragazzo", + "lady.ogg": "signora", + "ladybug.ogg": "coccinella", + "lake.ogg": "lago", + "lama.ogg": "lama", + "lamb.ogg": "agnello", + "lamp.ogg": "lampada", + "land.ogg": "terreno", + "lane.ogg": "strada", + "lap.ogg": "grembo", + "lasso.ogg": "lazo", + "laugh.ogg": "ridere", + "lava.ogg": "lava", + "lawn.ogg": "prato", + "lawyer.ogg": "avvocato", + "leaf.ogg": "foglia", + "ledge.ogg": "sporgenza", + "leek.ogg": "porro", + "left.ogg": "sinistra", + "leg.ogg": "gamba", + "lemon.ogg": "limone", + "lemonade.ogg": "limonata", + "lemur.ogg": "lemure", + "leopard.ogg": "leopardo", + "lettuce.ogg": "lattuga", + "librarian.ogg": "bilbiotecaria", "lick.ogg": "leccare", - "lid.ogg": "il coperchio", - "lift.ogg": "sollevare i pesi", - "light.ogg": "la luce", - "lime.ogg": "il lime", - "link.ogg": "l'anello", - "lip.ogg": "le labbra", - "log.ogg": "i ceppi", + "lid.ogg": "coperchio", + "lift.ogg": "sollevamento pesi", + "light.ogg": "lampada", + "lighthouse.ogg": "faro", + "lightning.ogg": "fulmine", + "lilac.ogg": "lillà", + "lime.ogg": "lime", + "line.ogg": "linea", + "link.ogg": "anello", + "lion.ogg": "leone", + "lion_cub.ogg": "cucciolo di leone", + "lip.ogg": "labbra", + "liquid.ogg": "liquido", + "lizard.ogg": "lucertola", + "lobster.ogg": "astice", + "log.ogg": "tronchi", "look.ogg": "guardare", - "lunch.ogg": "la merenda", - "mad.ogg": "la follia", - "mane.ogg": "la criniera", - "map.ogg": "la mappa", - "mask.ogg": "la maschera da sub", - "mat.ogg": "il tappetino", - "match.ogg": "i fiammiferi", + "lunch.ogg": "pranzo", + "mad.ogg": "follia", + "magic.ogg": "magico", + "magnet.ogg": "magnete", + "magnifying_glass.ogg": "lente d'ingrandimento", + "magpie.ogg": "gazza", + "mail.ogg": "posta", + "man.ogg": "uomo", + "mane.ogg": "criniera", + "mango.ogg": "mango", + "map.ogg": "mappa", + "maple.ogg": "acero", + "marble.ogg": "biglia", + "mashed_potatoes.ogg": "purè di patate", + "mask.ogg": "maschera", + "mast.ogg": "albero", + "mat.ogg": "zerbino", + "match.ogg": "fiammifero", + "mate.ogg": "compagno", + "mattress.ogg": "materasso", + "mauve.ogg": "malva", + "meal.ogg": "pasto", + "meat.ogg": "carne", + "mechanic.ogg": "meccanico", + "medal.ogg": "medaglia", "meet.ogg": "incontrare", - "mice.ogg": "i topi", - "mole.ogg": "la talpa", - "mosquito.ogg": "la zanzara", - "mouth.ogg": "la bocca", - "mud.ogg": "il fango", - "mug.ogg": "la tazza", - "mule.ogg": "il mulo", - "mushroom.ogg": "il fungo", - "nap.ogg": "pisolare", - "neck.ogg": "il collo", - "nest.ogg": "il nido", - "net.ogg": "la rete", - "night.ogg": "la notte", - "nose.ogg": "il naso", - "nut.ogg": "l'arachide", - "oar.ogg": "i remi", - "ocean.ogg": "l'oceano", + "melon.ogg": "melone", + "merry-go-round.ogg": "giostra", + "mice.ogg": "topi", + "microphone.ogg": "microfono", + "milk.ogg": "latte", + "mill.ogg": "mulino", + "mimosa.ogg": "mimosa", + "mirror.ogg": "specchio", + "mixer.ogg": "robot da cucina", + "mole.ogg": "talpa", + "mom.ogg": "mamma", + "moon.ogg": "luna", + "moose.ogg": "alce", + "mop.ogg": "mocio", + "mosque.ogg": "moschea", + "mosquito.ogg": "zanzara", + "mother.ogg": "madre", + "motorcycle.ogg": "motocicletta", + "mountain.ogg": "montagna", + "mouse.ogg": "topo", + "mouth.ogg": "bocca", + "movie.ogg": "film", + "mower.ogg": "tosaerba", + "mud.ogg": "fango", + "mug.ogg": "tazza", + "mule.ogg": "mulo", + "muscle.ogg": "muscolo", + "mushroom.ogg": "fungo", + "music.ogg": "musica", + "musician.ogg": "musicista", + "naked.ogg": "nudo", + "nap.ogg": "appisolarsi", + "navel.ogg": "ombelico", + "neck.ogg": "collo", + "necklace.ogg": "collana", + "needle.ogg": "ago", + "nest.ogg": "nido", + "net.ogg": "rete", + "newspaper.ogg": "giornale", + "night.ogg": "notte", + "nightgown.ogg": "camicia da notte", + "nose.ogg": "naso", + "nostril.ogg": "narice", + "notebook.ogg": "taccuino", + "number.ogg": "numero", + "nun.ogg": "suora", + "nurse.ogg": "infermiera", + "nurse_male.ogg": "infermiere", + "nut.ogg": "arachide", + "oar.ogg": "remi", + "ocean.ogg": "oceano", + "office.ogg": "ufficio", + "olive.ogg": "oliva", + "on.ogg": "sopra", + "onion.ogg": "cipolla", + "open.ogg": "aperto", + "opossum.ogg": "opossum", "orange-color.ogg": "arancione", - "orange.ogg": "l'arancio", - "owl.ogg": "il gufo", - "ox.ogg": "il bue", - "page.ogg": "la pagina", + "orange.ogg": "arancia", + "orchid.ogg": "orchidea", + "ostrich.ogg": "struzzo", + "otter.ogg": "lontra", + "owl.ogg": "gufo", + "ox.ogg": "bue", + "oyster.ogg": "ostrica", + "pacifier.ogg": "ciuccio", + "page.ogg": "pagina", "pair.ogg": "un paio", - "pan.ogg": "la padella", - "patch.ogg": "la toppa", - "path.ogg": "il sentiero", - "peach.ogg": "la pesca", + "pajamas.ogg": "pigiama", + "pal.ogg": "amico", + "palm_tree.ogg": "palma", + "pan.ogg": "padella", + "panda.ogg": "panda", + "panther.ogg": "pantera", + "panties.ogg": "mutande", + "pants.ogg": "pantaloni", + "papaya.ogg": "papaya", + "paper.ogg": "carta", + "parachute.ogg": "paracadute", + "parakeet.ogg": "parrocchetto", + "parrot.ogg": "pappagallo", + "patch.ogg": "toppa", + "path.ogg": "sentiero", + "paw.ogg": "impronta", + "pea.ogg": "piselli", + "peach.ogg": "pesca", + "peacock.ogg": "pavone", + "peak.ogg": "picco", + "pear.ogg": "pera", + "pearl.ogg": "perla", "peck.ogg": "beccare", - "pen.ogg": "la penna", - "pencil.ogg": "la matita", - "picture.ogg": "il quadro", - "pig.ogg": "il maiale", - "pine.ogg": "il pino", + "pedal.ogg": "pedale", + "pelican.ogg": "pellicano", + "pen.ogg": "penna", + "pencil.ogg": "matita", + "peony.ogg": "peonia", + "people.ogg": "persona", + "pepper.ogg": "peperone", + "peppers.ogg": "peperoni", + "pet.ogg": "animale domestico", + "petal.ogg": "petalo", + "phone.ogg": "telefono", + "piano.ogg": "pianoforte", + "picture.ogg": "quadro", + "pie.ogg": "torta", + "pig.ogg": "maiale", + "pigeon.ogg": "piccione", + "pill.ogg": "pillola", + "pillow.ogg": "cuscino", + "pilot.ogg": "pilota", + "pine.ogg": "pino", + "pine_cone.ogg": "pigna", "pink.ogg": "rosa", - "plane.ogg": "l'aeroplano", - "plant.ogg": "la pianta", - "plate.ogg": "il piatto", + "pip.ogg": "seme", + "pipe.ogg": "pipa", + "piranha.ogg": "piranha", + "pirate.ogg": "pirata", + "pizza.ogg": "pizza", + "plane.ogg": "aeroplano", + "planet.ogg": "pianeta", + "plant.ogg": "pianta", + "plate.ogg": "piatto", "play.ogg": "giocare", - "plow.ogg": "dissodare", - "plum.ogg": "la prugna", - "pole.ogg": "il palo", - "pool.ogg": "la piscina", - "pope.ogg": "il papa", - "pot.ogg": "la pentola", - "price.ogg": "il prezzo", - "prince.ogg": "il principe", - "princess.ogg": "la principessa", - "prize.ogg": "il premio", - "puppy.ogg": "il cucciolo", + "pliers.ogg": "pinza", + "plow.ogg": "arare", + "plum.ogg": "prugna", + "plumber.ogg": "idraulico", + "pocket.ogg": "tasca", + "pod.ogg": "baccello", + "pole.ogg": "palo", + "police.ogg": "polizia", + "pompon.ogg": "pompon", + "pond.ogg": "stagno", + "pony.ogg": "pony", + "pool.ogg": "piscina", + "popcorn.ogg": "popcorn", + "pope.ogg": "papa", + "porthole.ogg": "oblò", + "post.ogg": "buca della posta", + "pot.ogg": "pentola", + "potato.ogg": "patata", + "pounce.ogg": "saltare addosso", + "president.ogg": "presidente", + "pretty.ogg": "bella", + "price.ogg": "prezzo", + "priest.ogg": "prete", + "prince.ogg": "principe", + "princess.ogg": "principessa", + "prison.ogg": "prigione", + "prisoner.ogg": "prigioniero", + "prize.ogg": "premio", + "pug.ogg": "carlino", + "pull.ogg": "tirare", + "pullover.ogg": "maglione", + "pumpkin.ogg": "zucca", + "puppy.ogg": "cucciolo", + "pyramid.ogg": "piramide", "quarrel.ogg": "litigare", - "queen.ogg": "la regina", - "question.ogg": "la domanda", - "quilt.ogg": "la trapunta", + "queen.ogg": "regina", + "question.ogg": "domanda", + "quilt.ogg": "trapunta", "quiz.ogg": "quiz", - "rag.ogg": "lo strofinaccio", - "rage.ogg": "la rabbia", - "rake.ogg": "il rastrello", - "ramp.ogg": "la rampa", - "rat.ogg": "il ratto", + "rabbit.ogg": "coniglio", + "rabbit_baby.ogg": "coniglietto", + "race.ogg": "corsa", + "radio.ogg": "radio", + "radish.ogg": "ravanello", + "raft.ogg": "zattera", + "rag.ogg": "straccio", + "rage.ogg": "rabbia", + "rain.ogg": "pioggia", + "raincoat.ogg": "impermeabile", + "rake.ogg": "rastrello", + "ramp.ogg": "rampa", + "ran.ogg": "correre", + "raspberry.ogg": "lampone", + "rat.ogg": "ratto", + "razor.ogg": "rasoio", "read.ogg": "leggere", "red.ogg": "rosso", - "rice.ogg": "il riso", + "reptile.ogg": "rettile", + "rhinoceros.ogg": "rinoceronte", + "rice.ogg": "riso", "ride.ogg": "andare in bicicletta", - "rip.ogg": "strappato", - "rock.ogg": "la roccia", - "roof.ogg": "il tetto", - "rope.ogg": "la corda", - "rose.ogg": "la rosa", - "rug.ogg": "il tappeto", - "run.ogg": "corre", - "sad.ogg": "la tristezza", - "sail.ogg": "la vela", - "sand.ogg": "la sabbia", - "sandwich.ogg": "il panino", - "sauce.ogg": "la salsa", - "scale.ogg": "la bilancia", - "scar.ogg": "la cicatrice", - "scarf.ogg": "la sciarpa", - "school.ogg": "la scuola", - "science.ogg": "la scienza", + "rifle.ogg": "fucile", + "right.ogg": "destra", + "rip.ogg": "strappare", + "rise.ogg": "crescere", + "river.ogg": "fiume", + "road.ogg": "strada", + "roast.ogg": "arrosto", + "robe.ogg": "mantello", + "robot.ogg": "robot", + "rock.ogg": "roccia", + "rocket.ogg": "razzo", + "rolling_pin.ogg": "mattarello", + "roof.ogg": "tetto", + "room.ogg": "stanza", + "root.ogg": "radice", + "rope.ogg": "corda", + "rose.ogg": "rosa", + "round.ogg": "rotondo", + "rowing.ogg": "canottaggio", + "royal.ogg": "reale", + "rug.ogg": "tappeto", + "run.ogg": "correre", + "sad.ogg": "tristezza", + "saddle.ogg": "sella", + "sail.ogg": "vela", + "sailor.ogg": "marinaio", + "salamander.ogg": "salamandra", + "salmon.ogg": "salmone", + "sand.ogg": "sabbia", + "sandals.ogg": "sandali", + "sandwich.ogg": "panino", + "sash.ogg": "fascia", + "sauce.ogg": "salsa", + "sausage.ogg": "salsiccia", + "scale.ogg": "bilancia", + "scar.ogg": "cicatrice", + "scare.ogg": "spaventare", + "scarf.ogg": "sciarpa", + "school.ogg": "scuola", + "school_bag.ogg": "cartella", + "science.ogg": "scienza", + "scissors.ogg": "forbici", + "scorpion.ogg": "scorpione", + "scratch.ogg": "graffiare", "scream.ogg": "urlare", - "screw.ogg": "la vite", - "scribble.ogg": "lo scarabocchio", - "seat.ogg": "la sedia a dondolo", + "screw.ogg": "vite", + "screwdriver.ogg": "cacciavite", + "scribble.ogg": "scarabocchiare", + "sea.ogg": "mare", + "seat.ogg": "sedia a dondolo", "see.ogg": "vedere", - "seed.ogg": "il seme", - "shark.ogg": "il pescecane", - "shelf.ogg": "lo scaffale", - "shell.ogg": "la conchiglia", - "ship.ogg": "la nave", - "shirt.ogg": "la camicia", - "shoe.ogg": "la scarpa", - "shop.ogg": "il negozio", - "shore.ogg": "il bagnasciuga", - "short.ogg": "i pantaloni corti", - "shower.ogg": "la doccia", - "shrimp.ogg": "il gambero", - "sign.ogg": "il cartello", + "seed.ogg": "seme", + "shadow.ogg": "ombra", + "shake.ogg": "scuotere", + "shark.ogg": "squalo", + "shave.ogg": "tosare", + "shed.ogg": "capanna", + "sheep.ogg": "pecora", + "shelf.ogg": "mensola", + "shell.ogg": "conchiglia", + "ship.ogg": "nave", + "shirt.ogg": "camicia", + "shoe.ogg": "scarpa", + "shoelace.ogg": "lacci di scarpa", + "shop.ogg": "negozio", + "shore.ogg": "bagnasciuga", + "short.ogg": "pantaloni corti", + "shovel.ogg": "pala", + "shower.ogg": "doccia", + "shrimp.ogg": "gambero", + "shrub.ogg": "arbusto", + "shut.ogg": "chiusa", + "shutter.ogg": "persiana", + "sick.ogg": "ammalato", + "sidewalk.ogg": "marciapiede", + "sign.ogg": "cartello", "sing.ogg": "cantare", - "sink.ogg": "il lavandino", + "sink.ogg": "lavandino", "sip.ogg": "succhiare", + "sister.ogg": "sorella", "sit.ogg": "sedere", "skate.ogg": "pattinare", - "ski.ogg": "sciare", - "skin.ogg": "la pelle", - "skirt.ogg": "la gonna", - "skunk.ogg": "la puzzola", - "sky.ogg": "il cielo", - "sled.ogg": "la slitta", + "skeleton.ogg": "scheletro", + "ski.ogg": "sci", + "skimmer.ogg": "schiumarola", + "skin.ogg": "pelle", + "skirt.ogg": "gonna", + "skunk.ogg": "puzzola", + "sky.ogg": "cielo", + "slam.ogg": "schiacciare", + "sled.ogg": "slitta", "sleep.ogg": "dormire", - "sleeve.ogg": "la manica", - "sleigh.ogg": "la slitta", - "slide.ogg": "lo scivolo", - "slime.ogg": "la bava", - "smile.ogg": "il sorriso", - "smoke.ogg": "il fumo", - "snail.ogg": "la lumaca", - "snake.ogg": "il serpente", - "sneaker.ogg": "la scarpa da tennis", + "sleeve.ogg": "manica", + "sleigh.ogg": "slitta", + "slide.ogg": "scivolo", + "slim.ogg": "magra", + "slime.ogg": "bava", + "slippers.ogg": "pantofole", + "slope.ogg": "pendenza", + "sloppy.ogg": "sciatto", + "slot.ogg": "fessura", + "sloth.ogg": "bradipo", + "slug.ogg": "chiocciola", + "small.ogg": "piccolo", + "smell.ogg": "odorare", + "smile.ogg": "sorriso", + "smock.ogg": "grembiule", + "smoke.ogg": "fumo", + "smooch.ogg": "sbaciucchiare", + "snack.ogg": "spuntino", + "snail.ogg": "lumaca", + "snake.ogg": "serpente", + "sneaker.ogg": "scarpa da tennis", "sniff.ogg": "annusare", - "snow.ogg": "la neve", - "sock.ogg": "il calzino", - "spaghetti.ogg": "gli spaghetti", - "spear.ogg": "la lancia", - "spider.ogg": "il ragno", - "spike.ogg": "gli aculei", - "sponge.ogg": "la spugna", - "spoon.ogg": "il cucchiaio", + "snow.ogg": "neve", + "soap.ogg": "sapone", + "sob.ogg": "disperazione", + "sock.ogg": "calzino", + "soldier.ogg": "soldato", + "sole.ogg": "sogliola", + "sole_shoe.ogg": "suola di scarpa", + "son.ogg": "figlio", + "soup.ogg": "zuppa", + "spade.ogg": "vanga", + "spaghetti.ogg": "spaghetti", + "spark.ogg": "scintilla", + "sparrow.ogg": "passero", + "spatula.ogg": "spatola", + "speak.ogg": "parlare", + "spear.ogg": "lancia", + "spice.ogg": "spezia", + "spider.ogg": "ragno", + "spider_web.ogg": "ragnatela", + "spike.ogg": "aculeo", + "spill.ogg": "versare", + "spinach.ogg": "spinaci", + "spine.ogg": "spina dorsale", + "spinning_top.ogg": "trottola", + "splash.ogg": "schizzare", + "splatter.ogg": "schizzo", + "sponge.ogg": "spugna", + "spool.ogg": "rocchetto", + "spoon.ogg": "cucchiaio", "sport.ogg": "sport", + "spot.ogg": "macchia", "spray.ogg": "spruzzare", "spread.ogg": "spalmare", - "squash.ogg": "la zucca", - "squid.ogg": "il calamaro", - "squirrel.ogg": "lo scoiattolo", - "stack.ogg": "una pila", - "stage.ogg": "il palco", - "stamp.ogg": "il francobollo", - "star.ogg": "la stella", - "stare.ogg": "lo sguardo", - "starfish.ogg": "la stella di mare", - "stem.ogg": "lo stelo", - "stew.ogg": "lo stufato", + "spring.ogg": "rimbalzare", + "spring_season.ogg": "stagione primaverile", + "sprinkle.ogg": "confettini", + "square.ogg": "quadrato", + "squash.ogg": "zucca", + "squat.ogg": "accovacciarsi", + "squid.ogg": "calamaro", + "squirrel.ogg": "scoiattolo", + "squirt.ogg": "spruzzo", + "stack.ogg": "pila", + "stage.ogg": "palco", + "staircase.ogg": "scalinata", + "stamp.ogg": "francobollo", + "stand.ogg": "stare in piedi", + "star.ogg": "stella", + "stare.ogg": "fissare", + "starfish.ogg": "stella di mare", + "steam.ogg": "vapore", + "steep.ogg": "ripido", + "steeple.ogg": "campanile", + "stem.ogg": "stelo", + "step.ogg": "gradino", + "stew.ogg": "stufato", + "stick.ogg": "ramoscello", "sting.ogg": "pungere", - "stone.ogg": "la pietra", - "store.ogg": "il negozio", - "stove.ogg": "la cucina", - "straw.ogg": "la cannuccia", - "strawberry.ogg": "la fragola", - "stream.ogg": "il vapore", - "street.ogg": "la via", - "string.ogg": "lo spago", + "stinky.ogg": "maleodorante", + "stitch.ogg": "cucire", + "stomach.ogg": "stomaco", + "stone.ogg": "pietra", + "stop.ogg": "fermare", + "store.ogg": "negozio", + "stove.ogg": "cucina", + "straight.ogg": "dritto", + "strainer.ogg": "colino", + "straw.ogg": "cannuccia", + "strawberry.ogg": "fragola", + "stream.ogg": "corrente", + "street.ogg": "via", + "stretch.ogg": "allungare", + "string.ogg": "spago", + "stripe.ogg": "striscia", + "strong.ogg": "forte", + "student.ogg": "studente", "study.ogg": "studiare", - "stump.ogg": "il ceppo", - "suit.ogg": "l'abito", - "summer.ogg": "l'estate", - "sun.ogg": "il sole", - "swan.ogg": "il cigno", - "sweat.ogg": "il sudore", - "swim.ogg": "nuotare", - "tag.ogg": "il cartellino", + "stump.ogg": "ceppo", + "sugar.ogg": "zucchero", + "suit.ogg": "abito", + "suitcase.ogg": "valigia", + "summer.ogg": "estate", + "summit.ogg": "vetta", + "sun.ogg": "sole", + "swan.ogg": "cigno", + "sweat.ogg": "sudore", + "sweatshirt.ogg": "felpa", + "swim.ogg": "nuoto", + "table.ogg": "tavolo", + "tablecloth.ogg": "tovaglia", + "tadpole.ogg": "girino", + "tag.ogg": "cartellino", + "tail.ogg": "coda", + "tall.ogg": "alto", + "tape_measure.ogg": "metro", + "taxi.ogg": "taxi", "teach.ogg": "insegnare", - "teacher.ogg": "la maestra", + "teacher.ogg": "maestra", "tear.ogg": "strappare", - "teeth.ogg": "i denti", - "thigh.ogg": "la coscia", + "teddy.ogg": "orsetto", + "teeth.ogg": "denti", + "television.ogg": "televisore", + "temple.ogg": "tempio", + "tennis.ogg": "tennis", + "tent.ogg": "tenda", + "text.ogg": "testo", + "thick.ogg": "spesso", + "thief.ogg": "ladro", + "thigh.ogg": "coscia", "think.ogg": "pensare", - "thread.ogg": "il filo", - "throat.ogg": "la gola", + "thread.ogg": "filo", + "throat.ogg": "gola", "throw.ogg": "lanciare", - "tick.ogg": "la zecca", - "time.ogg": "il tempo", - "toilet.ogg": "il gabinetto", - "tool.ogg": "gli attrezzi", - "top.ogg": "la cima", - "torch.ogg": "la torcia", + "thumb.ogg": "pollice", + "tick.ogg": "zecca", + "ticket.ogg": "biglietto", + "tiger.ogg": "tigre", + "time.ogg": "tempo", + "tin.ogg": "lattina", + "tire.ogg": "pneumatico", + "tired.ogg": "stanco", + "tissue.ogg": "fazzoletto", + "to_drink.ogg": "bere", + "toad.ogg": "rospo", + "toaster.ogg": "tostapane", + "toe.ogg": "alluce", + "toilet.ogg": "gabinetto", + "tomatoe.ogg": "pomodoro", + "tongs.ogg": "pinze", + "tongue.ogg": "lingua", + "tool.ogg": "attrezzo", + "top.ogg": "cima", + "torch.ogg": "torcia", "touch.ogg": "toccare", - "towel.ogg": "l'asciugamano", - "toy.ogg": "il giocattolo", - "train.ogg": "il treno", - "trap.ogg": "la trappola", - "trash.ogg": "la spazzatura", - "tray.ogg": "il vassoio", - "tree.ogg": "l'albero", - "truck.ogg": "il camion", - "tube.ogg": "il rossetto", - "tune.ogg": "le note", - "vet.ogg": "il veterinario", + "towel.ogg": "asciugamano", + "toy.ogg": "giocattolo", + "trail.ogg": "sentiero", + "train.ogg": "treno", + "train_station.ogg": "stazione dei treni", + "trap.ogg": "trappola", + "trash.ogg": "spazzatura", + "tray.ogg": "vassoio", + "treat.ogg": "dolcetto", + "tree.ogg": "albero", + "triangle.ogg": "triangolo", + "tribe.ogg": "tribù", + "trip.ogg": "viaggio", + "truck.ogg": "camion", + "tube.ogg": "rossetto", + "tulip.ogg": "tulipano", + "tune.ogg": "note", + "turkey.ogg": "tacchino", + "turnip.ogg": "rapa", + "turtle.ogg": "tartaruga", + "tusk.ogg": "zanna", + "twin_boys.ogg": "gemelli", + "twin_girls.ogg": "gemelle", + "umbrella.ogg": "ombrella", + "under.ogg": "sotto", + "uniform.ogg": "uniforme", + "van.ogg": "furgone", + "vapor.ogg": "vapore", + "vase.ogg": "vaso", + "vegetable.ogg": "vegetale", + "vein.ogg": "vena", + "verdure.ogg": "verdure", + "vest.ogg": "gilè", + "vet.ogg": "veterinario", + "viper.ogg": "vipera", + "vowel.ogg": "vocale", + "vulture.ogg": "avvoltoio", + "wag.ogg": "agitare", "walk.ogg": "camminare", - "watch.ogg": "l'orologio da polso", - "water.ogg": "l'acqua", - "wedge.ogg": "il cuneo", - "wheel.ogg": "la ruota", + "wall.ogg": "muro", + "walnut.ogg": "noce", + "wart.ogg": "verruca", + "wash.ogg": "lavare", + "wasp.ogg": "vespa", + "watch.ogg": "orologio da polso", + "water.ogg": "acqua", + "wave.ogg": "onda", + "wedding.ogg": "matrimonio", + "wedge.ogg": "cuneo", + "weight.ogg": "peso", + "wet.ogg": "umido", + "whale.ogg": "balena", + "wheat.ogg": "grano", + "wheel.ogg": "ruota", + "whisk.ogg": "frusta", "whisper.ogg": "sussurrare", "white.ogg": "bianco", - "wig.ogg": "la parrucca", - "wind.ogg": "il vento", - "wing.ogg": "l'ala", - "wood.ogg": "il legno", - "wrench.ogg": "la chiave inglese", - "wrist.ogg": "il polso", - "zoo.ogg": "lo zoo" -} \ No newline at end of file + "wide.ogg": "largo", + "wife.ogg": "moglie", + "wig.ogg": "parrucca", + "win.ogg": "vincere", + "wind.ogg": "vento", + "window.ogg": "finestra", + "window_glass.ogg": "vetro della finestra", + "wing.ogg": "ala", + "winter.ogg": "inverno", + "wolf.ogg": "lupo", + "woman.ogg": "donna", + "wood.ogg": "legno", + "word.ogg": "parola", + "worker.ogg": "operaio", + "world.ogg": "mondo", + "wreath.ogg": "ghirlanda", + "wrench.ogg": "chiave inglese", + "wrist.ogg": "polso", + "write.ogg": "scrivere", + "yellow.ogg": "giallo", + "yogurt.ogg": "yogurt", + "yum.ogg": "delizioso", + "zebra.ogg": "zebra", + "zipper.ogg": "cerniera", + "zoo.ogg": "zoo" +} diff --git a/src/activities/lang/resource/content-ja.json b/src/activities/lang/resource/content-ja.json deleted file mode 100644 --- a/src/activities/lang/resource/content-ja.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/activities/lang/resource/content-ml.json b/src/activities/lang/resource/content-ml.json --- a/src/activities/lang/resource/content-ml.json +++ b/src/activities/lang/resource/content-ml.json @@ -1073,4 +1073,4 @@ "zebra.ogg": "വരയൻ കുതിര", "zipper.ogg": "പൽനിരപ്പൂട്ട്", "zoo.ogg": "മൃഗശാല" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-nl.json b/src/activities/lang/resource/content-nl.json --- a/src/activities/lang/resource/content-nl.json +++ b/src/activities/lang/resource/content-nl.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "ritssluiting", "zoo.ogg": "dierentuin" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-nn.json b/src/activities/lang/resource/content-nn.json --- a/src/activities/lang/resource/content-nn.json +++ b/src/activities/lang/resource/content-nn.json @@ -197,4 +197,4 @@ "word.ogg": "ord", "write.ogg": "å skriva", "yellow.ogg": "gul" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-pl.json b/src/activities/lang/resource/content-pl.json --- a/src/activities/lang/resource/content-pl.json +++ b/src/activities/lang/resource/content-pl.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "zamek", "zoo.ogg": "zoo" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-pt.json b/src/activities/lang/resource/content-pt.json --- a/src/activities/lang/resource/content-pt.json +++ b/src/activities/lang/resource/content-pt.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "fecho", "zoo.ogg": "zoológico" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-pt_BR.json b/src/activities/lang/resource/content-pt_BR.json --- a/src/activities/lang/resource/content-pt_BR.json +++ b/src/activities/lang/resource/content-pt_BR.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "zíper", "zoo.ogg": "zoológico" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-ro.json b/src/activities/lang/resource/content-ro.json --- a/src/activities/lang/resource/content-ro.json +++ b/src/activities/lang/resource/content-ro.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebră", "zipper.ogg": "fermoar", "zoo.ogg": "grădină zoologică" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-sk.json b/src/activities/lang/resource/content-sk.json --- a/src/activities/lang/resource/content-sk.json +++ b/src/activities/lang/resource/content-sk.json @@ -1059,4 +1059,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "zips", "zoo.ogg": "zoologická záhrada" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-sv.json b/src/activities/lang/resource/content-sv.json --- a/src/activities/lang/resource/content-sv.json +++ b/src/activities/lang/resource/content-sv.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "zebra", "zipper.ogg": "blixtlås", "zoo.ogg": "djurpark" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-uk.json b/src/activities/lang/resource/content-uk.json --- a/src/activities/lang/resource/content-uk.json +++ b/src/activities/lang/resource/content-uk.json @@ -1089,4 +1089,4 @@ "zebra.ogg": "зебра", "zipper.ogg": "блискавка", "zoo.ogg": "зоопарк" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/content-zh_CN.json b/src/activities/lang/resource/content-zh_CN.json deleted file mode 100644 --- a/src/activities/lang/resource/content-zh_CN.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/activities/lang/resource/content-zh_TW.json b/src/activities/lang/resource/content-zh_TW.json --- a/src/activities/lang/resource/content-zh_TW.json +++ b/src/activities/lang/resource/content-zh_TW.json @@ -47,4 +47,4 @@ "science.ogg": "科學", "splatter.ogg": "飛濺", "spot.ogg": "斑點" -} \ No newline at end of file +} diff --git a/src/activities/lang/resource/poToDataset.py b/src/activities/lang/resource/poToDataset.py --- a/src/activities/lang/resource/poToDataset.py +++ b/src/activities/lang/resource/poToDataset.py @@ -33,10 +33,14 @@ jsonFile = sys.argv[2] data = {} +if poFile.percent_translated() < 40: + print("Need at least 40% of the words translated to create the json data file") + sys.exit(0) + for entry in poFile.translated_entries(): word = entry.msgctxt data[word] = entry.msgstr with open(jsonFile, "w", encoding='utf-8') as data_file: json.dump(data, data_file, indent=4, sort_keys=True, ensure_ascii=False) - + data_file.write("\n") # Add missing new line at end of file diff --git a/src/activities/leftright/ActivityInfo.qml b/src/activities/leftright/ActivityInfo.qml --- a/src/activities/leftright/ActivityInfo.qml +++ b/src/activities/leftright/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("You can see a hand: is it a left hand or a right hand? Click on the left button, or the right button depending on the displayed hand.") credit: "" - section: "discovery" - createdInVersion: 0 + section: "puzzle" + createdInVersion: 0 } diff --git a/src/activities/letter-in-word/ActivityInfo.qml b/src/activities/letter-in-word/ActivityInfo.qml --- a/src/activities/letter-in-word/ActivityInfo.qml +++ b/src/activities/letter-in-word/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A letter is displayed on the flag attached to the plane, select all the words or the objects in which the letter appears and then press OK.") credit: "" - section: "reading" + section: "reading words" createdInVersion: 7000 } diff --git a/src/activities/lightsoff/ActivityInfo.qml b/src/activities/lightsoff/ActivityInfo.qml --- a/src/activities/lightsoff/ActivityInfo.qml +++ b/src/activities/lightsoff/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("The effect of pressing a button is to toggle the state of that button, and of its immediate vertical and horizontal neighbors. The sun and the color of the sky depend on the number of clicks needed to solve the puzzle. If you click on Tux, the solution is shown.") credit: qsTr("The solver algorithm is described on Wikipedia. To know more about the Lights Off game: <http://en.wikipedia.org/wiki/Lights_Out_(game)>") - section: "puzzle" + section: "discovery logic" createdInVersion: 0 } diff --git a/src/activities/louis-braille/ActivityInfo.qml b/src/activities/louis-braille/ActivityInfo.qml --- a/src/activities/louis-braille/ActivityInfo.qml +++ b/src/activities/louis-braille/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Read the history of Louis Braille, his biography, and the invention of the Braille system. Click on the previous and next buttons to move between the story pages. At the end, arrange the sequence in chronological order.") credit: qsTr("Louis Braille Video: <http:\/\/www.youtube.com/watch?v=9bdfC2j_4x4>") - section: "discovery braille" + section: "sciences history" createdInVersion: 4000 } diff --git a/src/activities/magic-hat-minus/ActivityInfo.qml b/src/activities/magic-hat-minus/ActivityInfo.qml --- a/src/activities/magic-hat-minus/ActivityInfo.qml +++ b/src/activities/magic-hat-minus/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on the hat to open it. Stars go in and a few stars escape. You have to count how many are still under the hat. Click on the bottom area to input your answer and on the OK button to validate your answer.") credit: "" - section: "math numeration" + section: "math arithmetic" createdInVersion: 0 } diff --git a/src/activities/magic-hat-plus/ActivityInfo.qml b/src/activities/magic-hat-plus/ActivityInfo.qml --- a/src/activities/magic-hat-plus/ActivityInfo.qml +++ b/src/activities/magic-hat-plus/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on the hat to open it. Under the hat, how many stars can you see moving around? Count carefully. Click on the bottom area to input your answer and on the OK button to validate your answer.") credit: "" - section: "math numeration" + section: "math arithmetic" createdInVersion: 0 } diff --git a/src/activities/maze/ActivityInfo.qml b/src/activities/maze/ActivityInfo.qml --- a/src/activities/maze/ActivityInfo.qml +++ b/src/activities/maze/ActivityInfo.qml @@ -40,6 +40,6 @@ qsTr("At higher levels, run-fast-mode will be enabled automatically. If you want to use this feature in earlier levels or want to disable it in advanced levels, click on the \"barefoot / sportshoe\"-icon in the upper left corner of the screen to toggle the run-fast-mode. \t") credit: "" - section: "discovery maze" + section: "fun maze" createdInVersion: 0 } diff --git a/src/activities/mazeinvisible/ActivityInfo.qml b/src/activities/mazeinvisible/ActivityInfo.qml --- a/src/activities/mazeinvisible/ActivityInfo.qml +++ b/src/activities/mazeinvisible/ActivityInfo.qml @@ -40,6 +40,6 @@ qsTr("At higher levels, run-fast-mode will be enabled automatically. If you want to use this feature in earlier levels or want to disable it in advanced levels, click on the \"barefoot / sportshoe\"-icon in the upper left corner of the screen to toggle the run-fast-mode. \t") credit: "" - section: "discovery maze" + section: "fun maze" createdInVersion: 0 } diff --git a/src/activities/mazerelative/ActivityInfo.qml b/src/activities/mazerelative/ActivityInfo.qml --- a/src/activities/mazerelative/ActivityInfo.qml +++ b/src/activities/mazerelative/ActivityInfo.qml @@ -41,6 +41,6 @@ qsTr("At higher levels, run-fast-mode will be enabled automatically. If you want to use this feature in earlier levels or want to disable it in advanced levels, click on the \"barefoot / sportshoe\"-icon in the upper left corner of the screen to toggle the run-fast-mode. \t") credit: "" - section: "discovery mazeMenu" + section: "fun maze" createdInVersion: 0 } diff --git a/src/activities/memory-case-association-tux/ActivityInfo.qml b/src/activities/memory-case-association-tux/ActivityInfo.qml --- a/src/activities/memory-case-association-tux/ActivityInfo.qml +++ b/src/activities/memory-case-association-tux/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("You can see some cards, but you can't see what's on the other side of them. Each card is hiding the lower/uppercase of an alphabet, and you have to associate all the upper case letters with its lower case and vice versa. Tux teacher does the same.") credit: "" - section: "reading" + section: "reading letters" createdInVersion: 9000 } diff --git a/src/activities/memory-case-association/ActivityInfo.qml b/src/activities/memory-case-association/ActivityInfo.qml --- a/src/activities/memory-case-association/ActivityInfo.qml +++ b/src/activities/memory-case-association/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("You can see some cards, but you can't see what's on the other side of them. Each card is hiding the lower/uppercase of an alphabet, and you have to associate all the upper case letters with its lower case and vice versa.") credit: "" - section: "reading" + section: "reading letters" createdInVersion: 9000 } diff --git a/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml b/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml --- a/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml +++ b/src/activities/memory-math-add-minus-mult-div-tux/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml b/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml --- a/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml +++ b/src/activities/memory-math-add-minus-mult-div/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-add-minus-tux/ActivityInfo.qml b/src/activities/memory-math-add-minus-tux/ActivityInfo.qml --- a/src/activities/memory-math-add-minus-tux/ActivityInfo.qml +++ b/src/activities/memory-math-add-minus-tux/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux, and you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-add-minus/ActivityInfo.qml b/src/activities/memory-math-add-minus/ActivityInfo.qml --- a/src/activities/memory-math-add-minus/ActivityInfo.qml +++ b/src/activities/memory-math-add-minus/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-add-tux/ActivityInfo.qml b/src/activities/memory-math-add-tux/ActivityInfo.qml --- a/src/activities/memory-math-add-tux/ActivityInfo.qml +++ b/src/activities/memory-math-add-tux/ActivityInfo.qml @@ -39,6 +39,6 @@ In this game, these cards are hiding the two parts of an adding-up sum (also called an addition sum). You need to find the two parts of the sum, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole sum. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper sum. When you do that, both those cards disappear! When you've made them all disappear, found more sums than Tux and you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-add/ActivityInfo.qml b/src/activities/memory-math-add/ActivityInfo.qml --- a/src/activities/memory-math-add/ActivityInfo.qml +++ b/src/activities/memory-math-add/ActivityInfo.qml @@ -39,6 +39,6 @@ In this game, these cards are hiding the two parts of an adding-up sum (also called an addition sum). You need to find the two parts of the sum, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole sum. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper sum. When you do that, both those cards disappear! When you've made them all disappear, found all the sums, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-div-tux/ActivityInfo.qml b/src/activities/memory-math-div-tux/ActivityInfo.qml --- a/src/activities/memory-math-div-tux/ActivityInfo.qml +++ b/src/activities/memory-math-div-tux/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux and you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-div/ActivityInfo.qml b/src/activities/memory-math-div/ActivityInfo.qml --- a/src/activities/memory-math-div/ActivityInfo.qml +++ b/src/activities/memory-math-div/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-minus-tux/ActivityInfo.qml b/src/activities/memory-math-minus-tux/ActivityInfo.qml --- a/src/activities/memory-math-minus-tux/ActivityInfo.qml +++ b/src/activities/memory-math-minus-tux/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more operations than Tux and you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-minus/ActivityInfo.qml b/src/activities/memory-math-minus/ActivityInfo.qml --- a/src/activities/memory-math-minus/ActivityInfo.qml +++ b/src/activities/memory-math-minus/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-mult-div-tux/ActivityInfo.qml b/src/activities/memory-math-mult-div-tux/ActivityInfo.qml --- a/src/activities/memory-math-mult-div-tux/ActivityInfo.qml +++ b/src/activities/memory-math-mult-div-tux/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux and you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-mult-div/ActivityInfo.qml b/src/activities/memory-math-mult-div/ActivityInfo.qml --- a/src/activities/memory-math-mult-div/ActivityInfo.qml +++ b/src/activities/memory-math-mult-div/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-mult-tux/ActivityInfo.qml b/src/activities/memory-math-mult-tux/ActivityInfo.qml --- a/src/activities/memory-math-mult-tux/ActivityInfo.qml +++ b/src/activities/memory-math-mult-tux/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found more than Tux and you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-math-mult/ActivityInfo.qml b/src/activities/memory-math-mult/ActivityInfo.qml --- a/src/activities/memory-math-mult/ActivityInfo.qml +++ b/src/activities/memory-math-mult/ActivityInfo.qml @@ -37,6 +37,6 @@ In this game, these cards are hiding the two parts of an operation. You need to find the two parts of the operation, and bring them together again. Click on a card to see what number it's hiding, then try to find the other card that goes with it, to make a whole operation. You can only turn over two cards in one go, so you need to remember where the numbers are hiding, then you can match them when you find their other half. You're doing the job of the equals sign, and the numbers need you to put them together and make a proper equality. When you do that, both those cards disappear! When you've made them all disappear, found all the operations, you've won the game!") credit: "" - section: "math memory" + section: "math memory arithmetic" createdInVersion: 0 } diff --git a/src/activities/memory-tux/ActivityInfo.qml b/src/activities/memory-tux/ActivityInfo.qml --- a/src/activities/memory-tux/ActivityInfo.qml +++ b/src/activities/memory-tux/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A set of blank cards is shown. Each card has a picture on the other side, and each picture card has a twin exactly the same. Click on a card to see its hidden picture, and try to match the twins. You can only turn over two cards at once, so you need to remember where a picture is, while you look for its twin. When you turn over the twins, they both disappear. Tux teacher do the same.") credit: "" - section: "discovery memory" + section: "fun memory" createdInVersion: 0 } diff --git a/src/activities/memory-wordnumber/ActivityInfo.qml b/src/activities/memory-wordnumber/ActivityInfo.qml --- a/src/activities/memory-wordnumber/ActivityInfo.qml +++ b/src/activities/memory-wordnumber/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("You can see some cards, but you can't see what's on the other side of them. Each card is hiding the numeral form of a number, or the word to write it.") credit: "" - section: "reading" + section: "math numeration" createdInVersion: 0 } diff --git a/src/activities/memory/ActivityInfo.qml b/src/activities/memory/ActivityInfo.qml --- a/src/activities/memory/ActivityInfo.qml +++ b/src/activities/memory/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A set of blank cards is shown. Each card has a picture on the other side, and each picture card has a twin exactly the same. Click on a card to see its hidden picture, and try to match the twins. You can only turn over two cards at once, so you need to remember where a picture is, while you look for its twin. When you turn over the twins, they both disappear.") credit: "" - section: "discovery memory" + section: "fun memory" createdInVersion: 0 } diff --git a/src/activities/memory/CardItem.qml b/src/activities/memory/CardItem.qml --- a/src/activities/memory/CardItem.qml +++ b/src/activities/memory/CardItem.qml @@ -82,7 +82,7 @@ } GCText { anchors.centerIn: parent - fontSize: largeSize + fontSizeMode: Text.Fit horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: "black" diff --git a/src/activities/menu/Menu.qml b/src/activities/menu/Menu.qml --- a/src/activities/menu/Menu.qml +++ b/src/activities/menu/Menu.qml @@ -82,7 +82,7 @@ // automatically the menu at start. target: ApplicationInfo onIsBox2DInstalledChanged: { - ActivityInfoTree.filterByTag(activity.currentTag) + ActivityInfoTree.filterByTag(activity.currentTag, currentCategory) ActivityInfoTree.filterLockedActivities() ActivityInfoTree.filterEnabledActivities() } @@ -101,27 +101,43 @@ }, { icon: activity.url + "discovery.svg", - tag: "discovery" + tag: "discovery", + categories: [{ "logic": qsTr("Logic") }, + { "arts": qsTr("Fine Arts") }, + { "music": qsTr("Music") } + ] }, { - icon: activity.url + "experience.svg", - tag: "experiment" + icon: activity.url + "sciences.svg", + tag: "sciences", + categories: [{ "experiment": qsTr("Experiment") }, + { "history": qsTr("History") }, + { "geography": qsTr("Geography") } + ] }, { icon: activity.url + "fun.svg", tag: "fun" }, { icon: activity.url + "math.svg", - tag: "math" + tag: "math", + categories: [{ "numeration": qsTr("Numeration") }, + { "arithmetic": qsTr("Arithmetic") }, + { "measures": qsTr("Measures") } + ] }, { icon: activity.url + "puzzle.svg", tag: "puzzle" }, { icon: activity.url + "reading.svg", - tag: "reading" + tag: "reading", + categories: [{ "letters": qsTr("Letters") }, + { "words": qsTr("Words") }, + { "vocabulary": qsTr("Vocabulary") } + ] }, { icon: activity.url + "strategy.svg", @@ -133,8 +149,12 @@ } ] property string currentTag: sections[0].tag + property var currentTagCategories: [] + property string currentCategory: "" /// @endcond + property string clickMode: "play" + pageComponent: Image { id: background source: activity.url + "background.svg" @@ -213,8 +233,22 @@ keyboardMode = true event.accepted = false } - Keys.onTabPressed: currentActiveGrid = ((currentActiveGrid == activitiesGrid) ? - section : activitiesGrid); + Keys.onTabPressed: { + if(currentActiveGrid == section) { + if(currentTagCategories && currentTagCategories.length != 0) { + currentActiveGrid = categoriesGrid; + } + else { + currentActiveGrid = activitiesGrid; + } + } + else if(currentActiveGrid == categoriesGrid) { + currentActiveGrid = activitiesGrid; + } + else { + currentActiveGrid = section; + } + } Keys.onEnterPressed: if(currentActiveGrid.currentItem) currentActiveGrid.currentItem.selectCurrentItem(); Keys.onReturnPressed: if(currentActiveGrid.currentItem) currentActiveGrid.currentItem.selectCurrentItem(); Keys.onRightPressed: if(currentActiveGrid.currentItem) currentActiveGrid.moveCurrentIndexRight(); @@ -273,12 +307,19 @@ function selectCurrentItem() { section.currentIndex = index activity.currentTag = modelData.tag + activity.currentTagCategories = modelData.categories + if(modelData.categories != undefined) { + currentCategory = Object.keys(modelData.categories[0])[0]; + } + else { + currentCategory = "" + } particles.burst(10) if(modelData.tag === "search") { ActivityInfoTree.filterBySearch(searchTextField.text); } else { - ActivityInfoTree.filterByTag(modelData.tag) + ActivityInfoTree.filterByTag(modelData.tag, currentCategory) ActivityInfoTree.filterLockedActivities() ActivityInfoTree.filterEnabledActivities() } @@ -353,15 +394,74 @@ } } + GridView { + id: categoriesGrid + model: currentTagCategories + anchors.top: horizontal ? section.bottom : parent.top + interactive: false + keyNavigationWraps: true + width: horizontal ? main.width : main.width - section.width + visible: activity.currentTag !== "search" + x: { + if(currentTagCategories) { + if(horizontal) { + return categoriesGrid.width / (4 * (currentTagCategories.length+1)) + } + else { + return categoriesGrid.width / (4 * (currentTagCategories.length+1)) + section.width + } + } + else { + return 0 + } + } + + cellWidth: currentTagCategories ? categoriesGrid.width / currentTagCategories.length : 0 + cellHeight: height + height: searchTextField.height + + delegate: Button { + id: button + style: GCButtonStyle { + selected: currentCategory === button.category + } + width: categoriesGrid.width / (currentTagCategories.length + 1) + height: categoriesGrid.cellHeight + text: Object.values(modelData)[0] + property string category: Object.keys(modelData)[0] + onClicked: { + selectCurrentItem() + } + + function selectCurrentItem() { + categoriesGrid.currentIndex = index + currentCategory = Object.keys(modelData)[0] + ActivityInfoTree.filterByTag(currentTag, currentCategory) + ActivityInfoTree.filterLockedActivities() + ActivityInfoTree.filterEnabledActivities() + } + } + highlight: Rectangle { + width: activityCellWidth - activitiesGrid.spacing + height: activityCellHeight - activitiesGrid.spacing + color: "#AAFFFFFF" + border.width: 3 + border.color: "black" + visible: background.keyboardMode + Behavior on x { SpringAnimation { spring: 2; damping: 0.2 } } + Behavior on y { SpringAnimation { spring: 2; damping: 0.2 } } + } + } + GridView { id: activitiesGrid anchors { top: { - if(activity.currentTag === "search") + if(searchBar.visible) return searchBar.bottom else - return horizontal ? section.bottom : parent.top + return categoriesGrid.bottom } bottom: bar.top left: horizontal ? parent.left : section.right @@ -379,6 +479,7 @@ id: delegateItem width: activityCellWidth - activitiesGrid.spacing height: activityCellHeight - activitiesGrid.spacing + enabled: clickMode === "play" || dialogChooseLevel.hasConfigOrDataset Rectangle { id: activityBackground width: parent.width @@ -396,6 +497,7 @@ sourceSize.width: width fillMode: Image.PreserveAspectFit anchors.margins: 5 + opacity: delegateItem.enabled ? 1 : 0.5 Image { source: "qrc:/gcompris/src/core/resource/difficulty" + ActivityInfoTree.menuTree[index].difficulty + ".svg"; @@ -462,6 +564,7 @@ anchors.fill: activityBackground onClicked: selectCurrentItem() } + Image { source: activity.url + (favorite ? "all.svg" : "all_disabled.svg"); anchors { @@ -477,17 +580,45 @@ } } + DialogChooseLevel { + id: dialogChooseLevel + displayDatasetAtStart: hasDataset + currentActivity: ActivityInfoTree.menuTree[index] + onClose: { + home() + } + onSaveData: { + currentLevel = dialogChooseLevel.chosenLevel + ApplicationSettings.setCurrentLevel(name, currentLevel) + } + onStartActivity: { + clickMode = "play" + // immediately pop the Dialog to load the activity + // if we don't do it immediately the page is busy + // and it does not load the activity + pageView.pop({immediate: true}) + selectCurrentItem() + } + } + function selectCurrentItem() { - if(pageView.busy) + if(pageView.busy || !delegateItem.enabled) return - particles.burst(50) - ActivityInfoTree.currentActivity = ActivityInfoTree.menuTree[index] - activityLoader.setSource("qrc:/gcompris/src/activities/" + ActivityInfoTree.menuTree[index].name, - { - 'menu': activity, - 'activityInfo': ActivityInfoTree.currentActivity - }) - if (activityLoader.status == Loader.Ready) loadActivity() + + if(clickMode == "play") { + particles.burst(50) + ActivityInfoTree.currentActivity = ActivityInfoTree.menuTree[index] + activityLoader.setSource("qrc:/gcompris/src/activities/" + ActivityInfoTree.currentActivity.name, + { + 'menu': activity, + 'activityInfo': ActivityInfoTree.currentActivity, + 'levelFolder': currentLevel + }) + if (activityLoader.status == Loader.Ready) loadActivity() + } + else { + displayDialog(dialogChooseLevel); + } } } highlight: Rectangle { @@ -532,12 +663,23 @@ upVisible: activitiesGrid.visibleArea.yPosition <= 0 ? false : true downVisible: activitiesGrid.visibleArea.yPosition >= 1 ? false : true } - + + Rectangle { + id: categories + width: horizontal ? parent.width : parent.width - (section.width+10) + height: searchTextField.height + visible: sections[activity.currentTag] === "search" + anchors { + top: horizontal ? section.bottom : categoriesGrid.top + left: horizontal ? undefined : section.right + } + } + Rectangle { id: searchBar - width: horizontal ? parent.width/2 : parent.width - (section.width+10) + width: horizontal ? parent.width/2 : parent.width - (section.width+10) height: searchTextField.height - visible: activity.currentTag === "search" + visible: clickMode === "activityConfig" || activity.currentTag === "search" anchors { top: horizontal ? section.bottom : parent.top left: horizontal ? undefined : section.right @@ -581,9 +723,20 @@ } } + GCText { + id: activitySettingsLabel + text: qsTr("Activity Settings") + visible: clickMode === "activityConfig" + width: parent.width + height: paintedHeight + anchors.verticalCenter: parent.verticalCenter + horizontalAlignment: Text.AlignHCenter + color: "black" + } TextField { id: searchTextField width: parent.width + visible: activity.currentTag === "search" textColor: "black" font.pointSize: 16 font.bold: true @@ -674,7 +827,7 @@ id: bar // No exit button on mobile, UI Guidelines prohibits it content: BarEnumContent { - value: help | config | about | (ApplicationInfo.isMobile ? 0 : exit) + value: help | config | activityConfig | about | (ApplicationInfo.isMobile ? 0 : exit) } anchors.bottom: keyboard.visible ? keyboard.top : parent.bottom onAboutClicked: { @@ -687,6 +840,15 @@ displayDialog(dialogHelp) } + onActivityConfigClicked: { + if(clickMode == "play") { + clickMode = "activityConfig" + } + else { + clickMode = "play" + } + } + onConfigClicked: { searchTextField.focus = false dialogActivityConfig.active = true @@ -721,7 +883,7 @@ } onClose: { if(activity.currentTag != "search") { - ActivityInfoTree.filterByTag(activity.currentTag) + ActivityInfoTree.filterByTag(activity.currentTag, currentCategory) ActivityInfoTree.filterLockedActivities() ActivityInfoTree.filterEnabledActivities() } else diff --git a/src/activities/menu/resource/experience.svg b/src/activities/menu/resource/sciences.svg rename from src/activities/menu/resource/experience.svg rename to src/activities/menu/resource/sciences.svg diff --git a/src/activities/missing-letter/ActivityInfo.qml b/src/activities/missing-letter/ActivityInfo.qml --- a/src/activities/missing-letter/ActivityInfo.qml +++ b/src/activities/missing-letter/ActivityInfo.qml @@ -36,6 +36,6 @@ //: Help manual manual: qsTr("An object is displayed in the main area, and an incomplete word is printed under the picture. Select the missing letter to complete the word.") credit: "" - section: "reading" + section: "reading words" createdInVersion: 0 } diff --git a/src/activities/money/ActivityInfo.qml b/src/activities/money/ActivityInfo.qml --- a/src/activities/money/ActivityInfo.qml +++ b/src/activities/money/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click or tap on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click or tap on it on the upper screen area.") credit: "" - section: "math numeration money" + section: "math money measures" createdInVersion: 0 } diff --git a/src/activities/money_back/ActivityInfo.qml b/src/activities/money_back/ActivityInfo.qml --- a/src/activities/money_back/ActivityInfo.qml +++ b/src/activities/money_back/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click on it on the upper screen area.") credit: "" - section: "math numeration money" + section: "math money measures" createdInVersion: 0 } diff --git a/src/activities/money_back_cents/ActivityInfo.qml b/src/activities/money_back_cents/ActivityInfo.qml --- a/src/activities/money_back_cents/ActivityInfo.qml +++ b/src/activities/money_back_cents/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click on it on the upper screen area.") credit: "" - section: "math numeration money" + section: "math money measures" createdInVersion: 0 } diff --git a/src/activities/money_cents/ActivityInfo.qml b/src/activities/money_cents/ActivityInfo.qml --- a/src/activities/money_cents/ActivityInfo.qml +++ b/src/activities/money_cents/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on the coins or paper money at the bottom of the screen to pay. If you want to remove a coin or note, click on it on the upper screen area.") credit: "" - section: "math numeration money" + section: "math money measures" createdInVersion: 0 } diff --git a/src/activities/mosaic/ActivityInfo.qml b/src/activities/mosaic/ActivityInfo.qml --- a/src/activities/mosaic/ActivityInfo.qml +++ b/src/activities/mosaic/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("First select the item you want to put then click on a spot on the empty area") credit: "" - section: "discovery" + section: "puzzle" createdInVersion: 0 } diff --git a/src/activities/note_names/ActivityInfo.qml b/src/activities/note_names/ActivityInfo.qml --- a/src/activities/note_names/ActivityInfo.qml +++ b/src/activities/note_names/ActivityInfo.qml @@ -38,6 +38,6 @@ //: Help manual manual: qsTr("Identify the notes correctly and score a 100% to complete a level.") credit: "" - section: "discovery sound" + section: "discovery music" createdInVersion: 9500 } diff --git a/src/activities/numbers-odd-even/NumbersOddEven.qml b/src/activities/numbers-odd-even/NumbersOddEven.qml --- a/src/activities/numbers-odd-even/NumbersOddEven.qml +++ b/src/activities/numbers-odd-even/NumbersOddEven.qml @@ -21,6 +21,8 @@ Planegame { + showTutorial: true + dataset: [ { data: "0 2 4 6 8 10 12 14 16 18 20".split(" "), @@ -39,4 +41,42 @@ showNext: false } ] + + tutorialInstructions: [ + { + "instruction": qsTr("This activity teaches about even and odd numbers."), + "instructionQml": "" + }, + { + "instruction": qsTr("Even numbers are numbers which leave remainder 0 when divided by 2."), + "instructionQml": "" + }, + + { + "instruction": qsTr("What is meant by remainder of a number?"), + "instructionQml" : "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial1.qml" + }, + + { + "instruction": qsTr("Even numbers are numbers which leave remainder 0 when divided by 2."), + "instructionQml" : "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial2.qml" + }, + { + "instruction": qsTr("Odd numbers are numbers which do not leave remainder 0 when divided by 2."), + "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial3.qml" + }, + { + "instruction": qsTr("Exercise to test your understanding."), + "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial4.qml" + }, + { + "instruction": qsTr("Exercise to test your understanding."), + "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial5.qml" + }, + { + "instruction": qsTr("Exercise to test your understanding."), + "instructionQml": "qrc:/gcompris/src/activities/numbers-odd-even/resource/Tutorial6.qml" + } + + ] } diff --git a/src/activities/numbers-odd-even/resource/Tutorial1.qml b/src/activities/numbers-odd-even/resource/Tutorial1.qml new file mode 100644 --- /dev/null +++ b/src/activities/numbers-odd-even/resource/Tutorial1.qml @@ -0,0 +1,45 @@ +/* GCompris - Tutorial1.qml + * + * Copyright (C) 2019 Deepak Kumar + * + * Authors: + * Deepak Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "../../../core" + +Rectangle { + id: tutorialRectangle + anchors.fill: parent + color: "#80FFFFFF" + + GCText { + id: remainder + text: qsTr("The remainder is the amount \"left over\" after dividing the given number with the other number.\n If 6 is divided by 2 the result is 3 and the remainder is 0.\n If 7 is divided by 2 the result is 3 and the remainder is 1.") + fontSizeMode: Text.Fit + fontSize: mediumSize + anchors.left: tutorialRectangle.left + anchors.leftMargin: parent.height * 0.01 + color: "black" + horizontalAlignment: Text.AlignLeft + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } +} diff --git a/src/activities/numbers-odd-even/resource/Tutorial2.qml b/src/activities/numbers-odd-even/resource/Tutorial2.qml new file mode 100644 --- /dev/null +++ b/src/activities/numbers-odd-even/resource/Tutorial2.qml @@ -0,0 +1,45 @@ +/* GCompris - Tutorial2.qml + * + * Copyright (C) 2019 Deepak Kumar + * + * Authors: + * Deepak Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "../../../core" + +Rectangle { + id: tutorialRectangle + anchors.fill: parent + color: "#80FFFFFF" + + GCText { + id: even + text: qsTr("For example: 12, 38, 52, 68, 102, 118, 168, 188, 502, 532, 700, 798, 842, 892, 1000. All of these numbers are even numbers as they leave remainder 0 when divided by 2.") + fontSizeMode: Text.Fit + fontSize: mediumSize + anchors.left: tutorialRectangle.left + anchors.leftMargin: parent.height * 0.01 + color: "black" + horizontalAlignment: Text.AlignLeft + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } +} diff --git a/src/activities/numbers-odd-even/resource/Tutorial3.qml b/src/activities/numbers-odd-even/resource/Tutorial3.qml new file mode 100644 --- /dev/null +++ b/src/activities/numbers-odd-even/resource/Tutorial3.qml @@ -0,0 +1,45 @@ +/* GCompris - Tutorial3.qml + * + * Copyright (C) 2019 Deepak Kumar + * + * Authors: + * Deepak Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "../../../core" + +Rectangle { + id: tutorialRectangle + anchors.fill: parent + color: "#80FFFFFF" + + GCText { + id: odd + text: qsTr("For example: 15, 19, 51, 65, 103, 119, 169, 185, 505, 533, 701, 799, 845, 897, 1001. All of these numbers are odd numbers as they do not leave remainder 0 when divided by 2.") + fontSizeMode: Text.Fit + fontSize: mediumSize + anchors.left: tutorialRectangle.left + anchors.leftMargin: parent.height * 0.01 + color: "black" + horizontalAlignment: Text.AlignLeft + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } +} diff --git a/src/activities/find_the_day/FindTheDay.qml b/src/activities/numbers-odd-even/resource/Tutorial4.qml copy from src/activities/find_the_day/FindTheDay.qml copy to src/activities/numbers-odd-even/resource/Tutorial4.qml --- a/src/activities/find_the_day/FindTheDay.qml +++ b/src/activities/numbers-odd-even/resource/Tutorial4.qml @@ -1,9 +1,10 @@ -/* GCompris - find_the_day.qml +/* GCompris - Tutorial4.qml + * - * Copyright (C) 2018 Amit Sagtani + * Copyright (C) 2019 Deepak Kumar * * Authors: - * Amit Sagtani + * Deepak Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,11 +20,12 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../calendar" -import "find_the_day_dataset.js" as Dataset +import "../../../core" -Calendar { - dataset: Dataset +TutorialBase { + firstNumber: "2" + secondNumber: "5" } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/activities/numbers-odd-even/resource/Tutorial5.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/activities/numbers-odd-even/resource/Tutorial5.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/activities/numbers-odd-even/resource/Tutorial5.qml @@ -1,9 +1,10 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Tutorial5.qml + * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2019 Deepak Kumar * * Authors: - * Bruno Coudoin + * Deepak Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,12 +20,13 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 + +import "../../../core" -import "../../core" -import "../algebra_by/" +TutorialBase { -Algebra { - onStart: { - operand.text = "+" - } + isEvenExpected: false + firstNumber: "59" + secondNumber: "52" } diff --git a/src/activities/find_the_day/FindTheDay.qml b/src/activities/numbers-odd-even/resource/Tutorial6.qml copy from src/activities/find_the_day/FindTheDay.qml copy to src/activities/numbers-odd-even/resource/Tutorial6.qml --- a/src/activities/find_the_day/FindTheDay.qml +++ b/src/activities/numbers-odd-even/resource/Tutorial6.qml @@ -1,9 +1,9 @@ -/* GCompris - find_the_day.qml +/* GCompris - Tutorial6.qml * - * Copyright (C) 2018 Amit Sagtani + * Copyright (C) 2019 Deepak Kumar * * Authors: - * Amit Sagtani + * Deepak Kumar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,11 +19,12 @@ * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../calendar" -import "find_the_day_dataset.js" as Dataset +import "../../../core" -Calendar { - dataset: Dataset +TutorialBase { + firstNumber: "111" + secondNumber: "108" } diff --git a/src/activities/numbers-odd-even/resource/TutorialBase.qml b/src/activities/numbers-odd-even/resource/TutorialBase.qml new file mode 100644 --- /dev/null +++ b/src/activities/numbers-odd-even/resource/TutorialBase.qml @@ -0,0 +1,147 @@ +/* GCompris - TutorialBase.qml + * + * Copyright (C) 2019 Deepak Kumar + * + * Authors: + * Deepak Kumar + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import "../../../core" + +Rectangle { + id: tutorialRectangle + anchors.fill: parent + color: "#80FFFFFF" + property alias firstNumber: firstNumber.textLabel + property alias secondNumber: secondNumber.textLabel + property alias message: message.text + property bool isEvenExpected: true + + GCText { + id: question + anchors { + left: parent.left + verticalCenter: parent.verticalCenter + leftMargin: parent.height * 0.1 + centerIn: parent.Center + top: parent.top + topMargin: parent.height * 0.05 + } + text: isEvenExpected ? qsTr("Choose the even number:") : qsTr("Choose the odd number:") + fontSize: mediumSize + color: "black" + horizontalAlignment: Text.AlignLeft + width: 1.8 * parent.width + height: 1.8 * parent.height + wrapMode: Text.WordWrap + z: 2 + } + + AnswerButton { + id: firstNumber + textLabel: "" + anchors { + top: parent.top + topMargin: parent.height * 0.3 + left: parent.left + leftMargin: parent.width * 0.2 + } + width: parent.width * 0.2 + height: parent.height * 0.4 + isCorrectAnswer: (isEvenExpected && Number(textLabel) % 2 === 0) || + (!isEvenExpected && Number(textLabel) % 2 !== 0) + onPressed: { + if(isCorrectAnswer) { + message.text = qsTr("Great") + } + else { + if(isEvenExpected) { + message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 1. Therefore this is an odd number.").arg(textLabel) + } + else { + message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 0. Therefore this is an even number.").arg(textLabel) + } + } + message.visible = true + messageRectangle.visible = true + } + } + + AnswerButton { + id: secondNumber + textLabel: "" + anchors { + top: parent.top + topMargin: parent.height * 0.3 + left: parent.left + leftMargin: parent.width * 0.65 + } + width: parent.width * 0.2 + height: parent.height * 0.4 + isCorrectAnswer: (isEvenExpected && Number(textLabel) % 2 === 0) || + (!isEvenExpected && Number(textLabel) % 2 !== 0) + onPressed: { + if(isCorrectAnswer) { + message.text = qsTr("Great") + } + else { + if(isEvenExpected) { + message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 1. Therefore this is an odd number.").arg(textLabel) + } + else { + message.text = qsTr("There is an error: when divided by 2, %1 leaves remainder as 0. Therefore this is an even number.").arg(textLabel) + } + } + message.visible = true + messageRectangle.visible = true + } + } + + Rectangle { + id: messageRectangle + anchors { + horizontalCenter: parent.horizontalCenter + top: parent.top + topMargin: parent.height * 0.75 + } + opacity: 0.8 + radius: 10 + border.width: 6 + color: "white" + border.color: "#87A6DD" + width: parent.width * 1.15 + height: parent.height * 0.4 + visible: false + + GCText { + id: message + anchors { + centerIn: parent + margins: parent.border.width+1 + } + text: "" + fontSizeMode: Text.Fit + fontSize: smallSize + color: "black" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + width: parent.width + height: parent.height + wrapMode: Text.WordWrap + z: 2 + } + } +} diff --git a/src/activities/paintings/ActivityInfo.qml b/src/activities/paintings/ActivityInfo.qml --- a/src/activities/paintings/ActivityInfo.qml +++ b/src/activities/paintings/ActivityInfo.qml @@ -39,6 +39,6 @@ prerequisite: qsTr("Mouse-manipulation: movement, drag and drop") //: Help manual manual: qsTr("Drag the image parts from the box on the left to create a painting on the main board.") - section: "puzzle" + section: "discovery arts puzzle" createdInVersion: 5000 } diff --git a/src/activities/photo_hunter/ActivityInfo.qml b/src/activities/photo_hunter/ActivityInfo.qml --- a/src/activities/photo_hunter/ActivityInfo.qml +++ b/src/activities/photo_hunter/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Observe the two pictures carefully. There are some slight differences. When you find a difference you must click on it.") credit: "" - section: "puzzle" + section: "fun" createdInVersion: 6000 } diff --git a/src/activities/piano_composition/ActivityInfo.qml b/src/activities/piano_composition/ActivityInfo.qml --- a/src/activities/piano_composition/ActivityInfo.qml +++ b/src/activities/piano_composition/ActivityInfo.qml @@ -53,6 +53,6 @@ - F1 to F5: Corresponding black keys in the order on the displayed octave. ") credit: qsTr("The synthesizer original code is https://github.com/vsr83/miniSynth") - section: "discovery sound_group" + section: "discovery music" createdInVersion: 9500 } diff --git a/src/activities/planegame/Planegame.qml b/src/activities/planegame/Planegame.qml --- a/src/activities/planegame/Planegame.qml +++ b/src/activities/planegame/Planegame.qml @@ -36,6 +36,8 @@ Keys.onReleased: Activity.processReleasedKey(event) property var dataset + property var tutorialInstructions + property bool showTutorial: false property int oldWidth: width onWidthChanged: { @@ -60,9 +62,10 @@ sourceSize.width: parent.width Component.onCompleted: { - activity.start.connect(start) - activity.stop.connect(stop) + activity.start.connect(start) + activity.stop.connect(stop) } + QtObject { id: items property alias background: background @@ -74,9 +77,38 @@ property GCSfx audioEffects: activity.audioEffects property alias movePlaneTimer: movePlaneTimer property alias cloudCreation: cloudCreation + property bool showTutorial: activity.showTutorial + } + + onStart: { Activity.start(items, dataset) } + onStop: { Activity.stop() } + + //Tutorial section starts + Loader { + active: showTutorial + anchors.fill: parent + z: 1 + sourceComponent: tutorialComponent + Component { + id: tutorialComponent + Image { + id: tutorialImage + source: "../digital_electricity/resource/texture01.png" + anchors.fill: parent + fillMode: Image.Tile + Tutorial { + id: tutorialSection + tutorialDetails: tutorialInstructions + useImage: false + onSkipPressed: { + showTutorial = false + Activity.initLevel() + } + } + } + } } - onStart: Activity.start(items, dataset) - onStop: Activity.stop(); + // Tutorial section ends MultiPointTouchArea { anchors.fill: parent @@ -95,7 +127,7 @@ Bar { id: bar - content: BarEnumContent { value: help | home | level } + content: BarEnumContent { value: items.showTutorial ? (help | home) : (help | home | level) } onHelpClicked: displayDialog(dialogHelp) onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() @@ -109,7 +141,7 @@ Score { id: score - visible: false + visible: !showTutorial fontSize: background.width >= background.height ? internalTextComponent.largeSize : internalTextComponent.mediumSize height: internalTextComponent.height + 10 anchors.bottom: bar.top @@ -143,6 +175,7 @@ Plane { id: plane + visible: !showTutorial background: background } diff --git a/src/activities/planegame/planegame.js b/src/activities/planegame/planegame.js --- a/src/activities/planegame/planegame.js +++ b/src/activities/planegame/planegame.js @@ -52,7 +52,9 @@ dataset = dataset_ numberOfLevel = dataset.length currentLevel = 0 - initLevel() + if(items.showTutorial === false) { + initLevel() + } } function stop() { @@ -80,8 +82,8 @@ items.movePlaneTimer.stop(); items.cloudCreation.stop() - items.score.visible = dataset[currentLevel].showNext items.score.message = dataset[currentLevel].data[currentSubLevel] + items.score.visible = dataset[currentLevel].showNext upPressed = false downPressed = false @@ -96,15 +98,15 @@ items.movePlaneTimer.interval = 1000 items.movePlaneTimer.start(); items.cloudCreation.start() - // Inject the first cloud now + + //Inject the first cloud now createCloud() } function nextLevel() { if(numberOfLevel <= ++currentLevel) { currentLevel = 0 } - initLevel(); } diff --git a/src/activities/play_piano/ActivityInfo.qml b/src/activities/play_piano/ActivityInfo.qml --- a/src/activities/play_piano/ActivityInfo.qml +++ b/src/activities/play_piano/ActivityInfo.qml @@ -39,6 +39,6 @@ //: Help manual manual: qsTr("The notes you see will be played to you. Click on the corresponding keys on the keyboard that match the notes you hear and see.
    Levels 1-5 will offer treble clef to practice and levels 6-10 will offer bass clef.") credit: qsTr("The synthesizer original code is https://github.com/vsr83/miniSynth") - section: "discovery sound_group" + section: "discovery music" createdInVersion: 9500 } diff --git a/src/activities/play_rhythm/ActivityInfo.qml b/src/activities/play_rhythm/ActivityInfo.qml --- a/src/activities/play_rhythm/ActivityInfo.qml +++ b/src/activities/play_rhythm/ActivityInfo.qml @@ -39,6 +39,6 @@ //: Help manual manual: qsTr("Listen to the rhythm played, and follow along with the music. When you're ready to perform the identical rhythm, click the drum to the rhythm. If you clicked tempo at correct times, another rhythm is displayed. If not, you must try again.
    Odd levels display a vertical playing line when you click the drum, which helps you see when to click, to follow the rhythm. Click on the drum when the line is in the middle of the notes.
    Even levels are harder, because there is no vertical playing line. You must read the rhythm, and click it back in tempo. Click the metronome to hear the quarter note tempos.
    Click on the reload button to replay the rhythm.") credit: "" - section: "discovery sound_group" + section: "discovery music" createdInVersion: 9500 } diff --git a/src/activities/programmingMaze/ActivityInfo.qml b/src/activities/programmingMaze/ActivityInfo.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/ActivityInfo.qml @@ -0,0 +1,59 @@ +/* GCompris - ActivityInfo.qml + * + * Copyright (C) 2015 Siddhesh Suthar + * Copyright (C) 2018 Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import GCompris 1.0 + +ActivityInfo { + name: "programmingMaze/ProgrammingMaze.qml" + difficulty: 3 + icon: "programmingMaze/programmingMaze.svg" + author: "Aman Kumar Gupta <gupta2140@gmail.com>" + demo: false + //: Activity title + title: qsTr("Programming Maze") + //: Help title + description: qsTr("This activity teaches the kid to program the Tux to its goal using + simple instructions like move forward, turn left etc") + // intro: "Arrange the instructions and traverse the correct path to reach the fish." + //: Help goal + goal: qsTr("Tux is hungry. Help him find fish by programming him to the correct ice spot.") + //: Help prerequisite + prerequisite: qsTr("Can read instructions. Thinking of the path logically") + //: Help manual + manual: qsTr("Choose the instructions from given menu. Arrange the instruction in an + order so that they can make the Tux reach to his goal.

    ") + + qsTr("Keyboard Controls:

    ") + + qsTr("1. To navigate through instructions in the current code area having keyboard focus:") + + qsTr("
    • Arrow keys

    ") + + qsTr("2. To append an instruction from instruction area to the main/procedure code area:") + + qsTr("
    • Select an instruction from the instruction area by pressing SPACE.
    • ") + + qsTr("
    • Navigate to the code areas by pressing TAB, then press SPACE to append the instruction.

    ") + + qsTr("3. To add an instruction at any particular position in the main/procedure code area:") + + qsTr("
    • Navigate to the instruction at that position and press SPACE to add the selected instruction from the instruction area.

    ") + + qsTr("4. To delete the current navigated instruction in the main/procedure code area:") + + qsTr("
    • DELETE.

    ") + + qsTr("5. To edit an instruction in the main/procedure code area:") + + qsTr("
    • Navigate to the instruction to edit using Arrow keys.
    • ") + + qsTr("
    • Press SPACE to select it.
    • ") + + qsTr("
    • Then navigate to the instruction area using TAB and select the new instruction by pressing SPACE.

    ") + + qsTr("6. To run the code or reset Tux when it fails to reach the fish:") + + qsTr("
    • ENTER or RETURN.
    ") + credit: "" + section: "fun" + createdInVersion: 9800 +} diff --git a/src/activities/programmingMaze/CMakeLists.txt b/src/activities/programmingMaze/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/CMakeLists.txt @@ -0,0 +1 @@ +GCOMPRIS_ADD_RCC(activities/programmingMaze *.qml *.svg *.js resource/*) diff --git a/src/activities/programmingMaze/CodeArea.qml b/src/activities/programmingMaze/CodeArea.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/CodeArea.qml @@ -0,0 +1,343 @@ +/* GCompris - CodeArea.qml + * + * Copyright (C) 2015 Siddhesh Suthar + * Copyright (C) 2018 Aman Kumar Gupta + * + * Authors: + * Siddhesh Suthar + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "programmingMaze.js" as Activity + +GridView { + id: codeArea + z: 1 + width: background.width * 0.4 + height: background.height * 0.29 + cellWidth: background.buttonWidth + cellHeight: background.buttonHeight + + interactive: false + model: currentModel + clip: true + + highlight: Rectangle { + width: buttonWidth + height: buttonHeight + color: "lightsteelblue" + border.width: 3.5 * ApplicationInfo.ratio + border.color: "purple" + opacity: 0.5 + z: 11 + radius: width / 18 + } + highlightFollowsCurrentItem: true + highlightMoveDuration: 500 + keyNavigationWraps: true + focus: true + + property ListModel currentModel + property int draggedItemIndex: -1 + property int possibleDropIndex: -1 + property int possibleDropRemoveIndex: -1 + property int xCoordinateInPossibleDrop: -1 + property int yCoordinateInPossibleDrop: -1 + + /** + * Stores the index of the item which is clicked to edit. + * + * If the index of the item on 2nd click is same as initialEditItemIndex , then the indicator will become invisible, as it means that initially wanted to edit that instruction, but now we want to deselect it. + * + * If the index of the item on 2nd click is different from initialEditItemIndex, the edit indicator moves to the new item as we now want to edit that one. + */ + property int initialEditItemIndex: -1 + + // Tells if any instruction is selected for editing. + property bool isEditingInstruction: false + + signal spaceKeyPressed + signal tabKeyPressed + signal deleteKeyPressed + + /** + * There can be three possibilities here: + * + * 1. We want to insert an instruction at the currentIndex position. + * 2. We want to select an instruction to edit, or deselect it. + * 3. We want to append an instruction. + */ + onSpaceKeyPressed: { + if(currentIndex != -1) { + if(instructionArea.instructionToInsert && (items.numberOfInstructionsAdded < items.maxNumberOfInstructionsAllowed)) { + var isInstructionInserted = appendInstruction() + if(isInstructionInserted) + currentModel.move(currentModel.count - 1, currentIndex, 1) + } + else { + if((initialEditItemIndex == currentIndex) || (initialEditItemIndex == -1 && currentIndex != -1)) { + codeArea.isEditingInstruction = !codeArea.isEditingInstruction + } + + if(!codeArea.isEditingInstruction) + codeArea.initialEditItemIndex = -1 + else + initialEditItemIndex = currentIndex + + var calculatedX = (initialEditItemIndex % 4) * codeArea.cellWidth + var calculatedY = Math.floor(initialEditItemIndex / 4) * codeArea.cellHeight + editInstructionIndicator.x = calculatedX + 1.5 * ApplicationInfo.ratio + editInstructionIndicator.y = calculatedY + 1.5 * ApplicationInfo.ratio + } + } + else if((items.numberOfInstructionsAdded < items.maxNumberOfInstructionsAllowed) && instructionArea.instructionToInsert) + appendInstruction() + } + + onDeleteKeyPressed: { + if(currentIndex != -1) { + currentModel.remove(currentIndex) + items.numberOfInstructionsAdded-- + } + resetEditingValues() + } + + function appendInstruction() { + if(background.insertIntoMain || (instructionArea.instructionToInsert != "call-procedure")) { + currentModel.append({ "name": instructionArea.instructionToInsert }) + items.numberOfInstructionsAdded++ + instructionArea.instructionToInsert = "" + return true + } + return false + } + + function resetEditingValues() { + initialEditItemIndex = -1 + isEditingInstruction = false + } + + Item { + id: dropPositionIndicator + visible: false + height: background.buttonHeight + width: 3 * ApplicationInfo.ratio + + Rectangle { + visible: parent.visible + anchors.centerIn: parent + width: parent.width + height: parent.height - 3 * ApplicationInfo.ratio + color: "blue" + radius: width + } + + states: [ + State { + name: "shown" + when: codeArea.possibleDropIndex != -1 + PropertyChanges { + target: dropPositionIndicator + visible: true + x: Math.floor(codeArea.xCoordinateInPossibleDrop / codeArea.cellWidth) * + codeArea.cellWidth - 1.5 * ApplicationInfo.ratio + y: Math.floor(codeArea.yCoordinateInPossibleDrop / codeArea.cellHeight) * + codeArea.cellHeight + 1.5 * ApplicationInfo.ratio + } + } + ] + } + + Rectangle { + id: editInstructionIndicator + visible: codeArea.isEditingInstruction && codeArea.count != 0 + width: background.buttonWidth - 3 * ApplicationInfo.ratio + height: background.buttonHeight - 3 * ApplicationInfo.ratio + color: "red" + border.color: "black" + border.width: 1.5 * ApplicationInfo.ratio + opacity: 0.2 + radius: width / 18 + } + + MouseArea { + id: codeAreaMouse + anchors.fill: parent + enabled: items.isTuxMouseAreaEnabled || items.isRunCodeEnabled + onPressed: { + codeArea.draggedItemIndex = codeArea.indexAt(mouseX,mouseY) + if(codeArea.draggedItemIndex === -1) { + constraintInstruction.changeConstraintInstructionOpacity() + codeArea.isEditingInstruction = false + } + else if(!codeArea.isEditingInstruction) + codeArea.initialEditItemIndex = codeArea.draggedItemIndex + } + + onPositionChanged: { + var newPos = codeArea.indexAt(mouseX, mouseY) + var calculatedX = Math.floor(mouseX / codeArea.cellWidth) * codeArea.cellWidth + var previousIndexPosition = codeArea.indexAt(calculatedX - 1, mouseY) + + // If the user want to move an item to the end, then the new position will be after the last instruction. + if(newPos == -1 && previousIndexPosition != -1) + newPos = previousIndexPosition + 1 + + codeArea.isEditingInstruction = false + codeArea.xCoordinateInPossibleDrop = mouseX + codeArea.yCoordinateInPossibleDrop = mouseY + codeArea.possibleDropIndex = newPos + } + + onReleased: { + if(codeArea.draggedItemIndex != -1) { + var draggedIndex = codeArea.draggedItemIndex + var dropIndex = codeArea.indexAt(mouseX,mouseY) + var calculatedX = Math.floor(mouseX / codeArea.cellWidth) * codeArea.cellWidth + var calculatedY = Math.floor(mouseY / codeArea.cellHeight) * codeArea.cellHeight + codeArea.draggedItemIndex = -1 + + if(dropIndex == -1) { + var previousIndexPosition = codeArea.indexAt(calculatedX - 1, mouseY) + if(previousIndexPosition == -1) { + currentModel.remove(draggedIndex) + items.numberOfInstructionsAdded-- + } + else { + currentModel.append(currentModel.get(draggedIndex)) + currentModel.remove(draggedIndex) + } + codeArea.initialEditItemIndex = -1 + } + else if(draggedIndex != dropIndex) { + if(dropIndex <= draggedIndex) { + // Moving instruction from right to left + currentModel.move(draggedIndex, dropIndex, 1) + } + else { + // Moving instruction from left to right + currentModel.move(draggedIndex, dropIndex - 1, 1) + } + codeArea.initialEditItemIndex = -1 + } + else { + /** + * If the index of the initially selected instruction (if any) is same as the currently selected instruction, + * deselect it for editing, else make the current instruction as the initially editable item and move the edit indicator to that position. + */ + if(codeArea.initialEditItemIndex == dropIndex) { + codeArea.isEditingInstruction = !codeArea.isEditingInstruction + if(!codeArea.isEditingInstruction) + codeArea.initialEditItemIndex = -1 + } + else + codeArea.initialEditItemIndex = draggedIndex + + editInstructionIndicator.x = calculatedX + 1.5 * ApplicationInfo.ratio + editInstructionIndicator.y = calculatedY + 1.5 * ApplicationInfo.ratio + } + codeArea.possibleDropIndex = -1 + } + } + } + + delegate: Item { + id: itemParent + width: background.buttonWidth + height: background.buttonHeight + + Rectangle { + id: circlePlaceholder + width: 30 * ApplicationInfo.ratio + height: width + radius: width + anchors.centerIn: parent + color: "#cecece" + opacity: 0 + } + + Item { + id: item + width: background.buttonWidth + height: background.buttonHeight + state: "inactive" + opacity: 1 + + Behavior on width { NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } } + Behavior on height { NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } } + Behavior on opacity {NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } } + + states: [ + State { + name: "inDrag" + when: index == codeArea.draggedItemIndex + + PropertyChanges { target: circlePlaceholder; opacity: 1 } + PropertyChanges { target: item; parent: codeArea } + PropertyChanges { target: item; width: background.buttonWidth * 0.80 } + PropertyChanges { target: item; height: background.buttonHeight * 0.80 } + PropertyChanges { target: item; anchors.centerIn: undefined } + PropertyChanges { target: item; x: codeAreaMouse.mouseX - item.width / 2 } + PropertyChanges { target: item; y: codeAreaMouse.mouseY - item.height / 2 } + }, + State { + name: "greyedOut" + when: (codeArea.draggedItemIndex != -1) && (codeArea.draggedItemIndex != index) + + PropertyChanges { target: item; opacity: 0.7 } + }, + State { + name: "inactive" + when: (codeArea.draggedItemIndex == -1) || (codeArea.draggedItemIndex == index) + + PropertyChanges { target: item; opacity: 1.0 } + } + ] + + transitions: [ + Transition { + from: "inDrag" + to: "*" + PropertyAnimation { + target: item + properties: "scale, opacity" + from: 0.7 + to: 1.0 + duration: 200 + } + } + ] + + Rectangle { + width: parent.width - 3 * ApplicationInfo.ratio + height: parent.height - 3 * ApplicationInfo.ratio + border.width: 1.2 * ApplicationInfo.ratio + border.color: "black" + anchors.centerIn: parent + radius: width / 18 + + Image { + id: codeAreaIcon + source: Activity.url + name + ".svg" + sourceSize { width: parent.width / 1.2; height: parent.height / 1.2 } + anchors.centerIn: parent + } + } + } + } +} diff --git a/src/activities/programmingMaze/Dataset.qml b/src/activities/programmingMaze/Dataset.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/Dataset.qml @@ -0,0 +1,248 @@ +/* GCompris - Dataset.qml + * + * Copyright (C) 2018 Aman Kumar Gupta + * + * Authors: + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 + +QtObject { + property var levels: [ + // Level one + { + "map": [ + {'x': 1, 'y': 2}, + {'x': 2, 'y': 2}, + {'x': 3, 'y': 2} + ], + "fish": {'x': 3, 'y': 2}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right" + ], + "maxNumberOfInstructions": 4 + }, + // Level two + { + "map": [ + {'x': 1, 'y': 3}, + {'x': 2, 'y': 3}, + {'x': 2, 'y': 2}, + {'x': 2, 'y': 1}, + {'x': 3, 'y': 1} + ], + "fish": {'x': 3, 'y': 1}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right" + ], + "maxNumberOfInstructions": 8 + }, + // Level three + { + "map": [ + {'x': 0, 'y': 3}, + {'x': 0, 'y': 2}, + {'x': 0, 'y': 1}, + {'x': 1, 'y': 1}, + {'x': 2, 'y': 1}, + {'x': 3, 'y': 1}, + {'x': 3, 'y': 2}, + {'x': 3, 'y': 3}, + {'x': 2, 'y': 3} + ], + "fish": {'x': 2, 'y': 3}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right" + ], + "maxNumberOfInstructions": 14 + }, + // Level four + { + "map": [ + {'x': 0, 'y': 1}, + {'x': 1, 'y': 1}, + {'x': 1, 'y': 0}, + {'x': 2, 'y': 0}, + {'x': 3, 'y': 0}, + {'x': 4, 'y': 0}, + {'x': 1, 'y': 2}, + {'x': 1, 'y': 3}, + {'x': 2, 'y': 3}, + {'x': 3, 'y': 3}, + {'x': 4, 'y': 3}, + {'x': 4, 'y': 2} + ], + "fish": {'x': 4, 'y': 2}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right" + ], + "maxNumberOfInstructions": 14 + }, + // Level five + { + "map": [ + {'x': 0, 'y': 1}, + {'x': 0, 'y': 0}, + {'x': 1, 'y': 0}, + {'x': 2, 'y': 0}, + {'x': 3, 'y': 0}, + {'x': 4, 'y': 0}, + {'x': 0, 'y': 2}, + {'x': 0, 'y': 3}, + {'x': 1, 'y': 3}, + {'x': 2, 'y': 3}, + {'x': 3, 'y': 3}, + {'x': 4, 'y': 3}, + {'x': 2, 'y': 1}, + {'x': 2, 'y': 2}, + {'x': 4, 'y': 2} + ], + "fish": {'x': 4, 'y': 2}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right" + ], + "maxNumberOfInstructions": 15 + }, + // Level six + { + "map": [ + {'x': 1, 'y': 1}, + {'x': 2, 'y': 1}, + {'x': 3, 'y': 1}, + {'x': 3, 'y': 2}, + {'x': 3, 'y': 3}, + {'x': 2, 'y': 3}, + {'x': 1, 'y': 3} + ], + "fish": {'x': 1, 'y': 3}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right", + "call-procedure" + ], + "maxNumberOfInstructions": 7 + }, + // Level seven + { + "map": [ + {'x': 0, 'y': 3}, + {'x': 1, 'y': 3}, + {'x': 2, 'y': 3}, + {'x': 2, 'y': 2}, + {'x': 2, 'y': 1}, + {'x': 3, 'y': 1}, + {'x': 4, 'y': 1}, + {'x': 4, 'y': 2}, + {'x': 4, 'y': 3} + ], + "fish": {'x': 4, 'y': 3}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right", + "call-procedure" + ], + "maxNumberOfInstructions": 10 + }, + // Level eight + { + "map": [ + {'x': 0, 'y': 3}, + {'x': 1, 'y': 3}, + {'x': 1, 'y': 2}, + {'x': 2, 'y': 2}, + {'x': 2, 'y': 1}, + {'x': 3, 'y': 1}, + {'x': 3, 'y': 0}, + {'x': 4, 'y': 0} + ], + "fish": {'x': 4, 'y': 0}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right", + "call-procedure" + ], + "maxNumberOfInstructions": 12 + }, + // Level nine + { + "map": [ + {'x': 1, 'y': 1}, + {'x': 0, 'y': 0}, + {'x': 1, 'y': 0}, + {'x': 2, 'y': 0}, + {'x': 2, 'y': 1}, + {'x': 3, 'y': 0}, + {'x': 4, 'y': 0}, + {'x': 4, 'y': 1}, + {'x': 4, 'y': 2}, + {'x': 4, 'y': 3}, + {'x': 3, 'y': 3}, + {'x': 2, 'y': 3}, + {'x': 1, 'y': 3}, + {'x': 0, 'y': 3}, + {'x': 0, 'y': 2} + ], + "fish": {'x': 0, 'y': 2}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right", + "call-procedure" + ], + "maxNumberOfInstructions": 14 + }, + // Level ten + { + "map": [ + {'x': 0, 'y': 3}, + {'x': 0, 'y': 2}, + {'x': 0, 'y': 1}, + {'x': 0, 'y': 0}, + {'x': 1, 'y': 0}, + {'x': 2, 'y': 0}, + {'x': 2, 'y': 1}, + {'x': 2, 'y': 2}, + {'x': 2, 'y': 3}, + {'x': 3, 'y': 3}, + {'x': 4, 'y': 3}, + {'x': 4, 'y': 2}, + {'x': 4, 'y': 1}, + {'x': 4, 'y': 0} + ], + "fish": {'x': 4, 'y': 0}, + "instructions": [ + "move-forward", + "turn-left", + "turn-right", + "call-procedure" + ], + "maxNumberOfInstructions": 15 + } + ] +} diff --git a/src/activities/programmingMaze/HeaderArea.qml b/src/activities/programmingMaze/HeaderArea.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/HeaderArea.qml @@ -0,0 +1,63 @@ +/* GCompris - HeaderArea.qml + * + * Copyright (C) 2018 Aman Kumar Gupta + * + * Authors: + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../core" + +Rectangle { + id: header + width: background.width * 0.4 + height: background.height / 10 + border.width: 2 * ApplicationInfo.ratio + border.color: "black" + color: "transparent" + + property real headerOpacity + property string headerText + + signal clicked + + Image { + width: parent.width - 2 * parent.border.width + height: parent.height - 2 * parent.border.width + anchors.centerIn: parent + source: "qrc:/gcompris/src/activities/guesscount/resource/backgroundW02.svg" + opacity: header.headerOpacity + + GCText { + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + width: parent.width + height: parent.height + fontSizeMode: Font.DemiBold + minimumPointSize: 7 + fontSize: mediumSize + wrapMode: Text.WordWrap + color: "white" + text: header.headerText + } + } + + MouseArea { + anchors.fill: parent + onClicked: header.clicked() + } +} diff --git a/src/activities/programmingMaze/InstructionArea.qml b/src/activities/programmingMaze/InstructionArea.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/InstructionArea.qml @@ -0,0 +1,182 @@ +/* GCompris - InstructionArea.qml + * + * Copyright (C) 2018 Aman Kumar Gupta + * + * Authors: + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../core" + +import "programmingMaze.js" as Activity + +GridView { + id: instructionArea + width: parent.width * 0.5 + height: parent.height * 0.17 + cellWidth: background.buttonWidth + cellHeight: background.buttonHeight + + anchors.left: parent.left + anchors.top: mazeModel.bottom + anchors.topMargin: background.height * 0.4 + + interactive: false + model: instructionModel + + header: HeaderArea { + width: instructionArea.width + height: background.height / 11 + headerOpacity: 1 + headerText: qsTr("Choose the instructions") + } + + property string instructionToInsert + + signal spaceKeyPressed + signal tabKeyPressed + + onSpaceKeyPressed: { + if(instructionArea.currentIndex != -1) + instructionArea.currentItem.selectCurrentInstruction() + } + + onTabKeyPressed: { + instructionArea.currentIndex = -1 + background.areaWithKeyboardInput = mainFunctionCodeArea + } + + highlight: Rectangle { + width: buttonWidth - 3 * ApplicationInfo.ratio + height: buttonHeight * 1.18 - 3 * ApplicationInfo.ratio + color: "lightsteelblue" + border.width: 3.5 * ApplicationInfo.ratio + border.color: "purple" + z: 2 + radius: width / 18 + opacity: 0.6 + visible: activity.keyboardNavigationVisible + } + highlightFollowsCurrentItem: true + keyNavigationWraps: true + + delegate: Item { + id: instructionItem + width: background.buttonWidth + height: background.buttonHeight * 1.18 + + Rectangle { + id: imageHolder + width: parent.width - 3 * ApplicationInfo.ratio + height: parent.height - 3 * ApplicationInfo.ratio + border.width: 1.2 * ApplicationInfo.ratio + border.color: "black" + anchors.centerIn: parent + radius: width / 18 + + Image { + id: icon + source: Activity.url + name + ".svg" + sourceSize { + width: parent.width / 1.2 + height: parent.height / 1.2 + } + anchors.centerIn: parent + } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + enabled: (items.isTuxMouseAreaEnabled || items.isRunCodeEnabled) && ((items.numberOfInstructionsAdded < items.maxNumberOfInstructionsAllowed) || procedureCodeArea.isEditingInstruction || mainFunctionCodeArea.isEditingInstruction) + + onPressed: instructionItem.checkModelAndInsert() + } + + function selectCurrentInstruction() { + if(!mainFunctionCodeArea.isEditingInstruction && !procedureCodeArea.isEditingInstruction) { + instructionArea.instructionToInsert = name + playClickedAnimation() + } + else { + if(mainFunctionCodeArea.isEditingInstruction) + insertIntoModel(mainFunctionModel, mainFunctionCodeArea) + if(procedureCodeArea.isEditingInstruction && (name != Activity.CALL_PROCEDURE)) + insertIntoModel(procedureModel, procedureCodeArea) + } + } + + function checkModelAndInsert() { + if(items.constraintInstruction.opacity) + items.constraintInstruction.hide() + + if(!background.insertIntoMain && (name != Activity.CALL_PROCEDURE)) + insertIntoModel(procedureModel, procedureCodeArea) + else if(background.insertIntoMain) + insertIntoModel(mainFunctionModel, mainFunctionCodeArea) + } + + /** + * If we are adding an instruction, append it to the model if number of instructions added is less than the maximum number of instructions allowed. + * If editing, replace it with the selected instruction in the code area. + */ + function insertIntoModel(model, area) { + if(!area.isEditingInstruction) { + if(items.numberOfInstructionsAdded >= items.maxNumberOfInstructionsAllowed) + constraintInstruction.changeConstraintInstructionOpacity() + else { + playClickedAnimation() + model.append({ "name": name }) + items.numberOfInstructionsAdded++ + } + } + else { + playClickedAnimation() + model.set(area.initialEditItemIndex, {"name": name}, 1) + area.resetEditingValues() + } + } + + /** + * If two successive clicks on the same icon are made very fast, stop the ongoing animation and set the scale back to 1. + * Then start the animation for next click. + * This gives proper feedback of multiple clicks. + */ + function playClickedAnimation() { + clickedAnimation.stop() + icon.scale = 1 + clickedAnimation.start() + } + + SequentialAnimation { + id: clickedAnimation + PropertyAnimation { + target: imageHolder + property: "scale" + to: 0.8 + duration: 150 + } + + PropertyAnimation { + target: imageHolder + property: "scale" + to: 1 + duration: 150 + } + } + } +} diff --git a/src/activities/programmingMaze/ProgrammingMaze.qml b/src/activities/programmingMaze/ProgrammingMaze.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/ProgrammingMaze.qml @@ -0,0 +1,410 @@ +/* GCompris - ProgrammingMaze.qml + * + * Copyright (C) 2015 Siddhesh Suthar + * Copyright (C) 2018 Aman Kumar Gupta + * + * Authors: + * Siddhesh Suthar + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../core" + +import "programmingMaze.js" as Activity + +ActivityBase { + id: activity + + onStart: focus = true + onStop: {} + + property int oldWidth: width + onWidthChanged: { + Activity.repositionObjectsOnWidthChanged(width / oldWidth) + oldWidth = width + } + + property int oldHeight: height + onHeightChanged: { + Activity.repositionObjectsOnHeightChanged(height / oldHeight) + oldHeight = height + } + + property bool keyboardNavigationVisible: false + property string mode: "basic" + property string datasetUrl: "qrc:/gcompris/src/activities/programmingMaze/Dataset.qml" + + pageComponent: Image { + id: background + source: "qrc:/gcompris/src/activities/programmingMaze/resource/background.svg" + fillMode: Image.PreserveAspectCrop + sourceSize.width: parent.width + + signal start + signal stop + + property bool insertIntoMain: true + property alias items: items + property int buttonWidth: background.width / 10 + property int buttonHeight: background.height / 15.3 + + Component.onCompleted: { + activity.start.connect(start) + activity.stop.connect(stop) + } + + // Add here the QML items you need to access in javascript + QtObject { + id: items + property Item main: activity.main + property alias background: background + property alias bar: bar + property alias bonus: bonus + property GCSfx audioEffects: activity.audioEffects + property alias mazeModel: mazeModel + property alias instructionModel: instructionModel + property alias mainFunctionModel: mainFunctionModel + property alias mainFunctionCodeArea: mainFunctionCodeArea + property alias procedureModel: procedureModel + property alias procedureCodeArea: procedureCodeArea + property alias instructionArea: instructionArea + property alias player: player + property alias constraintInstruction: constraintInstruction + property alias tutorialImage: tutorialImage + property alias fish: fish + property alias dataset: dataset + property bool isRunCodeEnabled: true + property bool isTuxMouseAreaEnabled: false + property bool currentLevelContainsProcedure + property int maxNumberOfInstructionsAllowed + property int numberOfInstructionsAdded + } + + // This function catches the signal emitted after completion of movement of Tux after executing each instruction. + function checkSuccessAndExecuteNextInstruction() { + Activity.checkSuccessAndExecuteNextInstruction() + } + + // This function catches the signal emitted after finding a dead-end in any of the executing instruction. + function deadEnd() { + Activity.deadEnd() + } + + Loader { + id: dataset + } + + onStart: { Activity.start(items, mode, datasetUrl) } + onStop: { Activity.stop() } + + property var areaWithKeyboardInput: instructionArea + + onAreaWithKeyboardInputChanged: activeCodeAreaIndicator.changeActiveCodeAreaIndicator(areaWithKeyboardInput) + + Keys.enabled: items.isTuxMouseAreaEnabled || items.isRunCodeEnabled + Keys.onPressed: { + activity.keyboardNavigationVisible = true + if(event.key === Qt.Key_Left) + areaWithKeyboardInput.moveCurrentIndexLeft() + if(event.key === Qt.Key_Right) + areaWithKeyboardInput.moveCurrentIndexRight() + if(event.key === Qt.Key_Up) + areaWithKeyboardInput.moveCurrentIndexUp() + if(event.key === Qt.Key_Down) + areaWithKeyboardInput.moveCurrentIndexDown() + if(event.key === Qt.Key_Space) + areaWithKeyboardInput.spaceKeyPressed() + if(event.key === Qt.Key_Enter || event.key === Qt.Key_Return) + runCodeOrResetTux() + if(event.key === Qt.Key_Tab) + areaWithKeyboardInput.tabKeyPressed() + if(event.key === Qt.Key_Delete && activeCodeAreaIndicator.top != instructionArea.top) { + areaWithKeyboardInput.deleteKeyPressed() + } + } + + function runCodeOrResetTux() { + if(!Activity.deadEndPoint) + runCodeMouseArea.executeCode() + else + Activity.initLevel() + } + + ListModel { + id: instructionModel + } + + ListModel { + id: mainFunctionModel + } + + ListModel { + id: procedureModel + } + + Rectangle { + id: constraintInstruction + anchors.left: parent.left + anchors.bottom: runCode.top + width: parent.width / 2.3 + height: parent.height / 8.9 + radius: 10 + z: 3 + color: "#E8E8E8" //paper white + border.width: 3 * ApplicationInfo.ratio + border.color: "#87A6DD" //light blue + + Behavior on opacity { PropertyAnimation { duration: 200 } } + + function changeConstraintInstructionOpacity() { + if(opacity) + constraintInstruction.hide() + else + constraintInstruction.show() + } + + function show() { + if(instructionText.text) + opacity = 0.8 + } + function hide() { + opacity = 0 + } + + GCText { + id: instructionText + anchors.fill: parent + anchors.margins: parent.border.width + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + fontSizeMode: Text.Fit + wrapMode: Text.WordWrap + + readonly property string resetTuxInstructionText: qsTr("Click on Tux or press Enter key to reset it or RELOAD button to reload the level.") + readonly property string constraintInstructionText: qsTr("Reach the fish in less than %1 instructions.").arg(items.maxNumberOfInstructionsAllowed + 1) + + text: items.isTuxMouseAreaEnabled ? resetTuxInstructionText : constraintInstructionText + } + } + + MouseArea { + anchors.fill: parent + onClicked: constraintInstruction.changeConstraintInstructionOpacity() + } + + Repeater { + id: mazeModel + + anchors.left: parent.left + anchors.top: parent.top + + Image { + x: modelData.x * width + y: modelData.y * height + width: background.width / 10 + height: (background.height - background.height / 10) / 10 + source: Activity.reverseCountUrl + "iceblock.svg" + } + } + + Image { + id: fish + sourceSize.width: background.width / 12 + source: Activity.reverseCountUrl + "blue-fish.svg" + } + + Image { + id: player + source: "qrc:/gcompris/src/activities/maze/resource/tux_top_south.svg" + sourceSize.width: background.width / 12 + z: 1 + property int duration: 1000 + readonly property real playerCenterX: x + width / 2 + readonly property real playerCenterY: y + height / 2 + + MouseArea { + id: tuxMouseArea + anchors.fill: parent + enabled: items.isTuxMouseAreaEnabled + onClicked: { + Activity.initLevel() + } + } + } + + Rectangle { + id: activeCodeAreaIndicator + opacity: 0.5 + visible: activity.keyboardNavigationVisible + + function changeActiveCodeAreaIndicator(activeArea) { + anchors.top = activeArea.top + anchors.fill = activeArea + } + } + + InstructionArea { + id: instructionArea + } + + HeaderArea { + id: mainFunctionHeader + headerText: qsTr("Main function") + headerOpacity: background.insertIntoMain ? 1 : 0.5 + onClicked: background.insertIntoMain = true + anchors.top: parent.top + anchors.right: parent.right + } + + CodeArea { + id: mainFunctionCodeArea + currentModel: mainFunctionModel + anchors.right: parent.right + anchors.top: mainFunctionHeader.bottom + + onTabKeyPressed: { + mainFunctionCodeArea.currentIndex = -1 + if(!items.currentLevelContainsProcedure) { + background.areaWithKeyboardInput = instructionArea + instructionArea.currentIndex = 0 + } + else { + background.areaWithKeyboardInput = procedureCodeArea + background.insertIntoMain = false + } + } + } + + HeaderArea { + id: procedureHeader + headerText: qsTr("Procedure") + headerOpacity: !background.insertIntoMain ? 1 : 0.5 + visible: procedureCodeArea.visible + onClicked: background.insertIntoMain = false + anchors.top: mainFunctionCodeArea.bottom + anchors.right: parent.right + } + + CodeArea { + id: procedureCodeArea + currentModel: procedureModel + anchors.right: parent.right + anchors.top: procedureHeader.bottom + visible: items.currentLevelContainsProcedure + + property alias procedureIterator: procedureCodeArea.currentIndex + + onTabKeyPressed: { + procedureCodeArea.currentIndex = -1 + background.areaWithKeyboardInput = instructionArea + instructionArea.currentIndex = 0 + background.insertIntoMain = true + } + } + + Image { + id: runCode + width: background.width / 10 + height: background.height / 10 + anchors.right: instructionArea.right + anchors.bottom: bar.top + anchors.margins: 10 * ApplicationInfo.ratio + + source:"qrc:/gcompris/src/core/resource/bar_ok.svg" + fillMode: Image.PreserveAspectFit + + MouseArea { + id: runCodeMouseArea + anchors.fill: parent + hoverEnabled: ApplicationInfo.isMobile ? false : (!items.isRunCodeEnabled ? false : true) + enabled: items.isRunCodeEnabled + + signal executeCode + + onEntered: runCode.scale = 1.1 + onExecuteCode: { + if(mainFunctionModel.count) + startCodeExecution() + } + onClicked: executeCode() + onExited: runCode.scale = 1 + + function startCodeExecution() { + runCodeClickAnimation.start() + Activity.resetCodeAreasIndices() + + if(constraintInstruction.opacity) + constraintInstruction.hide() + + Activity.runCode() + } + } + + SequentialAnimation { + id: runCodeClickAnimation + NumberAnimation { target: runCode; property: "scale"; to: 0.8; duration: 100 } + NumberAnimation { target: runCode; property: "scale"; to: 1.0; duration: 100 } + } + } + + Image { + id: tutorialImage + source: "qrc:/gcompris/src/activities/guesscount/resource/backgroundW01.svg" + anchors.fill: parent + z: 5 + visible: true + + property bool shownProcedureTutorialInstructions: false + + Tutorial { + id:tutorialSection + tutorialDetails: bar.level <= 2 ? Activity.mainTutorialInstructions : Activity.procedureTutorialInstructions + onSkipPressed: { + Activity.initLevel() + tutorialImage.visible = false + tutorialNumber = 0 + } + } + onVisibleChanged: { + if(tutorialImage.visible && tutorialImage.shownProcedureTutorialInstructions) + tutorialSection.visible = true + } + } + + DialogHelp { + id: dialogHelp + onClose: home() + } + + Bar { + id: bar + content: BarEnumContent { value: tutorialImage.visible ? help | home : help | home | level | reload } + onHelpClicked: { + displayDialog(dialogHelp) + } + onPreviousLevelClicked: Activity.previousLevel() + onNextLevelClicked: Activity.nextLevel() + onHomeClicked: activity.home() + onReloadClicked: Activity.reloadLevel() + } + + Bonus { + id: bonus + Component.onCompleted: win.connect(Activity.nextLevel) + } + } +} diff --git a/src/activities/programmingMaze/programmingMaze.js b/src/activities/programmingMaze/programmingMaze.js new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/programmingMaze.js @@ -0,0 +1,358 @@ +/* GCompris - programmingMaze.js + * + * Copyright (C) 2015 Siddhesh Suthar + * Copyright (C) 2018 Aman Kumar Gupta + * + * Authors: + * Siddhesh Suthar + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +.pragma library +.import QtQuick 2.6 as Quick +.import GCompris 1.0 as GCompris //for ApplicationInfo + +// possible instructions +var MOVE_FORWARD = "move-forward" +var TURN_LEFT = "turn-left" +var TURN_RIGHT = "turn-right" +var CALL_PROCEDURE = "call-procedure" + +var mazeBlocks + +// Length of 1 step along x-axis +var stepX + +// Length of 1 step along y-axis +var stepY + +/** + * Lookup tables of instruction objects for main and procedure areas which will be stored here on creation and can be + * accessed when required to execute. + */ +var mainInstructionObjects = [] +var procedureInstructionObjects = [] + +// New rotation of Tux on turning. +var changedRotation + +// Indicates if there is a dead-end +var deadEndPoint = false + +// Stores the index of mainInstructionObjects[] which is going to be processed +var codeIterator = 0 + +/** + * Stores if the reset is done only when Tux is clicked. + * + * If resetTux is true, initLevel() is called and the instruction areas are not cleared. + * + * Else, it means that initLevel() is called to reset the entire level and the instruction areas are cleared as well. + */ +var resetTux = false + +// Duration of movement of highlight in the execution area. +var moveAnimDuration + +//Stores the currrent instruction which is going to be processed +var currentInstruction + +var url = "qrc:/gcompris/src/activities/programmingMaze/resource/" +var reverseCountUrl = "qrc:/gcompris/src/activities/reversecount/resource/" +var currentLevel = 0 +var numberOfLevel +var items + +var NORTH = 0 +var WEST = 90 +var SOUTH = 180 +var EAST = 270 + +/** + * Stores the qml file components of all the instructions used in the activity. + * + * To add a new instruction, add its component here and add the instruction name in "instructionList" inside createInstructionObjects() along with the other instructions. + */ +var instructionComponents = { + "move-forward": Qt.createComponent(url + "instructions/MoveForward.qml"), + "turn-left": Qt.createComponent(url + "instructions/TurnLeftOrRight.qml"), + "turn-right": Qt.createComponent(url + "instructions/TurnLeftOrRight.qml"), + "call-procedure": Qt.createComponent(url + "instructions/Procedure.qml") +} + +var mainTutorialInstructions = [ + { + "instruction": qsTr("Instruction Area:" + + "There are 3 instructions which you have to use to code and make Tux reach the fish:" + + "
  • 1. Move forward: Moves Tux one step forward in the direction it is facing.
  • " + + "
  • 2. Turn left: Turns Tux in the left direction from where it is facing.
  • " + + "
  • 3. Turn right: Turns Tux in the right direction from where it is facing.
  • "), + "instructionImage": "qrc:/gcompris/src/activities/programmingMaze/resource/tutorial1.png" + }, + { + "instruction": qsTr("Main Function:" + + "
  • -The execution of code starts here on running.
  • " + + "
  • -Click on any instruction in the instruction area to add them to the Main Function
  • " + + "
  • -The instructions will execute in order until there's none left, dead-end or Tux reaches the fish.
  • "), + "instructionImage": "qrc:/gcompris/src/activities/programmingMaze/resource/tutorial2.png" + }, + ] + +var procedureTutorialInstructions = [ + { + "instruction": qsTr("Procedure:" + + "
  • -Procedure is a reusable set of instructions which can be used in a code by calling it where needed.
  • " + + "
  • -To switch between the Procedure area and Main Function area to add your code, click on the label Procedure or Main Function.
  • "), + "instructionImage": "qrc:/gcompris/src/activities/programmingMaze/resource/tutorial3.png" + }, + ] + +// Mode of the activity: basic or loop +var activityMode + +function start(items_, mode_, datasetUrl_) { + items = items_ + items.dataset.source = datasetUrl_ + activityMode = mode_ + currentLevel = 0 + mazeBlocks = items.dataset.item.levels + numberOfLevel = mazeBlocks.length + resetTux = false + initLevel() +} + +function stop() { + destroyInstructionObjects() +} + +/** + * This function creates and populate instruction objects for main as well as procedure area. + * + * These are stored in the lookup table, provided in the parameter as "instructionObjects". + * The instructions are then connected to the slots of their code area (main or procedure), provided as "instructionCodeArea" in the parameter. + * + * The instructions can now be obtained from the look-up tables and executed when called. + * + * This saves the process of re-creating all the instruction objets, connecting them to their parent's slot and destroying + * them everytime for each instruction call which will be very redundant and quite memory consuming on devices with + * less RAM, weak processing power and slow performance specially for "loops" mode. + * + * Hence these look-up table objects will be created and destroyed only once in each level (depending on the need) and can be accessed when needed. + */ +function createInstructionObjects(instructionObjects, instructionCodeArea) { + var instructionList = [MOVE_FORWARD, TURN_LEFT, TURN_RIGHT] + for(var i = 0; i < instructionList.length; i++) + createInstruction(instructionObjects, instructionList[i], instructionCodeArea) +} + +function createInstruction(instructionObjects, instructionName, instructionCodeArea) { + if(instructionName == TURN_LEFT || instructionName == TURN_RIGHT) + instructionObjects[instructionName] = instructionComponents[instructionName].createObject(instructionCodeArea, { "turnDirection": instructionName }) + else + instructionObjects[instructionName] = instructionComponents[instructionName].createObject(instructionCodeArea) + + instructionObjects[instructionName].foundDeadEnd.connect(instructionCodeArea.deadEnd) + instructionObjects[instructionName].executionComplete.connect(instructionCodeArea.checkSuccessAndExecuteNextInstruction) +} + +// Destroy instruction objects from the look-up tables +function destroyInstructionObjects() { + var instructionList = Object.keys(mainInstructionObjects) + for(var i = 0; i < instructionList.length; i++) + mainInstructionObjects[instructionList[i]].destroy() + + instructionList = Object.keys(procedureInstructionObjects) + for(var i = 0; i < instructionList.length; i++) + procedureInstructionObjects[instructionList[i]].destroy() + + mainInstructionObjects = [] + procedureInstructionObjects = [] +} + +function initLevel() { + if(!items || !items.bar) + return + + items.bar.level = currentLevel + 1 + destroyInstructionObjects() + + var levelInstructions = mazeBlocks[currentLevel].instructions + + if(levelInstructions.indexOf(CALL_PROCEDURE) != -1) + items.currentLevelContainsProcedure = true + else + items.currentLevelContainsProcedure = false + + // Create, populate and connect signals of instructions for main function code area and store them in mainInstructionObjects. + createInstructionObjects(mainInstructionObjects, items.background) + + if(items.currentLevelContainsProcedure) { + if(!items.tutorialImage.shownProcedureTutorialInstructions) { + items.tutorialImage.shownProcedureTutorialInstructions = true + items.tutorialImage.visible = true + } + + // Create procedure object in the main look-up table ,if the level has procedure/loop, to execute it for procedure/loop calls from the main code area. + createInstruction(mainInstructionObjects, CALL_PROCEDURE, items.background) + + // Create, populate and connect signals of instructions for procedure code area if the level has procedure/loop. + createInstructionObjects(procedureInstructionObjects, mainInstructionObjects[CALL_PROCEDURE]) + } + + // Stores the co-ordinates of the tile blocks in the current level + var currentLevelBlocksCoordinates = mazeBlocks[currentLevel].map + + items.mazeModel.model = currentLevelBlocksCoordinates + + if(!resetTux) { + items.mainFunctionModel.clear() + items.procedureModel.clear() + items.numberOfInstructionsAdded = 0 + } + + stepX = items.mazeModel.itemAt(0).width + stepY = items.mazeModel.itemAt(0).height + + items.instructionModel.clear() + + for (var i = 0; i < levelInstructions.length; i++) + items.instructionModel.append({"name":levelInstructions[i]}) + + // Center Tux in its first case + items.player.x = currentLevelBlocksCoordinates[0].x * stepX + (stepX - items.player.width) / 2 + items.player.y = currentLevelBlocksCoordinates[0].y * stepY + (stepY - items.player.height) / 2 + items.player.rotation = EAST + + // Center fish at it's co-ordinate + items.fish.x = mazeBlocks[currentLevel].fish.x * stepX + (stepX - items.fish.width) / 2 + items.fish.y = mazeBlocks[currentLevel].fish.y * stepY + (stepY - items.fish.height) / 2 + + changedRotation = EAST + deadEndPoint = false + moveAnimDuration = 1000 + items.background.insertIntoMain = true + items.mainFunctionCodeArea.highlightMoveDuration = moveAnimDuration / 2 + items.procedureCodeArea.highlightMoveDuration = moveAnimDuration / 2 + items.isTuxMouseAreaEnabled = false + items.isRunCodeEnabled = true + items.maxNumberOfInstructionsAllowed = mazeBlocks[currentLevel].maxNumberOfInstructions + items.constraintInstruction.show() + items.mainFunctionCodeArea.resetEditingValues() + items.procedureCodeArea.resetEditingValues() + items.background.areaWithKeyboardInput = items.instructionArea + resetCodeAreasIndices() + resetTux = false + codeIterator = 0 +} + +function resetCodeAreasIndices() { + items.instructionArea.currentIndex = -1 + items.mainFunctionCodeArea.currentIndex = -1 + items.procedureCodeArea.currentIndex = -1 + items.instructionArea.instructionToInsert = '' +} + +function getPlayerRotation() { + return ((changedRotation % 360) + 360) % 360 +} + +function runCode() { + items.mainFunctionCodeArea.resetEditingValues() + items.procedureCodeArea.resetEditingValues() + + var instructionName + + // Append all the procedure instructions to the procedure area object. + for(var j = 0; j < items.procedureModel.count; j++) { + instructionName = items.procedureModel.get(j).name + mainInstructionObjects[CALL_PROCEDURE].procedureCode.append({ "name" : instructionName }) + } + + items.isRunCodeEnabled = false + if(items.mainFunctionModel.count > 0) + executeNextInstruction() + else + deadEnd() +} + +function executeNextInstruction() { + if((codeIterator < items.mainFunctionModel.count) && !deadEndPoint) { + items.mainFunctionCodeArea.currentIndex += 1 + var instructionToExecute = items.mainFunctionModel.get(codeIterator).name + mainInstructionObjects[instructionToExecute].checkAndExecuteMovement() + } +} + +function deadEnd() { + deadEndPoint = true + resetTux = true + items.isTuxMouseAreaEnabled = true + items.constraintInstruction.show() + items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/brick.wav") + items.bonus.bad("tux") +} + +function checkSuccessAndExecuteNextInstruction() { + var fishX = mazeBlocks[currentLevel].fish.x + var fishY = mazeBlocks[currentLevel].fish.y + + var tuxX = Math.floor(items.player.playerCenterX / stepX) + var tuxY = Math.floor(items.player.playerCenterY / stepY) + + if(tuxX === fishX && tuxY === fishY) { + codeIterator = 0 + items.bonus.good("tux") + } + else if(codeIterator === (items.mainFunctionModel.count - 1)) { + deadEnd() + } + else { + codeIterator++ + executeNextInstruction() + } +} + +function nextLevel() { + resetTux = false + if(numberOfLevel <= ++currentLevel) { + currentLevel = 0 + } + initLevel(); +} + +function previousLevel() { + resetTux = false + if(--currentLevel < 0) { + currentLevel = numberOfLevel - 1 + } + initLevel(); +} + +function repositionObjectsOnWidthChanged(factor) { + resetTux = true + if(items) + initLevel() +} + +function repositionObjectsOnHeightChanged(factor) { + resetTux = true + if(items) + initLevel() +} + +function reloadLevel() { + resetTux = false + initLevel() +} diff --git a/src/activities/programmingMaze/programmingMaze.svg b/src/activities/programmingMaze/programmingMaze.svg new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/programmingMaze.svg @@ -0,0 +1,146 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/activities/programmingMaze/resource/README b/src/activities/programmingMaze/resource/README new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/README @@ -0,0 +1,5 @@ +1. turn-left.svg: https://upload.wikimedia.org/wikipedia/commons/5/50/Simpleicons_Interface_undo-circular-arrow.svg By SimpleIcon http://www.simpleicon.com/ (http://www.flaticon.com/packs/simpleicon-interface) [CC BY 3.0 (http://creativecommons.org/licenses/by/3.0)] + +2. turn-right.svg: https://upload.wikimedia.org/wikipedia/commons/b/b5/Simpleicons_Interface_redo-circular-arrow.svg By SimpleIcon http://www.simpleicon.com/ (http://www.flaticon.com/packs/simpleicon-interface) [CC BY 3.0 (http://creativecommons.org/licenses/by/3.0)] + +3. move-forward.svg: https://www.flaticon.com/free-icon/arrow-pointing-to-up_66757 By Freepik \ No newline at end of file diff --git a/src/activities/programmingMaze/resource/background.svg b/src/activities/programmingMaze/resource/background.svg new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/background.svg @@ -0,0 +1,822 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/activities/programmingMaze/resource/call-procedure.svg b/src/activities/programmingMaze/resource/call-procedure.svg new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/call-procedure.svg @@ -0,0 +1,60 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/activities/programmingMaze/resource/instructions/Instruction.qml b/src/activities/programmingMaze/resource/instructions/Instruction.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/instructions/Instruction.qml @@ -0,0 +1,51 @@ +/* GCompris - Instruction.qml + * + * Copyright (C) 2018 Aman Kumar Gupta + * + * Author: + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "../../programmingMaze.js" as Activity + +Item { + id: instruction + + //stores the movement animation duration of Tux when an instruction is executed. + property real movementAnimationDuration + + /** + * This signal is emitted after the execution of current instruction is complete. + * + * The signal will be caught by ProgrammingMaze.qml/Procedure.qml depending on with whom the connection is made, + * and it will check if Tux has reached the fish(level is complete) or will execute the next instruction. + */ + signal executionComplete + + /** + * This signal is emitted if Tux cannot move according to the current executed instruction. + * + * It will be caught by deadEnd() in its parent file. + */ + signal foundDeadEnd + + function setCodeAreaHighlightMoveDuration() { + Activity.items.mainFunctionCodeArea.highlightMoveDuration = movementAnimationDuration + Activity.items.procedureCodeArea.highlightMoveDuration = movementAnimationDuration + } +} diff --git a/src/activities/programmingMaze/resource/instructions/MoveForward.qml b/src/activities/programmingMaze/resource/instructions/MoveForward.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/instructions/MoveForward.qml @@ -0,0 +1,104 @@ +/* GCompris - MoveForward.qml + * + * Copyright (C) 2018 Aman Kumar Gupta + * + * Author: + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "../../programmingMaze.js" as Activity + +Instruction { + id: moveForward + movementAnimationDuration: 2000 + + property double playerXCoordinate: 0 + property double playerYCoordinate: 0 + + //If there has been an x-axis movement, x co-ordinate will be animated without any effect on y-axis movement and same vice-versa. + ParallelAnimation { + id: movementAnimation + SmoothedAnimation { + target: Activity.items.player + property: 'x' + to: playerXCoordinate + duration: moveForward.movementAnimationDuration + reversingMode: SmoothedAnimation.Immediate + } + SmoothedAnimation { + target: Activity.items.player + property: 'y' + to: playerYCoordinate + duration: moveForward.movementAnimationDuration + reversingMode: SmoothedAnimation.Immediate + } + onStopped: executionComplete() + } + + function nextPositionExists(playerCenterX, playerCenterY) { + var playerNextPositionX = Math.floor(playerCenterX / Activity.stepX) + var playerNextPositionY = Math.floor(playerCenterY / Activity.stepY) + var currentLevelCoordinates = Activity.mazeBlocks[Activity.currentLevel].map + for(var i = 0; i < currentLevelCoordinates.length; i++) { + if(currentLevelCoordinates[i].x == playerNextPositionX && currentLevelCoordinates[i].y == playerNextPositionY) + return true + } + return false + } + + //Function to check if the current movement is possible or not and then process the instruction accordingly + function checkAndExecuteMovement() { + var currentRotation = Activity.getPlayerRotation() + var playerCenterX = Activity.items.player.playerCenterX + var playerCenterY = Activity.items.player.playerCenterY + var nextTileExists = false + + moveForward.playerXCoordinate = Activity.items.player.x + moveForward.playerYCoordinate = Activity.items.player.y + + if(currentRotation === Activity.EAST) { + playerCenterX += Activity.stepX + moveForward.playerXCoordinate += Activity.stepX + } + + else if(currentRotation === Activity.WEST) { + playerCenterX -= Activity.stepX + moveForward.playerXCoordinate -= Activity.stepX + } + + else if(currentRotation === Activity.SOUTH) { + playerCenterY -= Activity.stepY + moveForward.playerYCoordinate -= Activity.stepY + } + + else if(currentRotation === Activity.NORTH) { + playerCenterY += Activity.stepY + moveForward.playerYCoordinate += Activity.stepY + } + + nextTileExists = nextPositionExists(playerCenterX, playerCenterY) + + setCodeAreaHighlightMoveDuration() + + if(nextTileExists) { + movementAnimation.start() + } + else + foundDeadEnd() + } +} diff --git a/src/activities/programmingMaze/resource/instructions/Procedure.qml b/src/activities/programmingMaze/resource/instructions/Procedure.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/instructions/Procedure.qml @@ -0,0 +1,67 @@ +/* GCompris - Procedure.qml + * + * Copyright (C) 2018 Aman Kumar Gupta + * + * Author: + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "../../programmingMaze.js" as Activity + +Instruction { + id: callProcedure + + property alias procedureCode: procedureCode + + //Stores the list of instructions to be executed in procedure code area + ListModel { + id: procedureCode + } + + function checkAndExecuteMovement() { + if(!Activity.deadEndPoint && parent.items.procedureCodeArea.procedureIterator < callProcedure.procedureCode.count - 1) { + parent.items.procedureCodeArea.procedureIterator++ + var currentInstruction = procedureCode.get(parent.items.procedureCodeArea.procedureIterator).name + Activity.procedureInstructionObjects[currentInstruction].checkAndExecuteMovement() + } + else { + parent.items.procedureCodeArea.procedureIterator = -1 + executionComplete() + } + } + + function deadEnd() { + foundDeadEnd() + } + + function checkSuccessAndExecuteNextInstruction() { + var fishX = Activity.mazeBlocks[Activity.currentLevel].fish.x + var fishY = Activity.mazeBlocks[Activity.currentLevel].fish.y + + var tuxX = Math.floor(Activity.items.player.playerCenterX / Activity.stepX) + var tuxY = Math.floor(Activity.items.player.playerCenterY / Activity.stepY) + + if(tuxX === fishX && tuxY === fishY) { + Activity.codeIterator = 0 + parent.items.bonus.good("tux") + } + else { + checkAndExecuteMovement() + } + } +} diff --git a/src/activities/programmingMaze/resource/instructions/TurnLeftOrRight.qml b/src/activities/programmingMaze/resource/instructions/TurnLeftOrRight.qml new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/instructions/TurnLeftOrRight.qml @@ -0,0 +1,55 @@ +/* GCompris - TurnLeftOrRight.qml + * + * Copyright (C) 2018 Aman Kumar Gupta + * + * Author: + * Aman Kumar Gupta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 + +import "../../programmingMaze.js" as Activity + +Instruction { + id: turnLeftOrRight + movementAnimationDuration: 1000 + + property real finalRotation: 0 + property string turnDirection + + RotationAnimation { + id: movementAnimation + target: Activity.items.player + to: finalRotation + duration: turnLeftOrRight.movementAnimationDuration + direction: RotationAnimation.Shortest + onStopped: executionComplete() + } + + function checkAndExecuteMovement() { + var currentRotation = Activity.getPlayerRotation() + + if(turnLeftOrRight.turnDirection === "turn-left") + Activity.changedRotation = (currentRotation - 90) % 360 + else + Activity.changedRotation = (currentRotation + 90) % 360 + + setCodeAreaHighlightMoveDuration() + + turnLeftOrRight.finalRotation = Activity.changedRotation + movementAnimation.start() + } +} diff --git a/src/activities/programmingMaze/resource/move-forward.svg b/src/activities/programmingMaze/resource/move-forward.svg new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/move-forward.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/activities/programmingMaze/resource/turn-left.svg b/src/activities/programmingMaze/resource/turn-left.svg new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/turn-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/activities/programmingMaze/resource/turn-right.svg b/src/activities/programmingMaze/resource/turn-right.svg new file mode 100644 --- /dev/null +++ b/src/activities/programmingMaze/resource/turn-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/activities/programmingMaze/resource/tutorial1.png b/src/activities/programmingMaze/resource/tutorial1.png new file mode 100644 index 0000000000000000000000000000000000000000..76635de1b2ab2ed36b282977655d9d9ade9c9aae GIT binary patch literal 163758 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

    Wu>P)-l@Uo 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

    2^8nwVaTJ7b-i!kcr@$#$`>4Co`?`_J%Lxw<3 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 literal 0 Hc$@008#`006du0Q>XJb0G@(pC92K%4$xE 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%0AUvc*&=^-P{ zG9EH<2E9||iA9kWgV6BJN=&-bbFQshcjI_}+5fH1`7~AcEdo#TFuzcdS>Ki~u}#Hq zD9&XJ-+=+`8}dIyj>cgm*n~lwl>T%y{{)82{Py0^2;v*ABNsM^e=Fwztw>%0yevF` zIMz)0oH=E25bSNS5;ROyxDEVOWNjM1p`-C#!2h?3X5|j=+&Vp*D1(e`kw<3yYlL(& zDMHM0Vm!mp3&oqa%+uN)r=jLT$yMbb5q!1eAh8hmP#{k(*V`a!3kg}Wq%AqyNHiF| zTLy(L0i;L3w=?h9Pd#bGy`@9ebEhUioxjnXxfglV*xSrzq~cFIGUZDJEz_`S%H{~PnZQd*=5?6N*orKSt2|!S_!~d-xYY?2$+^eA zL5kI9H))?HXgynQWK40tEvUn9J=g6OPC7W=gwQ`jObw==(1y01v)O^7D&EBZT~^jQ ztYc*sdmV?X^=lNB!xGuw{_jeXpewbK(00=O&Xz`C`!8s_x5M%9x|QHDScVIC&NZK}cq3VV_${Q0 zIjPI1C{GzL_pxD{yV;^LnB>})TNwSC2mXbqfV}~7R(@BJn%axxYavr4m$6o62LSb4raPD*e3S}LT|=IlOKuDqdgl+ zL@>VpnMM?Nb3b=K04~MpwYY=#KbOLSXeVM;BTeA=6H!9=eg+UByq;9PB~&g3}5RGHoN&=pp%sg{+A8?K1?GiS;xvzpL58{wIHp5COLj&($!7fk>=f zfVGl4r<(cv?&?O;3ah83>W>h{7z(_K&n!|nQM!%?i&nt!q)wxMfU6dkf}Xp-01ssR za$61fpZq=74i)+FlSm%(PRwSy3{F#L;~*TVD%d2OxQ8*tRUJ(c_kHfQU8yHVVBV?! zxP->4kXC)T|L3Ul zqwgVlK3K(H=N33zHY_I&9*dd1RK&M&F}n?I-`JwQ;bJD*wY^)KCtN2%+Nyt-;?!T@ z|GE*P_wIx96e%Bkv7)`Ym8w1O(HBeklt2XJ*+J=9 zhbFW{a+v7XE1RZmQ6W0FHv2ANPpT{)!~M_dL&4UhKO_F2L0~mP35a_@r$eRxPLXF( z6}nK2#1^8p#{Hyu=Z3_cn=&o6Za=hho6SC}j(yg%5l6`X7A7a%%5NoHh85e%^xaph zH~+&nPKbcXi}z~w_^LE1xV9}JTFl(EEG_J&#bdtDAuthfh%!-2fu7r#&A%E}G&#z? z7i{Pu6Ti_5)9M7C?$u{#46f}ptlvyJ{wBt2DF{nR|G=&fNaXcVAchK^rKZ4E)ckZF zp2cZ$NHR*v8frps8DX#>YkUb~o9W0}wazHnThI^uIyq4=n1(W|2M-@-Sp~0n!m-=>(>{7E63!dyNWoG{!O~&%IrzTn*}@lUkV7JmcVEzw7VfdytSNl}RSjN*%zsNT z?eR^;bs&8xUyGlsK+h7!T+24ZQpI17Sb;q95Z@15nY{ttQ)Gxa>$@N&;836W04F*%6^4tLj03 z0gblk^5iZ9U!y$|XR{^z>CM-naO#jpDIc3!ti&JS*FQ5AG- z)W`Tsb*G=OK_0Tnj`c|7OZ$7l*IIc%76T^LOUl-KGixq~fzW7bTif~$&Fm3@`(cf@IoepG=Hq=PCtZt3uXJ1P&O?C@unR|Ce~ z&o91ZLg?k%*agA-*>OAO0pe*kKBxV;A3gs-`ZtoSLc2o#slcI79bJwv^Kz)^1#av@ zjC{yNW}W3g2`6-f8Y@`KknGQ~`udRGaA%S$3p&N7)ErtVl2^2mKGeqyt6+C($Px*M z99ZAt@Q~0C=t&clXcCCMefSfZC@n;ZcS?^e)rym|)W!edZ?N2@R_s@|8pYMYHM%vO zn09DASajyY<_ENgRBqbMBR#$ccOHt8;|}@0MJVSnjpGLi7xnRt{K95teOD0k4gmoT zanH)R(Dzem2j;)moY}NG_yp;z;@;ORw~P%Fn7wxP(F&aYowTS099tL$Uay0Ei23b# zv(+8`+qz{810j2e^x|#IqEOn}Z%ZUswk47H`UJoCulsE2{tZXT?js8z{QKV@#@9TC z#TQ>@j`D@=@`5%ZnY*|YjN4r}0*>sCh=7wui(+VhliKDUB)I=N7ZS`~12L4(6X%TM zEUb8c32}5tw{LD$*W#WHb=}?J@0%jp0nC5@)XF@mQrLUq7xR85^FEo-dWRu5V~Kot z!fEG7MccPitu5QXrdW~wCx%TYK~kfQ1Mv#GHUM}p7VmH(O6CFHRQKc(dl_Z>&oy6l zzX0xRGQ4JYh|#cAhqH|(VJ+eO7&t)<8le0N2Q6o>GRL=sraJdTwtWWm1&_M=;H9|W zvH2rJIRroGc1X=S!1H%VK5a(~6o!F_?XET|uEyAWpMcmJK|)A=+rEFT%IW?Iuw55= zRtx1E1?U4{MG;Ad+ay(#0Pv=$FLg_^^<@gCPbTmA+WD4){XUQa4964IYs#&Uu=@fb z!O`q|I-kEgVOkX-D^Jl9IuMY=Jiq7n?!2t>R-}30smwpQs~ptCNyd-qzDG-A(!wL)#NZBRcJ6`0=wfMUiXW0s6h?iE0AQTBHxsFLMuX89Gd5 zEbN7v$NYK|cnqywbv&+f(v7k+fpN|SC%lyHy3r5a5Z(Uf0E;e*vd-L-1qyxL?jST2 z)Z3w@q4T_h6Dr}Zs&ZQO)>{Ve5q66eVE3_yox$-)n{}#6p|3ji0>AUd@kL{u7XAk- zBu%$C}63lE!|{&%cV|c>CT-Kb(U(sms$b7%xXP@Q(b$?q^unZpG;4#GGI62 zMAOPq%RA1Q<&MD0$-ZA!(nE^@Q|ZI9*KaaYH56ocsd^vX<=V2z8j);+EPUvZ%>ecN zCg%cmNOeCf2m?>t{(3L6B0@y`NHY{|**nk4yQ78)&hI49Cx_X(<-b~CtJ6}-A7uqT zEO~?|r_16;vN;<|jCrs{2;H{L`-W$m4RN_(>^u4#@3ilhS1)bPhdY= zkql?q)FaNxHiGg@Vski1cct#|(N39uHMoX+UnOL!+*@I>{&oJ{)m}p9!Fnhgm5j{? zCZ>?ww|5%wUb}hBrmSn`)P7=+p2dtig-pFndm`H+1qB7Qy^z!E)Mkg+1Va{TVgO6H z#?ET+C#eSJ5ZgL#fs@~$t`>Gc&oulP2|}$R!?$1GNb}#{G{KDCG51?q;3Q&NHM_W6 z?oD$4rep9@Nkn5pjrnFFUJd&}svech`$SW3ksTH%>Bfx$Gb_&37#Tw(qjT#I)mjoB z^1q#jfgC;nVZ!R6F@T#EDKBKg_WBFHEM)rkBq900+~Zv->0rA1a3x7LMx86S@!5QG zxq3u>%cpK{#Ti*d-KEUb%8B~^qkL}^_W(GK{vjO~-X1kZ|2k9h2Uuz8msx*pt@~qg zJ3u`dELL2elJxR<>rD|naP@O+$RC;uVZ%(j;BHc^!GHyK8M$cYy}85Vs45+-jgft8 zlLJQMB?l$e`gv=m(7nfSSkXo53?hM`0w^g}d$%6CU{}WMDUr%7$y*y|O3nK10f$?l zlLY>)q$Y)U77S)xB%^ljWPr}>$g>2^3)R{xV^P4w5~#C=%j;Gg^N5C6C>e zpDiq8T~^=zF6Io8&HFFsJ&5r_v@`C>pFS?;tY|PmOJ)H~Qnzqlezne3$YUGe0#0_e zoMMM*<#3Kz&0rzLF&xIvV}6FOnUZ{f>@~8yIsEpGS)MNXkmAHs4pH+A=iJ*rWl9TZ z@vApxXplq+)oC$5q~Gi~$S)wDet;)iINOdCj*+c(b>x|Y_1WFo{_cbj?$^SjcjiVq z&W1AXxlzmYD!~m-ZRy5mi&5zFQw68_F;#=37=fTB&(YblhR$F=79Jc#_SW4&z`NA>g5@s;Kf}DLmOJBYee)4IiXxIub8RhW&Zf6^&&qA`F3>?dwF5xoJtm z=jx|x^_+@|=4#HH+7wxcxksCH6LR$Kd}*snn%;3;ialpv^dK9x9JYKtrzl&y`>?A1 zT_cw;l(HpEg1u8tyWa;iX!%V*61!b$y`_ee5~cDUQIRly?&?q06+=TYr0Pi0E7AdSC`7>FawIuf2W7q8NDcHz)ozv*OjG|c%(B> z$b?lyqff?+$lVB^^6#QukT3XhI50LNDLn{1l0u~;9=nV#eP(s^yM*$AVF4@=wz?KN zOg)u?!06kpPQmQ-bP>RGGB3C=D-a;pZ7^Zar08VyUg?)Li{~ zuW6-dBdexB`NLTw>MEPz=Eh72>pqfzy~j)AxWCR^CmO0iUx*)hA#{}^i>|8xGaYYBo)BvYHg(jp|b!=?v9Y$f^& ze74!1BBl}bi(>fhFuvFh4hfjiA-&=!BPm2L==-5b!hh$6U_T~^+vPK~5yaM55piw< z9PsSzes$mI(mDPD#~7yz`PQ`#ndx|JqET~hxEYub0KM_Wkfk)rk$*h*a3zXs;6-Vc zpen{Y%nWtcpdP9n5+*b4SORa>^6JKMRI$jh+c$RG_DrVzyRPXa zk4@>i4r`AWA01TVy8KyMoB9%STdC+{EJF%X0EKDi2{(mPa`$-jp6unv%o%;I8qpmiVqlt4uD_9L=;T zETEG@p>oG*}EFA)^e;p`K&>9UXT8uOk7KKRbCcb*>_2`By9^3KNw;|DIL1)pGS zb;t8y?iC*tvxcr1wQ)9PI4oB`9A0bNg1zgpF*rQil^gMjg82AG8tlIwNCAX0 zsA6894l}R;cw8(CVd&<1t(1_c$H4tWYP#8CW;HD7!N8L7@Ih}g!9Nt}H$?FfBhV2Z zSvRYK@E#PL-i(OwK`{vh)GKsh?v8!J&7w&nNa$XsFd~@obymhv2tSkL8DjlqBI^>d zeexdN&jGSH*Dx|YzsM2iMEkxvQhZcxoPsTOAKP=y5^UP7R)OZ!qG~-{rGd^0tCE{N zpYOY-SDH>wZTs15{`nC>Q<;Bw*=e#@2{m~ifj(qS9Yb6mGh6`-)e)1K>)fm4T)nt- zwx!0eNHC_?KzY*&Gumj-q|7Uib=__i`jB<@&`P+oA|@^pxz4tDrKRh;TE&F>ju&C^ zEMU)>0uCp?v`%gBCXPY<1D9*q9<|u5QGs6mnU*Du7Z%8SU7rK||2b}Lf(Q^v`E4Vl zJ^kW+Co zj&fG$v5u%$nzPV6(W^0YQBw$65lOLgZTY7cqc*p2AunnUV)n&Onqe=^L7$Pu^mxv3 z{~5(BYsi2!<+lz3cjEeqT6CjBxAWRUb;w%v(^DBQ*OjT!j4goz9i8CNkGd5vddJkb zW*e(z=Waz>PYl-qH2pU?%ZvepFH#6a*V*I^zQwJ=Ckrr>8v-qZcta<Z=xX5Zsy@n6=vbj)YjDAG%1Z$Faf3$1fj$nuNx!AkbF(oHs?RQ;Dv zzCmAFYYqr}W7sa!ufCE!8^#R!OT(rZU(5ii=spsINjBG55B&)y%iUk66l7CYe!55T z1T?bt7o4I{5e0>zns^p|RM`(ME?r7@nx7yi;F%`Lu_!{Ir-;gXC<+7DgHL(+V9Q^S zlr9}Qa2e`)7Jk~xwxFGYJNq(hTySf4GD3!~#a7%aPDW}Tg@=15r7j zWf8KVzL+!}`{MA2ycv@~SmzerrD31IQvn61`HSa@`KWeLaQ7oqqxbazEh?ie_%B8a zMShizc6J>GvPR&oVH-p`EI-S>)$}jlP>YzXg&Bsf!hi^z6-S4rrA*p|6%Nu;aQU)8 zGD-InN*q*J#rG%gme1|TDm$wT>!9;j{8I8Y;FG9WlwaU`C3Hk)gu4Do-G$#@@c}bp zBwT4T4Wapt8W#@oxwa0%>#q7p`x&_*;40VPp$pD#JLQB~^&zswxR8;Q!7=mgpA6r@ zfY~9Pf{NdIx4i&&(g~?8?spUj>cS7ax#`O<%3{(GDif1IEZ$2^l`-1kW;{WS9OEPm z@1vCme&1H^n#QUX5x5+Q8=x8ig@631o)J81`9ilE)+yNd3IEpXfaB_?tWu0ecSkv~ zj)C+XA_Vr{JP(b&rj8ra0Gzdr)KVv-u-CYD9ZntnVj-B`{I+%ci1lV9B1m)wu)x=> z*OxlA!FjN&=vgtGFHOaiSOA+7Ov!xBO7TAtl1ARNS+#jKs(-H;l-{^?x#Xc8zfGv) zKaeAP^a{s3=`h_tq&Aeb|F=Ity-o28qv(ZT;FmK){vK<<;jm;TC!o6aX@?#A(@_`^ zA(S!20qlY>wlZs#OU{=O!#=?;kA!Ww!GT~K%qg@jIicBKG~@CU^m!k^#bZVav1!4; zHT+lv!@sL_T>tD6cD2sAYYy>0EM0PTxzTXUVJTr~4=!`cZKC>$sVS{sc2d8a4FiE- zm($fn?{FhRh&c|P^*|15={b7GF^WU*Ns!>1?0$XKZQ+*P<}-iuu4oB!BM||+b;S={ zmBxBHyqOTG{qAR)Lhwlh%9pg0FOuO!H^1yqF0T;~ix75ZIz8;VvWngBZHsE08hdHk zOKB!YTEkELwF!jC)C2`8!ZUMbz|~QR!vOd#HhbkHuA1{bH(n`-3x95*!3OSOSiaW7 zfN1I6VaE2afAcyJZ9bez7)HnL9D4M2q*=tCGl4!q?}esi2d_Cw!4gczdW!664iy# znefTXMZ>b%R)lLU^{8L^9Y3xmAUGgP8Ku-I2mD*Tb|+ zk9Ij?5QQOM>R;%T2%+Z%^1pi-9p)%2$dlsB*GfN+USYT(osotZX!7w9E*pt0^4ulOjduX5W^zdwcyqDpldJ78el)$J{ zIiQP397%XBUNS)3Z;ABiXNfd%_IZQ3+DVf7&&v!@Mp`4{oCwnZ%RQ+6?&*tG*TzEo zYN1vj_(k4uWon5jho=~FUWXGwhSzJe6iYwEJD-$U}bI8wsA*n||<6gIN+`+SuaGGyQG z@0(H*muB5B2_DX4+A?LX zi=rz)4aoiHbCmFkpcpD+=*N3z+vZI5tB+9@$0;#N| zild0VulzwOQ{4g2Q64BY`BAr<6ls25UO92w&{YQmR*JUpL-DL10Ry>xM+TDH@VM9P z``QA&UHNJhq~CgepKMMv>|8=QTIXtZP{F1oV_mEbj%sGATCcvD3a5U7l%GA9a%>5X zc-;zf7d(L9wO8b!NCI0KDMGEjNo`p0@PF`GUQ+N4Msa<~niv{}bnH5}GCEg^^&%ER zF#{@o&RjVkq93>qVvh9zhy*-FkMj2m|E+UbrJv;is>+PhO%)me`Qhb-;2Yqb5X^en zg|K6Z0~$<|G3A=wL5NQZLi^qjnMd#V>w9$oqH68w0aLSfrePQOO30xpN@?Esv#8jT14`q9L+g6ISpi2ecz(bv?`B=O zF7r4x(|7;veothU)Fr|R${;T~6u zz^o`KEDkpPaDGB>Pe5AidzWKAQK_sluJ#XSJ9@uEzn-AQUfvqiy9&Y28_*yAoe>lj zh|U6(H}d2I?1X9!Id>avWGYouT3~EdiAUQTSK9rVwPJ=gB3=+ZIx<6k7FT*xJZq|* z*?t?T_Vz?N6V+&$Dlc_d<5DNB=xxBykmS7fTkXx}JBTkDg_< z%S+P>)#$M(>9`HSrCrkAWT&&j_d9*PP7SR|Pe{^RU)i{x%W^aI+Ya&0}X zN^8Tl?=SX9O%>IMZ!HA3Qn-x0mrFjmNjCX)e^jecZSTFX8C_vBkYZXWmxO#o$m_a~LzV(6zlu1th~xE5E~LmR~9M+8FkPxN9PqCWoa_4@~ql{PBr zZRG-RSbwK=#m`kaUW+dQdYq!{(fBZM3C{zf*it@Wm0l|8^(w`&6c_82N^b5WY-dFeQ&U8cjVWRHs4{#;I~?wP|-qe@_w3 zxN>&UWy4qzAe=U2vX3a`O$D6d^b^mPXeYyLUrTCmS^)s)(Yd;*|G|uEN&XekevAcsCWygHn**7IJmpJ6(|m+xV3n3hvM$;?(UT0?(Xg` z#ogWAU6P-E_n!BjKO-3=d6F$l=A3J1Zz3em%(5;RqCA+)M{1)JGnwQUYy zoFc1FaQ7mNrKhukr0{YhH=rZn-HDfuM{lzZ7L-Gp$GRw_DAF8*+K*AzoUckFW(M@= zVsrLGztDE!^_pMxcUoNc4eG9`*_<{b%EC?89`f>TDV9eHR>4$}va5Yt?POJU#SO7f zeO0oSBO{gMhBLphcpwIy*QGV?do5*yy5ff^P&mZ4`WD+tTU!_PTZEtqU2Et z3^3tU6si2}gs+)w8J9w&h|my>u~P?ojjfTiKkxGq13KT8fV}XrV(&vVUW>Wi>vU1c z)sIz{!E)7KH+;Bh+BWVP91h)947qvQk)%G0W?|ScLt@~^&n;pv+tpC9I0iwf3na0&g|DoR(36c*{BKl1e zzBR%~dG}9u0f-9R71dQA-@WVJpk>B(FEJ}N!hw4wc~6NWjGp2C!NNIDT3@gtqrB|1 z@VZXCO_Ue(Y{&Y}Lj*2Ux+`?HxNOOG;{*oWtyMz=*q@_A;a4`=vemoVusy@4aIn3X zPu{=fS7nEIsfTAL2ba%nBhU<^GH<-xv26Ji+SG%aEvO|u7?8iN_?&9`tE|=i?*3#i z!(soV-nJmj=fLM8-B98QjR+A{>KpFVql-c{QLO!rS8@+9as}N0T;=gV{azJyP<|1# z4_|*nBvD1*5MQQIP8O7Pb)kO3zOI@7-nxO9MuS;5BsWGPM22DfWXw8w{WI{t#sKlz zfGo{(>9dbjoI?lq<=JStn%-2wmXhISE2DK;9=5 zRQ*_7p`%#LRH+(TrOMdWF)xBt(gBMbdL7s4zbOB6xj4xz9sYOH3pVxUP ztaFcA0d$1w{C)PX?I!sHl?)``$ZkK~EK|o_PuTspU^FGY{{dK<8wGdfO~XtGL{LF0 z9{}U5cpN%am8TMA-RExD25F#xhxGUYuwflMxe>tw3#{`Nr;*_EIs2ILg$QJ?TyDP& zlXcy~hCkbWV&jZSi64?X*4(mZZ|pqqo8+gnf{_^Gc}uELA#xk(s1s5xyq< zC2u|)CiTcIc?Nyzmyq?49wx%{wJX>xbyl}$#kPKZm|@(i8)Sih*yQAL{7^OO-Rw_t zB)`ti4ue!DdZD!$By#osX>EdlVw9HfK(JBdN)v^psO=04*ra^O;tUT$oUE*$?-zyO zp}|I1M&}kuxrxIsXQInis^J{w_tOQZxh%xIPrk{nXn_sNkd2LGIA83P?IWMc41rX1 z5srBS-``VeZpStoE(ZMPM@ywi$1S%@LqfwjyxB&^CYaBd&MoBh&Jcj*ELavIx~pCA9*sP&VJuTDfgZZL3)6ggCDnQFf*}J)4IPE(iK9-4TfSYhp*n+4Ob$5oLM~KNnM+H{u=57YwyRSu|Q4 z)_!`>!GvAF9t9p$zGJmNSqb>21HNI^>AbpmK2P#T1sO%h2Oq|=Yj>3jq5=l%agtRD zj9VT`!3FO;bJ;I`o~9u3GQrFP78bJ2`_$3-%DT6(F~hnN z0Xx|4Ki&u_&=&)adnF|e12`P4&Fe495jrXc91u`fI;fhzoSSKd{^vxXurNdg$Q@7? zr0(?7&Uif2Gj;6u&zk-^a$B!aXe(=~v7e@t2u<39Evo@&39wOh!Ye6Kv+h~kRV+{3A_yu(v zp4Z!C;R#ftY~1;zUM|*V*eIJlj~`wk{Z;<%K+cK6ZA=$4ou=+f@*o{c)&n*fRVQ zu^4h~_~(A2IcwbwRc@CZW9KBIytQU#zgI-=o0q&yQ&qvB z(W|=^VV!&m7Rk=D^%fwm ztz{pw86HsOj&{Qj7}I^Rxa^_W^la~&3I+^@BzIR_SC^pZD!!|i1Hh3`o1GyF_k)n3 zpXq>D$elM-d%S?;-Z`zV5U~sXXr!N=6n}!`YAX*_--?p^cM2FY5c)XuKms5$Da${C zU~@8Fh$x_SF+00Xu^9824m-3sHgLajWsl<(?{EnsCOA3Ta-{5&FFuPohqbLxc;tR% z6VpE~Pl{z7l-zk{r({S=58}$z6_~(?l$(!qAH{m!6D53@XfM}iULl##EHAtteEI~H zpnbyr3(rLNW&lq3FBN=06q%CD0oUt>>2!ZMVsmsJTPahVJ~Mb`bvyWN4p64^B)~2% zJW8v2SC6jwxBd}CA+OxjeM?hp&AL(D>Xro(N3Yf6WbD2Eu;!q;aOJS}n2ym#I%$TDtgTZ=lROG6YnoY*h^wh9Je`3hI0UhSZS&OstIL#F4Ic2hAdYyLwC7`>kA5mo`jOghx`86h5ZD2McRk z6e>2%%x7leRbN20a7sFXyMt|k3C20XjtVr?)@JlE?`E|T6)jQos!MIyESmrTEH-}h z;n51M-D~6m2`v^C;#VO(E318KJ|~nMh7ey2EUnaaQ76^3;4K^0F0s}n4fmGw+ItUG zou)3*|86|;Uho0aWkH>_yj$f}WcygEH@Y;?`Fv*`#9~;<*vze0eg;JZkDTgn;h|(sHW318cL79Y$4j?rSS?f zyOC)n=0EGNXwzFKd4TFqH=F9mP>n6a;XYoIz$=;nQJ zx&{EJAlTW&?`qyG$iTJBt?mu|-NVC}-IU381QhQRhh%leCx?emg`GZ_MVGIf(LPeT z!7;i+Wk9~@_7nEs_5?06fv1SM;IZ!x){Hv6wH~=rJJlTKCI%GO;!Jg=c{w_!;nDY; zxCV(b&7Q{y{UiJV%o))BY?Xr3o}x$avfoA@?zHwfEMh;ur)R>m z?$m1a(Qh^2$OZRoFke~h{+g_aO#cMb+_fMWF==Y9uFEjc2{5XyS%0VL)VY3#`Y!+@ z1@prJ7O63L#>dcDu0A158lo?yKb*A)aRZYQ>FS*<^)Q5kp zSmrkH5BO&8`7B$<{OgCyX@L4OjmGx(Lw6lcX*HM@4WW{o56}%9cZtccN&~G zy%}mXUkqXjIIU}M*xSq#I$(i=s*H;m4YS>@$gJtP`T0V%Cu$gGpSKkf}l zMO0j)^s0MS04gwNEA1)GC&=VxTFB&KU+R9zijfa+v5j~YoxcYla}%ClafzvTzQdP+&9yd?)0BTDuiSH(Ey&8VbMRB1 ze(9}jxO6PuJk1}dowQQA3uCRtvfkFArr5uzFwdzplHy}tzo`5CU$adQo~9w{S~Zog zh4*F_Fb^g)A-wP}$z^$-%DXD}nsEo!6EU-fb@mg5K(FN+dx7h`?EI$Nc%y6HIp{!A z%xt*qBH09Xxa=(7o{QL=542tPXT5!%@VY##u4?~&X!`qlF355*)7nH|qfPn7t-+!8 zb$4sUaAM!5~s zv@>JGHQ%@RA;FzYrtvkLUx%H6C_WWyo0NER_2(V2t~J{;_FD_k)s66JJ13Cxh0QF) zADR`$I|*`(%?=qsSQ-OMH+SRK+NA;aDP)B`bNiF`Lm5-(N&Q~!LQGn8l}4qd>soMN zL`vv?3Ff_k7eHu)-kk8Hm02Gp5n0$EX6aEy!{xrdNh0YZiLpru&XkFGy5%B9`7+gC z6MKe`lzTIo+J)_L;fiySxpzHwv}X;!v#ViHuN(u+BBv zAEJXV*2wEGRRgJ*CTMj)?%%=%nc%im7~^JhY_#sG)fq$i(w|1({>J=epJ5pL%T&-I zi_6Q;xtRs$pMYYRP^ZIQ)Gq^Qh7uy;`{dY+nIcZs*x%y`7&E)>o~|N!KwmF(HrzxY z!!ALC_qW>jnTq&PIyl&j+1w6b2`Le<;NPYsejd3yyYN+)l%*304L3Uo9ZuwZxhKRn zE}d#t_~E+VVCQxSkY=h!BhfY^Y`KB`5`-?r95pfqrF2+`Mn6UY>+X;dJ>p-6q+5^) zw|0ey4Rfk`nPUOz3vc;W+EBu3d2b>Y4_ocB;;?!@9NcQsXGp5H+9vF{n@jO$0Ab|* zzYDR#^<)ZJU~3gE$)*njrAT!gmR45}h2XUE#=0@yen&IfVRWJH>`hr}r$_^q9j>3?`*Z1{ z!Q{tBtzb}c%Kp1Y1lo%Sc~!-_~uA%Q34rU z_BOX#b>70Tkf9=0j+u6r#6akW#`rO)TEJ?%S4Li9Cbw(JL_T7ZtS7|Gr=`o?r$-s5 z-x@}um3@_~n~{7RoroIFmO)KVq%{u7J}=h1ulJ9;HB8=kv$uTkm9K5pyAwM78>R^d*L9q4BLs1yxWiYS{X$_OZ^|I#MbK+gg{>x3G2bf}@AWjw zu4k>ew=sz`uui9Yq9gCBKi3(k@dOkDLKZOv8tHe0rPaJD3j}pAxspljTY9yfoAEy8 zH0>T~4Xs}*^gikmi^j(9Wu%*T6PcXbM z*Rpzr38#_26>9d`$AtyE;S<>52cR9Uoetzx8mgLy# zCfJCsFyIQs85Jrw_m~q zHZ>Z1H-@|=2m}N)X~lRh1gK2x^e%d%#B6x=W)SS+wrmgC{vopI-uvZ{7k;vQxzoY~ zL?eEmS!7X#BXNy%WzK}LuzcrkW0R14P_3UVg)NNUUJKCa zE@=~pG9mFst#erSVr*ap5GVRQ=tYLOZ)yb<2Tw+pL4KZx>P{>By-kdqSEY6QU1>@$ zY#+;~__aa%y>k^6(fWq1->86XjM-S{KWFaA$xjqZPyiu{jOQ>cN?MERNYGWAmphB_ zLB+x(PJFQC@+ez{5M}o>F%{z(e{#=a8|u8+rkfZWO0YNhExYb1hpC73Uo<$c8!q(? zk|=&Nzs-Om2{!Mz5f76#<$vJ`Jzu5S-sddpUnYStI`37px}~fJI*1>E-qU#m=Y{d(~ zx#I;<#^|r_F<7JKa9+&r zt;!n@#rqbwHS;sA2DAM+ivBBq)3^LD{5Q2`7>6eJ{4%M00uFp_q5|HTPH2@TO$+7IA8EoBaB=F2g*lNwh`*Zi@ za(^p^sCPjFS?`p=W~kT22LW^!;uCai{%-O12S@)V6^F@3)2ahmqp8wf(~8RvgGB31 zdX?FI9TfcM{NlP$q4!x9!L{di$+F zVDn;|5jGu%UYr7#ouAqWG%8z&FoZ_mFnwS|qtDcgVrBKV=|E1$O;&ACJXKvt+a(4p zUtjHbf%_qHW(NgWRs9L^1bBvx8@^fsHz562NddnQ;1P%I zjS}Uxl))ArNhvr16mFgm!=|sK&rOrv(~FmMI>FDUybxx)Q8KBu8)y185NONd^4&qR z+}V@N4oqkFi%$nuX_fHzt>RI;>XG>UlSvi37Sq6vyhTj_YK+ERgSB7Qv3)k%g$JRr zP~LIvy8J$_Mod&hvy|hk7=ze9@~-YQ0#P@6y(F<3Go2k07Dl6kH;d{Q^9nKFBGY_t zBeV1LC95@g?f&Kk6=NFhE#dvsX~36_FZM`{7x?D5+s`lp{w6XuN>7Uce=d9XPQ4L0 zIuD?R+3WK1BjZ*#g3?%Gs=T%wl4Xr8soZ%uh#h`n+Pq<{T`AhAvvjw=9a!}ojRFy@ zHyU8XHXn)8Tb2xmD{LtrKx3D?S57?Bp5AfYtL_BIox4mdciUM5d^%4X_}|?E)|5fi z+IP`egQlHPx1+z~7!FnVIrwU;Vp2t8QmMW!A0_US~&6MCHLaAXR> z?#g5{KuD~y@y>p1>b`l;ibUA$?eOYcmRO`ADJi|Ma&_jaCiMG3_p0qW2q>9Mc%8~~ z;qr!{`FcxycKP-tlUGq=7vGtn@-66bYo?>1v62Hg^|^ij;>LX#?nLK z<5ue`O0UMfSzl{gCjB~0#UiJUaT2?m$geNKHm^u)R}@v6{AwM8r}smTq^DI^%=0&- zOx-IYi*6q^UdwR#vxv6wD4pHY<_AVRA~oC;NtHQ(Sc3SG%_mDCFes@6y2o@ks^^7n(ndflVa5exd`E!M7ds{(#GRRIhyc^_i{GFXFq{ka9g> z$^uv<5&>X4+F;ddhpkDW{Tk8ba(`z2UxLWhmUIEAQJ zo%9IIPB6t#ucV&C72U&iVJdzur+p*h$kvqUtVC$O+VWCcsvallS)v2loV9L1`J6*Z z3E1OgdhC6k;Ik7bG`abF-iExZ+5z2G$rWfx*fy+pw4l?o?QuEK@tBFE!8$4t-{pUn z07Bycj-|28p>~(&+TWD9K6F-XjRkD>2O<2#eBAWCrn4Suw9xUjr@`>?IhgSYBJgJH zZt{NQ<7`s-mD@$);r-&pX}{h$_^T(O$PTzMxqTO)GmtWr`K`f`MiiwJ7Gtp!J|4!o zCq_H13xQ|jt*ANYf$93ZExIB-L!%Qa#QScDAfT(EuK8*`W~YC#E7U<&AnZBi=jWT@ zNJ}xZQ|;f4B)v<@RlSX)D5Sf`H`L`kFuitTd5)(%*S$^c?KLL#9ihiC0zrzK9WXeV zo`|z1McYw2!P{PodOJ`8k>@ajT3Z@hmu?7^&&xDQz*V2VTOwt=CNPLMxt_H!#NT*>8}v zkk18E*5`JX^Y#g%`RdM&9#TVY!vRVZWz(@CJGJfVh-q4ApkvE$1sW$mVT_*MDJyCMP>?RtY z5MZ=yA8RQoqibo~%?`~-U#*LgRNdX%yFT31)~${0yba+TMj$=W!+x+b2$pU%s!~rW zsWK7oaB_T6>Tp5gRC?kl`zRH1l9D<7${H|~mw8dDNPWzEdD}Ux;{P-9qVGwn2FV@` zd;N`zezmw?hbv6@(HoIyIVxwDNzaiKtWFQle99;Rv9gw;OAWL@r$>x88}}P*x>8I*^p}WyJ5Ubu>@IZjah0B(oHD?7*V> zE%x~8Us^L~o&h$M5&lWT!gbVAD11Cn}c4!L*u-@t7P?mrsP99$m%P z_leW#yVkBDbFH@oxc-kEQIvg$UJpUh(|3hUgu+!G4`oyjFHKA+)^cE2;jk8UN&*Jt4zGa{8eHQY)O0^Z~^%`jQ8Mwp&e7g=PtLeo*v^!)b>N!fPZxp>hACYz6;DU zQ+eHxufY-cxUDKf1?x}x&pjDoL=NCAqJwom`FUKu^SnsiZg7{gB%LS~CNEodHfU4- zAh}M5Fui2Hk|DFL2i^+YOsdtiuXs!xoIL8kk8515@$nSe9R$le-EZ!! zeZ5w_6+#qW{6`t1fQ|LMIhYAS*;bjPaoN@?d;PTvHaub8dqIDi0m!1mKwi034 zRXbr$bsiBjU*{b@Q?(W2u7y>aID<3GTWN>vX9DPBdEZH8cwdw*E+?6t(nD6Jn$2ov zNkSU8rXE4aFpudeDjI6gQ%;2I>e^m?GnVhP;TW|nc9@|KJF8|4-AZuzCLPLW&rLA%2wFrmTwCz8%{ge=)#?} zo%HJa>h$xNGeB=n*rvM{A*m!P?AuNMrR`2l#X!L@3e)%50?CX^YLuNjCLr`{V>_Z` z8}cA7cjjAX-6d>2qZyd&^_swdNR=#>&;Bqn;p-oPovVl!Fv}X zGXtx`D*3E>0)hhMXK@V3@2LOWF`=2dB!AI%WJ3KE-fREmMw*YLp@urcC>h5rj*E*p zsLPDZKMt1t8@&;;noO?P@dSP>-41um_GBFEd25K|>((0ots`}#$ zRsPx&^W4u6XKy!~TYJZLhp{W~H^g(FgNffiWdf_R^o85FR9uKAI_~j>zj(_LnJ;Ek z!F{DTY6IPJrcwdHQ-wwlhGS6;V5V$vWFOxJHQBy%%lV)7pIS=ki>i1jWo*Zg>|29xVc&rBrUqh>oc z5&wOj>azJHPC&DCf$M5Sk2Ugo7TKip8%+^*M zOGTGf)O^))pj-U> zpB#Xeclr>%Z~VBDoBj<|nnm|a2=Q$KF^63bHb+Dfr45_@@i1z9Fl88gT|nl>^>=#o z6-xY3Ago1|cA8Ox$#Pcik>H~2M%bbEvz*FdGp;8*OxGi&BZ^s_tRay)M`lPY8rW_Q zO-Z{@MAf$n6&)_OD}kEBZNwd$!5Ws(IGnB+zOGJ~T@ev(W?N%l7S>6VzV2o?<3O?$ zFoFr795!9z5*3m&{ccb~UfxIHFui^y~bO>_`s?wWD$Nx!`Wz_-LR4#d~XatIKhJ{egpx>tFumEnV8jA-Pg*=8l}zp)4sYMS|F{$ z08I+6@E4XLFGa_^(@vYbI-kP$L&(9#cii<3b)tbiSKsF;)!YZ% z&$~B8EmxCjd`9)g)W%)(Iife;F%XZ9`%5LO??w>n@)?-r+^$!rX7c~2UUzT;XKiv# zh9&SQ6p1c>^gDY&Fxd!Hysv%R4|Xxcmj20>i^S%ADUtpS6j!2Oz!P)*TRo)(jr)*6 z&0D4d6!3?S^C5y~T7XJ%5FsBbG*BXersFlm6==a(-!$oCHEvAb=1CO!C8em=m?)O- zsPj_e=qT-vWP1NnG)YdK*l811S&iv(u9-^PzG)i}TPaQ5XYCp5%!@Vz2n)dAvD;e| z7^tQu43c+P=9!w2lle*e37rXqqP^knIXE|$`$$IUb&>th3a^ymAa9-sZdInsUQfRF z{u6OG#F>H&5jPS?)5QA$cW5dP6pk?@R%F55mD!#i;g&*X-@{XF=oSQ`c>Of-_J+Xe zMwMvi90%rA*(057O}dCUIkPT+OP__+2z{^G0p=uM(E{TWljH+Li0q#=hSB5dp(iiV zoS?w<-m&2HcGUFHVmqmF=R2XRH5lOPbC7mtQo#txY`!$z2>N6q*-c7kAM{{|dp-<-9XU-GhamF`5&f6B~#%jLiw-{NJd8t~54v zoygBwPCO<2@`fXac>H8#WnX8dKW{HNeP6LV?6!^$@~KoH!%q(&P{xDYVo`fodx+oL zzTEv5ewDIqRxG4v;3?o9{qS66)KIKBQz$H=%o-EYtp=-0)oWqxK-kL|mSlHOL(OJ# za<@c%F&Os#z9O4jylhKho`_bJqoL)IM7%7HuZ~y%{(}3MaPCNNhhYUi6Y0Mb2+KcY=t?c7lv9OS9aQv~* z3hjA4u2xey4eIGvA#6Qt!ksigq(XUz4RO-zaE4G<{rY>dpTq}k=%U5rr^E&0z(UEV@C6SCxaHeH2@D3w$j(5VNmSk?+hz!Vdio`n;SiARrGZF~ejcl;{ax@Pbc}mjg)NJ#tw>iQn9DY2x!MG~4>oPy$)f=m~l6K?+QtBD)?y#k1fH-H4KfH*uzR2<|tSxR`>}aP6AmyO_*Lsmy3vg!TI{pb2AoZ+ecJRxx*y7w}Xew83)8w?ejT% z2ah%~xM2B!a7Qp#d)H{FElw(AtI<>{71=)1D^$)HiVcC{hHALFR`-)ny_~pJqWh&z zuogb18Sb!JMO5}(ywiS}LnJb2N3Ofja~#Ivtr{)R_Z9Q%yAQdb7KUWh&Mg*2d)3#y z4o+{~Z?8X)%qRFz6o0{w%1b#uzM%WofJ<7t5uC8;rMl5dg1y)55YnqJ=NFV*3|;wA zRL_XrBGNEbbiU&*rmk8p`=*++i|uw-Asu@fwH`oHMO%)hraIB?CZC-z=Hp@*t85Q^ zbDTF;vX~sca7TuCcU!sJBOR1+dJ!bo30#?{(@p#{2Ni+$&t3peijarwE)U+r#nnEO z?4d8!rWC!~QeML3%N~e!qc*3d<0SnzSo5DfZkgyKFIy4bDOjUKj^RQTyv9%L6*`ck zBv0!{kH2rub`81q24ljBd(41F6rZG9hIkj53J>t8v%|3J4{iq$;+X3t%?tbFJ^ut=bWaJjD}d$n2je5uLGE*;7%Yf_qw08l4iwABv)* zMx;r4!xQG~cpeG@QP~52EbYQ^BnHq+awY7RtK7RY|!Z6BlrAX3cEs9ts zPAzaN8EK0#X3Ls>mF}J7=3$`V3-_Rt|TcR?Hv^yUVqQqwB z7PeNpAHZ1KOq0pF-V_@RF}a`_$K`}QNC<<nIZeK3DKRe%|9EL%K>zCYi!ZVu65OB2RXekU_=4X2oOVyIAmcMa7SC5ol3)E9v^%EbFvz= zt>@!dy<%Yt)Y*(0w|UknwkiI+JMV-Z1_biHB+Q*mPY^2}R4<_+5?=bo{^>Rkl%^-t z^rUP<^5bJMyTT$qpSg8ljiSXAXbBg%XgwLWbZvMYJQsQ=3L5$R_y(^Lwp6?1w_`-E z4^`I83mzac#?qP8;!a0K$ax%YCiv^t)+Un z-U7^6-H`+e-6*8KM7fX)M0!jxgJ=gC_{AV3QYAmrsLV1q@S14ky|Si1VaWYdmf7lT zm}P>F@(@R#g3HI}g;tlG14HXUGRvi#dRt-2eJ=D7 zto0#*e&F}Z-hRo zIt)E(vJFo*H_tPQjjQv5)G_~Coh(A2>aqVbvDw4m7}ktw*j{ho{)0n_NQy#}e+p{0unx4Yo3Uo-Lk65725C2=vK zEtjpfxijME3J}gX(5gA%|ooX<_8Ki!DnNzqtGiZ>LT^$f3A9M5|LB=b&7J zR}9=Uyc8a|e*EtKD`CAZ9*aRf=)77gqqT@@{!a|ltD^3@8f3e&rPnZI@E+8OSyhT8 z7RDl_2rB)-x)FGct|KA+Xe7A4QOX;G2_ojYwjE47J-*uTHddBPyA-UENDSvpxV0gF zo^RPgAd~B;@q8W}T=jmiGPdX$NE}0$SZYQ#o-&HAI%NU+KkX1r=AAx!*tx&%;vNw* znxCNdg6n=~hJfZ!)|KznH@{+3rlGW4(*0HP?&8jEdeGL9BEPj|s2dv#>rS%YPLV%M z7|A>vEnCWGKGpm6f9oKq!kNFBq3U%6>aQ@(8AozREg9xDyv@+GSSLNPe2@mwcBrJR zd$*uDC#!&!8cmCz$*~$^(GyXt1G8ot=f-J@2&G!hau5IXq@FmU?}pwN7LZk_hph}A z@is$&X?)UKwOb+|Vlh#nAe=t8g!@E|U<;`(luWpw7{u)q@^j^@u~NZ;cfvKA8vE#! zPvH>p#gsW0II{(6xFLT!HbmFZ22&@o#-$si0mgEL5&c?ZDgp@il>drC^L2kyZ`Nut zn;ddJMj770M*mCU4+G6N$H}N=X_4bGJa&4$o?q-|xe5{3-;1dl1fW;Sji2XwkX-$4 zPuSaz4bPDsL2t;s_fa<4Z5H@V>{Z_kkISmxq;&=pvV6c7fy-i3Yq%+S>_56E23|@O zs#z((jfHz6VT~_)QkhFjXAi3N)I@%hIcv3DG}kFxEedYLwERiXDl+p9KrwD$1V}E` zu)uPymtJ}nFhEyBdk_tEd1%FP;|60O9-W~uB!rO*RYIl+A(@IZ({$UTUf?>sMxtw; zGdjNSIP(H+bVN)Jzk;Fgh7ZrE>J6lIg{yk%Ayk5HWAYkk@Vlp)^p@>DRlt4vwJZK< zD7KzTcQqcBoQrMOzq8;Md;Y00@`VjRJC=M>Em-6{N@+Q!cQ&2%DJ4ivS2b&MqlZZc zTn~&qrLpqgD`I0v1r7k7A^|Ysk)!Fm7LroV%EjjtUhDn05t z5-HX)g!e}fUZ!U=8rxwfw3TW**g1|?WN9irn|$Bs)XgABba%gNV8aLWb;6MnK-J(T z{Y|}OLXD*!Vci3nJco|tg>(3RYwg2g*`LiowuobyC>$5t&xz*Sg_T1vND>zNJjZ?c9YLdZ91~CMD0;z)igEh!Q;|+tpAHT`! zViNoxswUQ09J=g=$ms3@lw{@2aQ&A^z9bxYikj566=AFElK&e6p5@5FmSmL(BmX4( zu_zktJDf(!Fflj#Q04FXrzDBP^$>c6vhFznPUrRL1S9pdq3Wf`0dcbqzD(&d)*@WR+^zIi-d5Z1(gDZg45 z{n_F&CDgx3$>fJqCs@gxZ~WMEA|2~E2bs7kr4rtwz``Kol z9*UGx$Z< z#Raw0+Tff_t0HvlpP=rXBXjOGRlyF5+mEbFt-KMbJtodzTr zGP@C%%oaddTmfD(xqLfKfEdgKavpy?Y%kI_0um44t3>*6JYf$lT`}8S?ppcnm|@i@ z*2Pz@D*KAHf=vU#?2g|n6;U*bx!BbXRi?dySeS|ZbIe60Icd~`s)>5s8LLB338KMl zXHix2a$C?4O-yl^oxlUAeQVYfvq%0|N47h1h-$YIgrEt!K1ZqD56bHAi;Qj?5m$9U zTWGrwwRXK$Z)TVjDV8$zp?N!KNRcVR&!;ly#ya|Ty9ZXDX;=c%>4+WnuUsH>?S};IO;H;gDGcY&Wqf7qUpgWckF~&=0V;l`78WCg z%8~cI=$Wdn&cPv=s52^N@kSd4yQG4!Ol@cu8+SNrUe^-I)`|=5=oUIYeB7WzFsYH0 z$0cYKtgVOfnF)o0&WDGT@@h+#3x0VNY+cRsUDqiT!S~UHlk)?I8chUn8fTMJ=-)?+ z)N}6CZ(RRUoUryVtCJ!0S}BDwF|C!c08z(LVtzb;8V$ z})jaE2&l(;QGk(|3y^@8HB-wg3j6?$oDLuteM|G?O8tzPz5QX^ZOTa(s$Qk2&IhDbbS8^l8~ zb>`@C6|SIZ>CA)T$((Yx!i;-qCWzWh+DPM0Z0V9ZLbaS9E90TgqIYsZ8DPI7Ax&|1S0KeV`;vb)6_@VCZFZY_&TH=nKL@gTzK)PBA4aXMvT_}2RhW_Do4S`#eAPb7(d zlaPcP5vf$QmbN1X+ua5~Ao=%#?hc$dz*r&_HsG3+;vFi#p44dOb!JvTGGSx+L0E@{ z$>M!tu91}pw}p{Jj1UC~pT29j-GXVdn@EHKpSHb_U}29uIqTT;JQj^dfYIi&H|KR< zEZ8TV)mw^{;KxSHF^0ZjQ;0q6xVf9m>HKM63rpP%K^;fz_NkuxtL8iRoH@52;c`gM zMoD-%Az$FOwlv@NxoPJPywct@huUpf%}y?*dQw{V(=>#*Ka71oLrBxkU9`}OpAYQz z!al5BAr~fCpzp#E2_#-3Y+!)sfKKwm!oT%s1%E7OF=WKJ+1LAC00NP0SC zjZf*%W)q=$XHy8FX3%?6H;cJWc94*@k>+f-Ch*38TFUOSeMSRtXA60?+u#!tQXXKj z&uZi=bgpS=d>jadk58dTa}rIcepL?+Ht1pb|5VL-EexB_aew}m9^kPz?2YIcZGqGP zIj-7;j%AFyrAIo{kw779T-8O3(I-D62dV4yj_g483&=7In(jL~uA@d6fU zikIa!POGGBN7dO&8{QUU|6&a2-CK{THvG7Eonlz&2qUp~l^!E2z=Z3c$f4 zppq9v7b)qdF+iO`(YzEk4rvxe-)0ciIgNs&Hy-p~y(VKOa!W<>Y>u{6u$&OimG(Vo z;+yKjL<_XC%|mIraZPwF4ozul?Da5~iLNJPbwe%Mq_c_DoMPWWK)wltkvu~{hujN+ zkkq_)>Eg=v2Gy;5N5;z=u}kpp3Ia@n-8>1 zE9Z%K_P*a;@ZfD7rS%&Q(Hvn>xEWDM_063if9d89+92}ydc7vRZ*+E&E-_rP=Hy^8+kax) zK@ALkh?p}FZhhH&ffRE)<#k>Thko0qQeOG8C}zUdYy@huFB)Sb)c;yecbCoi1=6$P zH$|;ItGRu;LL`>WKF^=0jtBEc%u2^UqtQ`gw zhaNKo{dCAuGIlCPsSv069`i}WQdDH8??vDG%B4!~Me1WtL8g&s;e@BDuU#LS>N9%1 zwhx_oy%-%#W6tZ+H#k*igB6p*(0sCFQA}u*fVRcdA=erh6n$PQ#Y~a#9=?HxEBO{A z{h;{WiVd@HS1KL2+b%k?k@zpJ$#sNuxnrQruYUh+PJYqs><~4RBv_E|pxAm$lSyf5 zMnOYQJy2Oc3BIk$Hu|;Vuq~TtT0|VrG>w^)28?T$IR$Rw$@0_V?Mr-Ct_}K3bkhEZ z7!<@2JaAe;X|QONw=auU$|#v~9yIUdA?{_|c$?K(4S8;j%#;} zmte*Uhao7Qv*pxP0{2m0Xt$}MyYTUH*y2G?|dV|#t@IhTMfeR1OOP_T|?GUZr zv0lU)RFJBMZqjr@P6+Qv9j*!NF4zu>IA_p9E(C{;)dqQtp_V5sIA?Q~spuF7QhE482PKBM5A>k4Pjr6-xh#0GO zXK@VbS3!OwqaZMxE^`KWXj@Zzh+v#G1y>Lp!$xGPxs`UP6FIxJk!J

    9EDj>t*h$*iT7VscakttHcX@NO*TFMeJ@)9v6Y|_){1xCw zq!oyz)uZ9GsvXhd;t7CXc9tG+dbiS**lB}~ZD}S%^@2t)UHdr@C$F-CKO|#Vis#p{ zcL#x&EPo)&`GVSeS@p?$8mjRN;r^V_{lIrDI za@z7XW6T|??er)nCZ^ZMbIKMZ=%?NNri6Y&^)0*oGOj-zZ%nZcv&>Tau)??w%`4@M zcoC`J?WV0&T?CRV?C#R>pWh~Cj2%QtUI*5i&bM^(coXL>wc+!o9_t)eCqBQ)$d6qq<{biT(kEmzp`#$DMY<36agtLBRa+&E)oz^x{IF0L*Bv^JiYg!i`^e5 z3x&0=cqVTg>gcHFhQx%WBdGAZH{_6}GuaXj^_pXc<`bbyQLjYJDMZ3JHj?gxt|vrw ziw6FrrI=Y1{y;dMJ|<<${!|oi0-Ozd3iC1tCxS15i=6}(RdYn+eYjq30_ZQipXs}! zg`)W*3?BKCZ=Mgr1$qjy-Vm{y4&xZpRrAc>dF*aYB9Sul2d-50~3Fi&{aZ6T88Fi`u@FHczUW*Bebm`Jc0FnwN?0 zo|DVCvI=0y*-V@7%bL$JNQ6&kg3~#W%iUR3IG2LS8H-jIv&c z&l$4Y^P^@i8E{Fa6Y!M;z1d8!V5aCvg9q+yjjI}5)7c0*870oG>*HcTx9!`~uyY^R??iN(@dhasUN{(CmireoLm)>$#<@5Ht zllo+LmUi1vL+2)w(KDn;Ls~l(=Cc|^&=c9hgwcyTuWy_09v-uu?AVg)9bVT;N2_0= zYy=zFFF(mx^=#Rq3w|OERQ6o)#8OMK*h(kh+=5hDrU6Tm@y+3}sm2Ux!Jyw!K{f_v zZmiZ}xB1{m@Q!mB-8oK9SAj+52K{vMBKPsj_%~es{>`jNFDY3tXzW?B`xHw%vI!kv ziyZ%H0>0_e5!NYm@XjaMVa}KtIlxXQlwOeDB~bdj26BheXauV-p)6ST^?5(`fjflf z#vIE-HC3!_G>-aurU``omIsPV7=3FEF1II2?7V+fvtKns?0AE0b><5OvTB9KppfAu zG1C&Dmgq#DB&g<`|2my+H^&pC;ZiV?mp)wJFdPHKuhd<==w!Y(o-&?wJ*v-bcoVIa zSCyZjmjjO`Il{vJ-Gf(w(UDZG-kw9pl<&c^W2f7{T=W<`$bb|qp{vR&l=4(FAn{^+-bsaA>$<(D?a>*HslD7&A@~Gb7n5m3CHcJcI}^P(X&B* za<|a+?K>*<+OKe*JY4b)TQ;+A2hMRX&c2anUKI%t`^&dLBBfaml@e@*A7C?>*xxX7 z1Ft^oFMmzXDYCPFMXPT=AQUq+9yjgSWz>93)xzbp2kgG{iBr{kv(;m)^SBty(8}Mc ziA^^c(WzuO@U7*Hrs+f=fXuN@E??PY&evnEd%lOtQP8R{WM8~#RPW4lAS*a9caj3=8RmjPb-;n@)qGO5jmsh@n(P$V5|6I zGZHdH1kwakFQuzf&gax|XX{ZHhZjA^IE{MEw_kVS%?$GN;jpbbi7c$$dDJx;zWMK= zr9Zz@;MQ3I*m3EH3QE&Ud9&*Kt+An*lxxRo7ZrIb&1#35J-%^Ze4FqPG~?0HW-z&E za;bd%^tb}y2sB=Ef~RDpgK^&g3spD=efqY;^e+LvFMI`F?c%!=-uWycdU0uc+0_jh z)~$Z~RLPJs)0xh~FI!FW&t3pq+*rg+4bDw=$v=Z?u}@|F+8ka6+Q>$Q{s7cii~KuV z%6`c`rp}1W*Xx}m9%dl0YWEE(LQ&JHT%QJ?u>}GtX)SK?emG9+$aUK`dg3$mpcF2l z?ik?E3})=2NugNjBG>miy?aR!yfW?hUNr5<2S5u+&}Giuj=W?H z$?OJ#UIaL2v--58d1D|z?=hj?Zw_h;*!R|->i1O2JwO#|FmQMzAyz6qV``dTgKLTe z0@fcdzkNya)1S+>KPRxASmD?r6c^_~_V@zLg9g*f#+--69Elk62cymIj(YRk<&k67 zmq@=&Z^E`G)tc?XQB>#6LAAivQ31cGBp-0pA4_4lfs_DNL~BvqWKlROA`=rC<3Mkh?8Lb`* zvvvf%87x_NW8i2utjNj|{|r7L;1BqCK!ie`2^0Pb(hHN;w%dDL`*hPqdbN0`rDTL(y;VA%4QT|5~~j3G%%;;}-lC-^r1WtZ-vX z2e3t{Sc6~^M?hr9Rjd>eMH#gzIgUxvRIN@+j2S2GZ)@;I8tm!#-T4gHq#Jzu76sca zbdnu|wU%XXzxR8fZfb@QTLItB69?Jnl%4lF3lw&7aqS<2Wc2pc-3P?sdPA}i^#1x% z+bJty@dephSPxgvmS5{c67GYYR^Ri}&!1 zXQs=+jq{K=OuS5kV)UF+=)f{_-C&B8fzMoFYKt^#w@>9h5}~o_g*%>K;@s})P$R>+ z15Z~_E6M`!Mo4W3WV25feZq;l)`RyD&naKMBltGozRD0@q{#2>ro1Qq~xXdQDy2)+RG3f8_#Izz#fn4_l+SmNyAju zKIU9DW{SA6(eebjhG~(5cmFey!$}|}4~aX~?Q4+_HcDwc!Y5=;3?ATl*3@*IS;y{H z+(_iE^dNHHZV^fU1dQ|eQV9HtL;jhF)zZvJvo|I?`-;50YL=VjCzih`G-VT4%8@I3? z$Q@w#NjP?KxLhq3t#1m#IC2MSJ6;Gx3TK`lEi_ML{`f}j_QJ7r3li`ZI$Vn^z_Af_ znnhP)XZXIKOBE;>?7|S1IZ;AhQ%^<(&CIpOS!igF>YRD_{)IpENxUk)Qge`*3v<$q zccey(^M<5pM|jmq&FS>D#{^-RGAk5TY2#8`}%aPK!3?FY3!dNu5>_vBizZhX_Vd zs6~wi$?n-fD z-iMc^Q+xX}-F@qnv-X{t9pfBW zmis)lmS=mVMbWxPS+u^r5{4t!169uFw^>}`wCzlT5Zi;KOVL9if@$voi|S%88rrnP zoZ1?sINEzI1;N2+J@Sh&s7mB9+<^MQINW1pjiw(`(c`*(3p1zcCKo*jI1Y0m}X-7DV1hFTz$3G2#JXKe-+X@qn5RPp%&Fr&s0`o>X@B4676m!H3x2~S%aowe>kDSshJyTZzZS48{6m}**(eyX z$DejrxaYe`N^90(tLp14>4iu_ncagVfXnA!I}1N^6z<&YDZO*=$+J#WJ*)8VR0VQdj?Yw5 z`l*u6)Wa)FSA;IGQK+}U7Mk_p6A0^L z2<|CQHdnuv2|Hc~6FCtc_u=_}%it&eEYfe>{<$h{vAo%`s0GuTuJqM0px?+KvKC&s*B zhaQjd!%4J!9{4*q`&DlmTZw@SMmfsrW2j`Bdf)m*V+l{cmmfk7ddQHmv&StOV5;*- zx?xZB(EHoY;?Ff!35$5Kk~cUp8zL_BqwWM0u`GBY?s|Qc6$Ae5UPXh{s;sbSEhxdK zXjZ1*^DCj^Ua*A;)X|VB^`cNn`EAkjics`DZE^J%(nhsBeuwtEUOA|~LKSOt;wLn) zZ9SmscTlrz*a7l7`dEvooE3N6!L_0dqJmJ>>#-X~RdRAWp{7$|&*EhIp}Elr&U%DF zc>RM0lsZ|>=Bp`vgUKu8_})K4$1Y*>tdUL5J}y6Yw7 zqOf$?xLQP3N1)4eG$C`4u1tlSda>p@RZQUHNRV^!`#yEUMW%CyUiajXUq%=${TW4% zq|$jCFN3x{Kq_bFkHUKhe&POkmMItZu3Z=pe({}qhdZp}HfeF)jdZ`u#-}C-Kj{Ag zOYI7i2JmXL%gxhm&!uUHymAL2r)9`PHxQDduI6x3i+JzmbggRBwWZnV=1d1o&ESX} z;#oPX)VeuI(|M~&nQ3h6i<1kK6OY~WYs8;;KZiJ93+ zTeGq^M*sw$>M{Ak;Mb;Y%dT_ESnLJ6o3b9{z&UZ3-J~!MBWP6gdERrPosR_K(Y(bt z`7wMPa;G7Vwg&a;ofAy-3Ow`k6|>U$+Y?Wcwf`yswJCy`BienjWhBnOQ2l$JKn2u|UQ-H`Z~ zOF&i=1EnR6lCOw)wg}5@F14UrWzLP2dXp!cbO+>|dhb@KLHhL!wD@mb?YjXg6=y3t z`Ii~!%J?>=?^5Wgg%h7Ma-O4R`gZK$y!tAXx=t5x({|B1Fzjq=D)gp9{O+o6AhEgcgScz}L`t+7viWpjY zSDT%l6|{NmMP42j1u!08a|)^RnVvVx;0%t`&u9GZp72TVkX9n2ht+cnS%@Uiwbv_P z_^qvF3+aws#p4z5!vPKeKEvS3t&=XO-~u)a_PE@6;M*g4s?n)$^H2cuD?xtbFfxLo zdrc1Gf(JqJQMd<8oC;y4O5uTwUL!_VcWsQU!84PeP_AZBVZf7eTi5+h$| zethTjDNi5|{Fy57Ecc?ICQ%c&A1LQuvn7uv*cuMP*AU5CFJcHRyBVj7QT zm@l|VbgPRoW52`+>B#ML{a)Gp`L843qz3|&sJ_ZhJT#;%9LIMD6sclAdtEE8-3B?Cw37aGek@$DVInPcgcyVSjpkS6kfZ=E^-aRZ|4I-BT)OGJ z(37!RD$t&?&Qr5^45u;0yzLh+g-UBTWYJ5*h;}aktk8Vru)*QVB_fDdk%nx$c@=LL z>H(o}zS8+c(-w~{f0wqAK{;<_>S6f8gaBY!l*q{t_^;TbM+L|6Es)5eGG@rw=>1l; zS4Oght?selgml^8q1_~tXk?QlF5SjQup5z3+~iuxIeDxK+_7z0Y@(8=>ugq-escnvTTDAnOw^jc zDJ(ooGoYZ|d7e}_DI}=Mpm{@J`$SA&??M;uyJ$t?F(X0{>cQ%L56yQt1Zybx&2G8+ zXJot07YQr02mV5F#_0{aMc_xtt>%_BTxA_sEC7*m%R|5YbC2t9Unz$=RugSIb8hBw zr2p{;DkO^!oE*RzN)k*%?Gy0ek5U!m?MV_A1?LxL=HsI7@zZeJEl%_1gNN}ei9cjD zwzCH;%(#&SPc;SU9(c*D5Rqvoq{{-XMv(~_#fNawB83i&md3w&ih7*`$Q;Q6@g`h0 zw%f&12u2ZpINbdV-L1t*JyN_VBY(5Ruq6Jopzs-|?DO%J3vX8eQvUVGoBO0+(vIj> z5)#do_8R^uz1L)~F)oHRlCDOA9I9VE{vj17M@NlHr0&Ie)mkmBI>C>p?_vWc0fUr1dzvNedWHM;591^pERM+F4X zUmtY=my_w-y})gQPMhxe9-gdgCtdV0r%d{86P?nz)PZ~ArpD|zbw%cVw-0ExJyDo| z(u`{8P17JjpdVUvFflwmmKwFRWM%_Rd3v#zbC}bQrD0B`mQ5ju(wfX^p3dts*kx?~ z_Dw~v`dT{4jAg4-`Vjw}i?M?q*BQI0S&`spXg<1kfJV}rCE@qx*#aF_Zp!S>l8bZ) z4tF-QixO58yl64eT#7dF zw(b?%+toJF%h*FadaNTQfz^$r)Zl>CzYo7yul}!<4wjf25-_ zb=q@9ULZDeyv&~H!FuJ^bBGb%NlXHcrh*G+{l4vbT|*Jds%fwwmOb#aodWwVH6I3g zd=gF_s+sxtoK+6l+PF|*LIS!Q+4J+Wj1=_58Ydl?Jndsup!(>&n>+%ezwL#x?0ANW zN6WohL3IGu?5B41VFxtNqw;xUbzPNjUWfoC*8-ftk^_5r@WpyahbCZ58 zX$j2?DOacXFts-J76LF_0>!V1YgGgPKg5z9mIq`$cMG|O$lsJZf?f{w)mOH-(1Z)P z^T&JMx3nEu8rFGLC*SPAP8%=^=!bx`UOC9vxf zMHR}a(oVypYREFW98SlY{4j$v<`{K&2d1kf9yIjo&)6$3b#nb1cvN_a?z2X9Pptds zh~?2%iTf+pM=y_+MaxNC7xTtz$1UgS+VBe)i{VzDh30T+rP@_UVww{l!=rMQ3_>hn zOGzqcw12Q_Ry_%*`8Mk(d5OpAA?`y=LoQA$Nzh9dk?Ye;Z|$3ni3c8-Rha(&KZ%aV zm8p3gGP362!EF|0loD=Q7m%hhD_vKD5K-sNpkA?^KJ)P7^Y=Kn7%rbXb?g0An32i- zG!nrT)W!U5_mo(0XFrEuN#FgXlfLIbR$44d z(?fkaYyUzc4oTsTGpC}hwWm->k>nkWLX%xI=G=RcpE?_$A(DX(PpBC0TlZ^1?}9^w zp~U(a&#a6qFVu031}{eZ?%!usfxnWRdTt*jz{n;xxVw&{$WyY^ofx+w1Ihx1J>xeE z3q8heJJ){)8mZw(qsRcNbze#~aAp!^Iy&`7zhH;QIwV=MHt^*?X2e!XR>opqTY$+f z=F-Q8M-=!;r+^X4ul{(n9AADD{tYa_VSb*>`ytzMu1w^(8Kf>M>vs%>C z)HB<~U-dGj(2e0INjk_{7AU6k zwGxVlFHdBVDF@gtT8J-hlJ{Kz#cv;B%zOZu(d{U#TeSxLFE;9b(-#F(lORw~N1ah2 zrw;3M@6g$EUBX{85h|Dnus5&H-57KDQ4Q|RF;4v@$xEo$B{v*uL(FS4Udf0>vJBkg z{Dd2H_ypu?K5#`eRdNd%;x#~UZNO1J-?vW*t1Yrqy1TdPIHs|;XKrq0;cpwn^?ZjC-er{^yBUD&0)ukua3G!}za z@r(T-ZpLG+YmHe=a{C&YE($v@vMG33Nq>N-n*X>U|I<}=`s6*4`_@nC)mmNb-v>u+ z4AFck1FJtuy?GbPCL80Tin1;)nq7(KmEFpm+#z|tNykYPD8aiof># zJ)l%G3uUxgW^!WbLGjzv?Zoug3*qm;VXve{p|jN zFnd}HwPP=Li6)-P`zX`k7*rSf+qe6z;+R03;3%XQJ(G^t)Fnp4WQH#^Gm711{XD41 zF;h>8?z-Cn+nuo!ps0{&sW7uXGLpgYE1Dn*xfF*m-L7cj)IZL1-D%kAegX!jPUGTR z8pT1+OY9dN$<6nlnh%f_cMur9d+N~sI}hr~X4KmgUhWSNk1@Cq0XgTA#x{(<6?}XA z1GhDWw4+A9Z16!iq~ZeNTVSp^JyiIG_zrp9<1hjAln*#OC?(ycX6^uojE*`kCRduw z(Yky%wEi){|An*(wIWe>?*nkelKG;UZh1LP@auc!@^6qaC6*Q^-OT-Hq?y7h_7uK0 zt)_T_`G;*badt&NWuzu+@Zl)Q^ zGRMPS|JcsaBsI1C){W)%4ur{^V{e@WAxWLhGq+WjnIdN5WYT1I6f^x4)~thNRjtGN z-<<%C0#J3jdD|D`Ze8g7uSzE#t3NV$5hmkG>X#y~-yX~(xmInd>g$Jt&YkXjOLppv zo*I0JzPE+ioo*~jEr0#3;r5`=5i$1*xxPp~IaDb@06?=A8 zT$Kt}GK0XQ&ougELiuWW{+bfQG?O0X7uNYgcD~k35r}DGlzOO{EWJI)r*wcAyEPJ| zsTQsW>UjH_Q1>-AVHd_5Uy*6QE*<7J4vB_d=ZqSABiVUz!>#PKaPgesP-#LP{t#*h z=rEur^o2SW1-ub8niyS)+lvXKM`~GkuCvEtmk?qI9#Pvsdy|zZp9>cN1++95Zg$9S^$gJAVD6@wwZ7XWW(cEBh!?g z{FS+olF)T^s^#1oO3j)dm~p7}8iZl{u-8iLz;LlTl-a>tll<5mqU8H&T--Z zofg$HA~z{@?sT}$?>k%}FyfXm?)N{Rh7XM02eoQcF`M+h30Hy9lj*_G2NuHX8#%5q zHE{dXQ3r6f{<9ZAYg6^UN`I{Yp$NqF?r-sKE7KO_j@?q|>zrX~Ehl6~5b<1DbG-70 z5A}CrE6{DG3-|E=7OpT#R$nj51@mW~(}gk2VfH$7H(5dEi<|d)G`oLhV{q*ggYsD z($BcDE#vN1?StL?S$w1!RET9uDl~`NTC8g&gOgevMw{{^AnhC9Z z0{m~+p9zz(c9lwHU7d)d?c|lPZ-~&#w#Alza?&8SHhvd5lS;?sS$)$*d7_C?tI1|h zAD`ItT60x~H`AQMXWoI^v;0D1nW&}|g*bCF@%?t5D<^dfX5PiB^gQqHzn#bREWK6V zod#2{7RZmIq1sf6bF821=8hilmR=xv+2m^X8-;71=VEh?p2iT zl`>(d+gR{_?%mhb2dq1GG=p>mm}`cSw5KVBG>e+rGDqG71d6`y_+5UT$2Xr`28RFp zKn8oVJOG@idBsgvZTV;lxdBl3G%crgnxjWWb-uVQ%+x*Fn zEVo%$gisz5TK_89%Imv3@%hQgY7^sOdS$6bmPaQH z;6FEC`0oHj!2jK_$RCzWTxQ|_-=*-!Clgjv$iL6O4H!T(|LYd85D3oeERPg zeC_AV0B^@9(&{&F5*^QD_7$%0RrS~-y~C*iN)8WbrChHOE0c_UZ&?I(#luuSGg}ABcfsjo`hm})A1E4$o0B6HVxHyokh3qRz;3-(%x1B0^!~WH zSUPZNF~2jf{&J&pm*B(qVnVvgSZT?4W*Pawy8DkQzPfI}aASODn{ z_2nz>sQ@k(B{N-X%%k1nRh2=QMh46f0S?YmS^s&b(=JWXr!F7a>8Fn{(X76 zP?2YMqx*EVjn847{^@wUD9NRjVOIde|Fi`$p3bFMc{<{xg&%mmX;A=zHl9c?Q7%)N zCKVz6KY#xC0(NEMQ#I>R^(GPkgR=19N}#y|b$mK5 zT2C3rvjnoBX=eT}z$N10d^tSdT0R~7LLg7|z>r9d?x}IVbv$l(BuG)MzSE~jon(4k zkU>tw3n6m}3xyyf4Lzrh6Iu5?O;)uy9G(OdSWl&MIhZ023N+phQ^Xv7^t)K)^KOBk z2fO=^J!z#a0PR$WfEkkCS7JkY=-C))sIbqoUDhDQ{&}!EU*feLE?j zLm?KOFAvWQ1p7}1*)#p7{%^-JPidmCkrK>4K+o|s4p|g|H|8iX$AAWvcxu@N(EBFn zSYz`gaf0_&3LomfLz`lN>~{Nw>~q<2m|5Pp`BhN&cb(4riE1jpS8F1Zj*J0-@9wXS zGF&#M2crn?D{Qsv({FHH=Nlk5H}CvxQ13 zIs4$iSj)BtYQ^hu-3;@;U;LH?>+3*|vu%S<#ym0*jzxF(x(U)&ER>S}>;G7a5BsJ# z`E|X_SDl1XL}$zY1CAN?rv7Wkv~Lxal?%o4dE9U7@_C{qt*!1Mud`%VA3YQ~oi0od zf968Krk|=eoBir`W7w-hiZXKwE}Ox`pP)6%dY{mL8oUOYZrmvVA)ayM?{9WVNi-5o>oDPd}n zd@kE>W%z(kyF?cT!?9$koOZdNobbU33>@c`Rnfrnia#Rh{wOczGv9?^;cM8^A)KkJ2r z_eI!c!>uSkBcz+vWa9THL0!!8kp#N?IYrsykMO*(3r%>q9wITZX42{8b?_7BC0>jZ zBQAl%p!ysqe)L;WW*Q8J@Y`-)zSrCJkb1Li&aXfD#I9Rl3_6{fnTPvtcI-AAka>)&o3;L zwzjG#X*s7va~KNuQa^ul7Na`Hoa8qOeQzB-FQg+NvD3(DBf*&Tps_D zWSmYh$^0SqPc(c&13aqn_x`^G$X(R-kp2rl9|@p6HDvW+r4P1aT6AL5>xF#Z6#!D4 zX5|`=W$>ulblfL;Kh$Lzjqu^jw7cEb>kq&~eb26&pr0OmrD@PhK-&5b*|U?>#n;|?#Bg5N4R_AqfA}pe}^7{ z!*nryNsSJNM8GZux|0Rv+j#C0v^mo2ysj)d-i~valnVVbohfX}>^eCeovIJP&}91I z`^Noj>JR@~ zDbD-y$e`V>*7df}bbnlwby8B4sX&`BVy+W`%`h{T!pdr)57F}F!xh#EUeN>k+_z(_ zPFsF3Cx06fjUn#nV;@YmhU$iZL7s!c(aio?XFN^z&!}Y30491{-G2Cd?)BO}@AqR~ zUat@HK{(oKQ&$`nR~UVdP^){2g_ zbkqmr-Tk4?GW}4q(;sPCHeaS{a^EKKek`l3sF)YQ*cuxBU1scqJpaB`x8c21t@kpb z+L`-TSWXF{jQ?RFbY9YH{m4S6Rja1|jgj$VjAXPsKwdKAInVc68%X-q3n8LdWKOriO(7HB_dDv81eQwm%G`F0;gA#jNPK{dVGS zn;CTmPbaEfrBz<%7B3SnokAi11Z1rsAicnmYtm>mvBU=i#Ah{*e0ez6m@~ltVi;N| zn^mc*8n8bfUx!*|v8m0BZRt6_V#0cL$?p|0+PArx2gvKL$mMuN~Ke1ZV*h9@H5Gr| zwhzfZy)vuyqVv_78^D(+4QDrG=eX{)Sn`o+)G=-wZigReW<7IvJbV0)qrSzU0U(CU ze4dkhrazQznIuz(QswEz4e&!z#VRk~en5iR@l1gup!NLY^6Wx|M%&uO80+L*{*QR) z_aIL7%MUqxIZv6SDfkbS0-WK%n0?!Mp0)z+KO(uLu~FqC+t&8qrL*|?%9vA9ejkOA zfS!i5x?H(sWCj;~!61}0G|EDV-Nj)@Jei~ZsS=lrKKKW|*GY@-qovl9(lW=V?U1t8 z*4Cldzc}Fd5%?}G>zCe-Jov=x4<9nYspSJbqM|=85(|hrIW>G#CzW9s)aDE2KebSZOdG;5jq_dfTz*7&3x3mhq3s5f=Ihq%?f?=bA0}|#a6e`ETM=bg zJM=)|m_Dw%Ful|a?p`xCEjQayWQ3O+v1)(NXw@&S4K9ZR$Cq2+`|Bye<`Xm#!he_x zNkz{WUl`01)hnx02R=Y;^#b^?S`XbJ%KpOm-u9D3SWKtx{byrWTiq)+XX04bi1^^j z=TFv1AsI(HN4NxDB-V$+qGa~&1Qfl7q+K6|s=vMJL$Ubq`Nxo^zQY{f&B}fZX<>2E z<(>b}jVSmsf`9g?mF6Ntn1NQCbA`FZhkK0sL(%>#cCr`E2u7go)gjhC*CR>YIS@eC z`>h0a{+eSi9{)2GQK-M79BxeI@?cY|wP`Y=XE&!&`N_b4VQMKKV((j}8IKA6H}=1y zP*hc2G%|hpNR{8xfc6gy&6W(Sv+ovER#twBz7M0$Ji4)I(CPAar2T*0es<9NOrZ7$ zpZdidQw;;UMFrjvv)C$mRb)#dQO)rvN>^P1SS6*WGR%-6OhHkD|kFM4*a zK5}GsJk=I|JFWWwMwgcHkC2wwQRA@L`0M%eCXx>~e29qhQ7iuUyV+ly3!Cp3E?U+O zOL`&GCI6Z9r=LGM*=h%eV~h`9!aHM(4_;E-a;>~e@~V!odY6}@J)QWGrMO8G6AZw) z*x^H?5(u3P-IzQt>l4*3Yt%l4JX{ zF3|fWrCm9lO8Jp}nnH5PfAY~i$4;m52r|F)6Fs--R}!;SJvGYMC|#j`SM#I3P$*FcUfkDN6=sLcC~K5{(JXBNIurP zUhky8@%Wx+c;5Wcvc6r=urd3n?nJmcKMH=ik0R;PzKz9TaO(eS>ngya+M@M{qJknS zAT27=(hQAYkkTm)(u{z_&}9HuI;Fb@7!Vk`3|g9Dq*c1R>+J#Wz25hppWkuM-ZBx?PRN6sbs^+m-xs)zfrbTI`j~+yKDBcD2mhRuWtQgy_S{LEu?C#5K2p z!o?1qA45T`QM;7hWfjFcST|&zw^dots~)fT_Lrr)Y!dvk^Xr>tbbEG@kwnKE?r989LCx3X1;yks@g{n68>x`phM| zegh&)b^ZW;o#yzB`muKqGBH24%E@r#_+MIiK=B|9VCU)qPGkE5`Abzl8bPSbFr+mD z4Y!`(e6mnjuNP{Bl?lkY{rUW+lSWc~Sq2<2@)An|#|S%gS`08tju$CGsS!a?Z=){D zI-th2-&GPUEbtSvWSw1Z5tesrLE<1FmvhLbsx-!Il<|(^?kg&KQK8;VpF%5l_eXS7DUPCSZSrE7L_HRD8q1XW#R;o@jlk_ zk?@^>JICAQ^>dd*cV7chGdxx1vA@|?$+#jnV?p?6eJ+&Y5inhg#XUX42k&trkn;tL@w zWxAJSKu~Ld=@meg?_6~i5wI*nmWjih%HlgUotIs4_ zH*0O8d1jH!^JqaI2H39aS|e%6kmqc7Y8)U&iGI4gMom`%w5w=#RC$2;!rNKPXTgjy zeD!-B3DjTGLmnaqOU%rukFVVpe$H+BEoB3ea=8~a530xL9YI6nB;k2?={oq7bhr+= zG!jRksV%BwBEbZJ@UQxvD``c1MZwDSH3mrCIn^=zbFEkM;kag&y$@hAnD zRB>B$`{a1##1ar@?7gKxNaTAq+fo5l0te4K+;-Fiv=j-j+~ee6yvy~FU9`rP&JoZ)HR-=%(P z^i7wcxaO>67xr?(jPpMyZ+&L4#4&&*#_?E$k9q9q9$~zWG}MP}28+c}D3st#g1y7> z-VCfI^e(oE|KcMu*;+X_GRf=M#RIIaE5Nd?#geWz$Mjpj%IlA;uuWO{C!IRLYON}V zTu(rHO;JbF9r0>_;sezym7VNabxn9xEQnf&ccIx0coF5gWy$)yNDM5nO%?RGIfSMV z;7yYJd2gzugduZ!n}vM6hqDWVcy;jtE>3A2F=8OuA}K_*s%YsXbIo~enEh!WkVgJ& zS^akf)X4z_g2!WyHMD)xy;dcoCLy&KuPxJS-dd7`TuphlGwxOY zaDSGTRi}cZn!yyd1yb%2kmIEi!Bn|GHy{*}AA(gIvML`{)zvMi-5z=t&ugWuq7p$t zK@llSkM8YFJ6NgL&r>g$S6`)*&Q5YgEZ3iS3SJS|*+@Roq4C%Z({r861o#P5;{Id1w63uLc!b2qwk6JA)E#eEWZ@bRktv%Wv z*6iT7UWinYH#|Hq7UIKce4ttTG-6NCh42||mbRW` z$hMY-HGmlL+uvC!Jb#T}3_As^&h3cj%lr88<8Z3Y5FSGUb`M2m|CS5oiRgY$h{F;J zhF=9B4Hq&X2ZqXBy{CyTc z>ios4DJ77UXFmh`w_#gcdF9RwKa|@jGACv1rk--Y9W`HKz{>c^Uq`;|l1U@89+G5- zIFN1?CKxdvC?wZgi6%boF8+Ihad7oj{n=1W5;tx7u+`C!<$7|u9B zIKtA>a`ygY$81l!lf~hsM=4m9J6vY9KRkY%WtQYZ&(I79fejlfwE(HflXw9#EV?6c zw-B1O#oM90??F$?KA*#J)%3^!0tuzg zZp~Sze9RR#FqN_~hwV`>m5(E_oJoN3`)>Wz2W@Oql=#S5UU=>4sOv%jpf0sZY74S@ zuym-~aOXT7--Gc8%UH*SOV#+F!+Qp@NDTp_tlbqcXrpkMOX0)!I0s?;T4^cpL+yrG zc_2Br1a@&jb$-yy)T#2<1b@};uYfJ!>%Ug7;L@C6H_X_oX4BGwPXG*`&X3QUDiLQ> zj6b>v%5(L^KJDc5a9x6VLGMysmQDHa!;xeZeTmIv_PD#idVXF898fsRQd{U?3@E`} zzOV}1QZJwF`pEF~TMGy!PUvt<&Fso`2t@Vxz#H%oW@Ld(4xoYQ1p|N&KEgw_&>iAJ zhy!ifC!l72n?$rUBS!596(Q?<%eDV9o zI8LLBuw$;{fL~vU6#8?N(s>LTARWn~`gt0KY~PJ&oPWF)1TuVcg61R!>SZr{tYrQ9 zMbUtSAyR46gX~b#C{j=TA$8NXGcsj#8KxmrLQQSu@Ku6~SNNXM=Yv42jS}TW^_22_RzPH8fYvwkR@*^(LEfJt5x8%52=;+~-#H z-hLqr7d_rJa%B%eAP|Bz^;K1IO|9ur*nm{{#pU7pFUj1;)rCOr#X(^oOuLc_K&iGE zt8uY3H*Xo9z;3W$JAF{sO>^|XK<~N0le8iGE)nqf18nm{tH${wmSfgjoJFJ2`%Qdx zsc~@>x-L^u4r14uMP=T<#~F2y9$&39sOBjD^1Rt`%_A)HMDC|;Y<}=ySQKXuhVj^e z`TlpAaz9kT5v2o)c5y$$q9_)Y?5hJNIFOW`I^Xyl|9}Y1>gf5~V0Id8 zY7AWGR#Q^X(@DcHNc2py7xMM_OT7Uu9CnjZfOO?nRtnhb19o*yXpw`0L4nt1ECH`< zn|xrc!t`)Q$I7aJt#(s+sd6T1sKPcq$z__nK)?Q>*#QlYd1$A|jt=$;b^}lcli5Rl zLTB{(9bVO9aeFC7&&{GQOYW3ExNJ-(EY*9R91ETtZa~eu?~J<4B-fP>fPX%h<;lY+DF-VLu*Q?CLLjA4b(bsqyEwtBjy>7w{>zB4TmM7;0Fi=l z>NED*NWE`w0R_?0KiS7@9d2~xA(8TK%az$pL6q6x|ARG;00mA9MC1Tz@Q}XS%6*8z z;R*!?z7>&t__WnnncJ+hA3UsKHB>6iUb`7y_Hr=oPK)QX&jddOhk-YcVLSv>{EC-u zJEzbqB+0I}@3L#YfBF~@9YwC#{vyLKrPiZ@rw`Zdrp+%bR6~!0II&xv@F9zAi|&+1 zLuSby4uCXWKb*Ebq>WBfuAS3NoEsiOy0h;+vzF(13Hvll?Up7dMimvqOMg`I&0&7_ zVRhe;lwqt@>_GVNPpj%Dl}nEH5liydC>X=bO5XAfS~dn1R^ZT065*eRgqH8*8#2ul zCD=c2i`CGDh)pG!3EE9XZ*rRA{CKLS!{ELpb!5^idAccfg{{JS3%Zd40)KyOr!E_v zrvU@x2z%P2Zl`voXTYV{YM2*$8Y4U-j@?V?J;K=!0D(Pin3VbYWNUav=CkPeqn+^; zN60jPFc8#f!#4H0el(u^L2bM2d23z=OXX%wCxA5dcXxL$t<|s89n62ww(hZQrj|^< zWpJ48_W2dx;ZW5>*d=@UJ>%?(ql{}fzjX0TgtSj$>Lg{u+1R0{649KjCqF`=m{O49L|XLT{q!6?$N6%dX>V# z_;J{;#<98(qSz#O?cMptg2H!quU~{1n9W@Mwu}qeoVS-=$m!=cI6Zq3cbs*iSDmY% zro*Clk~ijZpxZcMOYL>I#^uXWrf6#Ov;bXya!?Oz3M5y4(2YAzlg*y!Zk}ELWml3e zu}aAc8FG!+P&?U*X}v)uNb|Zgwx>7yw%G*WL9v6|ME&les~&BsE>#MBqO{zz70w zi)%V>p*5iP)3T$U2TPXHybCof@&f`VuFC55?ZEz^lWF6UI^mzHK?Ne2x-k*g9Lfmc z*Z5y}xv(aUd0601(9|yP)!)=4#~o0*Bbhtq>3H!wj3&5kXRLx@d(fE!Ab^WX$8`a-=!w(l;)%UB`voQMFR0^KhU3*tNX8 z8VEmTAM5TTJd#d!uXqITZht+xKA$#3SospwEAQ<=GaA=hbW_+(e4qd_0NbAfc&1`+ zU*dapTzjTJDTBM-?Q!`|^R8rN$jK+a#dPlDtz?INC;7$gW4+x**#5+#M(OgGtw68M zs+kkJ7wN^{cs&gL)Us5$Y1$xS&A0a!$L;I7Dh_jAI;2z>-X?~m)a)uTnJEMdQ|jHv zhd`=$TX;~qJOz`BJdh6=PNc`00mntM0m+)F1#p5*`nJ#BkB)fuStRFA65$oW54VbL zuK?Jz>-SO=J*qEsmu^nl6Q_2WZ@Il0DM2_namEDwA1$M)lS-Akn@MUQn_r|%~!<-S+c z1L|L8WoEF3>In@9#F3s(l4-$MzEyYd+v1NH_r|M*^bqgGMV{3ulM4{Z(WN& zgbaeu9QQMC2}eKW0_tFPFs@AW`uor-WndvC!~UShdYaGO}0hE zyI8e-yUFXxqw;d$ZK8Uwv- zXvQ8w8rWpIdd)v_qFPdQ9zY-v{7$*(z_NnO^mC9*)+3k4y}qe7h_CI^I1q33^K$mB zNlu*S$smqD@3WHo)JZ=EBSMHZpZjFNS*2+6D)N6d5w=URn3uGP0HUC57peNZSDE6%faztwhQf?7d}HmZR%us zzF?+s>>v>4d1xI7i}PZ)J`;B7K*bqeVt3&LWW=Y$YLQ?MS4KNLgd*gYZOCfq47)PQK@dE$B=?FOw>H^&xBRf5)r8)P0 zUNzkFZ!5am@*OytCod=YZ4Kq1dY-_IqsJ{y49Qj^MB8WGOzR?1E0(BDz zT*YuZw84a3@9Uy95)H9CS5q`R^g`>znj+G@0~*gkejGj8)MsjH04nXeg}N*OZ>KaB zc(Mr0Kx-1w=sP9%MU4Led7|Q-XfZM|pCT?LO*6@)7cw6o5JMod-t3a{cuALl$7Z*b z2b5}W%0#`Y#O{ox5c|A-CCfSoeHWxQ;yaZ_G!Si+R7 z(OZ7cj+g;*(Yv=dqk@9iC=t8NcP`-!d-}fm=F9z-NQTKeUrHGgc~f6Pno>nMSXiJS znP62F7Xm5v5H+NZdQl?=0kgt4E>-iG)HFT9Hud+y!_yB$?9N`sKIEp(=^GgK6)5y zZeU%+=$7>Px)d)m21iXCc9H1f`6$}ZFb2t7b6=a^Pwq7_RT=@It=Pj5w8eW@|5^}s zFH|)qlFF(CPul;pfj%B5HyI-zFTQ)k0Nz{uN*+)#84K-+V5*k(-C&}s-O@(SB^q#6Xmpj>~|O*bnSRr~v~GIg~j|f--_O@16VB`_BfQ_r2YZMg`W5fxo0H4^ihJ z-g*r!(M-8h=Gfif-S_E}O!QrXOA1t)1K1J7$~#%Hh)@#LDkW1IOa86ulUNrZeVVii zNMS5gcEiSr$Sdg_gh3w41ZQ(B5E?}Xy;(@dP9MB+52qux&Nh8kUd_d4-t zDdS~@wT;YAiaOP45cG_-a4hx^>oRM7!Egr)x1)Bj8!hQpFAu2?0ao zr)SLy)0yV~8qgTo^=G+rT|&HA*;L)e^#gl}8(7_9B98N9VueEQOC_WyN;R7?si!A4 zBZDHLGE7-n=DtO=c`RKy8XR$`i2ec`(*oY?08Mj2T% zF;){)O95V(oNeuR{}6&#NL9x5uI_ZhDM$>ICYd4XCx)2s-yRrR-n%=l-1Bm5^P8SJ zb~B&xs($bbI=dT;=QzA?fr7@ndkl4z7P|8`O}4%E-!a z)4+XiphW|QXV%6KV466@Cg=qn7j6uMOiVrhK3LdF87+BcY}lt{Evho(yG1lb znc=x(hq{xTPweY%#a>}WbX~}j2!Ghyy8`E6JVb`?fJ-KJ)v-FsB%B`vTq|?tl}+p( zshgcl*Qy-zfU90B9zAw4#Jc?U-x*ElT1S7ncZ5Y5-8Xv6Nc@2+qRz_1IDP!r{le$H zcMAb2qR32}edsZMjS^deUhZZ&(DwqIuRZ+A%>-h8J^$GrIO*P7n)v8tWUR?cfm@zc%@gP07HlKOl#l(x%2}Zyav2dFpswa@EcQ6WUv2b@? zmmam&vx6n^K{7N4Kl$c_hOLXfSTPV)GVd2cO`*kH^g{#BTjOTkhLNR7DEf_!0p0BL zqYgR46wBdg9PA+x92JUKP@omhF?>%tMJJ>DiPJ+CjFgY)_ebZXZD#aQ5i8g-a!;yN zDS0)#B@Mu5Td>=1>yX2Ng_WGhg?8B zsY4QSl~@{Z*Z6Cm!@@$4f5yHFkgJ7#p7T27Jnqew9C4(u!1_zsb8`Org{GU3^GjqdTEd=%~roj{K?k@V@=?|2%ld?=yKrBX(HT3{}-$ zP}XbG*h>CBV+8RY`>LQI@!%%7+(M%qU)(vM)F4>*&(n-J^(_J<=Q!HJqdmvL->~2qMB=g#MZp~bYO()wS<&Bpf|0(SF+>g$7#>wDkz~sa+tX_M z=foXY$_sV?@K^l|u!T%OrVTrO#=qmY$+l6Dz^rM{arigM{9Y)f0rG#YlQgiuFww>_ zAXasy9?yVB-84!3$DxWYhxg>&??WV#E|ue%?Z&;L9{2vkp(JdfVJL|vV$WI?9D_+` zj%P_P)?WhUVd^Rb+xsUJQb^Z=lw>b7FmkH{zguVhG57A_JuY!PBRuaOt6Xye{Vx9X z{Psz`e=Zvc)xqyikRIBC8#2X$!{@p+tOnNT_WoHkh@fhITjhm@@2^p3^(wl!^Pg*C zP8XVpr@*s!S<)k+>w$S6HU;ajy`R7TxIQomQhj$d22v5dZW39_NjKFJLCf-F_R2qZ zO#T%W78SarwcrO9yBJ&2|2=D%qIX`CcAykUUzgNue^j=WB~Q7g}{pYTP_ zMMC&j0+qRBv_RCYPfES}H{!(#LyP4fO+3Q+A-p=p$fS`3kK_r?r(6BQ^|Z<44O7i+ z@8}ZKQSQTX6J@1@|6J_Wz5$5_{wzTX6ZzILEp#*fJ7LEkc}1G{&b|5o#9}E@*ax;J z^TP38!@Su5t}!#V7~O!ZJiU{C3+ULEl8-p>OaI;>Gtu6{+6``y#36SX2s6{6D^OX@ z{r>MOm?Lb0@KMCC3a@#K0I~s~*Z+^Gf~?;$!ROm6)xd24$TpNe^=#nZc)2r9p|8>&X)$s=2thmdQ% zCW&&gNmP4(uB@WzA&!WAD{g~&I0IkF2OAmrg@65ytqKE5cl{}&pF$Fp$+lew!Wg3S z|4nx>@wGl8{f!6e30^w?2ju`IK!oEMu+S<5YvofSC;kjLNbO%y#8NIHuQzT%-0Y$v zY1#4r1#O^>H>O&YLNU!PnvjJ52jC!LARO0}3B1pfyYMDV#YbXCm;Ph)*-#tmDYx5J z1Lum=R0jl@=MvKX$WVxJ2YZ8&0|g{|@*TH(L0%-|!XMx46qzD52)BB9a7k86G6@f} zM({_mf!txhzX>U41S-H%x^RN!;~$9$nT&~=Y;Wl>xl++hIQ06j{jI5V-tJs&#%wE{?DLy-M?Hl`1fUbS`{7#sp*CRLoSc-<%Vpq)nwTb`EpR4=ByNHWb7uW>d}m*~C%7E{ex|xy`e)>vzZX4N0=x02N4P%>*5dtX19&gX zwmFT#e}--1`p-kJL;G+j{+NcZ&i^v&KW}}T8X7kGmbd%QdseAh2>y&ls>^O43I7wH z!k6q0`X;phW5zY(|76PfR0G04F8`mUcoU_Rntba&$=G0j@8tarw*S0{!H)UQ=^Nbn z&pY1S>i%PDVv`^Kv-;O_{&Vx^`Rt|hvVR)U6_%`wyU6K*{rMUNEv*rifSs}NB$#OR$dIchQKIQ~myi?+gHhRpn39!80=1n5#3eZNvv1rZm4c$oy|x+(!zX=X32|eA@{xLKrrZP@No6HMRUF4U zGtJ5KBeO(X8_1iKYtyH3=I!_5ENpx6Ms}u zOJ6x3YsT@lNis=|i4ClS^g}!g(YtYFC314>AGzXNiZ#xXGnB{bUZv|kYsMK!*IcKX zuzq6z2M?XrzRz`{h+ZD>7k6u%Wn@xuiS9Q(@u4O3L@!{9lgm zjMkQm7Om{>u)NFu%mf_akZ&t1xgd$s5z7CT5l2i5rq8C(ITz4#($AN!fC@t*iUe$U zPc7(482}Vhq;<|1Zx2y z2E{qn-DLg*ER{6x-e9xV_s8!?@e(BGq{92(3u4Wqbi&>;|08so**=a<4#uRT)S82-6M@8mZhi5+wIm5XwYT9&v?LL+%%$Dhv!lwFG zv=)9aqoQ>Dgiuv)ZCYM!-Vm8p4v`a2n?zf{Og-Gr+CHe{BXSd&LtPH9bkl66Y~GSt zAVI%HbgGUGMDi6BO3=);|6FmfSV#G~gj_$ZhThSN)(JH5+o!PXJ=0W+7}xYtlKi5v zDZixQTD$*RK59&rZ`l%FgVg?_y6l4-@-ffE&Kb=6mycL-i`{#9vd_< z4^QWN9^;HJCtd&YF!LBQck*NfbF35a>4u3ol6~1THH7zJZ*x4&!uD)gny|9<2I)3R zOEXg(A>ZET`f8~(3`ODhg zhQ(Y%2UT-%S?&^`YZAwqY_x1SdveH_%gNhu&%F6GM<>{&s!PoL9Jc@QBi3%R#onFu zV!Lble(G`6mQ&o;EtC9gkg)r93(q`i_CETyD%#$rX%S#lU0gIt2rd;E>%Sl0(lV>K z6)GP+*88SDf5f!yC1Ptb>n3HM^Xt6i(^zR(p0t}3F_Gl>9h)k2*=gi9dR~3|<6GDX zwg0pYijcy%Vz%N@tbv~+po_n5}hUpmupE~?#S-u{dotd?v977BPtdkyY) z?WY`*YT;{?LdSZ2I>nEcw^vFZYH1|gcqyZ-eBV;isxmmQo7IB(C1O!s&7KkzIUY7& z=C7Wog&aclR9%83;vrf<^_0@=4t5;)ZE9`l*6JUiKD;IJ4}Y#vjd8F(NI-5EGPe$n zJI>tgLL_fO<(m<^BmzxJ=)(C>FInqR^yp?;e!ludUg?`t_VPo_llKluuL}Cy8CTlX zBqvWSs4J|0d2B|_lBga>QpH)3s<7gYcsBY>W+PI1pEkC`;iJ8hMUo|ROs|ZQxa8-E z{r2hcwy<>6?vN9q&%56S^Hfp^3?1=mo)N;;5({V6M7H`=(cBYuL2VcP;4Oy&H@W)J z-2!U@Ym3O>%bYZ+MLt~d7BSb6lYjSs2m~afv z!tPL(kmdFC(G%DDV^Tp~&u8%LOw`Y~x+Tv%_7%_Ek?D8!A%-UC05`#M5BZ>!RQ23U zS`@8o=3&)E7X>BG0Y(}|6yC<=vqcNnmgK4yO*#v?I&QoE^_fkXJ@}EuL?Lv76%oC; z*)uI!)m@kJ&9wMK_qud`e(}A&@=+T)X;eD2BkJ0mMo@jPgx#~+{DKY#xyp{12d8eh z_SYd(h*Jy~_UD7vmKN?L`RMU}ZM44mUH-I3!o7{1;<^jEeU7Day9dPi`GQK4n0<^x zs{NzUoI-(p_L_ zNAdfMoo1jOGqAf?Vy;-&BShu?O8l7AgrU^DQHY;Huw$ zzzSCOCQvmig)_|43t=efzclNyw-SNk3s3iY(wrTfce~$#pC7riP(Of44?$7ro2;GU z$t%cnX&)*9W=FX2S*7tXG@hhT@Owkz@%-QlAg7V0m26Jz3j;qsxZ19Soil69%embT z)kx}7hD-Y){CISe)J1ag7C%f0BB?|KAW6nVXY@yl5@}&nlUmUF0RXAe?WK7*e^Z#5 zaEID-siJ20&mlwf+bSG}ZVu}CMBt~U!Wetd+LP>^+*>G6nRHlqae(T)netm zRKK4!x|7%|qY`wNcb`Je;)1^kkc(OKIg+EawP-n9f zowKz*JEe+ximfcIoSjd!=|$UW)!Y2w&t1Y`;c}&dI%sUcv)d`=ZKAAprAFGSZRPF1 z`uU{x;YJl;cI#9M5)uPizz@95@%tF<6D&l;8AmYqBDpik6JsBy>$4uuA8#!KPzGtq z=EycbK5!!E#Nb3T_+qHd61WXpR3E!M%5KZv^jyMJ-Acsltz}b8d6@7Tah@jp>YMhd zmTa8Uq%0v8BuQkhPc_QqM({&N6JO3X{qS85Trp1wrg4?;D4YW&>o?b7Rr{d2#$p$A zFmZ8BSAJ2b&b=8EHgu!1NlheY;l)fESO_q~+iveG*AqHrlY3gHrCC*Psje||O%t9g zHKN)JF2tDWX{0_T9U_gqML6!o=kNsj##b-dMc1aQwqURA@H{3Wqj5gXE*`s}R01Ic zc?^S3ofw3yP=IT)s**bJ2xn@r*eo2*a&K+01>88T&ZIh~j`hE_uD6KUWX^oQL)m&# zaFl#&OV9o*U5pzBt*}o>Am!1Fk#&)<>8#5IW?*EDOca_Y1(9)?S>UfbCK{##cn&C} z>c%0?)Drel0=3*b!Phhh^X4^Z_~~DrhbCspqvQcgf@eBSr5;=rYElC8e!B5aFWyrw zJ3gD{vgb-A>APgh#9j{ShrEzZe_5b;7LFDyeONm*rr{Y5%7xi9v+C}0Uup_pM2}xT z6S`g5I;NOrL0N3e(Ytn9=rzzhSXuSuldTDF-_|i)cR^o8Pq;!7$tls7X^|KsnCdh$ zj(!X`)Nd}=(H_vYx3S3ln3nr$KDBvq(Qpw#&I8Z)TulABvePW8ABzF0M(32RyG5g) zw-|*24-^s}X#v7cLw-C)RPh>25SGQW@fD+z(_Qe1Rd+>SBb-5NJ!BT$RvouJJt=he z%FW+ywm$1>2tVN-t5KK9hSE@dU=p?pokV!-lp?Z3i9lX?2H9IbwM&~?sI?jJm6S~ zd?AMj?qL5)CEa1O+g?Ubx^Kz?{U#2F&pG9$Q#}^nSV3JuGoy$rKAmrlS@CpicVC&& zYj6iL&!(d;)2HptW4;meRzAvqT`KRbnw4CcqsNIfZ_m&xxuqOdZK*5AhO8I-fUcV) zPsTm{<$(=X9{je%{z_u;^wF2NEmAf6Y@XJ8z=vQW(n-Rb3B?)%FI^nRcaA(F!H+sF z%a^R;cZ}I;6dAJQXJr=xh#YWz%etKE(rM%C5CzP$Y3=t zwT}H~g2c$2U#glZXN0r?zq;BSV}!tdSd2obU|QE@wL04Y7Q2S1#S*5YC1wK+6f2kg!X`_yH#zfGB z0;=$16t+ft)NY}8B`5(@XAAO`SC*w)6%b$?id~dhZPc^dY|KO9=&tGq%4ZRxSa~MG z55IvBV~{D#o$6vft+*(WLC-~jU|Zsf*Hk6deldU{KcybMJvz|wNe+-?eC-jN%9`Hi zJugg@3W`v9M~=D^%no0&@l$9T$!IaQ*xLF6u4JZV#-kBCytStpW)ZI70A!=SwMVXF zzq(e2f=DpP2C#6fm}vB-sY9`YdNjShG#-rjER)dI+G1y<^*gsoHiGsi9(3eG?*sI- zu}Wga#&`Q9)8x_5w`4X{^{qTILwH4%Mdw&L`V#RCjEJjJ>xTAa>K`7$YWYr*+?%~# z6djfx96k(&>8REC0|hw`bTftFL@sjlnQK*dWlBI|01&&3OrAO~hJ&hy$ZQx}iO`>! zsF@N~8*@L3o$2S-BwWS4M4}dFUBn^=pgiM-yWNZOi&fOvX+SXZ$ojcChLlR7<*KSg zstUBM;b^b1>PL8AdgKd_f zS4#z-qobYb`#}^d-9DPN4eSjAD=6-g!K8wz@sff%$p9^uLss(q%&13Gc9Xfzi=1Z- z!R@DLi=1T?&qPiOCB zb{;iqt8svI-|~PZ(`CPJrbP<~?E>>>M-}WwRB~<`TGv8K6o31CYP)rf?RQ1}c>O`% zTvr<>QesXjF(}|YswlFakds4e$yqN*KF|4`m3AU7lq_0er%^`4eOyCftr8qaKlt=0qi|$e_8aX; zUT^JKJ<_Xki+#wyZ2Q4sl;e=$PDCBBKtclUBvW#XLqzx+TE-irJAY&CdkY&qa8)80 z4E5HyDEsyFBks;7Y@}^0ZBz+W=2iT)v$^lX3L+-Xn24MlJ;DU$Eh~K1N+|k9A(DGJ z=1i+3#ca>0*~i-jrZa}{NL^Beh(3;##12tdR@XbVY!XzmmNZUVUgt?TBC^`@eQOB*UT{Fx)1Su2UuIDRdOGCOb!04vu-54$j7%; z9=9k^sl%!TVX%HS%%>@?^)rZAEJqA0w&u39Fm|YbF+Shq_tXz(pvX9{JEzyPx9x&T zFAEnQjCLa_>%N~15{R5UDuL^Fd*qUsHMPrhPuK3>aXOgG`06n^xrulde+ZuUNz48C zSwPOQBvN@NJRf!7$POzA7go~B2+wH1Gcj=?I@3muIk9b;^y!@8PVI2vHq&4H)I}Vr6;{Ea-QPRr4ueS@V-ne5| zh!X?Zy#$oaKDxJ%rY7cgbW$apKhTeYt<(xhG%23#<23|yw&fIscs9)}jGtOQ`!hZC zi0xYqDK7;q2j}=Urov7{gMotKK8uy)u*~|?h?m7PJ6z*OBkj=zsA6X4Gw<<3>?T^2 zj=SrX&cvm{eO`6bzQjue6GbzNMm(Q=)hSq9VcV?K1vI0{@no%Voyu|4RA(gfN6v_| zAU_xS{;YX;@PO$>tJJ_pp!vGiA}8^PHm=uAz?c(y0Xqk=0RSGLapw+O3Y2R-kO5Os zT-^2&QTpTP)Q%r_S_*p7x&9_e_db545(r1xQESvqtSkyVyEN;EKZ>okjBT`|i6iK! zF%r56<1Q^zN^%z@17;72^IiG3Umht5XZ3LZh6m18NiHNUORK#wu5}R+Wa8sBHNv^B zYe%tm@hqK2LA_!42Yoy9&?d%LID1Xe#!O^1sv1p_o-*e2GtcT?SA(m+2|jNvZXx+7YbK&%Rl2a&;3Y z$RuA=&K3-oPm)PeP7s*bW_>diwRiwz*#-;@t_g#FJFv`l`VC!F5Os;lz!ATfbW~VloB4On8?;)+?35<{-VJ=EI2rPnYwqt#SJo$l5G2qf0cHTbt1~l&?=3ke zrQxcS2e_$ImUHPOH5l6z)0pYos~ivkfr#RuVwTsG-je} z!T|+!MQtGfumbVcudpv_30#D}Od)#NySz{CZ^wU4ujBgL@gu=Dh^da;A|FdnIiOnr zzn5)#VO+YAyys%`(#g}!R^hF2N@02ZhbVMwZUk48u&pp~`gWV(5I+JGbA^58i$1<{ ztGRx^1d_6z^&u|7HDTzEG6$i`*2kx9*&p651gt5ikdTg=th)8aWQtdXH3z7f^acX3 znm(-Ciw}bn4h#`d9zRwjB${H(s!m?18-s#`ZP5x(%tJx#inZ&an4wwJ`=XAxKZJnyzJmX~7XQ;>*n-0Wq#5jLzdT9F5I{r+gv zN-1D`hz%A`aX;@=4Yr00v=u=IR(`7X`wE& zn8v^3L^<9(lCU%^AF&LcOa*v2w8;mAkDDD~*INH&3PCMV#L}D<;M(EBl_xuHKUc5~ zl*1t;i**6Y?I8`QhpqHlGzIOo3y53&s@rXdee|U_3x0SbV(lmsKsw9PSap~5(2k|G zd6x5W`hBOAIHM&P6^pcp*@+^)@wZv`%O#Tbe$G(*j;?PRWERl6G@l|HPs z9n8M@QP|A)l_TNzMpS#q!t&{{-qfMHKy_j`s1ZdzIui(TUii!T7%jtRNfS$!ga$0t z?B`ZRfV+Uic^6hsBlY_XPu^X_T!X6qB<8Z~PcJl+HaGV6(7iNXab9)2$jrQQ^iSl0JQrEXz``LNdMgfS#?*xl>) zS8SIYp6e!k2Fakbm=xCJZLHJ|fK`nmi3L@bnYFh$iCZP9Cv5))FkE}Bj7_d?fMex1 z*X1|h62Sjm^`k*pZOx{Y^~njSrTetifM8mu){pJDO|hOOj!+U*RyVG$3z>0Vr&3U> z-;ZccxRvYMx|+LuQi`u_4zFOwQ~*x^(va^9Qj0TZn@Ry%pT%9k?Z5H7+_#)Z)|ZeV zpL(JNiUjeZg%KU)vR3j4V9o;M&n4qK}rM-1_=yv6 z6lTd|3@Cl5g~4`(XLY(6sh9R|1NnV}hetn2qtVS7qH~5ibG@bcOr^KSyCsSd(wxfH z+<%*M^$b2eZ^h3c*c3V~lmq*(#tV)L7f5tFn^#ZphoFIaNqU(Vz3Es>x~c%yddOCL zxTkDi`Xu#W{#KbYV(q!+6tCB&XS1VO{ZAl!_RS|~Q4?kBFLvArFIlI=u79It@rFH; z!-^H%ICWK72k5>;c?6}XcFwg^8$9)V0`rf4&anOt+7VZG6;gWroMgD_6-!r>d6JF~ zrfTalgaohc;}-yzt6OqE=)U798d&lXOE!a!gZz#~$}0hZj&R>mYt;CNe8%nwLA z!S9CeKzkXALLcpF_vAf&97~r)ZdFEXZy?pi4#~vf*idh&PINQI4P6Gp zi1LV%A~Ri5uS+Yhp!EZ96QzH#RHcWV_RM_+hjgzeq(Y?FTz~7Z`hDVxws~YQP>>!5 z-i*u(4LT7!w9+>}f#TvNOnv%c$8E2(N<6j)f50o`XSWuI*?V8^~5 z;9`DDlCyO}GpLVhhyL!((R+HZOgFVktl$T#XDIIFlI!@7&$rqFbiTaI=_UX{!t6Fh zqch&d%&M%rtT%ue)?ct&DW>0>JQi_p))*~ZsP)-#K)_|7^$2!}di2WvNj{j#P0Ekg ze|uR+I(6^M%!Au1SoLWj`jxjA02NZwtiQFa|8llNhUZg1m>)I?Tn=8_Hw`}LyTk`R zNzBP#uTj)g#EM_{%3v1BPC}es$&Zcd!nd0FTCW03G2YgwJ;T?-N?O-LLt6H#keg^21P%d_xx31qlNxKYA^ zRkGilBDO&RJV0^(EzP?bwR%M6e0cCc2tv&ok?aJgt;%5O;q&*uapkOue117(2XeNF zT*RKw%EKg4bwhVx<>E>Hj-?k8Aj89$6ETY<1QFcWgvNDQy)@I7cVPaNT0oRIHIjNj z$3(uPC>Kyy*hsTFE@_#fx-n3g@U&ong#e8az~m}h4W+UJ#P@HeKrVTdu7x3Y3Kyh~ z{>pm81Y+e8SNF8D3P>36Oq#IkB+PYFcu93PX;?5jsK*yjYKt=AJXb{xtqicD79OR@ z>WS)kh9eqPQc7}G^;=s3nfm774$pxe()96pR|lmD_o6)Y{xjm=_(3y$#pd@pDg%8i z7GWgpRFbbASKoR|E2!qG(wrS^VO5b8wC3w-s{rEfm326S%!cY0haAsdjALnm>33Ch zA+y61f$251hJob~p-v-$h*U5o?Vf=n#II~u>H+4G*s^r1ppuXK()wzJ%w21MRm{_g zfcfBS3&VHa6b!Fyg(rcuze7H|JzIt)HXSSV$2=#7!!J*HiWZW6VX|KuH>ohb73v|l z8#M51q3vbUy)($6GcZwYY1v!0$2-$62Y_*P=a9_?%_o}+2&e9?-vwm>yU$*}SKb!B znEELN|E6(kSbB zb$9V(!V}%vnvT!s&t4kd9+sZS9{jr@rlGDbePbb@r#|nO`W8*RS6)<;KUX|JQj}J{ zWw=~SPWJVx)af>RSDR&##00_IZ>IZpyV_tXd~*J4ghNlyeR_Rz;oO3skeWv($^U$MejW3%9Nj&tzrDDo)DCw4tpBrH8MI!<7F6H+;?>iV<21dzn!Ks~V&P_$NOAvl zsdR_0x68b~w&cufV7D#~uB^Z+>mCUBAVb)(hrkkPJS1M77RZKY4~WjHbkezl(JsDp zg~&lwlJcym)l&6&7FVZZU6(Q0IH}Dl>i`v+Sj2XwT}$(9hg8pMMaC!w?$QbBCIdr8v5bx|CBQY0aU+@p=98LmzpR zeC};^wA}E%@$UH6xZsKS+nT&@Sr5+GN{Ws|-S2ZMgqZXGuj9xu)VsO&;w*(4( zJuo|VJutXGWOk{t9Hk?gFQeFtntk(-=D6BZbe9xNT?T(!`fM-EE3{qerrT+zQWZsLg>A5UTV(>Bje%oL$N}+`mD9;d{1^&1d;{S z`r7SxgC)C!3lSH2cD^-<@O=;}X{6h+D!0Fh%g&+LUHuA5fK@FT5McZfv0y5K-q&dl zlnnz&d9Omb>;lt4Y2JVd4)AAbWb31=H&)tgGarqi(XB2XJiBH`Svw*A0aCGYnrDmr zBh2pinHA@x=TmKHx$@E^9SxnQ_=(}SzL)@R4J0j~W35_whP8gRS$ z3{RKYXjijiYV1ZLLLZIVedCEaAw7Dwa)S0*n*scu%$%5dy)dw3 zx=kpm17IvQj7nvY-6E}y?V2bWGZC`YF-xQyz-Ae_W3l)9v@2bS#I#Kve-p#$ak3=s zzOkC%5AyScabDScFt0Rnn@7ks9(n9}ksMIiv8TC!4oYYq_i5R##FGmOG`=qxjKc>Q z26m&NQ$86TJI8H#0j{ZOl^wrtdYF5hyP@yET9s1Z@RslFU&;}V3jckcysNx{DR;iV zlsJFZc`pzPLw!@_rL#0WjMTZLJLvaz>poQcbk+)lpbKd-h4GR^>pYR`ZAmdnz>?NZrZ~bbuS69CKPHaoA&_A~glp zy`#DKWd|FVjRTcteJwA_f$E6`=a0EYK;-ACS++uvR7S=oa8R7;ZlCBS6CC>i8a{7o zWx{*+H;{;upMkX=nNJ7Fu#RqZ!B={Js|@Wm5)aP(f)8IN1c~#_?><*&%||Rosa>(e z<^`Zg9MqOE*Pv1tDY7RHqCP3zT2j4Cn!A2a!`jL7indfZ)r33gm>}T$No%Tr=2p^0 z)$|_8j04)#QMhz?5ej|d8)pb)JCj-l+E}i9f>KKkd*~XuwOeJ)P|ox1K*s7@{Mi?q zwlDlP(7X;$)po%ZwO)ojV#G4V$Fsn0*%q&EE(5S1TqE|8nA`PqoAn$S$9vb8_=>-k zh|VP~za^4n@W@gJz#p}K(!^4!lj9S$BZTE6Ie0x%qPts_BNKokwqH2GSdtrlPyGe$ zRta)wkXkn>p|3om(82Jq@}i3Zp4;KsF=CJ3r-K?jb9&@`tQ&I?ivy~*h&aM)3ji6L zWwPOn!dZYi5R@~Gzmo}YV3GdnWO_48KknIFT;W1?g1>gkiKaS1_MQ%LpL$kJ zxTLoB*9D}jkaE(}!%>mTbW|% zQtvo)Qp6UM-S`V2uTz``Ov2!rlgQ(Q$tnLG_fRd1+j_5c82p)Ecdr70)N zZDeOdZ(wX^XhQF9V-NWA;uUbWH!!j?aV9b}F|)AcBf0G8AtACb<|ENylVg;#7cnun zko0skQSp>lHS)AF;xZ-?;D_aP=l&?b#>Clx$lb=;)`{DlkL0g%xj+8@^ECqr(Ox zFtl@V<|85b*iQ7H!vA!@Kc(9`{l^F&=3w}TIFJ6o9kf7$)dmjCVk=U{F{ z3wIN1O;HOQ6I-W`Ch(CkaWOOgzcy?AYcnSY`(IoC6vZuNV_;^YVPWiS{;%Wyw?)## z!pz+H|8y%7D}OzcmO~gK!wFf#soGt^P)aKulxPG%s%SNT|rn!u!J$KTTE-h-FuUXiMskA zLeIrW+~$2xj?*6Q=3{6evM@Ap@L#{8uMFM~0czH^tRNt&K@3!?Af>`;1_1M`xN@9M zc@Ry33Sp3NXuT@muq>IskD-R|v-61pW&BS8$jZXD?6+zAU~m7Q?+ObQ0Tll!Pgq*|MT!ez>t@0S z5%Ir=pu_h5ceA9_F#&d}(9?>`Lfc5+e|CsZR5rl;=d8%Z0ww~&4s2Rf$GI;z_LnL- z-%s=zBnL4;hz2elqV?vV`Hw%rLgcCdeaMjoiG<=L=U8yo^xbo&q%L7LzuS3*I*`o1 zbbHg+XEqb<^rBd)Hd()!-s!J(XBakIpUZgTqQN{5eyjE~oe)rNRe(R2PF&HLwo2vn z@LFRUm>qroebvRiL#*;V(t0Y#+A`oP-Cb-}mm)QZ*{#o_$QGsl3mlmf`T8v@e9(P^ zNfE&(cG!(4a1>V|i^V`d%qVFlc3zWRd+uhllgm*3VA(kBHOdcYzjul55A)yiMV9as$ZO7|3F2a^DA6NBv`MPQ_v zQQ$^Dk!F7-0Y%}kEchaYqNI$N32F#%3B}NFf2uIr{IOG6u3CSYs)YrQ#DH#K_XML; zhUjJt6hv4Hl)pk!9?OIk;JB?@Af{*%JKU!Q_a|#H1<6g!UEV$=`+`l$ODg)d2f>~> z6BhMeEif;-t^T#|6`60fd5;g^YU&0Mwe%8L`040y4 zK-CA=D;n>kM&TJ470G&7z?}6~ycm^*$p?qndB=l2(J-IY{z*5z&nYzjERVr40`?w@ zmk$x8*&zydHTbl;dh{K`V#Gl8Jy>#!2xp-rmujN-@blT_FRe<|uC41q7(@s;?#JXD zNxnweEZZE?uuf*tgGhiqTCCAm+&ccae!GoY$p1OF;R=)<^{UH;3I5kafDq!eiUF(^ zW<0DY-n-Qh8TH5}27#3ek;B9ilAbxQ3Uc3`A6-pN;9e>t<3Kn&U5aiP?rSV(@?*t* zPAu9x^W~7%*$cTCT1Q$Vl%v0?-ZHm61KMXR~iDC2zYCdjGld^Pq6K#AeyYUr>Ak2 z21Pq+dB(t^F*}p_IT^4(Wd9j;slc?p+^SO6pX82NZd8CIvOOgUr79|nn0k3waLaj} zc|}RO)$>WIok|uvojg==N7`OYQ6)Q}#<<|S2aH)=oDQd-#)}4xS=BR@(JNIf`jpuG zUzHoRrtGwvfv5tJ^1*EWDZ$z(b^APP1w)UUQW}-ds-6FBTIH~Dylw_-E@U&)EFSNH=GJ>Z5 zcVJUl=8+-7wnRti zsI8i@A7FnSgt$8`Ri!#6S;APBm^KHkXiCsEH#we`Vk~1fPsM2-+m*rK%{g1SU`VAR z6AF#WqznQqJSTbksM5fRWL`(r7#^fp2ou?7!hR`%m00^-i7k{24St*}@!l7a9fO`| zV4`p`;=~zGiMXX&S&0aGOeqXrPh{S8%`K9_jq~~ZOq+Bo< zm))4aVh5>`+n%O}nzPICq!o*|MJCs%%?q<>#73-}&YssAg%kB21s0V&d}@wrn@V&o zw@yC(#L?x<$y5T;m6Bx0yE$6DU(a-NC?=c&F4K@|cG+L7X)wZavV3gP_%Y+suG7s;Y5WgOMI@bud3ydMkW_^7^XRkP+O$bTkbSYewu*90b=KOPl1+I zw2EVDl0b=-!)U(u1m0Z0|6D2ae)e|+Om>h$E;gBb5GN~Qx=w5Q% zYyp4Bq**})bGdJHy}!X^aBtD6<)to+h)gmVqof0J#qP@}^xY_)_p!TBie6kO;9|Kp z3(C)n8qwP??T6fob?Tu-@u`%<=S?JC^V8`zZY~p!@%@&X4KS0#&@{_Ajcz#uZaKmPD^HM&_Jb8B7s_A$PUek}RdEZYU}o;IdQw zsolq_fr~gI>Fq(HGtX9=R1Di@rAO*=s!Z{^^-(sCZx;)$X(8XKrm_#$gqr zFk2y&$rnauEg5(2Q3n03F;>jJqrA`G3%kWp@00h;3PwM_uAuy2ei>3~1FTk8ODCrq z8X)}3W!!be-YdP85)LcDWOwqLN3CoY%BZE%hs7Ske0~i)_eQubNLZTCL!FL#%lhv2Ah5Y{dhk7gRHE6X!xF_MuGxoVhe8fRg_X048 z@xEvLBFPi&Q>3`y8wDlxJ8vIg#u$PC`5L&0j!R9gt`CCx-TRC7iURh1-;sDvUwL5# zp177w;U_Yw7JQoHrln@o!~8z&5=i8R&N6(6(kJ2Aa!mCc(>X1J)4tY8Y6CDz@y3I8 zLBMEDa;vx=>hfEm+Jayu7o8TRcB&Fd@h0A#4rqd73QYKoY_5Ia%OW}{EeoVRhlu3ubIcC~^epRzYBxKD z(mk@&aT?IX~I#}tYevQ<_DEs9#L@?+s@T13^zs#i^6oglVvlym{z4sYHlPAAFdHHdjBcL|sT z6M=~U@sCRxLmcta=))eVKVU?wZ;kqci5@VP+?RAwQ`IVqQN~?Ct5ByH-Yl-f$Dmbt zd9ZkS+K6CB^n6a8k=Tz(o6P5@jjU$&B};TN(ZSrpqPu1dgNM5pD%*pKId}@#HjgoDk)(LG zIGM&;8ADz4#a;l)sZw*DNzBi&3{8+R&wrk;Uq{(@*LJoiz?a%~ORGKnXB>aZbyDn> zGYg4|y1++7Op`BEq=n-V#n3Y={z)>6fFXQ}X2I{ZV6~a##g~&QjD`d5)8@q#xAmchx4_z*HRfl`tkB zESB8Ij<3Jwf_>0YxeHsdf|ZCzBX}JRR_7YB;OW$pKHEGqEc; zP5vrTOs+`%%fvM6uOj#72+>-TMsdfQCW3jD$>Ts0#6bt;y%OjPxvVewuRg>}+5#g; z9p=-nxP|dy*GTztJflUB6fGjcusp_wSdnc~-VU0uLXP3!3p3RvCLt*Q zkoVEZDUXBi)pD3wPo>sOClU3pG);qAX)i7(pj)gTkkK^#-W!l~W4{n<~o7f*Q!e8{)n%@y5L@)FKvX zedRL|fD71dwa4R-Je9_%m?_4*ww zfQJ4{33ukC*po4YDqkwKQdc>oUc43n`_=x$3{baVC6$=J{P_^Y%{!lJ7mwLcbo!?> z0w+cE|744L@I*l0@S9`Paivonm`GxtrC63R`I^5oBS8WQmpI$L=Sx9VoL5T9hShrp zZKeDHFOxzg&crV<65Mz}-kFe<)}Hlqp}C-No=TWBCvg2@#B@{Dh7HsCrdYExZgvfp zMh(n4KL%5Z8`K)?0q%zSGmywZ{f_D;bnhG2ITNn1(T7GXf|+<)7yW?%#CqS}NB#6o zELgm7Ql<6vofEH@eGpNEK?k}?>;;&67KuFc>4x<6VqOz(yd-lj6`YO+CUDHCvAP7;C+4&8SMgU57J z3!B6IEqqH5dSM8z4>{!9PuQV!w)ER%M$<&5%{>E$e60f*oV5a&L1J1UG6>9<$*Eu8 ze;Uq7-{4kRD35-LQNF~8HxyvVXs+O+0$`&AvP`%+Y)O=#)XGlH04W2@*TObbv>L-~Wh+b&2#KL)_a8)Z-^qG}II)zzaMh1q!LH~n= zd4APb+$O8R7{vh;EMo)J$1S-C-CH-IWq!ZHVqZBfn^GSw>zX}G0&e&shud#o9PPG# zE-f1J&jyfwpIL~#`z2^9HJ<6{E5=5QkP9Y5Ce54}l~ra8QcWHn?K~KvrrU0<=fl(# za1)ukxMt^fLO$?R4au0T55@j{)ItJab+WSW`+bKIwdK)_s3+8&oC<>R1q}c3KIbG} zlQWD~A#JSYz&OQW0lm)qX{{a=&fB*$@L!@|J)F5Xp!Gyn26;*j*UERfvE3V=h-~c}xf|7kT5LyW;Z)!l+o#?bT^#hq z{bbqPh)rmHm?}|4V_a2yn5f6<`JQq|-ZwxpzMu8cUKbcGMY&fT#S&%U-Jp;537byh zJt4Y)-teh&UeAkYqP)p{&n`W$yH@kmuG2*UEj;!~Oe1da)=J0}S?jh^a^u*=#^klc z!vv1(S6zM}BDq|-JCW9`zfM^(OQE3O^uNgbN0Y%++SzqK`eIkKqe5s<9{rQ@o>_W= zYCRBW^urRMV9>d--w8h5X1Ay(JwjFX+<8k8F`YXLD(>j2Y|9o7tB~AFJ3EG02aagm zG*FxDobOzc3_Z5~J}*`bG#SF=rv|b(qKVk#q%s%%)?|l`U^|HV1+T2ywcB>;&*`+L zeI!yMAr$Aev<&LgUlQ18?413b5yJU_91%WEjtX5m8#i`A z{Bg-NS6kq_V+JGanN)oBw5I}a7wr{=gM>zUT?;6;q@+W|iSuPd%nOF3*O}^D&1<&{ z;&nQyaC~9v!;pBULUeTDhT_=ZH%1_D7#IY@mqQaTH-dcgqsyHby>u|byd1%N5kku* z+iiY*u!MHVJb-9 zT9#P1$|1`kNe}^;{t>8jDOGW--{Whzpk4RTe3QmS5?zCOzxneU~)KJf^}s- zv9o2kTM(5l+YnV!QPc;W+MoBoFKFrP-S}k|W#Fup2vkzT%1SBZEk+9GyX5P2hueH5 zBv87Bz&CKWoOtv6WJ@L?RHc{`o@X|P7cy-DhW)kyGB{r1CmO2HgmVzg=58`=nlRX2 zG6}g^4<0*KPVT*&V@Yc@b-RH6Y&^b|G+=%qvshar0Fb?Ex*8DBfckgPn&zT1!ZBX} zp%6nA<&%Q2?`Lp3F||KVLZdM)c9~=JglW((px)&uacj`LOEIu_#N##^Ye{*igB_~`uv`-UxD&lCpW4^+3-T~6!S25>cOGxDr|0OYo zsEj^1Ll{ag8HJMeXmm!*2iK5#w|>)_u(dC4URm1>YcngN`sLdgZ;Oh&jx`FdcbxWRDObskH@ha1&h$UpFw+Rgssa?=S91^@F@r5Y9oMv45Bp9zdoVhUcj)RscOnh-2sE2B#zN!=926In+>snk+; zZj4YFC<3Vy=0Q3+C;XnQb}yYkis}43ujhPwDI{iweK_T0w=^oBLQ4krzmaE#?{=#7 zIJub57uKBOCz*p}dw{J3Krhzxv(D{dqfWBw13`_KEOH;I6zS2K+@|@Yo6C$qT=AIR z!6RgSHzykVvkBH+_nzc};ki!b6Cb}KY_G_fM`Co8Nj_Peio2mp*#!^ zk2y;wqp#PS$=nfk={vHoL^zFYVJBwD_d-`JY}$pKn-@;&lg@F^EN*%@_ELk$$$fZ> zsTM>$Gj%_yW`tX2ohCAr%YNu?PQ&zM+Y4q0=WZu6a}IL(r^@T(vNZu#sCOJsUxX@- zFz#}LaZ{4e-pYb5fnn=dv<#&0W#V*Wj%y!5~gS)dx4zFi?95m36C3?h(`~ z|1?<^TUW^WZza&oc-e}PJsyG}|4V}iaZkz~uQ*S4iGZYzQLap~TyYSXb=nKtbk3vs z`WTMZ4rmnDn7DnZO;WS29EeV!nZEuF$isl(0p$HHpj0G8nR{3tf`1mQzxhef+Y z_y00brQrwFg6o@8&NVoz0Hh;md4|jG>^oCa@rR}@ty~|uSm3i}tv0A?4)JV);W*M~ zGvoAqrSrb+blG13X{wy!mt=fxFpgSqm(w}KxafY~H0r?s-l%wAU-yh);xibHpeH?l zsc)73AyeM6=#=LB?(uS0marzmklN7`Ux@I{AQ71du79wS5}VXt;#nkdJSg=chfCL! zIPa8!;9nWHPlZm3@*s~Z!<$a_quykd2%I-!>ZYPz4Js)#&*WWdr<3kA_e1fHYeq!i z5*;%T)?<`ba@010q&T%m{9N#G6SSLE%I2p+(97sjTR#a8dRV!+aR)YsI0tToIl2(fk z8HJ2bB)<|VniwC4D4Lwvc@(maqan=Ql|t$oGfROvjZ48hkaK2a~m)CLT?Qpl_D$CTHp@hKT72mskwYQo}@WPjV< zUD0} z2}zh>=pH5VQZw9PXlbd_`sa-IWlz6IdnGUIMfL>;N5_Pd^7(O&I<=%|H0txdKo4q( z6udh&j=*ud4s-R2id>I#4SO%q*So1p-u~ku5biFF&ab{@ZM{QcheICCAo*>&cx;uI z?-bpQJxK2`Il-HY^`@H0J%8o?)H%&$LE#gA(-T>s_9<;NtZ z2Hd~7$_yWE3SbQSYhpBOM(8u>ovb1lYnWI`u5`M>fF@8F)ig%$xM;;UG5ezs&PMnTg8-3%a zZdJ|;bi97Abe(Qj-~^*2gX#|D3ni*soDK&!ooxn@r*SB5iR2`j0I6(Yfp4_r3wSVy zJ%zEU@}!`{QNrW8nlbC0iorRHK@^s&Yxh#o1uzjI4uc9$m9V`H1gyqCpeRPk{;jU1 z4@U=FBY=zDtD8cbR{1B*oSeqYq|-exo1cB@_zEb(t7%`lhSwQ$)(zy5ZPGMdf2zDS zsR%KkGxZk*LE$<{4JhjgJUxv$a?4%}I$c1UH1P7$ zM_o-YOhv^|x7mZ)EgRu{yhXC#31%S3-8?_s3+vB_$Z1ziP{2_y(-SFRMjw%Vxx7A# z-?7uX_{{Lm$I(8`J9J3+&YvA}U*>b`B^JGN3x=xotbW+JRA<^wX8swuuumh&z6*&N zfKD`4jw3LClTRvBz>NH%53wh~wzm@>m42Y|;QI+P@!Nd9NI-=S3@MhQRLT37x}sVi z_&pD4?Q;3G2YbvF(a52J5FU@ZEJf{yv zo`kH4qGnrMikx7;{8O#qc@7zn-c@5^GZJxd zQ?1qwzgT*rXq;QH<_@{a*S!d5!A(zMHf<3;Bp^U3-(s&e=900<@*sBH{wpZVKdX(~#G!f2iooX(Wctkyd)q zwLX4Fwc8O?Cj7uwRQIqu<8-HPHvX?p&km)kb)`C$e$QPd@156aStT95^8GWi$s;^A zs+cUM80U?Dr!u|?>1;RsA`ffSgi4hitQJav2vGtn2m(E&OKyQO19m*_w4#l6mj!QL zS*`HQKcXbb!1T>86~X)x)*P9}G-S)zGmN!&^hMPj(DK6fiqWq0pafN2*c{x@X8Xc7 z#s3a&lT=Sfx|!4-AjReuG(b$gd__3COAX(d$%4RXznaVco|1h(VV?3P7O&6KjY$w=WN7m!Q*T!=nBMS--F^mBDDcE+K?`$L3K2s_0$nSNuIXI(S;H9(QKTnvBTndm-6f^@g-dxzo)!`F+Fn&V`0wDhf6_!_H$?&F9#a zDs1xfbR~vBq8Eb>vkGQC!w<~}clLI$z`idxo4#j!24K!N>8N+D5pY*gvdoafWuEY} zpIA+s$X>$Gx3A~@;KW^80y>=8ZHgB(hiDhUvf12vg>eda5r$C`?sQ)6<5PQAf@c;SGrA8W;Sy4{qWfVkCH)J7BB@nQDQ24G`c z^z^2MOv&6h;~Ax5dAqvK+6s)c0(ADL4-RiDI!hL3xq7RjVvtzy^iwth{XcG69Nb;Q z1BUOMQ;H{Qb3XHEZn}T!&~cltw97wP*ye_{vk&ln$6LQZ(Z(d)c|4=`JopX8J?~Sw zc=(VPlx}Jwm z)@-h?Z8SdckcUT&A2!~@$J5X3Rne-&qg2OV*+VIeZS{YIvL}Kp&Ta3%wi~);Nr{ds zadPCfItW4*+Os1_I41#siln4ArL#%aF(6ujFrfTfvdr>*P62rLp-&l;KPj$INjhyEQ zHfTX?<#yjuu;+M3CUJ>L7CBipKe+&S8T4`SsRm=Sb3rCVEiV|L}R&A*Ue zUaA4@b*ZfBiMD!q$1=TwK+FMB@^X7dcTccPFtXj!S8u*iTvS0NOdL=X_+9yJDOCvE zb=_sv?8c;AfGZCH&V%0J1iW972~Nx}d=P3nZ!s1anmoYnp846?HwUY9N;tV5S-c9rWtTKAS7uhM_R#CFOub>`VHxYmvz4uj{!&a-OeXqPj4GO-5 zguHe`cCvQ}ov%L^^R=gnZ(7`6x_bJT8@*g?cMje*`^FVP*mJgLAAkt_m+tW=d~4k= z2y4qLUEfR_wbz9T9H4l-1me81+^&zNb9SPl~HRCw(b|$T9b;E zU2tQ>uWo<>{a{W33r}%ZPltX%1M&>aqX$j;BPn(pnenLeVnz?A?nZ9;1>mBLobT+u zx6==diOxgIBjaA1gXbUZh`YXe6Bs3qHDlZfj61 zB|n~?4!&e&ne+JGHfg^l1|j2$jat<|l%{DLWugCD>VJTkC$#H|j8KIaS~Oh$YL^8oYXKABH5&JDrG;sOrFjEbx$7vX^H6Y`burf z<`bY|iDYkMgilF{$uiR3d~ISqFC0=Bbd!WMrJiJIqI^}%#OL=|A)TXD%`2;(&(*J`YECEp%W5BNB)xT^^If~` zZ7n$N#hj40rqGzT&0eb(eGxt>DDG2p+c$9A%y)o9R)K+Por)AE;y^SQD$SkEYX#38 z$Mx?Z{eiot)=4`y)@DB#{f$@DZ2nhLZ^z%f2cvNlgh8<783JL8m+yG&YaZt=iWWdl zJzpEB`8XgxK})*@JpA=9f#4>~ft)0GwRlny1Cw71 zN@RJ|83ym6CWHri1D=pFUdXi4$61?}k~<>*QqBhLVf*Dl<@VDTmjzlcfk7g)WFmtj zCmJJ}*$d9EF1}Sunk@v7CFCf+d${5DVlRTow*6-c$1B4 zR$gnRz0&3zx1I(5R#s5Z7*lZZJN)4}DXT7~f3L%$k_+9o+Un7rSIWf~D21utKh;k= zBb#Dsc7O;vuWXDP*zN0R&U~0n&uo?RI0c3sPG~KcKKPiIZ=0N%=%D-;lg3~?3_fTz zx|<{95i5;TwtfNX5Aa}Mt>0}btInUPqt`7+YWi{?;HzSzB6s_%taA;ST7Yd=LwkZf5Z)h=3#8Z8UFqhvp@&ThE}VR#0G zxw}4s;brlQf2dusF4z*1@dqKlpO?Flifr6 z$?GA>bHBimxb7HAvk|PNW^#ne%eT*ZUdJ>_S;l=h&9<++t_nc+`mbq#nmhc?mkYPR zp7~ne-3<5B`*lGgwj;cEfye0rq$wQ;rxb*v-eAf-;dL^ws(VVDnh#}HM`%Lt~H?ax0aK726qc4r`VFXe|=B@ zkoyNe$QPZ{qd3vD53GGLdfmbXEDv6+`-Lt(xCTz1Zoh8DU2P;W&@T#4boiDzfpJ{E z{!V?gn)-vw-naVpE2nXqJ*{3#UDpVmoqllNr%X+t7WJOlGF#rE6}W@ae4Y0c%rIXV z-bl)00Y|wmkC=}~KUQ0hki>^4s(M0s9{liI7I6nmYq~;syf#OcXStwAP~m!vP7{Os z^`FykP=|(2QB#6aQFcKE!|u-2%)WU+&lFf)t;n8^OJavJb73{j$R_=Jwpk@3x8iL! z?%an)RH&Hm_z^&i0XeltQma2OS*bd{2%V<)?t&#`p$x^%74j>3S`Iv8R_GTT0j%xQ z@NpqaCV_yk-KmVPoYn(-waxkV*4FYqw6bbl_ZtN}$)|I4$`Pc5vh>3(G+yAI&6h^) zRP7JC<#AcycCUXu{S?O8_1@v`V#eeC2H9NG6>)IWGZZ3JyKM){2ng6^2e=>czsq#K zA9b{1$vz_6?Cx9%Y=y0}Z+P#QOxp(*t6muSS>Z~AQF5`{09g31<&ZYYv3gh)T|iR7 zczqr(uaAE)b;3Y?ea_iwhy%JgU%nIQtuDj*Ugp=meX{2F2}WbU%lk!=Jo~EE>G-mr zu!Es@czHc7u{o?{r|toR6f_a`__`hT*uN}TU`Y{|ac?grz|QBc(xt3da`xF=?_I64 zQLn{!QR3xD;d*1&Z7MCdvfM4WV6rDf{sGs0cLKLG%%+^TH!Gz(ayG7;M?1y+V5uta zGoW+i@pV>UxL|e`#<05ov@0%*Fgy4C_vQBfxarjkPCAdi_{}oN#5gZQb=kt}moXMu z8$8ig`okw7RPZiXqH6sbO}S1Hg=r6__a0|*sGUN80<_X3*P_n=q&g&!mAjB9#(3Py z=Ku9EXI5fSK=;wcL2mq9DGt_b7!#Nui}NQI5J)B7;mFITS-}^FX+%7St#I&+1*d9k zh*Qa8S0RL4u!@D9Or%d7OH{7?J3%21)TXo+$jkW=!-D~*s@t4u;VLlskWnnv8&7fe zI3ZCBwcR(|=@Uf(keR1Tt8GlOK5K8#VVLLEgqQd`yvTmL%Nd}afdeC(!$NLUb!{;m zwTq?C7LrP5IK^*B*GJdr*Nc|c?>ip~uG8eLI^b?xr!+8{S@7j()tyu6wW;HlD;CLj zE9#ZFiDyZ#0*c>$Mkv|ETK}D?a`m3~5gAD!n-Uo7)5s-JvHEj7=dd2St);HVYc|qS z{dN+Fdg;Ti^@=|uae5@M6BJa!sP3k=;0M2$-jsF$Gax$A{gO;Dfdurff28U5KM~wY zCB?(<6o+y zmS2YZ<4*`XM+p}ICT1FGFKB*d1FJmIPOn3`edf=j)NrtHa_~bR+@O&G?ruQl@adA( zocJCZ#1?yZ@VaE}^%TDk)S+H62zK3|Xv_RNIuzw(XnvBlfsf6)!h-e@aU9}AHjpiL zcTZyh4G-UEZ;=8~?_%LW=@9Xms_TQr9+M7IL!CBl_BE)FJdbmyTaB01MJoG&akMm7 z`Wa`F$Nyv#*AUE%wJ=ZiUc?z}hQa(2FvoxU?K zUv%jQQvBw_>v?ai`q~t%&qLs4e@%+l^s;bhldn}n`GqGDk5f1mjLXDN#vZ1j^NiTS z$EP-%$V4gZk&xiqzF_2}v=4x`xRx*(zAs9bxzL}|{-2c z3CmPYp@x$mLvOwg1r2!m)cV9VOPePXQwE&xZ|xy@c-$uFn!Ii(vpxN< zbJriPZ}*lgBZ5|*-%4%oj#TGiXk-Yhk_flQI?g637LwRX%;%cxS_u7<}=)@FzbdI*Uc_MzJisj+2dzcwo?a{fwIrX8YIWgAymz zYUnLjJHo#>`b1Rd;QCR9M}h&_*o@`l{t`LbOlIgY&Opp_T8nv+&%~Ff#R(C<%Mi=> zc1Z_YAC3jhh-v*04$0x}olfe~Jo7jq@y`1WPTO~~^zqLC%)2U%y6Zg^JS1;o(C<90 z-A!msQFgXWPeUeF+AhZLnZ8JtU$}|Sm;rHpHOWpBKbNA3ZI`O6%Z0-1g-@S z`;Iz7nVT|3JK1BG@7RDO;7vTxyC3YU)QInEm+KFk_VuxUC$BPrZ2`w1@>O`}O0DJ( z57U)CeSK{wOM#m7C>(jMhf#5;q7}4iw=&BN%~xI?3@qW3(v6E5M#j;fk%tVqjf_$> z23OVCpHh`naf*TTy}sitcmjTrI^#Uuwd!8}r?_%>IhkO{a~zxfu58wOnuGQfv)48n zqFW!FV+9CXec2s3K8$E->q6B#*z0f-Qc}YDW^^kXST~RHoK5n1?lYSz-bgwF12?|2 zR~GnzHRDke35X_<{aO>z`qd-AI#)@*A;)&g20vdv5-MYgl6#>&1>go3Q%*P3IBlDw zCp`q8MOWk5MS6>#0Dw1xi_!jc^ z4O_yaRXq2dhch?Tc^*u8kB9KT1dR*&5dp$ft6KK^xSflg3ZVNZw7nMRnBhQ52y>hD zLB%wi5Z%!6tlDl#$hQcAgA<{$yz9)bA}2sW)YA1?xAkFA~Mu;WAiY5>GpH~Wx)9{ zf)uwxh|I%1i{3K`Xc9&!UIR<=c(OtF)?T%e)c(7R`?}xy4pZ;pMfMZbnb?P4xCQ7b#=|7TK9h z(qzO>JYG&a*NvpD2J@Y?Q0ZaN35V`POZG^Jbm4UA46SJ^FCRhQ#@dbz0QermQP*%! zk9dVsUBi(t{xInme8?wfv1ueVmWA7Tx0SQAu`oP1crd*=C&-4bGGH~o#XS+oBV~k8 z0ogrj*8-W4YV4R|Ns+?RWL6X!X%toH1K%mcW$QVpLD6F1u&@jkA4^F3~YUm;1L03`Y=Kq!fYFZP%6F z+#kj)`oWmHAKdi&o4RTQuT88)g#t=AxqQR*a2i@~e^I#VJ=;0BiN30(0ztAr1QlYA zU*L@%<}m!%Ib0M!5X`13zi5WdcPZA)>*ewU$TeR|OyPdaM-wWi>}8sp1w z6g*Dm-6ECqspxT<2*f4W34`nkBll4y|*8XEb|5K2T5J!0F%1tHnUE@M+ z^~T}A`Kvg0C6Cc&I_0e{ar6A-CBEXJOAj}Uv1ERc%@@>gcMW0Uj$5R z&mtmQ($qU!`gh*_KoZOSNTqM?RR=VlE66_z`uP#1cYiy75_+pb?x&nCir|;Q)x;SC zXT6Af$S|E7oR_BUb*va_VCZuYA&+WiZfPyM-Y@c&YEcqN7)$=BT|YX~K!+%vCqHq!-RML))E8;e zmI1=Zqp2+t2qI-4ido4%O$By6WuBJzneX4MqD_m!gIo``{4n!23b~N6x?t)Eb>1*?B>(&+?e-U}<(*tB z>2S-@HEg$V-EdXE!)N3XI$fMwY8t-iI*Eo*Z5ukJOoO8ChABgo2+#S^yQ8HVz;i`i_&DvBObw+rxcrQ6xD+@}XJ2yaS|WCY2!Oz@jlD-s&WJW7Xqe z0jpsrWI6)n9O&n}ykTNcFrCv6#U6|>LtjTwgUX=H0wo+^h}-xDt6BtlT~7(8to_2v z-C%bs^VE9c3dZ$&#dcj>QT{d}#0=N(+G|G-phnMpSIFJUAzrGQgkxn`>A}pwSF&Wi z1RQ(U^PS3vJ$*4E#l0RlZadk5m_@?^`|;0lK8j$RXP@c5IQ9;zAYPrtc*$&db-xg9du8(!bZlv%?# zHongec<*_noz*|C#)_9u>f`22*hewe@w++9lW3duUey9WT#}4~ef4tZ`A1H{v=7$X z#N9;Q@-y-04Qv99=BcWUuM#MKFV#ghi3C9Ut3R;UKDm9Enw(>MaV2#wVKbS?m01O9 zynWaELI&i!BKQPumN&!nL8I2FX$4q7WaTX}0AX;DF{WgqDV|r{ma3u*amw>K?6C%F z!R!Pc7d|AKOvG|Lxh+O^&~x2+kmjWZ3$ivw>jqt)X^u2OE!zcUX|7=_2c@{L?$ z_zd1N%j{^Iej#vEmE9M9abaV47dv5t-^F_Uk^D;q9SyO0rwHwe2aU%%Jd1M;x+_b=IHx){WT1e)mSoVDUqYKn4*AFO?>8w8z<5_BJ zXY}x#ay7L4FttE^9^N;l7!zy#0RzA8zJE`~z3}F}LK%{D9vlr>q zf5I|Ma0{}@7p;=8F9Y%i-S$Q8yq; z=})y3E!BFWX^TMgL!XN237fT6AhRV)Sbbnqmi};%)r$-|*v`rdSGK?li1xy6w5tBd z8BGbT_-eW%qX3OqQ z!9Xw(MZfgO*N}C_b*}Id7*x!9QB2E zRpfo@nmlY4AMS=Q(ZW?Vm&bZi_M3Q5fsv0Hk3c^z>0TvlGalg)07VIFCbp-FhKHL5 zvRHUX!FRv;83P5e8_FWxqJ|QXcFefxrjWL0jqBfC`onq!OxLmN&l&DdO`8K&9gAD# z0iJa3;wfJZ49XoEp34rP;;znam(uAFPrQ0US_od@*=Z)o2b{|pwh!LkVf1~jRLr^k zIXJ_#ro8P31f2pS!%nJ>-2b_(QF8FyP_r#0P<^})Kn0_^Ro3lrw>m! zrDH15X;V@X+b;-Xyt4>zrqGf*9I?nEzOg*ZqW{`d@DN7@!9#)0G#~%5u&7>s%{l<+ z0NN*a!yx9R^-Te#O#e*aPE0$Gx-{&11FkJ{6-RyipRdv}E>HURLSDcepbIVNS&wVN ztHsm%zNdd7^f)7CfC@9l*GTL|FGNQoH62^&`-bAqD2Z`obYxeXb(VzirKVih(Tj2i zQ;PNvI0@u%?V-h2wNuI@M?|SwDF*CS9?o}MZ%21b{S_oqDTt<+oRL$zSMZgpNr!3Q z&;A`r`4p!(-zCYV{z7X!-P)^pm9hyzk_L}>=f0yWg=GUGCf)g(GL}=9L zMv*KPIzn+=z9F?b9KxS3V74A*8h!<|w8wb*Kv^}>&E;!%^SM{cGJ!&LDqIgG#nrmK zv#AEDcUakNO>}YCA0`fA-OBgGxbZ&$_f*HF7!|ID%=}_vG`d5xEK_&16jxuxI-d?E z4WCB$3(pr`=Jcwo0*rWx&=XXO)Y+XRdPQq`yeCCA`7AO)LD%emk-L4`1@WYAkJ~WNC7P`i+S1s zqyAt{MX4=M+_EjyJ9e_qFQt*WjqCG7wi@ZO7C^ZZWvMKj|0jaZ5Ob>r08mlfqhas-zZGz z<(hlTvey_W97sH?Dn$Nk9Ql^bgH&e$KUoItE?t%(#MW&*#sAmjLLVk~iqxAIs_2;% zYGZy!J1VTa#F!(eEl#)L>VWM=&Md|-+97CHeYe}dk_sr}n!Wul8c{977D{4|hZ(C9 zayqvaerh)=VIexun8NiW1F!PQODX+ut@C>6!GfP>7z&YpXaLEV@RIKhz3Zqx@&~mj z)KT^u!iLu+()H0Tcy{aoMEG~udEXeE(!sV>dv8DpSTBqvX$f-Z+%Me>#o3mVUc|4m zzk^7+X6<&*g{!YW z(&md#r{5K|XB~H8+{Lon6|lq4A1O{DzZ;7p8;ar}yJeMigC9FG`g(Y_!#nC`hOYv~ z@)zcV^+}1v{c8=03RH!7j>#C2Bm&UA8ko1~e=XjN%qI($tY>+#;V-@AN2(cg@EKcGb^vfL^$fCs|rzTsr1Je#q$T@(_` zcs$V8lK2?fK1qucYgD!S$>5>#Xt`rs55!$K9zs8GYeVTcT_Ba^Z7fNQ!_=%x^f>w7 z_ePmS<&jS`z?b}iu4hK!(aeH*{$asg>~5W&pse$hy5-J@gB3)}YPdV?qX+q^_D5(5 z%FEr#ReaaDhJfJ}iu|$84Q%Z!Ej9~X)kWK{;|SWN_|7X~N2j;!T=RUamIFt|vwop) z9SBZ#RtR@Zx^sbz9p!wtE0dvyZit-U`B+b4ayJn=H;A?0^rVAq^8d`YI`0fUKcFwS zg~$hkhn$@5euSQk^$kyQHQU<79Z9De#%LA z2iMxRC!G7{%L1)c!K!vhD9G%^;atD)hQrI9qg!Hn&-I9=!?0!0+eEsWs`EUY7+qX^ zFW(W(4sRXZsA2gRiPj?*vq}-}_U^s&nW2`D?Z>B`&T_3`!|jL7#_+E+BwV(TP$&_W zre=0IEX4S3u~sQda0&}%C`m8c&-uR@fKLNV3}Vp4)bAfguuFBPvkmD&79I;h8^(5!nWpWhvOa##wz=mV}goI9Yw zi7AnNjqW`9gqzHf))z>fckW||>T}7Mj7;r=Z*B_a-VW~gN46UnkntH{thnS)37ukH zPkH;o+>hM&B?OwOap9jQ?N=ths(e`KjjJ6Zwgww-o22F^^osE5t(WB@w#srS5{Pc>t#jQ?PeT9VyK5R+W&$eAC0czI_Do%o;f= zBIwxipW8w%842U$1Fmx2SN*UAT0&*r8#$Y{v6vGX8ycQmlr?joKIKw9P!-Tri#Hji zH2RB{<%Ri>ERbAEJf#PxsJiDXEqoiRI4fG|-JVRJ_2>L?@}_6G`5P%u*X2*rLs{vR z(6Hc5o_l0B%c$ysOZyJ$O!Dtkh-0yvp}+9y3wgnMN1u?E2`XF^g>;g+UaA})_KWT2 zedB25ba_-+v6UvL;v55j3w56TAtp7mzJ+t{Bq2f0NjKXjic<-EaczM?@DaZSBBn!$ z5Yj0^+>efS`lB}L`T3em6JO(> zP}zqXT``;`!o9K>vXpU7SUU#HyVBVi0u!e49(BO|pG*2Ua7{u4IQ{bDI3_i&{N{LYi5 zFgV)`>V{c3K4k09lxe9lcg!X3_ZQj4CG#F6{-Xb!9Q?YGN_sORsCx+Zw0Dy2&Z%PK zOvMVHZ=|@Hb%rZeP#LKYwQ@WHABy?K5y3*)HDfj*2ug;K<%f1d zWAG_TyhxR%*Ky7sQ;@IDv-Ni(mmXZagEUf23|o0byb@4}a{H`ueF^@%tf$|u`5ARc zep3Ap@?N1CE-~h)lw6}k1vjz6SN#UC=E9PO&GbOx8#cW2ylJ1{hJ%bV#s7{rS(IL| zSwX+r2+RFwFco$28Ayt%CtTFX?0{D1A{Af=Q+L62ngh*g`TBVq!d9bssr9kAN=DM% z?97Zm6z)7u@vu6Y=nt6W?}$9Qc9s)Hq||Sq(xlNe`iWB2Lj%gdO; zfn=Een&I*xO-bFc1cYTpd)>+_o+mx>c%IvOb(ScYz|wTG z#EIL|W@oO$CS_Tw>ltSBQLHNt6GKa6gtQ8LN;Kh;XQ;Z<2U9QpQJZo6U!psNoHXjH z@DTb^iOL>%wiXN9HK{Q%UdYljc&K<446@0f5MPBQNfvkr``OOFRL`GzgJ%Q&<{xB! z?IZgu*2lLWjP;rrs#uouxFuK>fpuxlYg!a*WQ7)K*T0}NM@yHu7Ca$yZ&L=he!=tt zb?A}m&1uH0%!k^Rq zonpnBOSO7ddNcv1S-CSul)m=cB{M^5l{h7~mq~R7H{p=a-&RsHh~3IOqtUYD$A#@v z{MK3>fYyh3Ci=Axs>H6~z@3~U&$y$-%uTgb!oUG!85PZ2(^ML|O)%;GbLYjKopg+a z4#LAj|He4+2Na&AFCO+WL(Dh@(svP} zkfYkL4!8?tiG4F1n2(eDeYqU4Yge8ki|rVQk!+)fO$86ni-k2_A5g7D`FMpRGxO_U zoLZTnM^hLL+o~A8CwWGhX1w~qMeN-_TnRs|+G4fXLxR%Eo>9t(E>UE9(IKc*KMiR3 zW0767KB^}njd-*dd2w!7kJ4d8RxVzT>**x34UEnGeyT5+{o4j^r~RM1SD|KzKd`iJ zh*d8dda-V-UlvF~g^2hKf3Z}g-)?MyNk(&~1spr+;%_21l^cuQh?faL)@_~G0rqv{R zn|9-xNxZ5c56$?1tV83}qTqyHlRr02AY&iLEAT6@sz>}!Mn7bV?_PQ~S^bg%YEL?M zV0;1da-xcE#o2>S6<~iN|S_%5<6=nIbgpkhfnR> z^{Fod%Wr-C-u7LShbWOv^}yCMWteV*Nh;>hBl%;u@e+@`IK1PIPI|mU69es?N28K- z5z!`ai6rLvR|KR%i>Ys{Kx%PNmpaS_JQ8>ET^uZYX{Q4=ELFc0q(6h$Iz21SsfXee z@K3-)E%Lv(tr1Zp>W|4)BU_o9!=z0#vW{bmy86Z`R}Nl=V=~-RLj9}>>(w7f$_YU- zaYW%)xDAIv1Ii%YD@#5k20Hak&Zmx~{cEzB=RS5MnR}$`$IHz-$XF|9hyF=2*OuCI%wEWg`Ya+WeFE~-)0NX2(_R_Fec%$bPUp9 zuSdS~ds+O6W`q4q_;X(Rdw%P=h>Wv>f44l5p$m;pt{%VO(`_f;98DNr>UWa0Mivc$ z-x~dPB0{7VpGPbf<;W6)ac3OZcQGq;O&dvcJFjSJjos32AW*-b8I~W6x{*PNU8@_bRhzc z^ZRQ)5Q8}tI=@w;bX+4HH74MM@w1bKu*!x-_W1w{B!$E~O0^eBYz~3Isb=UKAuofm zO-Xq_7MKy_l`PUQJhK^5!gL7NL&D^}-Y-{C@Au56+aO6_w-oLWkEKmS65_OKukF7^ zag^yp(oXd__kY8g@WWDWyA~o-*?LF7`oSvRH)SKcTLcar5rZG14$(Bxn$!$cHg+n4 zmU?MdvuBu;m3^f}P5DQZ4Z+Y#&|Bd=#6M*uND~?#`A2zlPmR5jpVY|25?2>RH@{-w z^x3p%`4gSfkp4)%6qiYS_Q=nIOelz|&Z>UW6+iEUNiWF(h@%aj4t}Ch(zohviea-_ zh|yY)=lbrrB|!O@H#aHHT`7*-Br7*Oz{ULBoAe{LekuHpT{qzyxd!q_M2^>F^^Ak- zaP9K*KY5?r@E93!SvUrIOtM;t>(-~6w2gN0@Hu1-!o;TnK!l}0KxOJ1*E4DZbn7|b z+zc-1JHA}dr|2eQ2t$KI2MEFv^A%!Jx<=w_EGLp{)jylFzGXfDnZ(Q{GO@=c(<%5i zCnfGPnawslHq9ouZuoCr-uic;wXBw=|2E|qai0=`IYVsoBWMg>e7;$=G9(5M34=vM ziSI$?52Wmds=n0K(fPFQ&A>uW$YRS^*a9ZDlrqMK^SI2=7gN($ieqw>nEkfR9XVzN zug?XhN#C^fEUA)Ib6Ch!Ss1wCG;@SCEuX4j@LmjtXz$V>DfFmhho(dOFGl@v)72%Ni(DB)SR<#|(_nI>m`P=UJqw_G&Tf)$-Ba#P?-pU;| z2`y7b(DN^&4?o7V5L+S+KdTb4FEbFse#JUq{jDKOt!4bOjKQ2({7E`pa;q)wOy*7R zR_RCCDk+61EA_&vnZf@q05XD_~=5+#@;irki>i*``$nJ5GsuxyFb0Sa7A4FTPA}`s<%y0X` z<+UNhj?XyXH{Sj^jZ{Nse;*-n0Oos&0MlJhYWX@&86TC5*A9L5lll>b<^Gt=s>y94 zNguD&a&1~_&vSSMD3jWzI*n$`rYb^`auCG;iV!cDNyTC6p`=Aw z4To)_x|-z_>nCRfSjV5DwlpONM>xfr`3YqZmM*dS9EMC$lH9wrfi8DiV6r-#l*b7y zEZTQ>F-{qT`e{aY!!uhFlWNxo5*JB(m6qrkF|thFC;3fTX3X-;_d%rTJt4s;AC7*k zfPMmwjy-y8_3fqOs~ROrbL-OffBX(*=o3h1IG8etq@?)`^9nt4TKZ{w<8vujLIKKW z)$)rnbA2t;w0oG9N34NpT0NgDck6f@V!(VpI5UnQeGI|q2N<3{cB@DfV; zy&~}gpjhxWuh{~k&;I7^E_PKG@2ZkQ0s+^PH2kRMswjQE#OP?72vvLO%JR`?uJOA$ z4?oj&@Y(jUwl>Sj*TAZ=*AWn5K&>c(Q}zfP1j1M0(MC?;ATB?IsDq$cKX}{4VQjvh zwVjclk@BjV6xaQuX?U!EcNV~0DB`LxcwX(%Vl7u2N=`d3oDr({C>%>8!CcD5SIi=O zux$Rzg2^XgW5yrZ?OAEDY60k|X=n6B&lPnZb^%~rFQGXfGp$di@vYG4IOGv8qZ??=8#FC6#%SQ7+GMP{bE zpHkG*D_MBq2K_{X5^ti#SJTH7jep0m)tJtqWP>}RbK#N-tzp0Q_w_0eWGpoUmruac zo^PN)MX=0!UqtEYTn=A2G^KPFaM|J>Qi`oiIpz^&)5(QzzdpB%3vgw;NPaD=IoJ8g zog>v~Eq>Uv_7JtfnA$WPjrI)Fgbl|uEDbBdort47Lrpcx)vy<>k5bX4bL4thS(lS1FwwzN)j8f)B&+Mzue7%-BC8M>_fhif@ zHxVT)x00TR52SmO>Lu{<2bgj5C}bY*0MEn>xG0(n#N0 z#IwjzvAEmf8;{#c94;}45l79`>%de%$e!%``{EC{puKERMHT1D4g&i$fF7rKY*TnK zF-t{Rws{y8WODx{^ZRwi*U<><7=3y;EQPdgW(-NSpUQDq%fiADX$YxZUBrxPG+y#A zX4Sr$$O6f}j{0WS=)a)|r9!hVMyO<;zW6(tMqu^8c+w~S9E5>Pp_NTJnp|}}`NDCt z@;kD+#%X$K(6jFv9zl8UN`eqIy;vBUd_eMR+JW3?w19@n;cx4jUQibKLHZeUCWaj1 zw0CP%GV(vCT})}I(Mq`A$Il7cReI%iaHuv9C=bgCEa(Ka)I$4d{R_E~E^u)n(m~7Y zITIg&fh@HLU~jRT#Cf6>fYz;!NdEVX$1CvRNHfskN$%dEpkmNbm9qZMB;IAqOtPH) z?S`BwIi~BZH_XE|oO_l?`_G?@8-We+4jphTcoBu}hD;pdPh$u{&UBxg-e6L7or?KI z9R@U*g)6@fDBUj9P%#g1nA(Df8Q4n=ybq%fu=Gp-%1Cb;EU=jw@r{ntAPQBT++tBl zDilJOpBz_C4f~PYf4}`;enl3V*zOu>WYAqA6uvUfe#VmmON}S#&4)hYE`Z_T;MltT z&SqZ4AfXZiw(km|9tA2VZJsWwnWQ*B`fi}szYAwHht|L44gfO(iIxRt;w11Nsp&sQ zFc`%b-K-_-8t{eh0D~@@&GKhc4Uz99I1(}0!ukR2U+SlF$9=2+wYY zK!Hc2sML(dKY|)v%F$xi@ZY%rD&qDs%K&;SPhMM~_9wxlUS5a#3O0~QqmcZbmA_Tkv<1tXygBG?#as>BQUh((3hHGD)*@w(@3Rmwn9Bb_sc z2CaD0DN=^*X!mb;*>)V`BU#w{7zzZ6;#s5&K06w`7H2wxz-k@x=%sKaTCyvjY7|`S z)WQj(NW8+5Ls46pc`8ji@6c_Wwj$RxjN(~{7_SIe%)FXfZ^1zme?|GZ24p0&3^yZq zs+i3o{^axe%xUv5z9UO-YB?u;bK~`z0>XrUxHEz-7Oxh_@mo^uJ@X?bLlpnC7|Oo9 z7>qR4_~}C{{Lu|d@Ta)tXPOJ&o~%Ohi~DMM!ULEDJVReOxppKZ=NYF~V|K&tb02!6 zQt|je)e!QgW<|@(g|o0i*I5EB7m3}oDikj?Lzq@!Wi92uOkMF}aE0bU=T-{`{UT<% zP-8s!#94CjDH`1BYHsW4=!QeZe9lk%P2pKBS}t@-;6&mwp3o?X*d6S1XMp{!-zNhc z^WbO74_T5AJ`y4tBX4S*36(h&>z$Ub-XrZmLA8=5!AS)F})IJC1Ti|C{S5t z^))Ms(o`_rpzpfNSiK(KM}jt;!SgT6hVz}s8E>P8%9&l8C&{`F0WVVSVP#LoG2Y{j z#TLyoHC`~)TvR(coi{6CD$t@Ss7aHHbSDN6t{p_!O4H{>2Y8Bb&z@Q&o82vowquHD zzdwc~r{VqfqmyI6#_0`42WX^0Eb6zz6E4?b9adNUy65IJvc?ElfyK3?vDRG1VZs|8 z8M(flRWK@j(8BZDW_o-B=D+S-+(nDXc1JG!G@_!}4EJ~9nyB_c5FC8fUCGTKqgPU* zKvAYkg*RWCzvZ+%+kL#*a>cuMCMqS@rg9|@W{x7n$RjCTX2Nz=&V-YFU(UBcO$S$% zGqh$7o=8gKToH)y(M5BAy%XwmH2(%BTk7`#jbak!!a?vd&{o@&9&gbAdg)?R{K!W< z?;jEYutCI>W`31tG40Eu%X=g4;bP*yo{nB4MSp3G9l8#YjPF7Q8hnGpf66HDawM21 zWN1S3T{vv;W|bwf(@$ivR6fJ2J{qecd7&-h>!Ca-lU#0?71#MyMrdQ~SrvXx*?81u zabU)SG9Q8r8joSFoV5TQJBN;RO5$G-YTwL9<qBKUUGN(xhFou-VFBjL+hW3 zbc{lxkHVDy_+5edVc1;mtDi^ecv)ZM^XQS^%$QLU?Q`G+BPCUX#ZXFXTywiu0$3Kr zXA=GJ6JF@!1fr8jeQ)EQ>t3d)fREAw*}hh(pt-=ZKQ@OTKT5Wr`xFH7WwMXz`2|C1 zr7ZVw=~2y8i^ersKhVjuhZ5~Ga02ZulD9~ieT_pQgIj0JK~B==d86@IxQO1zJ;9ra zIoKR4c`9Nt$4qCdV`FoXZGEa`}?A7(N; z2LDf0H8tLwF_zZL?w9MMf;hohX`1uc^71SAhpkDwwyh6*a!!E2j}j+IVF6)PwJfDg z!n%ic2Lqj-7+6wuLx1ar1ZTyyv`#8@aNnv8CJq+Wj5%98I2&p~@*`0GjDE_y;P=`r zYG-|%Tm%%KG+usun{&UktJ9fY_!7{30GruX4U*Gg_=#1{a1Cv+l*eD6cRJ=BxXUE_ ztQHygT=EBi_hPnEAtiLTFP+}F!21-N$7>$k_w3jdpqSP>qL|v&C*lz@1(XRK%mP;REw=7|E4mnK#4}FHw+( zzPxAP+)5`;;5to`*s97E5Z<`Okw= z36mgW9O0_f%5}p)pf-{p)Bwo=auhX5j-RC>9JACCSEUCP@@Y2;mper!bvmr$X(Crb;Z z<(<$o&7GhuZLVBopjg{SWeK-Lw5y4K>y4X=`XoIhfSH0b`)m6PPLHthA`-SZ_OBy0 z2Gn((UinxFSgYyA$+YgpG;xk7i+YYi?i@1*JGKOP5&>Rs~h!9!#-G2wG{j7pfJ&!5{mlZ25 z`8WV-qz6I`F~qHKN66B~iWVgEs~`T?AT&$I3&wEGaU{e7ESzn-D`~g;x%d+LSMRZ~ z9^fRO`|lXy-~pVZ62cEqUV-N85FB#=CWr*XRXy6@j61Dl3P3@Ibhe}z z7y8*tPmhNG7-?O!8+>?e_i>!TFM`Le2SM-h^*O)B0*Bj+!v1iUO|hsq_M??r{aW|~ zwh15XT@Y+mU{d031egL)Eg&vlO*T$UOEU;{5!|^H-lg#ezo7wAjuD2DeXXG#L9*jQ ziUi=nUiCKcJq|N$3{SZO2>enF^Z&*jmSRm3e~?~6OMrc9kn&fc(G%l;pAh5$`yrZs z_l_{=CAKUoiyABI5v7|*gBDykygnbg?U=Q^g9iwH-MDv}l;ZHcKEx?4?-jFpZeR`& z`E37rO0aH1pQ!Pr@mvtLcF#fru6jU3$!8heYM|saJ%f~yznf>QHQhNKGCBhVM!uF zM#m}y;k~@IOA`~n)Rfi{nNKMUmmaUxFJ~s+HR!DXC8lG-zxYOKriUXYnu2Tj^E!wj z3!7=QaB#Qgem7R4{pz63;TGYAiv2&$!eArHgCwJk?N8yohB)OS`p=~8L=kfUTB1?6 z&zm?EM7oiZ+NXyNF9zG5w|fW!;4r6$C7v6fO32A?MtQ5t$s;ace6M0|Y+#nea}FJo zlXR->Xtt%!trInf8`f25fIkM)uiJ!#>-X^mvDE@9(2fbqzJ0SMLFljcV{tqL$Nf=I z;#YI0LC~RWk#T=RAQ=kYtm1|-wL8!M9z4_bC*#7kH+!iaiA%4eUc2b`dOdRecIoH0 zG5b1%Px;(3@Sbd*=MNc|iRkuY?bajiNjMUe;!uM|5@J zr6n2@k9XBVs2$?>HWwP$1?={DvHwNavUN0F0Otx{sZK+`q#ba|z#GbaXuRTsbgO-> zx+(5`vlTN%7PFtd%5$31idNaZIWwl5zuUPzFl;I!U6#-f?g; zw)ih!*UFu)%zst9KtGS^?bOh zWg~Kg(9gRsPC`oyo8K{@H*E4Kcs##&t;TCKaG)gfQ6TIc_GQhAdJlEs-J3++NsXkg z`P8}|7O5@B{dkLNgOfd$P+%=&0x0FmdZ+M)COit7=h*hiCM6kDOlPBRd$*QK2od(b z&J6f)=COS!X#kSX8}AoSZKJ*wqM|{3x3vH}zn9f1)&(JO|MnGW@9Qqx%(h03eSRZ7 zh!=TH11nBAT^Id+8p_Xgheue5cb-HZ$+XySn0qW7>&@18q%*i*oOG4hu@>wtY5h?Y zpuq}!&yMj%K00Vl;Gi%WkgJqvOwXf%QpTwq z+t+z|9-hCrdI?z_RQsE9S4d}j1G*cfi7YJdD#cMc-D9SK#6Y@=P4-zO@&uI5SQldP&BxH10d9llfJW2>jGDO z$Id&$xORhT8oD9l85|8pl2WyHoBXdkm_5C2-8cB|U3!_B;JjE!B+-y?3fLUiYeXA2;E$sh}VyaQ6UgJ`E_HojUH$X#x_Tb5x>3HMkpS zGD=4}ale-36UW4rFbxGuzI#3ee?V~A`^=00aiOyXcMrS^E*v3AOY4P{^_N#4L`e{j z8+w84X9T!udHZy-Yw`rhq1MS$y=LqgG43rK9K{!`+KK?LFHgID-mgzuY4={Pa!p} zpWZ$>6wOA`Ojz`7`kH@Yr>p2My9PXmzKJDJG^XA%fRq9nk8*Hyl2!bM&!6A#C{m)^ zg-|2>rWi7;Cx-}`HK9aTtk;sSG|4i&o)6QjBv3@fmH(iRe&&Y@j|E8qIt1@d`XvA~ zQ&SsPl!%f6?z@M+cuy+Gi@I+3z^9yd?8y9D6-gf1jfk}AZsG6FZTJKk^9ELt=^qNL_AD~Tk(JSU`1#a5JkhJvR^meSVV^#%R$0!Rq&4K^u^iw?eUi5Zgu zFLcP#5-lXgQU3aK33a-8r~t2Eb>|oJ-Lqjtbm2#kJ?Uw^Re+}U3EUM!1;ML6{E8kP zudy>qngEZMqVLN^iyszQ!)M&DEv;M>9;T1+ zkvt6eA`%i%8}7RZoLTa&uxXgG^74i^2jfR)XM>akWkTzpfvtaWZ#Ycx57J1UlD!b# z<9ivI*%K>jTra?WOsGTYlJtz@kD2Xhp%KDr+h6&f7EdP1z!LO-s3!N&ZH2MkVfCWIK(RBlvi(s4{;XLc_g z=;hi%xSOpNIKUn3^9Jw5aD~M1)fUa0yY(bdpn;9vDdDt_a#7iQ&8!5hw1FWJOsY5< z1-4k7Pd+Yd+Ay+AM?cjTYZP-^*R{EP0@gCM3FMu80txC2Ev)kYV)G|d=yq~Emk zQjwCj0*paN5=plm#lOUF)2CPcqG*$S|0M;_6? z6*~5Jw%WcYb@44d44-}s3D*vM4SgTB^o)$zix$&y99A~A?Y$pKSobZtE~gSoJ??bn zm{mblovxojWi@b7Nv5HvkmSdpk;RO`2WzQ7D=;;_-tEA?-o2=A9Z4~4Tt7_adrfgL z+%g2`ZCH%$PxA?(l*LeW9ivft!bj|d3m!Fn5t9UELFk>$&|xVxi2*nw(_O<|;J@pu7b~>PJnZAyzwk<}d3snGs z-x8$$vie+84wQ_?`8Sw?sKVKJEDKD1_K0p4nILUeN-yHt^7)Y67X8Scr{13)d46y8 zVl5jasPC1}=b*Ks48D=Jy1esMb6wSpqMvY1f*PL=pB6rH2!I%B$%XY_($ z9Y6yFi7Jd%s!%a)Z@1=F1p*HDq`zr26?9s{{QR8KdtoiP;x}6?=YCcW%^xTFk%Lq{OTLkb`M@$; zcq7wfR%{lZLL+PVPwR>q3vyzPS!xAjl}e=YpjTE0Wgbb-LyWf1HZz6l6&7+TWX084 z)z#GhkW&L>9ERAOsz;H3p1T$QMexI2;U6!|I1cw+qAkdFDg3K#4Xhn|UPL*#;|QqB zd@Cy|24eAfYF$n(%x!d|4-QP1&Rstk+#eFhIUN!Ng_PHDLv?@Vfj|&PS+HBJU;I^V zmpa>|C1DN+Y+k9DgDmk@HK!?UbCH+y|5l)ESM~?`;Xm%F5=} z*E9D)hu`(2p&;w9FNCSyf@us=007>nv$*y@HU%{5pThuiM~KfphO4M2@zNsPT1G2t zg9b8F{!HtY8=Qd`cPa+WRkWYK#Y2KO&iN$NR`SG8ofo8(q#c{E4kS8Pc+vfZ{2%gi zv_DUi#2@T`Pafh5_=se)io5mOEFH=FZ!U7P(kB!-IX(v#!2{cg$0P0S++Uo=o7^wG zHp5O%(t~Z9niA&hD%7j`#V~cFjYeX(e^BQ1!ZGlMy}dk${G7uGBJrnjOEy?W<#`1X zb#^0rgK&6@Fc>yIU{k4MesQT#TCN58gmAi5dF{pYFjQah|1F zDHThPd1%*yp;vluvPS%*=mcfhWF5?4NkYGewYx@s0OnEw$Ju6q@_#~7!CW|K4xqG^ zulV5-A%d0$cs!oyMi(%eXZz-s79vg}E*5^pK_HKBzK`A@OL&N?>S}%E(1`4R-FOx> z^pDl98Zs2Z#?yP!65LPZMPh`ol5>2Xj}wmvK05S^$9|Z@yxL-~rJUc25;_DvKE7tV zGxb7^ew^3k8-BLWecCsQs~HTqiFH*-jWobkV7aur4~VQMSn4gr_6@`~{$^Nr0ADR< zx#Dsy%69}@CA$hSn>R|fGc|wAv;p>ozO{Z=Mdm`{f}e7_PLNiz zrB<94Szb5F%;QpJ7WG1jXEwGg1a!r8xV*?}^s`jBqiBBLCzfj20-QXSHh7c-7=)sK z00K+c7U4d+#CW&1bWq~sGX9cO3` z@YQXa9E$%AbFsK{`2Bt&=PNI|$7_HUf51xp+~NjDPB&o<9yU0@+1ihg{>yCq{L6L6 z%k^N=Wd4mi5(O_oDq+%t=ZVOT=IbH4GwuK&jm%OQ_L8wn#L(!y`<7j0&8a$CP9 znkB|Jp)sNaO~kN2)BMbpg2`cko-_ua5eQKD2)WC5MNe-W8o03=%5_1AY-mSkyF(Jc z@7I1;BgX}?NZxItaw+yVM1?Vp7N&uuc(eR~B^>zA1x%sNzbH;~vB#L#`Rg1oAhDs7 zm_iK*-@K$lC`gAjBxStw`Nyjne@;~vQ^Rw!%+azHSFnkT!phdT{msE*KR6g%(3bl) z!d9*}$lr4}g7@&|1wuF9ewRF+_B=C-`$VLBZAD-b1NU*=A0Sp`b9fy0#JqtwIdOVB zzpkehz948s62khP7fg*Xhn4=pMcKmu;tVWG33&!M)5$;ig! z_jpC@PC+4^PiSRnX}|80BPu2~6rJ7Uxc~WeU*8vUU|>M1xMdyojCVcT6<${!>We%S z#=M51;Y?fvi~#QjfTGKmRqb(l3$Ism3*A%yg`iw#(!aui=4>Lg@QBVL@wdvX*tb4S zC*~L-Wq5b*?ZkP%_EJeAF6o)Gr!;zz^h+=@2_c+SEA9hkms_$i5~2iiPi(97VOe?~ za5C9^60y*PC{M7Mzf^3|^TFrup)oH_p~sFaI8U5dsC~!s-i#V4R1~S1fL=SP4L8j3?J#)?>h7F#J4YEv5pU z|GsZ-RW=qp-vklxY)nmkT&*h(@CcB)@Exk|Qm4o+d z?=cj9+H30p7&g*B4A47NBnib$aFtPv}4g;YgMK3r8?H z+h33GsGs@@&PYuC_$H8<)v}mK-A$D)<_6M>>-F$WR={>WT?<|JJ)Dp-)I0SmB(EHm zy#ivM9=BXqeNJPg&gTWudb$2nhg%P--$WbkxuPku_I|C-c4>v6O%s}tE#dHRm%YN{ z7Pco`QjlH#*%E1~MGt`OoJXnak$355dGSnqx@e$~h8^mxsP8A4&r>2@*&pu4ey2Dq zCY^pB2cMmT{@tP;F?81?h*6XPHp|xV*a|J5$mKLwe*tC!YdKYVvMl-UR1oJMu*3_z zAYt;K*G7c=!G-kx+iPi+Ez>opxq+UoNBtKvfe#zg&wC9wAc+2Z??Iybr5)cL+}Xvm zAE%iXdC1?^@XrO24Ts_Q(hRRAucN2WVll&Kusi36DtMScNi9Wa3o-baDX|#*N z;%-=p_GXl2|Ii)Y9{WqF!oA~OzKQ(R$$!#0GTTGA3@qcFqqS2VrR{s^cc zVx^MsUj<10r6%l}RbOX&ycrC>&znm8+96l$*Soz#B0)#oO{Cc{dA_~c1GH112{1?y zzH^ZQL55V1h3Zz6^fiL~-B9&%kPO&XOzDCzU(c8_Z|0E{;r`+&aL_ot!KqjJIlnd; zJYv{zjF6&}p6YDSE@0r1kiN_6Uu^auDf>c`42?ZZxdR0JI&nu7?(#Jw8W1CXVC}C<<|y`j+UITDi(5#GTMQ77^7$|c2~GCGQ8E}`i&2H+57)P z)muPC`F&BtLw6(H-QArc4N6Ieba!{RDBU65-Car}-Q6`v=X`_y{_p#KJPTzl7c=Lc zv(Mi9+~+>yQ9kZX@K+XQ>)*H7G#Lt4+NH@xzx6Hubd9^@R$E(X4A0{Ive2lXjrk!^ z#PQ%kf09gq!v0qf4l3USA$l`}De4+JkPVzgyUVQQ@U^v_OH=a~OrJxjl%4AtrEqG# zIN|E9kYQ4P%!{S2q3efYR1vhDNouY;qkDCfz2xoEiusy9Osn^iqwM@5K?QK@J@yyg zeA$l=)9rqcQ~%8GXBF@d13mt}c1Sk!LjIB8E%OVJv0iE0+R;(N<%>iOJoijbH@Zm) zd2HC${5A)mZ(ZXHz^Rm0b?~_eKJ+|6fcC)x1aO$cz6jl(RhC_+upp`E( z(K(Nu*(Bw|&n{@>{#J)gv4$)TqhZ^+G^u!+1jZ4C*Twap=z{f2I>aer?f?aCD2w(-Dp9mlku2Mff*++={|>OC{@2RzpFMuoNLhRguFS82O%@%1 zH~gmKw&AW56!=s-xf)^rymm09wFeD|K_ME>Y6d}@vv4nLkD{$%`Rl41g|A>ilQ~*2 zg)ra5<$LDX7N7NPZ2WmACg;-m!VrdbK4bz%VOc%=q+g8w*G%K!y^VbB#q&|sXe(nGRf zSS<*y(SlavhQ@bA6j)~Bx2|8a8{AGNV6rZkk<^0;L5KHxoT`6nKlFRp*dkf9w#x1K zvU;81KG+wZ&97GXsC;OWW=6{IJF=QM%r5U6J-e^@+i7+;irJdOQJ5{MPb2ar@@G!O z3z{DB4EEzk>dgg!G9DfRq@=hZ+haE`(NZ=`rG44X2v^(qKHp#BPx)(AQognWY0JpK zxQuJvF~3vv1-bBSoisnIuYwgdy~y-_Owm7lp5cmv?C#|?a#0U?-Elwa{?R~WK~L@C zQ?2$6ua5jePN4sN-`=II(FNUq?AP3PL|6ZXK=eCCP8zGi%#dJ_dmIF`lv5jVJ}{QC?!nI z#-J0{-itdZfB=q;)3O;vV4F5>ax-tPqbfDFG}z}OlROi*89ef=`m&mH+bzZTvLIL! zlpRa`I`-#z;m4&>DWe-nG}F4S4J&Dd$-1OQ_W!^$aJ}*o-}pTjg2!wGJ`Z}t^Fw24 ziTn?XE8QFRe;dlhZ^naK3)(f{GgRtsdhz;ktf;>4FWM=!1foW3R%dZ`#RrVO0(#jD0VvExp|(VL+))C4)M|ITST^Qcf^U#YPY# z)C8Y90?U^aQET>S7RBew{5K=c)o&T0;nRnPeWNoagq}-eWZBW2~U1_A#Xt-vIl;G3Tqg+#b zds|#VdppvkXgATxeC2S|J7NnfD+ym;VIJNT69;3=;kej7LY3N|h4~j!w9nZX3NhDP zt>)Q%d6IAt05`&^COZG`i>9cI$&GWA=*UJcV@Loz;Y%*1(^nRO2@t{QULi&!I(#|a zpGOt_A~98HF1-)BrH9>%k!jLq7MLp7lCg7#$T4Y`Fj(~pqL!4gljA+;p9;(t=>RG3 zO6mY^qkVXUe_4I}2FyTO&Tt~G?iZjLoRb2A2Xnw{gI82cH-^cNN1-A)2AY8H6pwnGiw!ziHqU6Vuwp`@I zgp!M!Tc2@lZfPlkqT+Z-Rn>cGX_$)XHfjB8+?^eh!=t0#U*Bo-EI(~5m+K*Bnm)Wh zo;YaLHdK;`7{I@Z?c(l2!TCjx4B1+&{Q33m@X5UGk<66pkF8}n)UekxbulP0LMj+M zgHcyRuoQEaE96-H3Gr|-j9S2MGo^=6hpL$NX`&xzPRJt<`^j!@6`>eL>2HdY+l#uW z;B<=k0-_c%mwMZR@vj532-P7=9BIhCWMhc~Sb&`4c^rkd{Br3>KiBvwuMzrpTy#tt4kJ?^C&9<= zVNQ1YM?H1*>zkWA*3puE22G=`HVw_>0!!6*ZC(`IxjzUbF4jr&EN{Gx+~%q(E;8C2%D)D z%KB%>TIn7(4UTjAGHhaprCxSEspk&E%`OHAc$@jA*pdD%yu1u31Rawh2zv^Ejywku zCxQx}=GvDnM*3z7wX4$9yG%;K!c4= z#;%G*J#46dqeXCN4?F~L&Uzk4-5dI&0u>ZIOfZsP2SaA))0xvuzT9HPCw|G!0vR@+ z=gW$r8g!Rnw-|vu6#jS8%3lyA z4=E8xm@~MiGxTqX3l?{h=n?+r^F5KB;1y_We_b2IDL^6m=nI-qyc9lfdD+VMtj_Mm z^0IY4o`QXZobFa9+%_`|OsJ4K5;B#<~ub!58@n3hGe63tiv!xX5-b?(P%vKR1g^(DSADs=s?( zV`@P;36?95Cf|;fphwKq)95>H3o#L_xK=4E z61S%Q9>C1~d-n?(OiSeK5?BNygh_G@Zj?C$FBu zHFG$mHXT=6qEJeB@x!a+LxpJBg7^n0BAm6?R4dJIj-gUB)>X*tM#d2kVk(fRM%nwg zuzDw-w*KAK)CNyuU++6lwYENq!AWov!GFUVDJyf4Uz+P65xL%-?dVOzRa!&hODPz` ze7HyD zn#|jXI9tBu6Qh)Vi8V`}vgORjTd&6s6C1_0v8d1Y(|7u7!f^Fpy`!Me0@k%)N8a<+Y)AIV_*d^j=d_^ZC5j^3&!gZZWGx zLF|Fn=u_#3*U@qU;8DgaNh6Oq``^88CN>MecbIWn7CYATrXNwKQTEXyHA^<|tU#_Q z5_=;Q!)n&ln$t2J69Q@+!gdM8SEwG7tWJy>$-8YMbz>h2-EWWa_Pp$kAJYs=Z^wzQe-EIRPS<{^ja@OmpluS-Q~YF@ekl9mT(A$3VZ%3_!^YYmO%K6c$Xcx;eFq65z=p)=$c^CZ_bnp5@)^$_aye)%p=!f+j z9geoW8gI+ccDG*V1LdaoD&q4}g!U2sUmKx=+eo~=vf!SE0F$CS=12fyv4ZCw=f1_$ zCzLY)s+Wz11`6TiI7L5I?MXF)i<|OlU?sSKkBuw+i_kq(9oXlzIA8m(y>ckV&RCwL zzh6khH~LC%l}zyah(-$gI4)}h@G0?HHS%Xok!28ud7a`$SjeI5_Z=&ar5a2M*JT|O zDXPD2XAtam;HR;OSUVty458V6VazY@A&f$aM<&O}AzFIu{`}%&xp9SN47z&sPAj!O z&hdLC%!NnZtUG>Rp+6rqQby3w$l8xD$kIPYx)>_QSm6Ip?RGoa+5?!rBy;memkA@> zV0}sjxV8KC#_N!yY<`logAV>Q{mE3_)HF0X#mDd-aJRl*+-&Zz<&0XrQVu8)7JYQr^EODX)OR0n{>XUKkwp9yGD0-Fl`U z57&rTh9!QuVQ#o+d;<7%ZeBEc?nvK;7-AEDVsTd0<8b$)(*G)#%zadI3FA`q({Pn^hhk zjoec|n`B8}YMdn74~AELX*2)p<1ho?7X2ZOqt(o)yP$6XI>N5R-a<@s;qv#(D>JmV zwsx)0gHuCub3tn>%=kDnowJ4^g+;I^6*)ON@;wHs2OEb6CMDFGhwp`*i@Q4%U`QDA zl}sgh*znMhF6MkaA>^?;I@utoDRzNM@fO$V52!F3qGOfw>uplb(izL=7v*M~3du5M z^KyeYVf7;RzUxWF50usscw7X=V#ev8$@nQaZrL>a$5M-UZV6`ajnihixD{gweI=4m zYK~(VquHkGsxCO#+e`kY#qTXG2@w#wi#*VhTmiCn=T#cKtw1OHT^W@pl4pCO^G=L% zoCVs`!q8w~86pEwf@NJVFG-C3Cv3(Mg)Sej&h?+dA1p8njB@9{gfW+|s@E&HP>1ww z{kucw_?NRvXhVt!WD@)oxrHM9@NH~ud#$UJ&HS4i8jM$(Y!};H3Fj+y;`c^V`mGxC z?HA)U(c<&X$I$#$f+?sf(qUYaxEDQcac22pG%D93Ha4!D-wZQpA|L+`W6yGG)-%+w zzQZ%Z{!O6TuA1u=k4xqgb)q^~Q4HcJ?MFEwj~b-mq2J2q@iF0>SJu?!{x41viTPZ3 z+Ea71bA>J3>F<9V;uOl`5_*#<<`aR{OchW>?;t(kASV#_%bF_Hpzpa+alDOdMOPzN zA?=v8K4SRZgo@C>%|Hw+fo=_U6UvqqD)cV|%~P%D6#qs-KrU<;u=3&+ z&*0@Z?$o>r1OOO^wiPKu64c~GyWU)h0s!u^`jPniU8SFSOvZ7`4!>N+`@t(h287{y z`z$tA2wCP}3DdHl$|>2NmsLrozm>FCus+><4HU>14Ld5%dSha z?7vimhJ+wGQ@@PkbY3~XL?DHQUBkn3k({9lF_!jyLS+)YLb9;fFtS45&2aQbcklLu zes%Cz_Py|R!6T{G{tfmhEdiy=#SsLiViF-g)>q}U!oOfK+u5bzeU!EQQlQKg8^Xnu zif>p3ZDV}gnU)6r2V(>g1A=-5`-r*4aYg1YhCbAV{eSNocJID{_`QVPXCM!>MB|(F z(m3tFnY(2*5we;O>oB>W0CmB1+vp=h)3WmkAtG$uS%1O%0quojAa2Nes6Jo{Xb-}lYj4Nh6WD|ha)c)ld<{+(kD_t#1D1fqUsIkLFCV=we7c7>EDE6EZ;yB4+FEwE`JhWrt(0}zTUzpf1Tc9bi4>XNO!zco zCb*CR;@jFusfrRkU%s+%^Fj;b1o?zX5J~-mAUD|LBM~(7hKP1}V3G<|H-1^}uvy~J zV!|o0vXuIh>Gz1wcQrPf*JhofW+WYr1XTdR^m%t6y!shgpxtXq&}?w;LI|z8!w-+J z**07n;>%B@Zc$8ppL;31K=jR;aXp>FL&Y+%iwjbj?m&c^)5V zw}bqkqNkY4{T}#ip=H9X=~O>ZJBSZ@+|Vs4|JB4^^N@nrC%T=7{R3v-$P(M2Rc>Y*qA zC8qA*vk-$&7mB}v4n{yP9FXLdUzTtB8p*D_A3=Lj9@bTE{#wTkN3ZQkrHOU0|k+j!5=7Yk!z|EF4iy;%B}r;SnHp}Cwc3?7I~0U!?!t3EQoV%fv!*qeO;Y~35hM}88|el^G+ zqOLI>iXccoNXM>aQBwr2PLd&p&b3P1xLP$paP zGG=nW%x!(?PO2a3)LvM!(r!A6({cSF%OGNz;$+Ohf`;8=YyPvm25qM)pHO zuE$6-SIT_D!0Sl51K4+kFzNj|jxO?W?i9gfzAtI??)y5~DwYU1!CTot@fm>T8loDn zt+?LFXA3Paa)x6Ksbx(jfh5ds&z%n%llZRT>|6xdnvcq*lxt8X1Uj8ZNh8Se9~hCa zW=3n)T9kc6v990GyX3$`mR=L3r8<@V-Z=iW!vN`^{X0Xy*0i(q!yD#6&+}l(rCO!* zMzjTR!f^d!=8l!W%<>2EJ|9kOY*sd-8GW&VjB~0BBuEtfNw8TR(Td^Ka#|_>uSdiK3tk)Le0~~tcK#;tw>)CD_$tZ#! z?Q~pw8(Ti};{s})ubugR{`&+sR1`xAm(>>qQks{ZLBcq9x>b^XTx_slZV7Eu?-@wLB{TnNcGHT|GmI)3VB5L(fr7ZvI$Q6bEAkPN4Gy zKb+|E7Mgs%vVq?Nb*9i#cyjXCu?-?bB0h2|7Hym3L6&Ir0w~t8MP{(4Bx=9y2!&Ab zJMbas?Lbc&a?jai@7bl~3_!Vtz`FTNLh{K|Yt~O>gh40T?6<*WLAci@l4*+ODd@Sy zef`K^8|A3s2X7pOjEwR46!yu^$wxdngr`HCFX``pA+J=*V0?)BGTZGIL~iC|ACc;X z1Cgln?TN;Sf6(jS0h2JWen0~x&im$(_RtvD{&yAt&3aFTTaZcaYp}S}d&Q^sK9};0 zQ**wMSR|}AaU5KYO?h2K9DZn1b!Qx_4QF*Raqc^@yfl7kFu=eQk(4D|13>xYTIk%t zdHUtkXRo0rhZ%e#&3_7m{Fd@XTSO|VTer5_<{1?7fHpb8WbWhwUse80Q=G&V>_mPh z2d#ID6_Ah#kD-AzVPb3?r59*ccsJ1OLKuBNrFKCG{#1yxf4G%tLaeE!Y7p1VFxGgZ z^64xpT@4*wDMv=LfDawg8^yuF!7Wec20N^vKlOC1lOlS~%99Asr{?aPjSKpU%Q*0I zLRVh!r0bS;0C|LaC~^;9agR<21&?P3%F&dl=$_v(q#pM-HK zea~fyhzLeUQt|K*jg3EMxjz~#ZA-}1BiY`V*67R-x|EL9c+3{CNeLe#vvbbKACuq} zkaM!P?sAN{&fnLEtg-7-yls;qE z{0=i>D=R^C%vg{8LqBBia>w=C=&0pq6l;R>HFu$tgEhCw9-+BzQvY>PWN855O1Z<< zqZij4Ur`Pbd&2?~;_nv4Zeb%|#CrK6-4CsZGW69;yZzis{7 zX!U#BjRc@)(!oNtq{II2|B)Gk09(9i)pNS6<@i{}CZifDWW)I3;GEZMH$Ea%U6*NT zhgOD<=Zu9?1_q>V7k)6xLYH{@o_k4&`>X(>V~yGa6~IY~6+Cnw@ToubS{m7)S`Lcu~}`w_&-N)qr}Jn-5c?*uV68B-|7j3@_0NdX6NA%ICE4- zxj*}^&&Qe;vOy|EmfNSTAO5EdmC4Fh(o3xl3|uR33}jni6JmkN!Ja%fP40EbE%^{{8!@xj7hsR;v@Wm6cUgU3W(w z8wvmF_nRv(xFEjYdpQeWS*xuDocnd*qFoRVd@i?g=xuxC=dWVZQNrR+L&DK^W&O*W zSH=Dk@DKsOA0e}VJnSlzUI!F73be#Isj7;#wY5`Zj*G*i$W=-HGA+`yzdMkG1U(^# zbktB{wOX|vYpo8V&dRbkwPj^|4x0c}qSW^5x!2sDD>y=jt)v`D+ZkA`vv-zv{wI~q z=P@5BY%c`C+ z*5dfn+8?bKBn7FJVKFc;P`J7XC=d^u*~ywoy*QDBH+BF42l{C}2{U^z{RRuJm(N#| zPym~m{u)<=@06^)%#*jXFP_hfo(k_qZL4`j_O`|b|A;k!1|5WAQzphY3k>|;<@lUZ z6(O?ZF!=_Y<$$m5`m>w}i}OaOlwk-n+^MXDB_pzW$?e1G0*~DU84n4IagXgtT8G`A z7(be2kUZ;#b5XnRv02^SE*!Cm&cDnd0PzbK2MEzMckHT@;_J+#ZZmSI63F*F-?JRpdF}(T<9Ey1qi*~?+B4M zm@mp@?g=Lsy;PxA54W%k)>wkHQp( zSIt((7d-`{yPhCHz#AFv-irczq1bqM!nByeB*RgA>ng$?j zc>jQ0G!$oYJvNitaxLWa-Fypsh#Up!@|wn_&16QN(^JUjUZLbnN*84u7oe2MxLtZ+ z23PdbtZyKNs>?u@3qjPL*?*_s8s)4Ry;x5lm`d&4#0V7c1LI=yb|dRnSxOCSgDhcr zx|1XfdCU0jJ?ytE!{we*T4EyK2WYp`#Xudq)==8e$7OTTr_VmmJEY-F@-0`vvR~Y5 zAydIChb4qE%nwKliY~x4bC}6?W&3d$4IoQci;aPvnsCi{gQu|6f&m-N@E8=hGQ z<*-OP<2Dj&CUPSh69Yg6@qRH!FW_VF+-nME0F2_k-t+wcRknx#1U)ndg0-S%&@D%k zKllQjH~LfL6EHF-EUk=_n?YBtUAy~`2^d<0Lu|mr`Fq3Svgr1lueI0ugZ#4bj^#J* zhj@Xt@xI8k%Gm=aAa%^}b@Qtq=olE&JthDJ?2k^^eqP3y3uj}q@d!%=5CKNZz)_f( zEa5RYw16ExKF4k7CYz<8wRZQ(&>n4Tq00d*KHo4gcFEib57w@A4=1(g*LO+ZJYANZUO3VL8IeC29rxSOeAgm` z_Rnin$Qhk0;FV*5TQ4fNVd$!uCXc&@+=S9>BpVg*tv|zYYmcpCYEl8fNFx}fi0qVm5gLn;jKw5str|iM|&>RU# zqyCA7J~qt*oqu`_A&&L>& zwt6?O;k}Sq4Tn=w%}YJ_x>I_hrGN~$X&z{6aSvQ0Bn>Ag7D3Ot7yF5`=uz`W^mWf( zueTsxB&s;u3$dV}04Rh8_^MQ#m$)68lHHmq?2W_P0fZC*JxuQOlfJT%cx*z%#K-S6 zZA9$2c7GSMs^9&d0R}pJK#ySeNcB8sqt7?M$~sIv5UDvp&JyA?%XW?vMEPSxr5C~J1_m)eesriY#b*6QPM z(97>vK_j2}-uqMNY<_-JdTJiDr9}av;l_+_i=FI|HhtUQ50!vCpxK`+F1Q=JKhmC$?=CSq?Fw<`z?ZN7If(rxS?fKScWmIPQl#~H zq|wES$%hJ)Kk`yiQnU9QIq!O;h>Zv^+2zU1MjoQ66KYV9sTILM2*ae|pvRJwMWSD^ zX@@+W6%`7@?Yc~2ad<90ZXik!AY5Hp-P7p!?2GUzL^UJsZB z+G*WRMG+1Ey2KZ9+ZFP8=aso!0eE8dcZD!#Oc$X z!I;mI9G{b{FaSGX$8vX+B&rI{fPOZ+=p&+5Scom6)|~VA8f0W@CS+O@JUO+ddX0a5 zgQfw_$*c3Y_qPvr7wa4AD{dh2rY|{LP~uW=Uk%6=0Gea;Nlli48@y z^Mh7cPh2cQ$3qdy&mzL|O1Cu^G?tEM?5b?h5iAnp&p7K&^*z1Jl!_^7Bl5ag318nM z3s!fdJ?TIB*(`bUYSfXI+LLrf^lQ>E#9v}I3-a%5b^Gm8&=d(bfk?JJ%05yfn6u=T zqsuWW-h z!GwP-YL~(&LM+-37Z~yOWs!ylz`CKUgjo3GAenO+r<8PAkM*gBInp%^@4VHO67}>0 z6rjQbb7A8~e@x_=J`t&2C=%kyz3{S1hovWRynVDoh&+$0=H$_RGuay?{QKmtYVlRi zV9QxlI5JYg^2oCew(EMF{TWzXuOe6f621)57A1|V-lPllY5f?;FYu}Fl5q|OnheHp zL|colmYZ;R!d3QEJ7r+rCck`m^7h}QEcMbq?%wR}xj?ubEcUMg3a60i7R*8kFl3=U z8TQKoylV}p!(DftL@(3*Q|Ts9kUc6ik^VPIaH8&;$muA9pIxA{MNN!6Rw`R|ghB86 zbx+q-u9eb|P{;hkgyv&YWQ^W}UWVCE?GkoSWam6VTs3gyCs^ja z-)Wcr6ffKHDwkX1ktsTlybZG(WI~#G`xuPsM|Ojk?|mZnF#nX#VC*n+LW> z%35ur3ukAkz1H(jMt~;XPv;tUbHwiFFa#SVW!4s(B`mt?b{K6uVaL;*Pb{yS{+Zzy z_20wx(nnhF+ezcpUXSo0n@RD8n7zYm9Qj~Zz6ps7NBlM4;47kSc-#@$@Lz%ah5@M- zD1^#gsL46~k4L0pPr>Ta4W=dp7v3hQymsv!Ke?gFG})f@-Y2a6x{~%eu1{GE&xUsMXl{b7kXuuZA7!p?{tzRdvHTU zU}R{8+?)m1Vc)4x!VjFxsYZOF#k9UEMTAtE_7T%J6gK%&5GdFwQ6`^#1e}^a0MJ#H zrvQmny3>FLoVksXClr9T`ViFgoTGRHj`PYCprOo`lg~iX#BUQ_Z$-kjKpP%jShTb0 zN7V#w-Jdl{1TlCN^0MZ_FmgaYKmp=IUdj!%G&o_$%E$qc^L*6Cc)vQ{X+Qkj_k*Rg zSKQc8B>Z?k?B3RLv46$3yWL(LtwUgT* zw5e_>b|QCQhK}eCmizM2W9rx;a*6JgI$gtbyG)WyHKe4MFx$u}9ByQU4+vVAY$&m* zstB=>V1%C;0~ELbLX@$LOU;t~Jr3vmVwK})pPFn+)Lz%!uRIsudy6-lLhhe_ScrSE zCut2j(9bqCIm4(bcDU9>m6_ZF{)`V8@8`L-QQmHPk<=3XLQY~rHuQ#K8<12(*oNqC zTZg|td>H=(T#!YNC39{=*zZPQlb4PyhR zgZHy<^I|J+2mwLP=r6h?S4j86SJkN1Dm}!ZT z3L{cHriOHu&i1^qcF1Ed7bGTh%8}akORjOc0-}@L&ypj^OcU!;N86<@&%^=1QAO zME$}?%XuF29NYEbndo}jlqfj0O4OU1_mTjFVY8t?^rN$x?ll|1gWZ+QP@lu{fWvZy zeluGpdqNbU^|>?Z--!o&Q5@^(ceOvccaV#~OZiGbB}M7R_DGA-&nkbS$meVRtobvB zr2R^Ol&%d^y7|wtu$k4OSz)`yuk-x3)u4h`BknEEy3_Kl6)w9GHEro2fi8Oh6R!EF zO^qQi!|loABEzZ0bH!rqo?9ELwN9*-NyPzLE<3Vr6+q22;DXA&Yb1*+0f>WB*rm$M z%a|^`Xc2k1#wPK%f|R>doF$tk0Q#Uz#`~>K#=qBuLK& zF#x+HrJdCx4rB1!QefVe;zQ1gtgE;h_pKG9e~7JaPctt|cY~-q5!20#@_dyyazS4( zmas`d40=5fn>g@SN6#013IoiaD^IE$4~@F=PCLFJlS1dCc6=;_Zb`DzGl1yAaedd0>|Q#rMWozw2`zh0!-E zX@xtYAd$AD&TqFc!^iuvub7lXysGD1#By%^`_Akjq>>)f=IBNj2iWdY*{!AwjX%w} zo*B5&5t+PE@Eh_(*Qx<;J%m{u?_vo&3J< z_bEksL_`T3LdRA4Gn%5*ht`y@%tY_oTp%?(p|x-3;pQ&C5ES0CBz}Kl#}N#{=MLFu z*}w7_PPXso;clwFOQ;Ks?C2>(fRdAcHhf0$@Y&VRq(6;Y-QT}qCtCg9*DEYrK^R4j zk@8^?Qvx#Sj-^fD`fJI{V8!e2K=Mc_+pPy_ZWX4d)QKmLKQdVNOXd7LY{&fntIh04 z?}pNwd?^{-h0!|n-*#^Xi_Hdw1$<0$Sg3Xz)oo?jWJIZ4Qe}0GvxSUIl^EL`9s}2> zGYEnWV;m$tg?O@R5`jBGwxui9*NVKC)aEAiQBLa;8L{@v;k)-&d7_@wZcn?+b?a{j zmw6{3y#9GEC+sx@#m!^ zU;A;9SRHr&Z)lJxLX}_%fr7Aaj9Sn{_9(qe{YZ(wqt*Mihyd^+q@Rsc@SG;e)kUDn zT@Xrt%jQao*PuftX9d*plG)pZlWqj1Es`i4KWy?Irnrm5+}S({D6kvU`jj@jL(6;w zDD7751wVi%%sw{wFvAO zeyNL*-;s_{6vRtoBG>$r!0MSg){2+GV&YO3Q`&(P@B55_p_<{=Ef_c(cOFB~NdAJU z?|yc1C7v6oa#V&7+%I!4H@T|IFgrfDQ<=W%osDkJu4wgXo3drcuUm`0-$0Vv|

    SL}CUHuNMWrgi&lDI$Q>doGuXWtWux}+I9t5ODXfqHHvJtO@OZnYE zZRU3pYR-2;NoQ5~p?Gb%7G*MZ`CP93^rT;9b3wM`3@;uwn1qXq@cQ_h2PoQU3g@?X zPV6yk-6ZC6DET#&zSfa0ELM_zwMDT0hwZ(b=5X2!xFDN*&h>mwemKJ{`@jNC8erd% zrAQB0s3S7&+HVsA4~icEDh9u`$3ok?%5I8YP5(90(u>Gc(AcO zMhCmv2D0Jh#e^4yA9mFt-L`FN%TeJhub6gezWAT5VL#a=qY+@-U_)%mce}%_-#k{< zFfUyVmqTgpS0O=I!he8TY$6Y=B*bjFyB&8vp(|uha(DFl5l~+MBjoRdxZ!7nEXptN z3sy{OHoU_Jcf-F1GSw^d_Z&;c%Lra)l>vg!k|m<*6)zsOX6`P25*c5S;fHJ-umzqQ z04EY>cYvqzmC(YHl60ee_vT6;Q(3v@PfCQ>3?t}eJy}oK{ae-R6ud5^xIOT8l}m4f z(BI)v2tp8}zt`G?&*O~EZ)@W0z8i$U`GA-*ERWZ!-IL7OnAS$(K%2jH$%9gZkPvs2#>tYRg zBnsiTmZQhm`}l5GMzcStG{tiF(bYLa2EJEJBP?*;loZFUcYp`GuxiLIxn3?OAF>ik zt9PB*tef;G1_&D0n3Z+kG)v)?w34dwsJk`A!GmZ%c!ZwrvkwbJSQzVbtFBrWG5Zwm zksoQH_;_ZpI5YiXsU|Xj4A;eAtiN_P@AMfa3kGEYP0s&=gU6 zR(8-z+JT}dA?7cfwCTY%+(MPedZrAfM?3W=ZPkt}O+NQQEN{hdvQazbQyENaFQUP_ zviloXlPN;fXhO*Co*N(+Sw2IHmn3xG#60q?h!RGw zfFMd07wX?l?^hwAb1J~yIokJDxkBufIEAgBWi~793;pa1S5#Qj=~veFYjd@}vKa8D z($qgI6{C;aKFg>fJXs(I^^?~{9lqBN9l}P{c$S0iTi>+TOQVI#t8rArr1;-ifQl-E z>p+8!1A>mHY-=(Y2iN=vG{56wkDF(vp`sC$bW&Ih4A-EHnF!N%EP%IPIvRjEYW~Kk zTBq`~(!a6in?(MrhX~SGGBhIU*SdGxGzNEA7#Pg&pbROr6N7xmk8K6JaMSI7Mq0$m z4k|v6x}P5%ii84US_$RBa;Q1U%n;T;3hTe1(3+&OfHa0aM@o>yrWG+{Qnj|)Ari>y zvpbFsX!z}MdKB%kned&@l|TLxKRh-z!Xn87CRVFS@X753n-mabml9Z&p(o04N}ca_ zz-U-Rr^?0kyD7{R_*qFxYL?}VE$9jtdFb$i)fhqI-Xf07%4`^w{N12eLNaN8zt+Ne zY3H>NQ!R6Kzo#}#*aP1l^_!=%a_qQtjVD{gRsTDsj=S?LbVxjW*6mMdIX(3f*@n4wv zP$CR3$9O#SjdYdb(jeCA3H3@f6m?vTuUxi+JV=$LBFF09 zaqmyWQ>OHnF;0Ils7OY>Xf6ssa-$6Jjora=@sH{>ulI=o|Ih5H%)M;pV89yO`7I zm#iC}%p~^<&3~krBy=@c#HazcWhoALs|0uxXqgz9pCm;8>9JJiX2v{}E_5clh5rFS~U(Za^S6)6dR*Y#Yx^_rYWisMV zAGF%GI-xMY%54Hrkc!^N$HzX?`+yr?J$3-~Hz^UcexPxWC)( z_r+u944@EsGA`n<32fCy!qAN%K|B6U()+62JQc9rdH9(ktefTLu=~sur$4r}7)tc^ z*Q!>aI6Fq=+5$+g60ncgBMcG{N8;-WD~2XA=(&PM@{TOovDb1kjr@j$OpUGZt6Kt` zBW^HwOPD!JGc=e0`}f^a4LCmMAfL5#c>iG1BxoqbwJ&LHD{VKo%jDV$Ht+$iJ6@_u z{qja10&RXv@L0|%cJp3qS)=e}2c6J^|JboiBqDut0b{kYLcU)hMFltlOFKqskuYwu z>|lH1hS>wW&q5_?+7_;0ga&6Mq=f%~rBDP>sy=>wP%Y~g(~p!-ytanrldr@xp`G>o^ckB{D=7D9pep8DX&fucb4>{VDPUbj} zywuC7UiC&${L4^Y7yr7$<_b8ncYngl{RA-qaK$oeP)KWdsI1tCNYh^ajEe9*=#a3` zcAY%YI@RObJKdg?0dj25g~cpeXk8A-!>oHMbWc7(7^;)NKLqnC2T+D?5Nk`g2o>kl z`Hd3vhHZ3483gz`;&Rzo6chvsZ;M}P9Q>dt~9=Ym%l)O_%`asI?e#YB>P?`Qunrw@8V`U0YW`xz?Jz zl=Y`2EC*jGOC55%%W5JF3>1>LIyUKU3wR8nEBKoou?|!!zG43Ho2_ieb+P@)qvLGf zibG&r**G%Of{kx3f!DE|SQJd(W@uS3?(%_gWJGL4iD^)teM=wi+!OYqz8V?wtR|eh zATn%#UIym65FI080v2Px)&(FCfV04y!AFmH{BTG6lGsKo>9J z4r_5PGIyn1n^3^=IROEez_{}vej;eNa-YBLs1@Zu%FlEebBl=F?;50tG$^CU3{aB zJDp7L2+C;MdF8c*1B~GaKkpt=Ws7hG+IRDXk#=!Fq`Y`zP9t6-u045gmr;=hlnhHj z#0~ePL|D*|WCwgt!Ha@w`n3Qa%NyMO#y^doI<^|=atR%ByR6-8aS_J4BNQn$%R6sw zd_Qur24RxaMN@U{b2ovAL0%Py>KB|>9o0gNtS?RW1;x#giR(CMv-Marq)&qwQ5|N# zi`xLH0=Ep=?o!#*PZZ-MswWA^K36&OMR#NKrMmq7-PIi@U!~iJMq6k}XJP@(PBO3% z-mdU$oi*F`h5O%ld2|iQo0|cF@vJ+_q{6YaM;ti=QVn19yP}_N@c~dtJqwkvU8ry6 zFrCphY=d7+mKrkSX2Za!RD3fgzYs4we^R58ed7B)?*-<0&p#0*)jp3KU9cydj4N=a zHC{ZrvV{Cf)p4mBI^D?uVL@sULuAcOaq#vPZL!N{Qd0PKvrW)%cjOtHlOQ|9Zk*bs z`jaA}_NIK1!@3A=AnsPr9Dr+I2q0Hd+b7#DQ>{)Ar@bkcGs1e#p6XhB4RAU(*D`;Lu7{s(HmaJ!WF;=U;>n}jaqCTgGi6zIL0j+nyD)5zmq1s(yCe5a_w$v0 zS}u&n%5oFHQ)DmSFd`iv=8SY?ZDwF(N8nPO*pkV;yi~(-B2FrcoB}RPq8a^LNr)@J z2s5Q$Zf8sKB<4}_#f^Tr_vZ0L&raBnq|EQS93y>MEwka(>J(VmtB*j%adjBeQ#IJr z)=?Uv*#T+TL-((4w)CLq*`+|etHcas`9>K>oaYNYXQ!R-qzV`*!^~&#&<|>sOzIIZ zRxluLL335_$#+!PFM~vz3!_hDgxC9}?+#aDG*wzC3gD?8k`WB6G-w(Q_gsq$Z3kIu zCWT`A1Nyh{b3hM@Y_W6k*HSfdydDVwpF79YZ$}=i^r5cix*9#-ZyJX+V`*2rS(ebC zs!=YKg<+JS!m1#=55{fif(JMvP{ocoa;craR|isf;S+1W2a80a>%jFU7cqehzwQzt zQFtrM*Z4&xHExH=*I}F<(${%KA7d=lm9{yQYwaUQZOhz4#IZ!GDh);-=L#S-#qqE1 z1#nf;zI}P?h#O%Iup_MV96}$e6AiEY9#6inZ`-EJ;z%4-n#J*(1fN>0ZU()}^?kqU0-)(?(KC>gC5SB42ioiUheCFhc-5^5ncZ+Nht@ z)&1&8!(nN~hJu;|`za{*vd}vFct>gl!X1^m(+PY0AT@$nqDG&-NdMe5Aknr?T01r4Hv|Iwjfe+~j zw4J5hC^>=kswKZLw!70t7s{-=-v!$sS8Jk8KLV)58%Cq*9f&H-&NXUi@Pzom(y)vy zA%^~k4az)t7*Opt0{dP@DMJBY!G;>PM1P3LKhk&%Xw=4ZgH6T^&TvsY<^GW+qN^=} z!Tx`W&WKkG+PA6^$D#6rx7t>EE!!NQ;F+;1%CZQd_;i;D5Jd{Y25r4^xHk(pQ1j!K z-?Pn1=Ss9TWyYZf6P9_f8?djkz1o*NHlG6^5As;htKH%&`|tD?HqZ`-7vgo7UO}E<+fJbFKt-fXnK8vi1zH9N4>EiU{=KB3fGbvF zgW)~QKo+JCW$4lXN~)66m^j5T+D8D|YjqZBwGaE2ea%RdsXAMJ@S2;Qqzn_*A}@Na z&rK6NbvA|7(+x=MIJvT&C0z{yt~~YTxo)d$GmNZ7w$M&Zg;C{UzuN-mnuP=UoVs2* zUfGGlN@sx~z`F#=q7b5Zxv>5OLS#6Mih>{$6f9>*!3rM8zp;mb<#v|z4GoA`sft7c zHrr&%Fc>$5yz4a(_ChUPCQs4FL#^ufE9lsi0zdU^)E)b~BxV8*fjm~Nn=Xg9-rW^2 z?amA3E0`r{zSc%|%>G&B4Rbf6bHp_kzJj_(gjF{4d2p3>4=V6PB%-Y;L(pA(`rF?# zBbIq0AZq55sxpbIoi6#}z-bek0XXf+aRXH(#Q%7Ufy3GXhlPQG0rR{D@-`p7eRt#7 zX7_Q8kQ=Q;jS3=m%U*B?j@8UJcRXsdMq;FisoTGlMd5OfxXS5_Of#9 zR*9$;b%^e9F2bVnu)?S(PTHNi^A^B+bb6Eh{9xZXwDpVB5G+ zh-m1a#2AoN71C*{+zG9`Xc12WWi#7$@M@aR7 z@xHa6t~cAmXmMpk@6~vx1COjQc97s;M88$T)MEzF1LPsuBf}hhq@z`u=UO@=1mbAs z+ItN(LulVK&p`Q#r6~q{xVtCe5NOExS2ka01 zkp}WW8d5tE&>h5ZPSh5CROpquN3t2(T)q9LWVGU4V$e~sb=gd4v9 zLYq&m%91N2=C*|eJ*nLA4&W`SgOtNe8?IpUanM7}yxio*_wpe!Z7|Bkyt;o$D1{L7kcVY!igKVO%Wl+;==7n>f}*9NYS zj)SWE;J3H_S0k|}(RJ?tTBD?gHV*x2)X*;H1&p%WSor7@2Alp977FxRZZ>_C;2D~) z+>AT$XpjqBI@ zPZS~r!@=`!-&hz9Dn$CRTaY%wG*m&? zm`NSBmsI8T2eL7&=vt9wUNNMEK-k2n$IElAvqHy}=e%sLN?V|OKsa4C+c_QN$a$8U z<*A;^0(fxbg#1434Ty+%1o{_4(jdWdG)b&(jRQlI(=u3(Q?T+}`5>HEy<4LnOn>|cHP?wLQ>(Q2B$TAh!U$qG4R zcOk6LC~Y149gEYs8SPXS7zs}L?@B~N)>#-X4Djlw2~z20$FQmKAi%;y``>}-`C-2u zl?$SnR8m}A3%xu>$ak#*#)4ajtDAhi<4str$?z4pU}9LbTe~#z8{7D4rLTt{&D&D# zFlV=$+TC~~y;B=@AZ_O!=&RHwHUwGGR<|)Uqm9&z>w$OBze!R;)W!B)X6fp{&R%yo z1titLrC%#Zs>3+QT7?c)KSobTyY(KG)$qYM=7@+AsC$IBW4*oS<#@QX~t5Vb4F2 z5f--3tm-{#;uORSA8O<+C@8c|{{e(d_`Y|gy$#fQY2A-SDPcgI4#!o!j#7=J7Cf=( z)_)Qvxp@pr4XNIo_dtREV_srobFo99#^!!8=qdxYIq<T9-ib->k4AMd|8 zfy(%0`L_4X<<|_RR~}^%@L<7js%$94`c?5?a)|#WXS3rn?B>Jrntuv0vT^WSgX&x> zN}&DCdp;jq?IprRO~K}qp&Rh1jpABJG&ksEtDlOzX3m@r-4}tkqRDF~$iQUR?4~yQ|}dmET8&l9i8#CBSV_PhvyYqhFQX5O&7M zE@SP!^^K)>gHV)`p9S}n0eFh1$Zupez;O_Ul5`~f_{RqwV|wJx%}Gf?9dJL@3A-z} z&b4oyrxW6!x>hpnLyZ@$2|~r14ltMb61MqNofS7(l?WcSMJ@L(#)4~PO&vGv4Q<7D#4LXD2Pp0ms)51xT-;r$2uw(N^JH<38`h5Vj% zcRO^a55DI_BoDH(y&V?RX4Xbhz(t`lL8RBImwCem&VQw-`?ckN^uOR33YzHG{DW!rZi0J2VH z@VWz=kbAQZ^k9~YmlJF}k?@Mk!DMIR&ff?atp>sb+m#3ZCZPwL2w@nm4uKT*lOZ?? zioa1v2~%)DS517)Q>o8;+CP47Q)wP->1z8N%67a^dBV^-r`1tXJu7Xvyvhz&H4@SC8BllAYgQs3_um9Y6o(tfYp|#a(dwA))-fH%*@T?)e2g)lyOB zn_kLiUC8Ml@hJ;|`HN^0j>ZY>6hm7E^K`+y=KEi(DD3IkjNF<@t2*c!Fy%)dxDDOd zYLM&l-m*$SSUY&Nc$Pl+J~0d88~uGM5@dva2^GTQzQ{2OE!Z$rX(? z!O1m!!!)I7?VU(0Tn8JUx;>|vdXhiVgS4U;%+Z>s&u~*BP~Z#@s1Woh$o5@wb2O!2 zU_^mK!1&Jr@pFGXTmrPv@V&QFqqb*DtYpUW6f_nTDAU<>Xj!)MveiEm!yvxq$sqZD zv!-+sVasF%qA(`rD%D3FlgFQ%!9O3tA8+?Yh3j-)n9kb71;}N`S9dxgnmlX=!2xqf zI)2iMU@&KFgaT6a#IP`?a~WG9tL(`#fJSoJV9Tma^dCUFp0?FjJzv_o_~x~n`{AM6 zRKYX+SKK_Z7IoZ7l%&o!Fe&A2H~(5}%abf^$9VUSPVdZ#zah(T&dvd}TS&s2!tQ$Sir?%I79b(B@UxbVHxsGM7axa9O;5KJGKF!JrXNOj$ z_H@=QPEog51tJ8815xqT zSNVaQA}5=*{w+c78?}wqae`$!huVcqQ+)c>c04H4dQviq)xJ|IPs~9(=kut5Ggk<` zodt$K9ktV@GITp0w1_H_iPS3ymlhrKh(W~@jY0eIgj!i4&u58Uk5SdG>l;T85k}|; z3)B0(^BC$X7osq_KM-UT6p$*n&>cc-i2$bH>YK<2Is(RjGWhaa#vgL{ldtFL7UHbK zJDc4GoOeCFd;RZPT(4@xTv?a9OT@ksf6iLXm(XHT>m}lQO+-ko^An{|gCJVWvvLh_k z-SDHU-WhPYA*?aio8lUHKe*`RoC)1ey%U*^w2*$-vwN8|dwTzk=o*G%XvUVq*G~I; zt=ma5!s-+=svPT|mf#;^{i$8Oz6(PPs1r!>>P#?Sxd7-LOGU9D}3hEJ&er7@g)1Nt}19?KZB^1rhHZ@V#KH3k-7$PWLTX7tArr=~pi z7qPSXd0@x`6eV$P?Uju#=Bd6pLN(E2)Kf7@_HZy{l~`D`WQXn0w{%G?&84QgvI(3S z+O)+?Tf%V;jx5wjyT(4CjSuP`@-+u!qv;0MmL_7h^A0)o$8p`-DH=J?hgmkfUUz=R z(_K@1aZ!VuS=KKA`?Hqcz$Flcgnnm_BTojs#L47ZI8GoNAQcuJ>t^M!c&gcq$zWiM z@w+YY&V6F^(dQgx8wzbt0^lgY`;K~l{-rm+JiQGTlLe?SOcCVU7g;H;ssGK6LxcvH zvEzJr8IHi~=~5LoL3@#&IcHueJ%KXSoIfnFzX{BTqxb|hpa<}N0Q8&f@$5xfNC-J< zVHVKfvd7B;PWFvNuu+xlac+-`c+-_62Iy^5=_H2BD9$CB(W_iHY<@jDDm~HzQNRe4 zWX-nn?u6@R>!anys9fJD`iKi@sPPsEb9#9|WKdvCC3>?Kf`SxR$^RK`W4Z+N3%RrT zMMBM$6}G~N@jLd0ZWdd~YY%TSVEam{p;5#7dgC8m`;%09Rw!_%kXSK2D;gm@V~^hl z=}9gOoxjWX^PJxA@*3Y6p6LHnR_V$To9yU0w)H(dLL=7T{2A`oU#yl0Yroy@s;f?@ z<^Exa4vxX%zZg!M0epu)2R{?F@&)S=VznF$#kTl)x1HI}!W8B;a5ffd-i={tt0Xqm^Fhvx8U5QII%(MSv_2y*A&Gh^N;8-NRkh>M)%KYG^@lB}`>9j7ov-fj55>@tE|t=;S(-cJ$fk6#3jSe>YiBIvS^7 zTsXUax3H-WkiNdiE+!AO>(|3H>wn)1UJss7n%FKJ#gf;)>weyo&K9FM9s?!WLH95W zVJU-WijQ1upD^j3F!6OH5#10Jr5bQ*>*4+`-oX2j;u_F#z}${#@bHWJIXpaWvtBt% zX6c6i@l!nB=(|hcsCjb3`9lJSnUjbz1%_+LM(6}=q8SC0&9@oW`9@plSS~*c$q-%Bf3pNTAtzqqh=hT{J(f2F3N)pygM?1;YBK)We zro_A$u1dUZ0bypiQ{Y(3OE=;9y56SKU*FgX0CEs=P+hPMI4T6_=u=Zu+F~D2@*v0= zF6Kg^k@Jk;12&R!{d)hBU&+YLI})E~s`FM)EV~YxXb+p3^#`S0VxO%eBy`BddiKzT z3!U&RLQFh4AoY$FABRAweTNr>)^@7S0c*TNRzGI9QXBD&!IJi1`9lRpwlFsw$z#K>15Ol>tJG5FHzb!-lDB4!T)!e(N*#c>$@ z)<(&AxD6Wlmpj*}7gQNnm-99zYP%-gOvWE|~gb)UCcC4@4P2Vwx+>_-EL9xfGx;5{EP8!=A2 zqN>eyy0-^_XzU3l;&2??8dP|NjR-#sD^l4&A*@Jon2{ODQ`usHe;i5vFrY|f3njav zg=L>AQ#^{7MH0-HZ}cJZ>;!YMG0$nKmLSS9xG5ngzgAGj~^`jpJh9u|;I_@usi`G9WP^ zF^T1eVkx<_Yx)!$)s>Mp@pD7mTZvHy>*9?)FMD;y5^GE_9Y;%^HRbe28QY|XalY+aK=#`|0%H~+yjwL0FzoXH>JBM z7vg@7r9=;)>R62)AjOQW!A8YE&K_*M{jUt`yB>&f#cVo9xEA6PY7#rC)QsKb3(fW) zHg6WtD8C6#F)@xL+Q&;d)F`o+TU^*Y4^q35Fm7L(nwep(z1*QAXt zfEIlm1ehsi8}Gcc12R%RtfbHN%=!}0c|uBSsxjIw{9OATfYx&tD2KfoQsP3-{39SF zEHMz#B=4YlAsHh*?-F40muY5ASRY5LB$m`&XD0ROH;*)j5~4B|>n4T>Q7ebnZA-cR zMH1)fT1CKv%TW-N7#H+V7-ILN4;pDq}z`l--Td$Do!)C!V4 ziI|eINP=|;Hl#|%-aLT{J~w3}@13QEuAePiy0riB6qyVAJWoy*sHoXIOU(-UyJw-o z^%%ZMtST#AJ7kqPnF-@!1#A)O6ak$VWN2N$Zw2ZU7gPufn3Avntq{M3a_IiX06aFS z%4H9~whGwclGpRIi557tzjB!`viCqx4}+#G!W%}LLl}$=xo|PDiF>{n;}XPrWo7Ro zRJchGAx5rw>tI<1$Rw`5<v zXzxJL($y!QLVG!T#0d0ltbp($d0L0gzTcuEm7+N2FY6bcwjKmozD@d90%A}z)R8S< zPr{fKELEO&h`39PFnA&9e$>jc&lq>Yg%$@>*6Y|9ZAI?Vs3qQy4oRV6%OvGWzy-&v zPwj&%{r04*nSQ1<5x-zCrMWo(a1w5OFH^l1BE0e~A`P}3Xej{|Fh2zdf&F8O<~f|< z&&hemcwhA656VL85~OoK;Q|fQjZ1sg5Ur>)25xoY!zQ|_{cHD;1MXD%+a!!}llhGi zOp8Y?LAD&wMMmOpEC5}oE~+n}diMj>Z-wT*2i=oT>)s~68gDCkOSPE; z-4H%opl^zA<8eXavypkT5vA_b3Y)Nzm;-8kK za6{+13JjLJS{6z)(j4J;^rf0UuXxmC*CJQy=~g;c5Y7v@IoUpWN5b?B;ep@vE`Wj# zJdHuVeFIqA?Sptbjgxoa2o<(H7x~F^vEg0PY;ogk#s20=SoDV0CeC6qnv|q2L*w44t#vR z#WjBeW#1=pccnhK6Lp6PU~=u)4wTiu?4e>6UizV5f4-@6R*<8&&kHhKcMDny zBnCxCFJULR@wUbTuh1!0qcYf=Sqa1XIdeg+Gk&j7m~J!D*X{xdWEHzww_5k8@5e}G zgc<@k(o!Xl%cd$v!DnA~nAMBR&rChqdvVI#hu^1byS9=Qa~*W%c`^>S)i`hh`Ai~B+Vp0jcp02z%BHBJmgoAd0m3a zWW{%n{x0cu7|bbj_680^j#wR{)7)}3ks`&s_lIr_~lx$=%czIq`A zUPw!$Yk0+>+Zy22Yo3bIy}cct^9krk^AI<|52EG@s0H0o-nZ>F?&u(}_YO@77!^*# zCzP?~__P%-(mZzI;}V$PAdY4-mc_UlhHA*wNNf*&iPc{@r1>?A7{{d?s?i?Ske$3k zkO4{?(-UX7c4PYW|6A9FKhC?6+{Cbi8s0E)?$ar8h&$IXH9qz#+LrMSLc=?b zL;K!(?931hlKlyP@=>cXqVD*K-|B6Q(M^(Xc*ZFBCPU4-8ELK~bZKMVzt=c+)h0vZ z`7&DU0sI1$(3z#E9VoBqi(wZOoVx;zf2^|(2bEh_%_k(H|SRE|$KF+tzpVQLuXehgRhG{rEcm2nW0E9i791j(u& z7rfdrJz6QFTEz?ZdcmK;K^~Tx{zn>RN zFIggwlc{#Ek!K!%33n@tL;Vwn4ylL1364bhg~}5*e*J|Oz-G)=Wm4$kKHbD;av^8C zz55mW9QBb$CqfQh4nL`NkR-?3E0R^Hee5blKLK*+$wEY9y;Wx^> zOC4kUe)GY&T>O+#)u`~~XKVZFg;aA4W5y}h89{_35lt|LE!w2ixX&G5KGjg(lT zc-1t6U!L1z49ZzLdzZKx_q!=oe~KqrHfBvOEl0+F?NC_~V`!d@(Y4HC{P|!@Q`n7- ze(}Ky;lWClPCl7c*!+{Y&dbK-jeW&yc=M+<9Oeg zK=no~Z4CQ>X`*G#E4a!agJ~@FWgP4dZl@0XUnj4^!p-l-ccy!LUYDcAhzJfB@=C^=Ydz%I^x$kSx6P!=bm|sb6^9sE^~i$0XklB16gnUj6z0vMnmPzkri~R4Oa7`)=a}Np|E?NBks< zLD$_zcoE}Kr!-)OUGW^z7c2O!EhN)j|3%v3#$RT>yY{j95uCYtQew~}0i1r?+0u)! z$9)PP-vj&KU}MAsya>{2$UKzkrp}SF`aXXLGw-Z*;ahV@UUlCxX9{U;%<%5>aZQni zqsdIH)G+S^L*S8OR;(>N=Gk4Ao-X$`N|wfHijK%J9-I!U`)zLs^%m!J2rRzmyWf2I z(MV8MwLFi&u4WAyqS&qvS&Sz`&GC#$5_zznT=`9DlH)q+s<-HdB@SQ|8I)?#F?`LBWe;1x6Yz`u$*t*pIBfOQ2l%vtyU|jznc#2WG81@!*?(8CiKf(FO7R->= z{R0p2rBd3@+~oHa;Wv*GA#Ue~@0yxpT6MJGYS^0>MLq5)-FG)dbx)R;9flP7xU?uL z)U?L(h|6~RiH*to%qO9vJ}%s492&NZ|3OzPB_|T)>U{~Pwb+ZoNf_3*sIU87kR_7| zPYz3jV1WRCvybs-ouZ5&f47##|uOtsBwL z_5#n@y%yEb#4fM7^Ble#G-F^cxGm5IApj8tpW~6YtIQfwHY!gJOZ}cMKM0W^QK{;S zlGZr`7DB~s?moqtzH63Li1~pRQzknnj%x?)-L{azG=PlLp6&N=^Tz{G>>^IP-D8^8_Hm{v;AN`3mN~YrdQ}UvWn|OGYXeSIsC){gi58{1c53h88gDZy}h3{pHdAz5^%S)OqsN**R?bZ zJoly8hU>gs$cvN5&lwSQ2*xWV2oijag*C}|ZCZxue%z|}*^Y$qyHKujaOG|${;y;A zixh=Z9X6VIZcks8#=3HL>Pi3OnhYAq8>!Obglm%YFH(W}`Y_$54O0uL?XQg!U@CV5 zK@BLs%vJAS_+C)nu9Xs}UNFS#GkJQ6{H9MtFT3$F3BfC;&x-~SBxx8ps%-(SaMS5^ zKcf;^2vk+jak?7Wv2(1bX$a=3IzU#seaRrX8w%p?o_iv&FsA9Nm~FSi5+HnxOHzL%9q-K;9jr$bzIT!$D5eL5w>Lc&t& zn%SU8g%&naKChnXBZk=YT#QF?esAtA|NFS`1yXr1tsSp2fbrsB*ERggfyn&)xGnzc_V>PvTC|&C<6tDRA{*YjH>3p$V$z?iSG29bZnZ5eVcDjM&M01 zrq6@jRpb-3^MB}H+#e*RNL0Hd_WDf@tww`kWrq9mxbfutTv#pWxgcCU9WPh_we1D9 z0ON5gw`szf*zhD55xlASuJHKzEG4S=@x8VxBz%^TinD|&LoY&Pj}4?o1YE* zPh8yxH@o9}9PqqfH5R7N?9nz)<#y4s>5p*K-7l7xW38=UG2g|;NxV}#+)rS_kU;-a z!u4s(N{~YpYrm>*%hJNt&<*mj6|>+YHhRG~KACnbAgYEY)J>S=yRLg5+2U$0>je;5 zqQ@3cVQ4GOX5}oOATxN|_RxaP4t{KUWbO9rP5 zE7qD%XXU(P=N1}*2I$`fF5=vYL2L7dU!>K)3IA3}vf#6dBY>a-fI_d@f!9t zuZ(N@!$3;lrDw-n<6)DQ1^BA0YiL(%e&e6A0E+#}Y^U(v&bj|6LFs3sp-sPMAM=A| z&l|BHgVrnjO~yKzal8ou<^T42T4TYOc5#Vr1i_GB&b9Tfi*Hk`*Pdkcl}X^2pYO8q z=_k)Qg55(LFm9tp_9Uhi0kmh0dbQ>MXI^msG7k0Lo_Dc(jSOV5uy6wz;8yhtkynuM<0WRHZrT7UsKzX99Kr}ZRgP{|1U*J|49S>L{mIpdLhn!hQA|y z)oj}N+tbwuo5CK`H>?zbnlIs}07sk0Z;e)SorF7v$x@*u=;}7V$W6wg&4_!3Rzt$$ zxGy4lK_@8l22Z)Q4+@!pp#Pl(__K9#Zb2}`z9K42dcWJ+V@xYSbo@AHHNJtDM;ao9 zEq=HwNAXc{CR0PN{fvamO8s7NE`Sr4vN+DG%cpkpIvAmRG!QGC=q%}j6XKt2iu~*L zC`k5;Phl~5M!W$i|B=SU@e4=(%$}O+C&lYzJN__#9cJ5%PA1iEz4t}Vv zn7^*<8q{!ovI^;_D3VnTRf358B+&VxejlAe-Zn2A;hnD>;&d75XUDDtRW9&nW6 zcfkMJj3zX`#Hc5sRt^%(eRZb>%&;HCW+#uY#E0qkr^F)-{6B*9-jb-}_IwGc2qlx? z@0OFvn3AXd?YaM#_TE&&yT$Hjnz-?KyHQ`pxmwpYR}V(J zGH}h!oK8I8n36Uq1#OWzKWBvLkgx|GZ@xzwAsA4&;mK`or6XNW#|Hd51?j@$( z{>zE&duz`bPo3G;w{iO4NZp|ouCF6`Yhk(m-YaY=a&k$D_wS}6*ml-{Et-CaKd>_% zI09F6do8kKXy|84^K+~BgpZG-qiRPZcmugjpVvhWCDzWK;4nFFf_`aHl}A9OYf=4m z*Jra&?nf5mOC2I*zzsK3S)*TGj9g3*V69K}N^U>2oN?qd` z#lo`Fg%=U2^169NqH?qUY}_e(DrP+G`7*-#JiY+|=iMA<744yYec;_(t0WH8I{Bl0GQT`^_QOP=+U10WVG$42rqOO2 z=((d&ipLA+a@)Ywpy2jGr zfQO#)5hvk?zKjV~hDg9<`tzK<@W9GCSAT86cOeI>FztO_7q4GaT}#IuFFde~t1S0F zO|E=)Ydu9?cGXFI%_2F#zMo_k#GC=?UVatAtod!}_;Tc@b60|P^Z#`>jwG*)SU+aG zu>hp0&wOaauPOhG4mdYvaBn6Vc1+=i(9NiQx9KPUp*(s%$_&A__i(QTcG+Q^93n(o zpaRmfTWvxr(j$06l1&m~-3_)H7Icc|C(&Q64FuJp9l>V{P#e8L?T&QlEOLcwpJ=S& z_B5bXIWAf}3U}{~Ca=t)?s9-aS3Wtioqe3~lUt8SW5V8PQx_`97=cy{hmELwNjI)c z<#5Mkl8ymn6T!|3+`_Txw3l%e*$#j1snFI$`{hYe_Y-F7JO1p2d+Zi+dR#OS-5adn zJ~iU!!6!@#wf+R%U0ywRlkyMuS=rtABOUvn{h6+@JFD$(;XSaOSfO|(aDOQ3--;VP z$#n1B9Q{u!OTnmF8j6Mi6n|5pam!F~20I-0r2Hd^eXWVC3i#C=w z^EYK!1B2rX%-Q3P9;0m5FnC%@ZQuM$87gf)zFbPFZoo#9{h7 z$8PP~B)B1;U*0D24evMM(D6JJ%;1VUAE)SnqY?Q9PDtIVvyUaxo6@s2-E^5yHx&c6-VF5FU&tw zlI-N3Xp*zO6IW69YW?OR6Em_G`mKKk3=RXst%v$d?_(ip*5aR()HBgI+jVkCPMgvK-!tkJS&%!GSMyQhRXz=c;~Z z{pOXg?xn8__L4)Q-F)zUc2vmUPqNl2W(oY57BVK1*tBTHm_6>|1#QG zv$c%WH}xw4;-V3?&JpTtQWv4);_6|ut&RjBIfpQ2D7;xRbq@FO0vJ>ceMfY*Bbu;msZt)P;!^?AMXT9m*LId*lG(jQ)+SnH5kFSXfJt#@kH1 zeqYTmDE~?3RlKsbPuu=!Q|HI|Bn<6w<9}z=<>EGX?2miwzw>?ZmI~u=_}Jd)iT5C3 zX5lDgwF&9tP`K+(QGMv8_+pFQ@bu`gtD^Ql3_QGHV8s)-lEI~Xt`2y%BoX-IzxaQJ z=7S9`p0ls$gRg<>C>+S>s^{`?^L4pl1R3RAo_lcLt2tG-9rdGayPwyg0J5FrqR0Aj zQ$N&-wYi;#LVvuY1L%$vxa!_>_3R^7-kJv2E6sgYU-t1mP%H>|iiMlzZx@G~-6qk! zR!m1>nn#EK0rE)u=Sg_q`qtEf{V8C*49P?Il=v8uWCcaYqi=z*QIk$3ib%t0?{}Hg zdD$PG9Id@#f6pXMfAy@3ha#Gb$2OYpip}S6VMNjjTMGBnZdzP55^E*qygT^CZP_ncZ&0_(zb$>#WFU^7vVT9*15!YZJ>^ zpZ}jsEfg4`U5vUl|F1z(!40B&5kG(=`ntxta`i;q9Jh10S--Q~BMRn8*oqfJK^H2b zso3Cq>t<0Of>s`jIGYZCe9p}rkNYOg;^%o2V3Is_%{+u|Xt%1->o&*a%aZ4Wh-c)y zTuz(6<^mc_x1Td^&G%lzF0~A4X`gqGR%!#Sy|2@~H)T{3nUd;D zQ)slo4W_mYq9cX}jKc38gc1RWJ z-R9P6q;FK=CI8J+&VITp*Q+jk{X@$h2!8R+mPqec9xoWRorkjz;iBs`D=pEl3{*$5 zNsB?2!eAF7MOAa#&peL1@31_TQc?Cctn2U__bc%{Y!n_l$Fa&X$Ih>upHD)W?)s5| zEvP~|Wa2`OtanmiJe|LA_WY@luUep86XWVpo{Ntpq)hm2K*v3I5*i(_$c3aIAQnnp z&<6G}a7lsC-X~YiCR7m%Mt;3BQSp%iJ`Y!Vkpr8NTo8}2dMPl$YpYk}^{wadS5DFy zaOv)zaryFs9+V;v;&|6=%wH%O->p`2asFfPl~dJ_jE-q^H8*O(h{`76WV!rVhpSIhv3WL z80orgA3aN4PfPm!nFiEgCi7m53yJ2pHO{Vw*F%@LDbyop0wF*=!Y#xr|L(;K&<=v3 z0l18Zkhl|4|4I##(;TaWd-7Nab#iKZRyloH&4ZctROb~F{xcCmtbh(9L3-cX6CkHh zcm|!o-VT6J0Ytodam@~>v@#!6_&`-sc_c;^o9vTl)+KBI)yWJyFVKTd&8z(}-$zd8 zz{O1I=NcBAy^qkd#zm(#w2R`GP5L+Vigmi4rJ&iS>JO3ItnI`4b^Aytqczq-wzUY> zcCfO@wXUNlT8nyfTbI@q7_4k|`unTo3z4sN#^svO>p@xdN5f0yRu{c%aOMA(3m7MD zbUoY=4gBfh_$^nm-*WYXcq_wkUC-P&G?PiO7CLCFo>NL}9TitmyCCo2hb--vg-I4c z;g|JO?x`w;&$EIB2LqlqUp`h`rP51YSg= zb9}Sf0cq#h&KYj{O5Vyqes(0Z|1xpL&ER1riz#vL<1H#pKtVwcO9eqZub zR?P_nbwHNwXb}F8=G3wW86Nx;g2ef`S!yI?p;O<5Q#2QPXij_Sr{Myl4G%-VuDe>b zjfZZK59SHD^^?Tc$`3u0?ZrgCWzmR8ZRX0(DrdK%`>Etxqq1yC7M=qbmj1!hh#;%o z1$L|pA45r%d`)XDg=GhazV|54^4=v1OBBCzl7EUS8kbt`tf2L(02Y6QOvhmaSWTzl zGCKx)6;Z|QF=pjmP^76DF<#NTudLfy;BZrlRQg4nj`d4TDmnv*P|Uq7%V5Y!1Cvu8 ztn|>y-HTISFkeeOCZ1om3k_lA2`V=yQ9An`tK+o&C&Ez9_a^QuE_7B})~Zc7j}PeE zw+nCXA(GE0a*8tXvOEx}(rFeoXqVZO>4L>V4{V3$ANKRh_{BalW%o`*Wrcc$;n8fE zuwWBC=*T+u^T?Bq!BuQOatSS4?@2NjumFW(L#zqsZ!08FXx&SCH~2*hxoQ;fnR;Yg zZUWQux38IUjwrmYmiQ~5B%{T;I?t+QIH^(iS#nc`jQCYyMAc!Wk9#m5SCn=P#WsSK z0dIvypzX`vCX?9PcX%VZt_OiVhQ^9S*EV2HwVGGjD(-pA))*UBgLEuln|B=937Vi6 znAaDFU3X8is2VZ2aXM-o<@8L&wS#&|)>*YK-4=Iczcy}sZysnZJY{K~IJV7*G@n`@ zIXI+$dlD9)6<)|(mod-%6S6T3#;H4k&yB#VsaXC|jqz{QJe_;rHMF_8mwE1w%kQnl z+UXJ1{+#7of)*-|9BM{gIBA%6qV1<7$eY4f3jU4|PY+>KGVkK9s2{)z;TML;4~fSc z0xy69PzELR?f5Z!Q{_dg;EY0@Kan?&7&BcCo1LtEdmpk0XPDKIa{p%nY}Ut_5%=Q} zkj~Q%{TPL>GI(oCnV+^;chO?6Hj4)*;GwNHd`xMZGV)=!5vUKC5jGs4wPR5&NTz<=2d{Q7<=4~LdbbYl{yj-7yz)fCxOwCmBbps_?C-5+P$#VdU|kd$=W-ielH>S7 z5)h#ALXOGq1q#UJ@kBb$s!=+w`o5nB^We{w!9~~Z$ROU&9_BKq-W0jZJP|eTNaRmSfXkr&>`0S`oYKxQiF=ZH`h^i|@_r-@l#h z!q5m1N)X^uSAUewzDtCFk_I#pHK9%h)#GGVi+c;2UMIRW z9e?V$k>hR!%PlaQ9l~`euv4ID0EXSIqmPZZv|9;!U>@`mFHu~+EHjw3XAy*KCmXs6 zDpc#hMrdz~ZYn%#4oUBznq(|+q$EJNZ`)x0o2C=j9A_YZQHE@O@j@tOuYzp0xOyd|wxK&6wfuX~V?>`v*Pn0CV@>rR z)=!s4VaFDWpUGcwR4cTc`}Qrqe0M_hvYaP#?O;-B(%`vw!&_pdKWH9qxR(%F)Jw== zl4#OcbSOhMD|3`wE?t#lkuKtJ)5v>dTA69pF}AAzTXkA)aL@~h=KtqkuQ9)PUikIp z$018c@hO>&Ez!-{{IGpk%zS4o9MEQUC%5(d%xQYL^J`^PHZ%l3jq>UcX$ZMrv@6j) z{ZFE^;V{vr^4?jqR+FAr(GyJ5eC;x;Rylh{2~|rWMrA#lSg4wE{+(wEq8Ci~GRL5? z*isE9R%PXSGrUNndnDwY>|K_UD3DI`p|Y(-S6+}L<#>lyJf|~H%<-Sp1Dt8n5p8d?EA+JP?|s+6g#}>KVyeY5+yzkirm}Z z_XxcY6NXr4M6Ja<(fC|9hbGV6-n*8%Qfz$}l~0rHGNgxLlA?|SFgvF*q~pe58+ACi zUeX5x_41Q# zlWe}qigyV|Ejhh{it=({H%}rkA_=UxxJ+R!HEo#ka?%W^>~%T*9Mj_7y@qy`u^zvs z9q`k~pqyFk*g@GN_wylF_`?Mjdr1F#=aSa%w?0*`W~qnSjA^tP`9uwMqREeXVl#0AH|#PL#kM)kwv(h81lg#K=RS z3Y-lcMJ(mXkXW58{P26lIcl3_e^TkSAYDmCN#LT!Sd1dPil2%6{3c>CV778jKy>bq zK#N004JA*yY+kArZ#cS`nYkZDqm{#5!U{L35?s5nP)KPu>7A~zGgAP|^LAsooliv1(E0^z3M5Qg*L6q^*KyWxw306)UjX{S-OgJmEO#h+T=3 zWUdu0-3?6$ORv|*UWj0`8lb+Y(S+=@&{4dLeaPHI@Tv=|`B#ze(-h|+oUZMW8TGLm zSoQCo%E9D}-!O`IKYnen`Fs`Gq;o{>?NPb6Tp-#N;4ys+tyEO@WhG#tEfGLg5rokX z!Y@`Y z`(?xvo(KHix`O{CuMVksUm~B(AK+_x8ER#G&!v_UslZ-f`w)-U4yU(+YXZ*a$u8#i zvyHKPckYk7%DGRf8YP>0*Sd-IC<7}Io$>Q<*DtGqI;&1%wXW|AJ<$Dyj?yer5*%(B zF}I5}5Q~*0{<7s4+1q9C7ONLRgPU;SaAj6|P79g2XGwuFe@gmI<-boTXRNjKWHyN- z{?4bPf8p$x=OUgb@>Hg--E;5PV?T)sQEgZ$88*i13V#B8B~^_I&r>k}pMK&fTW0ZQ z=Q;>4d}Q}4#f}G{_gJn};-}Bq`C0rF1WQXo%MkAQj>cpcFV!K=5N-ScmI^}bpA0Q$ z`3`T@!K-n56B=BL-RfWn@< zAYaCph~I68_9En{m&gh$<6lZ5ta?nEgi1iyEhyk}6(E3uiYk%G1FZ%X4C{&xlbjYt zNh3r|%dFZJ0pplM7p%nIElTVY!Va}`-GNb#@MYi zKasbBIE1kNmFd9!n*?-Z`wVYKv`&Pf2;$AWY~VgpW-Uf3>@g$WL%gbD#sFW!hrF15 zAuOJ(6VP%`{1R+{wAeW>|1xYpe(YqvD0#nhw~Sl<_Am`ttw3Zl)cY9deWC1~#7h#; za!mLV*);{I7>pqyGU1u*BzN9EteD z0`XXnLRR?#h|@>|Kr?xq*~>Y6H_ChxC`iHda9jno_j{blQwqz*kVYi4b?GF}RlkZU z^V%=R?X1<}tsel&*Km}!a+PmtKb?5&5Gu;Yf$VTX41vVZF{o_nJUKF;Kta7ZsYhdt zR>F$iU696N@jUlBH~d3}HZ%U}ns9?&86(TCA~F^j2gd zL0t|O6cox5Aq6s@(_@Zh!Iq4yUdH!bgb9X`yuZiKU(b}6h^DL|XiQeiz7%%W5wBE0 zPMJMszY)>z=Qt)wl;Y`WWn)6iGj9Q24d|w#$9L$I0qp1d0jz2S z2k-_BAqJWig^H2d5L_Xk`AG8~nfv0nY2wo$`Yf?nlEY{c4zxt}XP}Ja$N3@#`KpkN z(uJh(>b@)6$P>UT&~vcvH)Wvc;^>bBN=yqZz*DiWFucr*zvCD~4# z1zng|NMy&`0fxOZCr(EXFD^y-j>G8U>MFJD`QRw;H24`Lfw@`qS%m(uTYLa#m5!0- z<*i;?WFZ)mIM`*k2C|u_ch4GGtbH<_AB2}4rY}PCE+M0uWdd~DU3Fl9zxN1KC0PWC17v11mJl7e3GW6fa zWX40klm|A9IP`gQk+gYrf01U_{#vG>{0f=Hj`LJUu`hdg*+A=JDJ77QLyceImRAZO z3lA8q2_2$DrZhYzS`v*bxfn34yRL(x-XTh&@TxX~~_O+7k zd0gyBiBO@jI_te4x~3MJWK|m8M0_+wEW18gbEJR)O2CUCgoLl*&)r=3HeU6NIw+)9`LyX2g#!H;a`7crLltPaIB!`&^g(H`%-`R0w5i=rVHmu+hElO z!2)fSLbIClzMuOZ@+3`j;e>+g9fXinpf!W=W9U;Gg2$^WXLRk9ZdQN^`Qh$oziVvq z7j1dJ?14tkD{MHl+xFeR)G!>%Rrnpg%FMCa=XfjJcU66nqT#rxg+cow9hK?1US?$< zm{aAg3Ek+h`%+k{1dtH^%VQatE=(Wywv6@$!1T+E?ipgba~$9UMi!2Zwf`&0It>Hq8u)ZwM<%rwpR)NLOD2m4T60lhnn7i?$o`}#8)E_K z)WpEl!KiogfA(Hnlt(5K#DfZeC{c(lPwiAQXvnpZBYm%3p_ak~uPdzs543_!O2W^` zq*p`3W5*Z4u>Cz~;{Q`5k;R9rCVqbgq6VbXptcjy-Zo zA>IG0NRhWwG$TCt_r$n4jeIp+c>}#|5YZnl;FVAwar_V+qOq)mNc=R>lfnRvSbLWhJiQT`Tn1;f5M^_a#Ym&O zLvhXAxySbvETUYg#>UpXq&6t`139xJ3b(KPZm4$lGm8Cqu=y zL!VtUQ{^;Mm1hOuq=+iJ3#3P)KDI%<9yze}55N{Elme?LDXX%)mIdzb0k#GfJ||Yh z02*e`e??oX*O_JQAxqrWcV_wnX_3WG>_=X~QUFSOf}VNZRSekvrLS%y%t;mV-OYz{ z)MZ(H-z1APE@_sxFMnvQSv9HtRSk-&`h609yqL_D4y11J0`zx9l1v%=3(%hfQF$?!x&uN*fR3Ex>XAXd#}&(u4Vl5qd|D>G(b~s?nJS{MB36XyQlLs{x~4*qMH2!# z7iokn!M5xhe`X_omhhCiMZzUMKYyCW3ri;$dmNx&Lukn!+lNgh9t$bMe%wRB2zrP~ z_=C`IEPkmf7MkZ+HPt*1k&P{lb{@G>JV3qJZ*#B#*X1BV+_oT$FpkpuJJct=>J#SO zA->Fe?$u)F``6ha^m1zLZ4GQ!ChKILsjA9J0r|34-v;$hHeo#Br=5Ln92dI;9Jlkc zNb|clvoP&%3o+RP`YlEK=XY-K%=Ewf9Jg`a2qSY5wy$>kRfEGCuc{SK;hSp?x~m)gja%bB z^I6uU*q^oILRvwdSPxr_kzilM4WcAWcZrL zq*GMj*loz)QCf3OzgzmG!vLSmBX^qv5Aib@72fji;0h0rIY1e;fV*O+6uVyV^x~2t zS5kr=B}vwHFnN;fm&sH#R{avhm2aM>rtE0bJxzr*sex--jG_084qt}Ul~;qP-5IKQgv2gEi zGS>?fID0CQU2&fummeUrSy=`jvJqeLz@}xf266WSZ$3Trj)Q=)6TTl#Yr!m{}L_$~5RY)3u) zpX_+;cH=hBdg*>u5-Z;ywWvh0*<0LYm+t8*#c!yppHD=gVWrA|)~6B|U*MF4+;0mc z7q|$X09hT>2MW^)s^*w40e<^uZ0$;@1zwp~swpTpc ztM=jd!^C`vhKrt?U56Xv9_Hust9Q&8#abx^@=(_=u3!07_9?q#!TraP2 zo=abp9F?4vq-3O&9-jpr7Bx=y$Jn({9KAg!3sgyCB!>$TU+h7TLx!RV`?Wz3(jT*9 zrd57I%5X1|U_BCA%5=&`OA$S#=4nDVJJ^J4h2)5n^TVc6R31Z?fl8EN_4m{uOr_Ms zA7vkJIV|X=qc7?wg;^n}gfT{v1XNC^ldHZ3nNSn&g+=N!ncQiP-ePTIWW8CgG+5sx zc|WgezR`S&NN1)WC|604;(_3O0ouAh)oGnyb>u2NDZI`CfF9dVQ~q?X`TphXDq=N2 zyLF#?sm0y4?e${5qgX?rx`)K!OQ56x9-0MCfaST%8agB2JsS(w;??!0Wk1zplY-sp z(VEp#XP>RY649zR!Xsi37U3V1IX~U}Y7mM23P<@j!f5`u<^(Emde^SrG?-Wp>NobREh{S7L=@Eqz(BeAPcJNOCt#_^C7}U_1nql z2p}RXQJO6%HiFn(3DIub3m%59Om-jPLu}hOr=SE>B6-y9Z)QEi#U=;J*<3rSS}@2R zJrGB#p5@9_;CQr9=n!%?fYE$SRs57aCi4)cw*I&++31gyP)7IIafKx1AhC(T`73B& zRY2EkLYftA)cCy%W!?oFNUUlUW2FiLyqM5dn>YvT#EwL2jenFPF5ovD$5$&O=EY)5 z98aMV8YmrFbL-%5zY2&1iWJPntIHjbJ&3S9EpvC=pucd>@#aC)?= z<;V=X-nD+HkG8ldP|4v(8^n&gj2YB(z$KG&;y1o_zPncMeXPZf=lrtPcc~H#t8syl zXo(hr0+nI`+ujJKqH*azffdQ&B+?1`2TPj%ViG(&?XVXd8B5E5qls1>z!K-&$EX5Q z{R#N(6mRhZq}M}oQMywA1YeE@sZJKO$8loqT$lj#?T@2#_^*IX8$b60q;u}ZLU1v0 zDq4Mn0=y7fI^jd)*qDw*+u?I}M%gRQZmVhj7#|m$%(&NVmZfLf zPf3GeML?(0b8JBeq=K3xqk|RZ9YWOS9YFHi%D^YB!3=kc^zXn{kOesxiA@x_EhShg znD6YCJ-3!bn8A;YbQ|4A+`MX5Bu%uBZ4_A)*iIEF8RRH3Alt#qnkeCsCn#4ATRV2) ze>9U`xp^uiaKg_iBHYciD-c968{%3o18q?FMvcObW?y^EH_V9<5}2onpkLX~k88Wf z;G2KW8vqZq6R%G0fWHUyj094U@-t?*Qwb_c6zGo1pq z{^RoA+TawspjN4RSNdG74#)L?B@vv=wjmTbnaa?aB@#?4KP|De1b4oLq9?pq z{v$Gc@t;@m6#m`I&^Z{qpenZk4TvL{Vyi0aEx#;7@kr!NRQyatKZo!fB#G}Vsd+bZ z8ZO{j^juKbtE`_%6NPe0<@L*uwxeXuA%F~bn#wD5l-mOJ-kkJ&si(6wm?GCcI;&2^ zDXOn_cpA`_6pm1|S6co?pAiDjLe+!O$8q<7j@%C-ncL9ef+}ixFV}<`5l-_<_1t$$ zP*)jJH~yL6TsR{g(${&2qwB^ihAHW@(v6R^pN=>57UJ0avZ#sTUN0n5Sf$=kwNfSo z7C5OEXl9lt^lKsz%$%)GPcJV5O_3d1mp+)VNsUg(R_z~7*3B{ov?0ZcLd|C@2}ixnh-b|2(CP{~Ag z?GNDs-S>nXMRCVm_1<@nr`kCZSy7@_(ezdYcaP}StcFg*#CU0Q9rP!Ykh97qF2<+q zi*g_lN3x|uESgB@BTr`DX?9|ZA|@CA(kiLz+e|6&(-WPD3CzL*vXEH2tZ)uj?%SI; z$K>a;M3~3NbNbgsj*!xx6uf*~*h62{2-}BH_?!Djy#7pl>6kD4BwHBR5#p2$P*JZj zODaF*bhN1PFs?D&Us_X(lHr=im9z#jLJ0X+9vrIfO0q^ngtE_gnKKaCeUm9FFG4&E zG?mQqGOJNTT(h0X^W3S5m@~F8Ajfph<#=Kc-G87>AK|f&7WhEq&q8KE&!4i|hCoy9 z`AVz8d9ZvQL+|lT&+VQNEi0nIo0;HWdT5NCW{Il4)fOQS&9y`AD| zv%0)_s?drDANZ?r$ouejz3ugp;cTn3DrDu6_V1LA3fgBv;QU&lLcpF9DBX&K7zb$- z!rQH6FN~%4T*w;B0r*sxN4uicwCLV|g(j+~+pv^QMjNn-gc{!8Jkl@jy;{cbiJ zCK*j7co9lWYSL8yG9m}+$7#B&^Z0$Vwz;V}QjQo0JsV1_fue7*$dr%bR*n+2>hhqS zr`wm=(9K2sAxyC~nBSFmiN^CW5EUGi~1EqzrogVA&3 zd)i6?`&{NA7F}E44bUjl`nYGIwsO}g!hqF!ulmGTl7MJjZ(h}ks#@QEu^DbSAJ$-Y z7P4XyMrC&9?|lGVvf*{$d0jAY@?Pqt`9ql6emmq^7mhCY zla}~c-Xvo%g?bM z_wD{)7Nf}mt$fQc4jR(`-Qx#wZq)aOrG6|x9;k|qlOCdGr zQTr*Qx4lQ^5zh4F8_CE<*HN zJAQ@FrH%c#;3s^+I)8BXvGNy7V*9aC8uRjhMA#l#4Zs51 zEZ7l&&&QbDW6PoU*>*_1G63T90D}lmIip)T2=z$FG+*}i3uzD^oPj|sUUPsqZ;NN($*u@G^yky+1WQpCcB1~VOrP(_hO zZ~bsG*I1kEqg_u=U%FnZ(9}+ovWZUU`6cmO`UM1S!$!tap1#OlTHG_2hHY|)dYL(vxFG`H4O!FuQ9 z!yl}i2fDEd>+26cW(L9(xFej?MQj?-j17<^dmwwjU-MyGeQ8}q(2qFU*;g?7$hokC z*7=Aq8Byq5k&$GK`sA-tWz)2@J^N|(JiYiSy&mznHl%1BRn)QCS%@LCSt4LJW|<~D zuwh9f&kU~cWxeq_R{(9@DJzTPcW_*t$Sh2YlwkpPtN^Lai5wDagzOBOTz6UwHb1U_ z?fS!VomGApNC~~2`yT#DnAdB6Q{2P_@j{V00apv4Ij(f<5};KGk41ygA{s&d@&gDC zKrNk6r|i-_z!%Ut1ye&<68K!3W8;x)TX2Y~bxM~rhu)v!{jPj@v1rp)kP;H&smgpO z4Fj<_PnBReUc`FQRMr7tK=o;vO&O1GDm?Z-x*mWPex-9$Fdy%?=EymM22j)`+(97M z{=9gwsINjZ*{pJm%2}LZWfwXlm~way4Nz{-MDfwEgCgc2?RoB8B;Q^Apd5ft$`sq1 zekGlS0S!LF11v~47@)B&W)4my@KD84gm+d4ganXscv)q_vPsZHmCBAsh4{!j(c=O+ z4#rSFk<{+dMvODhZu2~PV|e?i(J8wc(d|e-2gvqhUgRm^Tvv45xE{C4>HNNw z*7;)JR5{2|S@-%b0~h$QG+8Xp*r zNHD`$zn7c#+X6KcYY5KCC7mDMPbugQwGFoK4K(+)C*kbSJVud~h~Gysa_hByH`a9< zt!XbGrvb}!CEg$6PM#SzJQQ;Dbz8qp_%=1-EP0JZBHVoUlQT(Miy)q?`9vlJdlaNy zpdA-N&KEJ{heSX$MNKw3&U!>YqGo_y0Xig>1d#(!=XM#cYT#GjdEPJL^s&pkb6p7^2#n-nG5t4A5@EM;-6m+)06D(`S3uo^ zy=A~jUT=DgG0sL94$0=|fN@{nL$9eGuQ9kjfqy>E6DWOZJaTn-?jBq>q*cOMtunSM zH-(7O2E>a|wwy17)bYYnLG z_3A0Dcc~S<3TpZ{fw}x$krat>{HO2c;xB~E^0JMD<7Bcuin8x0D^Bcwww%oI5nY9+KEmk=hW>#I#l8PI_?FMSkT3_K`WDZ|>OkjLzdMo2U(KiLyKBCw&{ z$gSv%Qmit+b4h=b0zd3=1Kmr}AsMuhmsNxlMJ)0}&qh~FvIsvxRqu&X5YSc*JS*C0 zIyuM%v{)&pC+DvB`!FQ;lW16I>Shh|!cFX^%e9j7%e(u+%;o1Yei+4mOvPsf;KD-X zz;?8#ql8GdmDi+=s>4w8(mlZUQ-h|GPpKyB7S48(Qzt;xIkUa9h2Yb~#pd1H(~c<1 zHUo4o9Rjg?PknP|g0>?cPRgF7KMwZsyTEg?2}jOVo%9pfgX;fSC)>$ie)jpkOLMF9 zd4$ADBC_KWSlZ@XPtC}%ZMb@UpEAs1f=|C>!jfC8>`vhXRj_VD2$W=!AX13A(X+1+ zqc9t(QVBAdai`gW!0JrA-MjC{K*Cj}Meh39M(_31LDpb6*7?I9SPqwFd+`(haL0mI zP!y?vG;l$5bWYJvMjFq*@Wr1_jDJI)D^52>`#JG=zMIPlAa2 zi4#$&hi!OKKo8GhS2$Zeuost)wC#ssRuU=5(F`|6fO&Fza z%K6Ohcj^8nuJ!$pABuPv^0;o`Wq?UOlMAACayKJJ;!25Q)Q&i|8Nw(4i*Ba5$mWXM z4olPkLACIL*)u+$Zyj-OXRn2<>(V998Rqt#tA~qSZ&0q`k6&<5Rm8m>XQ4$pKZ5(-}7G64w zP7lQ!F>gBjsuH2SjnF+3C+&uH4$p4$B0}bR^r`QsV-N{mLU)!42~Gd4kpZ{Mk3&&qQ7vs!#YsSeKD1R`2IBFk)w{se)Po+rWTCkGMS{mzucPUic zTJ+^dB7%Hy=YrrZZ}PQvK0PGnXsw3&(}azD_9?)?8Kg^cF%yW`!&ML z^il@7M`x`$Z&$0(&DVo{^7Q3_*3}^%CK0(4V1>^rohoc1P`2Xm(hQe?L?h@mJz4_0Tc? z_hIW8knZjDYfjfA8#~UY-p_mHd;-IkDoyp`R_ij*?*k?9A%v4Tq!jC-c?YKXHlEsS z%m>Ljkl_uS9i2bTAUd?~5x~Ebx8Hj7ifm-YHcy0I_dy@iXp%jjH28eUL?SSSB(Mw? zZe~JbbM3X?HP&_LpFQtJx?~^R8IdDCR6ee9NN#BrFB-xHsbu#pyVyFZ{Xy~r{4jJ9 z&|j7nTyR=mZ<-9#UMO$J51vU`PgHE4=?n{m2ziU22}~WuW14)}FTvhv>5v>ixnjev0u0Bq zc3{)%68SQ-l0of}@bO5ry|sR@sMFPm0JkMc!yc5z!}8p>>~q^jxG8*a{koA4aFgoJ z@4O9{1yqa!M7wo8V$HpU-mGEs(QUfk^2#ZR*J8G_*zVAD?S8k4L;x%4^w74=O5|b< z-0{@X8s$&6^{Vij*4_P{yYt^XO9jm6Y=~#1K<9;YXt0*R@r*?!L7(q@y$6~?G;>uMI^+F(rTu4JF&5EYnbb~F<l_ zlM5Vg*N14TstY-^E?n@H)Tdj_Sm9y9m^++X-733PfP|sEC?P}nP=Q3D0Vmp;2s0;m zf;#7Mlp6?;f*@Hc6@#T)9R&Rl`0-p|VgkkddY~lybnT(WMZS~lH}+WiZG;tMco0Ti zZWmkCwxMICCP5)~7^8WlQc#KWq{{rCJ{~Oi##}f>Etgu->vOZuxudKPpHlMeL;2iLFBfgeF zYJ>4rD83%x<4WTyua{M%Rs#GPUvn5`w%*WafajBT#AIcDGcFNfuG#^%R zCSE&_m$^ zYw`zXfe0xO9}_BbszVe4JnY@75zk)1XhsCfk|>MRsSpkp*79}{{2DOK@94@#FiC7v zF2cIm7Xco-qPsbw_%xjY#&g$Cy6No|P||9`X#aTjwEl!%d}FTT71%shlLgS>wRJM_ z=3D+*5hSv^Q2{L9xGdvvdcIch5iC$xacDM#(A?Tav;1=1Mm1DzNpheCR8x^>3%D|} zE>IO=&+0&F!|L~cl?Ilg-z8m`&o{AOQK29t!sowvO)}o+ku$ZO5%HnGW%8DLR$8vw zt&6iaDwASPxcKi8fU*Uo1YzbxVdkJ2UfJREQ0|FP5pxW5vGgVeVoKrQ(Ab4Ud^+2OPc$kglPYz*fqT2Po-@Te;BB9X2)J)%3mg8t{# zI^^;eN1u~BRS*Qt2I;l*l@BbCEZBN|*?ae$sADwwbTMC1S-nPN!@OuBUm{yNYkDvo zXNIju>5Kh~V8rF?G@bH-_{YuI?b}Dz#unVCMWV*-KqBpurTw~GLEF6Jdb2iYFJKE6 zL{)IV|1O$Zm-Us2i-JU>_Qul>tB+>7*Lrk`3H;_obIx19p%Rkqyi3dL43pJ#3*veP z5ei3lSk#ZZUdM%({mjf;p3l5RoTZn|k%h|Pds>U#F~Ub|iZ+G!Q&^?$X#;0=()E2? zIQ!m4tyGM8rzYNT@;RjJgf&+yX06Tbhra$lv0&o&Sb}95=V%Hjv;Qf?4t^PlHQQX9 z^0M^(bpax<(q&$cFEh(zSk06_M+`jmj|j77^FoM!BQTQvA)lf(*;2D~ILM!c5$2h= z@FVAw`Lb+!`>@?NSgVZc_HPa<8&wy29_?shSJc?F_{63 zo);DUf>VHMVBdH0{O|cn!Pc6Tu6Hp3m+r*-s;f%tT^3zOJc|l$e4=rs1dzC}tH?93Z6Paf{mcwj->n`o*wsReM1rjIE|HGsF=1G`RxCc}R@tLjxG ziP_tk40msEra1%mfhfJ{BG!b1GvK5Xs=H^Wi>H-LPydbC$d27J@8V|%P-{kSwdEsk z0aSRi#QW)VAP4%j6N23_SEPLrhtb$A%SN9T5MA*D#{?!vRQtY7u=XFG1pYf5)amTN zT{WajG12~yKTND-P<&-UdtK8!yCtESv{p;*I)4D_w9<@`D%*9_VIKZb+U``>XU@Wb zyMeK>|;TU_+pSxL>}6 zh?Ywpbh370F<0#oGs|z5#LQz)BWmUpwDoUE2I(OJ zz=`=*3EumK8+HJYo)N$S4bP?wkMmtMY(QzqT!p|Cwq{S@GG(ubn^`)q^RwGoRd!#e z^J+9R>oKg$Zr8Wc`*O=)M&`y+Mv8Vp^78rZyqC7Q4*JIGzDgj=qK#I^MVsw=(L^5vZh%OWgVNwaeWIhx(7Kt-XFflIGRoj|nJMjb!zI9lveAr!5Pl zHssyQ#Z&};#uqt{;KT=@!g8@qjKZhm(_j!@bKs0dc~2DPlAi|Asq(FSb)`6gekQM^;`= zs*o2sxBlwMOfSQ5ODnI%<6PR)#K|F6g>m!%%y6rv{d7a+wF_s`?BW`_{|q}eW{%uq zg#<8m4&buect3V(?PMRdwC6IIq5w0QX>rs4%xvwgAK%2o-Pd ztkS`uxaL_cV-tVZED16wx_JFCq>)O8dE=CkCmkm6IT-uaNhJ(T{^ZqE+RaO;y+X14^BAb?JX4GlX_@2=YBPNK5lU^R zSy1t333?*}yGJ0W1Qni+7>);z4l5d+ez5skbL@^FKKV-!(QRxj+I75=t9&(wLQIf` z&4US%Gc~j_@Nh_lA{oSVPeE^*75LmLh@EPO%D^w+N~~=yOy`8Yt&=KDMJg6fM3s2y z2ys?A)U>Y19|jhJ6w;Z2pROHq_I?84d0&j$?bzywCZ0Dv&+ypZj};z+X~cDcfPa4v z#d$H>a_;nUotkQ6Q@OfV;ehjaw?3RtGjDgZk5Jf!;eL96%yf4+gYoP)6rG(P5;NS5vabj57i$7Zy#krsLd)DM}Cjz`^ewy+Y~!k2LP4>}Eb@id`%( zH)Ny+laOEzrIKZJsNV#p*&6T&BY>i`gJ(f#zZK@hx-AHaB=}@bl z3;i757AKkt92Zd3v!tSDzDUl3*<%Zjgrty|-xw;*Bt#jd_W^DXPQH0sUdfEqvr_u@ z%{Cq#g71pg6(=`(O1r(MVZVWk$6Bvt@3hJZ=f}%t#Ju*Fj85vVJYC;We`5rp$mMSW zVLW_Z6i-c=E}ws1;xIR~-fH9B(XHKn>bxb3iV*R7Z179)BJ9b*4$^Y$m_|vya%aE_}agE9eAF8pQOIqjqrhW2WI>; zgyH&Gr%U?NNd=4<#R4&q9 zU8O7WcUqmnwq?|ayoLndxDM?ae!Sl};PCW1r9gYQU&E+ltAid8Q22b!>6S0r`n|Q! z?a$X2j7o2N??1NP#q^i9KeV=R9|00|{}ViJ8$b8Dnr3w+jr5of6U@svUzb4eEwCdv zoAEKc*KHTqaacTF6QR?xrXs8ShYJrkAsnag4<(qqzQM;ttOEPty2$1Fq3JQgq+=Z8 zlQN8Xa=-ti%z8cG+^vW&iBX@IYhSb`2C7hW@mQ-%?voTLvuSV(F80G04E&n#n0d|V z?&eJ)oYevUv{E68xwrm~dBT*l8tk@Svl99%3mDiJZ95);K6)gGNX=VR8I=v3!Gps4 zGMP%w^Af|(^K^dCg*8^BO{q%33)&AEmlv5m8e#O*b146l%Rz|p(cbI%+4`4-Ff-M7 zzE{(MyK;+3Q*h~QL9aLWbXKS5Uc{o`>oW5xp)hF zy-6m#T<+F(R=_|}yS249%gZwnt%}m#qg=Y~;M(dDnjK&Ewl~ipauJoF%#|r~1&&xz zWS+0C_9}16Sd#IvN!7tzDdm*(9r0^Gw^0Zy$(}0;=i{sFSipP_>49|B2}q?8zc#O$ zpEEo`F*$nR=Y@6n)m}=+ME}R#7?A{*D55OF;Hn>cPpF*}`}W)21^W-QR?m-Roleb& z^Uge{#+K&&51F?a&MM6lF2;Lr9-!)1txx06KWAc_FMs(-vX?bX5|$#s+mPW%dWOT_ z?gILIwuW%X=q(Km?N7;X)&(v!!PEdD_-jy(h6Zj$8`oFaN{7}cvC5YGQH-yWb72!v z2@^x}BfvWC_5CJYbVKvc*m)80l(uQWF>S-`w93D728l+oBTMr zFI}5}OYi00bu54QYw+*%*|@53GYe~pyZe_N@TOA!#|}i#kiXV-6pvoM?>lmXa(b0c za7;$fEr@@$EMzqMpu&m!78K_vMbULi5YdxYT)vshI6HjpmeqmzOu@3~vOh=;k)B$7 zyK%dlo?&Iz!);(7xr_Yw{660N5r9C)u(^$<_k+(*`G{k zk&c5BlSsFNmd!ZE+ao8|6<kB3nQEQ3Zv_y4??$4rc^BQKnwCj_Bf_V+k?DlojL# zmcOSPGwq~kk$;~Hu+kZUE|`Z;%q0jCr7COnp6}856!p{@qG#JNWdtH%5@8Wel?pDt zLc$UKzF~x^-30OW5Qf%L^V3t{a3_h|D{g=OYI^=tLyzX(`eO1A=f3)@VPlN%{N4T4 z*{4_fpCM?m6${_$WXwBa8?;+ahZf~U@(#WmW(rTtt~GN)z@5xnPTb?-wYiI?*0sSa zfxTX0Ti<;zAhPjBHRBI&cd}1dv{LE`0f-o<BF#2&YCC%!?vqYoR6jWh2O=r6k*VTxlJ5PWCypoxE7i2g*6t zoAo+#U$}a>9ac@v7r=g=41^)$b>>v{@Vrl8c%08q3aEWrH>}TniguK0AbdMhsJQ#V zTNQ3y{1L_e$5isPew)e#Zku=6rnxxB@!ze$5~u(e_Pj4b`8tBA%j=(-&iKEQ2` zPMe%4dw*d6RSfJ>tGcB9m(G+Q&h!v+i0Uba#$A&M1?WPMEgu&k{{f zYXxckj}2Xmn%dBByE?xXK79{v{8*jnd)zf|dr3M!QQL5NZ!#k@h=?CiZoDpX1YxKB z^FSR==P$VAY=-RwUix=}T`VeYU)W^YkdU=@F^(ptdithE+lJRxA)JPF6_Ag7V8|9|`%x#5PsC!<$;1Q- zllEzSbT)kU7hZ?GKmw$rJFW=9BZojqOrvAfb1)D1#8z=N!O>26h3z)4WdcQ}W4S3u3r(HR=DAnFSsGgk-i^H4 zoNJq{L#t#_k}OY&MT2b4?XIsNFj=coMJk)MFI{<=mjdtpYu8Wx&=YgBOK?vkqIZ0}R3Tb9$y!iV*eT!&=3E^4-iDb|#gMhfF;Iv8 zr#lmMRpQ$kPuu8QtRpu7WhLsbFOTyb`i8k*K<@gfu*><_NcZMny?w$R&!+|pO3{G` zLOotdkNGx_C_;5_xIwod$;PIBxM%8*lo!$Cjqhsz=jp58(|E8Y!MTCZS0Df3S)Uy7 zj=%h2uRcnK*6V-}9R>ea$kwYa!JmXgIu9?B&gbM>AhI3xUjS@GSLkeH_6y?$fDwn_ z&xEGqSA!CwMlL{P zFr7zS`31>|R%-`_uYpzg!rHAZ!-q7J)eAI1lUWxnz-MsWO~WKSTq;bRDQ$K@4db_W z%Ltu^9kcc5BZapgxX!$lT~!n7S*`nDjaJ?2{v9ORk?P?*7z&5A79aSS{`ox}*=gtR z)(f<9;H6}OVmfYm2g_>m^46Ms9kBfa&EP8UW2l@g1}5cQgH5;e+oDvsaW>Od-jgz} zAR%ND_&_u7?H=?tXK_5BN^~wQb`ks-TtAilnL4)JJiYfjIkNy!ln_#f7os|Iu8S`m z4)*%Bj@#OLPeJbw!u=3Dk5g54&+1b@yqXRrb5`Lzt`mehpGNV4;0)h4t^YF&Tm`%n zoR%4~=f8&#kzcc1%qkAf*PM5&@Jh?a*K*Ge0miBCpZC4pL46o)J)YJT+AmA!PEz`? zW^8j{3sOK5d$W-wLHMq<$?}HUM7KFpq8#$J1QAH0Av!_suR2ZKFc+FOrwF_s52@wB z%wOFI?f@%3!888#1Bf?mJ0HMm(XWy@w0{F7#&4kPpA*&yQ8dW5kL}vC-|ebf(|4`8hDAd}i$jUibmW@z22Aap22e8G+N!hJT85 z?!Q0nN<`AY0~w{n*b`RK9ay=JBuqPNe)*XkcOx)~y5j0*0SZ9jkh#Yy2QjO6ZO@+Q zkH_F94oT2VX_e+uM`L%U_z>1BI>dqP48)Etd}Qe>^w5+(N1zDdEiUU*rQKY(6l=}1 zt0?dHAe0wCw$l60?Am{93=^x<)`o|oeb1@)Z_|SNJ)#x@;jlQ0ndSUZqogu0SNC{O zN+06&<*hEv^J5}QC2Xo;{Q3+jul;=u!X$FO#3-183MHG^clZ0GMVE4fkM?GmTxkTR z5(tfK>k0Qa2PvM%M(T-`Z4A7}XPSyD^Dg%>sCO#6_>)gQ!++*yv#G<@{&&I%*YD}@ z1o_-6y{=Kh09w}XpaH62iIwY1OOKBcCxhw$6XERp4JdjE#R~hy<*o(~aX(X&PR&)hVNW5%|K}q>Nm%d11S^VRF!N z1M+@cuFCZ!B`?PHgh_Zot(~y%)byUI76S)zB znq27MdR;V=Eg$I`cH_}7sUIivLPzNNFspe4nx;bC7e_w0BE(@D_l;k)hX^n9sF*~ZvsA{L0h+?smXR$IzatkSUx9_-K>OQ ztTZZOe8!5nJ}ooGxYpLSK1H_55(kqtzV4oS%vF6N5KIt73X?i29#Rw#F@Z$pKKUyd z+{B`TE7Mh2ms7%N9rMqNVm8Wq?|8L;1y|{R_EF&#wDc(Px8R_E3l3j>Xb8bJZHR}0 zax*=rsrE-HcIYF5((wcEI@bq@7fCdsk}U1dJIM$WPS?VbI1`M1VfQOiz)~O0T>KMw zaCt#t^q8WlJDXrbyW_*I`d;hL8OnD~bz2_6jqsN&%!$Y~*Xn-PyJ7kip3wv`zF~dBmr*4anm2sMcx85pEBfXaTUgpPw4b|VQJxJkK4`48IXD1t!X_h zev%Qg5#b#{hLxdlC%_0E5MRi;>yCKT;l{$w*$6v04p85?$0X15#OXLSDkq3*2OF=E zta6+0yp^sK-QjZ;4d7NsG;5CBWBcm}^QEiC>dB_+pFwq=G1v|OXBHs!e{<=;tD4Q) z0#XCmmKg$O!8m&;j#`ZP#|Tws}w$0K0YQ_R=efr{;YRRcLdw1JgrF7-=9jAyzX*Sq@I87e+tA+_W+5V@}$IZ z{ST>T23kobz(pn+TQuRVsoXq2n$GIE|5%|fvuAlg{@`blzALM$yq;HCJZn!4j{Ij$ z_ZUG@4R9`?Ruhtqzelp(xW{Jz8AJxDfvYD3w$RT`h$9} zq!;{qqTwie_n2fJemFI)|vg62V?y1 z(1Z(Ucy?VlI6N2pvw>S;GfbW*K7Hwze@O&Qm&h{N-+|F!+-feW3lyt+^52zaFXfz| z{!c@LU+rmj284P4ZYV_1{l~7q8eEjzhlp(WDS=@8`Fz&jZuiDDD((C4Ulce_b`e#X z6Z|v0BuuU*T&6Lkn5Yi`UbLYA zP!Ou_jPwf9QY4adIFkFaEsJf@Y-8KG!{ZHo*t9fe(RpOBlXJ+qcH}N=BpuM%{8BG& z3*A?EQxGvxe#F#G_s8{|$>pvO12_|vb@WM9$CHiCqWg`G%TlX(w%4<57OyN`TzCi& zAYWcwQUEak=)ZpYzh5MW6d)nA1|K5vhlnC}|NDY0NGt#<#DD&h79m&%d+NNd09f_! z_rgQ`;QQ};etjFnKS6-iT2C1>K_bEx-^2TN1wKGgp#QuR1gJ+f-Nh5FRKot*;`jsQ zpWplKgwS{m(ce)Mtn1}-_-yFqx1qaXh@MYPe1bb<8TJ2n^Q^e4Y*^dF6s`8J9y6c+ zv&JF~P4;ddGg>@D%^HEEeSAn(@`*n&zc0!c-+X!34N8xj) zw=}`>_(#PnzXa94Z}1xsxhxj@7^D*a0OBnV08;;VV^FX1^dJPhyzP>M*Ibo@osyS8 z?^0>V+$Kna+ZiB=M^|FwYgffpk>=`P1_rK_FhVezuO|7wO$P86saND=MG5yeep zkR+6CKv&*nc3LW}zeWl@3vKlKf9`GkD+p#+O&Ai(J%HIE5&3`Zn@{i8GT*(~f!Hyi zGGG8g20N+QE=dcQi9_$VrY7lF6Rh!Pe;bEZle}oB(P6{NwHrH3P=%69-+&%;s`9HG$ z!H?Me`h^^O{?Cq(V*$8*a6ugwATk;t#&#V-zll13*>|wZj7eWCj9Vg(oR}J)VoRX=kApGu zJ3n{e8Pzzcg~v7BO>^X;zHn1>eVB**|7=Q?mO)U9e~#!b5+IKK$Gz3GQ2WSH z+vU`9f6aT#g@j1Wzt+G?nf1eF2ZpO$8=2~@15@Ku0aN=~!nOE6as&DWk@c{p&<<@- z>wR%LMX&zo0~fDeSDtp-0+*x7Q2$8lJ#0SA;J1+`%+7Q+XC-W?*j~@TjrjjZps~>) z)w+5)>;V^gwV^wZSObvJ7RDKUz<0AfkH?h`$p74jA1EN;Y0?nu!wPkxjPUD0W9xNY z^T{4~jwre7f3S;^5Rh`|QI>9+D}S1c@!2umIJN(M!YAmZT^R9=V?9yu-&;+N^PUA{ zuDsYfqG&t9QhGhvz<0z}$#?KGpQ8gD1*WSIcyQG@ujBX4^(^_-=94*|A^AgF*Cm+kChMo5FMfZo zZNrNTsq34KOA5q(3YBqxTs7|*F8QVHQfg<(W8U+a^50P8dzs_YFlO+32shX8G9qiVB)i?K7po8Ie1eljQvXJzqDpHGOUDnS}>v=q^(5`vczWV|CuX+j$ z5SS}NZI4c1cTiRqA4^TaRWe@y77{NKz-j)qFs9$pj!%LYA*W8dg*}Wd@SM0YbUQoF zWouI-+#win1nnO!RS26zRA1M^!fMSfJFj%^!i$*L%#Xn77Cb7Y0Q^U!MO}{X1D{{p z-t&%54UR}eYSJ(Tc({Vr_efuk=?ITg!((};>17Rp1T&a`XxUi%Q)8_3Wb|3ts_F=9 zi;5B@|Is2X#V<&?r;seV91TR^1wY(yzgB2I@q5fe3!^@7zuJD(=AeK>#RU@eC6&Pe z0xs`K2Pzlo7{DF)tCom<}!V8325UW`y z%x;`Hj`RZ=A7%O4;!u?y7=5Lx;FzI*e14lv!xYB{s02b6%wB)d-FK8O9$HC%<1oXegzNES)qR4J+1+s2p8n<#MoMiJfD}ls{;}bs^KOZu<78Qg zym4xHt)-DUU?KGV?3>KDAK9dS@^m3{PbB?=8-OHUmoow;-kGl~<{}Z^;up)3o{4dX z#WiEi-Iz*F@5PY2(S5`YPC3$eT2`~RuT^m3C;c5yWOqA7#9!sL?q>6jNQSCsd3@LJ zkQ-l%s#keJGxm_>JIM3M;p>-66a!pPLR9iJ-OWUqGAuyV2R=4eJi4ed2L8p6Um*F* z`&7Gbwun5j7Lqyx#$-My`cKLwLx2I(w)DV|R(ZDwKjZy)?Y`np0C^JwqNLzn_OcfS zY-{>Sut$gwr}S5uJ+T!))26LtWGj#d$z#FObi2s+>`|l;+O*h@d7%R8CcL)=o+iz# zq`!Y~lYRB#v8J3+zv+c2QKM;yD_NK zlLlP}k4~Nf>@KGu>MYATZ=5z7ruH_rFZ&v zYS@jPMh|WIvrF(MWm(hSAP^WFT)~-2sLe)fr=g(ZlV`qc={T!b+77C1gv{bmMxTW( zFylk)mpECYH_Cadi*a$aF(Z@?9g zy@uN1_^d8=`lqmB66C67|pb$7_(FTg^#EfWkD2eqas)qP zka#>DH=qT(b{Wyu5AE*@9fl0Z_M$6NCqJylZXMRO1!E>GPZmg6`$!}no^R@31wmhA z+pOv?c+C?4TrFy;#S)(mU z-~CZOeX|33wJnL)UM4eyx0>hOLy(Jqj$jMI4vSWgUKMfhZ)k5^ZIc*6R;G!paT5zj zfHsKU^WcK5@PJLiensh@Vfz*i+#wxb5?KsX1Y>c(g-LI=CwW^Pk&zoy(2I$Znc>us z`VCjO-%MBx0j;{>C21TWHYF16m51u#d4$+UEX9SnDQU&!Za=N|3rx6_dR!3-m4X|u zS2$R)o>mcK(fLnDLZ4&+{T$y+q$RUvax*oOYAV>`F6gh?B=ZhKxeHwV6*@q0rsId6 zsN)t>73q%_1>c5Gh@(2l=K)!nGjbAQy+BCgco*H!)SDQ6MZdiU^KfJXMd&|_yvQHQ z0$MuFhL(>`>~;s~A*Yu~!=)mJB$x!~E}~GUSrLRBUgyNHM>TACs-CX1R6{wv6nW?` z5d}NPBEh47_ubmUQzsT2vpPSN{Avx3HK-ApyW-VV0j~W|a-hg(l2L7!b9|%KK`7i# z>2*pQf|$;I!@=5ejqpowTnO>UZ&X?+da)hCJkdo`?2i%0-z~&wlSsH95vGQU63c)DI!1T%f2GMGNrH!s|4BQG zaW-FYBtFd^t9wU}At=yNVK*mJK`4mzT3#WjxgJgl_H#kN;f4GU#(g_AYkZ17<5BlF zB@yk_fjGTIP?LKe-i=c*@p7|wO%@bF;N?I-XH!aYG-9?)jA=<^`?rQmlgN!Qif27* zJhafV@oPgh$=OAb61{~{B#xH)Ro*iWn$}_x)m!{#lBHr-2?w~}Ba4Y-dgYR)w)$=2 zr>7g_cigmeyPbg0mO#IX#_-p%O%;4!VV%S0ii#W;E^a7z*LlKVUd!tTN&Yw$SwwY#7!?@1{^@R-=fyjX3BzScj_@ zT$01ip?Ic{k)PsI#NYbTR}8g4@@`qv=pO0|#w!Z^7t;AjG??Woe4JtyrCBfdnYKpk zr%maKWb@Cs4$>-14M8D)l|D)%?NXTyL3 zBsrs!pZ?&3H4PlLFT>UZk(0wV5MT#jtoH$#Ukm+>k;cc^y~;ddB|aNn871*&*GuF8 zzi`+=-5cWVhr_xNlZhAuloVV<^rS0(`H&7i&IXf*Jy1+5;;3yO%*`G?n=Q`?W^A7S zYH5yp)+zNX`9*3{6eZrgmoA%up0~kIhLK|UX$+-J&N7H9&IVM@_g&w?&A%?oB4=E; zwrwq;AbkZW$LYMZ@RViHh00I`85JrnWf@&Bk3M&6>dJCiEVAz^`8!0fUX|`KsY=XALQmB(eW5bp?|Y_f zq5^a1-3mBYAxP?m%vJz zaUkXJBCiTIPku_Kynkb)o;ic657{YUeB0%rq+BRl5~#%Y*?|%;=kRW*7T@d1jM4r$ z-ZY)rH%fr?+NG#2F=9tLUUEEQ?%1BFYKy{YU4(hKYh0ag2MV812UWibbXqF`CYA zUiV1vaQZ-1JUZoiZ#%ku(YDX;q}-fQ3IH(P3m) zWpU@}&YYsS#J&>6^m4TRhPt$LLj=+(PTzPcW? zy#(9SN@K@jdW@OA2? z%rj#r$OD7L4ZC26gTz_S2K03SEVGqC!*p*O*%_DKGyu>%rjE@+n+-u*rFVUNevsPO zwnE*)ADc-7_wuGmP}pLiGQj0HyLr&Xd+rE6A@NDV$s~Apy0C#ao4k--7nEHE=WMJS zi*&ItDVq{=-{SYao*Jkm99JvOC$M{g4>ftBYP-+aL79@EUJ&blK=Sj+LLPmQR9|R3 z=^1oscW@Z+Sp<4g=VoJS$9g5l4VQ6=D3#72d*G`j{ZhUlXUo)7f~?s1vUSA0vvxRo zS{`)L6chB*YbmQZQVzA=#+pH=fr3W8nxi^YScV6A!eY<35j#DiPxEv>n20AZlii&5 z1z^?Qu={v8)*r+u6V8Dup)jyAipi(52<^+ETiF7Rd44;z6qNXY>|DxEP{X(`rrFRy zW+J%d%-zZ!kF=G=HpA)yusnLPR^Hi=h)6_Lv^p8EgOu44%0k=yLkja@SCS>`kU7-I zD(^2OEZpI&>?FYWq|H(k3UlJSpItLj5q`J)XwI29 zCYP_i>OD1#Jv>gOnY^cbu{4MP26Vw;06dY7zC7$-GJVlB(P`nIA;z&=5E8W+I9nn1 z3cS`QuB88#m1DMJ-&LN*xtQTx9x_ZQVV?Wbna*lrrK{-?gbYYAeb;wUL2xeU4shAe zj(lsDo}qrB;1SIjY!#?j(+P|r**S*D#L{=8c#{aIxmQgFDqkO>t>0t%2E=9>%LhG< zj2ye!QQz{YRFz=9gsJ>drFu{)FtW7o`uips$DVF$>_L~IrwZ5q# z64Wy+?IQUUeh_Qt$QEX4shDFwh8zfxUHB5Jbk$E%Y3vtT{06dLy8D)p?I%f*7=!mC z=wbC3ayvX{Ffn$b1tX+ly-#yor#@h8kOuR694#Yb2#NFi+~x8$c3T7~5RzJ&Wh5j$ zzPZUyNd~}ivY(7X`TEr-t~wzZ+zOCq!5~#KqA{aKB4tmq$jgHLlor%M3y|^~2~-}` zuf)-Qo^mqh_I5axL*Ey_Zg4DH>H5`rF)!Y&eT6KNMgFFBw`Sg%`4$xe9>NK|!iiq3 zsTry!)!~ifxP`3#NKy6eGVD;BArfo6#^Z}loxvw#O-gM>x5c8}y~)|2gvUj@sWZ^h z?B#q4fN>Q~oLrv~5-~o%VVP9jNdoA_+?QiCV#>Ff{3&;qtGSiw(rMwJb5^DAoYx70 zRC$9iZF#7k2J|pYdWTh7(w$>QpD0p>;98knxDsyjH^+k9fZ^LGdWXZ*Us38gj!;^p z1tDWDMNG}-ma#jTIT0VE;6!|BNdiwp%Al-u?t;1A|r%IOq+0U zgfnFm&j7N$F!{ja89J1FR@)~`7q)s|KbGX^wwa9JnPe}qv%_Lem*S`#aE=SWDDQOu z@G3QRu^K>p%`SU@bi{H{lwb+b{lt?$wAJ5*O%m=^*XQKM8|R*3 z4Gl`rP)s&}>WgU5%tu;sP>9K?$7EluRRvyk&P1?JgGLU{GT0xil}Mjjdfl;LcA}X| zKBt+7l+VDG#}brdG3TENP1>+g?FX?IeLv0LH-$PcesnE%+uD@qA14GeYA94PRP#MM zlpr(+DhfI`-eWgf7~QUPUcwBFV@UODpPQ`f-{T54%Xv_?x)hl4tCCc5QJgFc5D6JR zqI!DHPcg|w8273Y2be%=^Hn4HWz;W-SAkTNK%|+}UE(0PqnR=YYQPIV3(SQIbXdpv z<%T$u5l+NDmOuSRf5=CrV-7enX!*^uu)P?~c{NiDo4hTy2G-y`8_EJ->Kw$b1qm#_ zeHRm{b_c`ttHnwSQGiO@I*v_rlJt(2~WZCg_XofLeU+NTS0sQGY z-iU!dTmZLM?03p}yS#+*;}_q3hElQg9~*bWBi$T!sz8kR2~t1eK$@KD<`c7kis=ZL z+H1aPUQWi?`)2S>V$1)q^=WSlucE12C3;t~dUHA=bEqbQrziA2N@A!gTbN+xA`f|9 z_AKkWJtDh78)Y4SQzD_SC!U4v0qG*>5P^px&;<1}$NAZPM)$F%0q7`L8PlC+akoMS zue~3Omjhj*$xJ_-TExO}#-W;gQEd+QF8`AxFl&%skiKx~>omKsZsTdg*LO zqyg50jub|G6@f1bZ&T$tmP6J^CJG;fHn@H98f8m^Wms6=m4ej`o~)px4Hocn*KM`e z=+&mHXnfE}-8oLyVkX_7hi`^k>Xl}4`W$LkO8ct_;_Ou8g}Wje{JF{jPo65!>PhkA zrTBEb0^1qg4{4gy%7-dsVD%N9x9jq5pG1BwPpP>0g5~6cmCLhL;VfqUeJS`D9t(Uq zVS>4!mg=I=@j%Gi5xIZ&0uTcoNNb(fhnOg=ZBG)@^2JqFC)7Dk`o>2*q})K#kJ8Cl zG*M|JhSIInbe?RQ`^(`&9kh+A(xk4? zoMFO|N}fOhw5ajXi3)9?eVYbCg+PTcm(c0`rOoZD6B9sD8=>iZ&tmiSM=e}#&OQN* z01cEGy1@BXT+7>L_vrutouPtRFji$wm~~Q=qx}96PP)j81r(b^G4AGO zgU;uJA4l~x4-`W$JK9yWWfwQT!p?)8G29x8@aMK12hKsZW|p3%l9t>|a^qhPK$<)Z zI~Dg@;`-P}esqu@b;eS}M(w2TJ89a-`PFi#vMwc!EM9;6C=%S)`k3&Wi2VKRx<`_0VL}c)r1)(1b z6$Xcy67_gkZLx>)&h@NsqH8ecUSlQQ<|a%%3|_U$uiZyFgd8{QJ+VFqv!m-^#sPd& z7OHp^r7*iZc$N(M6`JEm-<)!XheVjn`#6Mwx}%`3|YooC7h*Zgct zng%rnivgpx_%urR+-nGT-0z5d@2o(3@OXgD|8f2;&+a`kM@$(P3$PP9Uz0?XF08v# zUJZS^bukrs*ak^`CbDk~%++qSh1vE-X^N$Mt&as5+&AinOq4mvV_7MFN>D|Msk$qmdr2}kiPr~! zJCM&#s?ZH`$PLX#jFd_$V(MWZuqi0j$we{1{2=o5AIpAqjXyiG_6(-|mMfIZOm>{Z zKTl4gLeR;F@m4L*_AP#L+1ssT(w&0TJhyjbr6ggy$Kwd+OXfi*nLCXv+`>AHGGs01 z<ffNoSZ=*ze+x(P_v-~>72}GbpL>k%ro;1v- zl=R?M8u^jUmKS?ypf(PWqwQA&kKfp5hS<_@rf2U=8T>_5MX>wgYCA?ryfE84E_It>@sYJ`VZku^G*x-5-Qpp%up|k( zNMqlc+#m$Vt<4757h5H{tjc@^U?2v-Ig3ZZ#HaZN21Q!)e9cBxQ+1y3)kEZAP!|d! znmVpcq6#z`NQ>CcAGwHK-;b&oEodv}G>7vxIq%-G+Zj|=!;L}WEm|KMQk1F|>uFq$ z(MwEG$4AlDdU6t`ww?yF^eddReyPp4QL2!Khr(IF_nRmi9b_fyMa>uCQZ3ugQM_cj zuMAgo8EQlNq>Z5ua$qP8AFO%VpRF*V8^m$#u0sMfzQek{d+e~puIn?O zaFBAUXxR#oE{Z3wwOa%?6^0NsCHg%Ot4D~t%pyVs5V6~kLesPwB^`oy2uwJw_^AE|Q4oyoc9F6&8~<+L~TQmdM1j1>_;~3(8^pd zKI}rg{Q`_+R5cL->olX9wn7M^2#g}SELkAXP6q%C(kaZeA{AaFWblXcMBlp~YElc< z;Mczfwt*$k*nDdnKkqEzg67B8(uImOXETnG7^DLfr63wl;8_HF)NfROR4+QOcx%#v zR4;18XdWgXXMAtYC#bMIbR&k=AB-HFfYo44EO92S+EjITyn^K@;$4?SoFpqiWDFGY z6N-*RnwdE(c(Eb1$&z-1nSe)>FDZ{5~#62cAh-Sh$iFPtS?_$LJG?c z2_-z(U*JKq6uvasoS@*Am4O_V{)F{VVInvrGmo*jwxWW}=byudHFty6OBvg@i_}Mv z$(3FCRgZLWDg0eZwiLP`m(HZ&7FgucXq4WgC8(y|TrB5HL>Ht zqXvgmLJ}hdPHT2WQ`Ks@FH| z(EQ$A(W@S?yJs4@y0_=s5X$Q43H_eGDg;oypar;^(V3Wv&a26+1kF7AonO1iL@X-T1uEsQY@b$l1Tp$C|Q!Q|FUXT2*2W(rB~@?Z5*s1rcqk> zO>~qP_Qv6p{L7IDGo#lyB|@lLOUD9@<`PCX>GLS@F7o{WX$YV``j!9Cxouyvl>XCO zW>$ic4C$R!YUb&x!j*#~Q72}3+<2n^NPQq= z@Qf|L@21~@l7pD1{o;C6j)I#GOJURXMq8=~XOkH`K7vR(_Z2%7*|b15ufHkwhqszE z)>EuFNwDntATR5s=ZzSI%iV<123dLIFM%^@>?NzaY3D-BV6Wp~g`e(N^`}VNb1C$n ze@pc@NRQ65@4N_5i2iag2l9GoqubgM;3(f(r#}6`lwU!R0|8xuaxs4KjD0egLfB>1 zQseIEAj-bfmAV2d>5Bx=h(&{}23}H}h{bZZ7Qw6|SlS^E^MzI|1^GZ;B*+-%9NPM% zoti_b#Ly(9>T0qy_B&hwIt&PP3h5Dd=~H>Hk0}9MC97o`FD=Yi#*nSyc^qr)3z@^N zi4iZz`ISk=`%c(fTK3RhAT|GF>t-!-h_L_y*H3|bVsWJJvKP85ZLg{W9)lj(p&MfB zwtb1m%__AQO?HvSRJ5~~wwg_DEpW=hi}l&LoK5zFbvu9I>%*LPwtwA3_0jWNb| z*jmO!GXSefT=t2;ne5DXK2xXIf zodPn?Z;gd}ODZIp=PRzHd0nXn8_RQAf!>i>?^+i1;=uAa0uDu|_6NIFToL`G%@Ykg zvT!L9M@cWx1{*M@W33a0xjbwtx4D$R(S4B+pF^gKt!=%L1BDV;B%Ao)`g*Tm92IX? zJ?We=w``Q|L`z^4B>!b$ay#8)<7>nLcfB-FTS-hAMc0Lxkruscx_lO{aTT;uDt89c z7v~lz?yj8d2uxSMAF3B#Fu{pDVSQy;gLaQ}-{ASeA_RsWc)#t6%v+I3+;URGXAY3B zv@8eJ7rCo{zWu$mI5XI>slEICCpmSl2Ihy_swZAc~v_q+PlFV@Q&Ue~RZMbt(-JeXT)EQ<1 zA*FIF+>X`q{opL_G|{Rp^YFk4U8x+P@6wS;Ww33}EUk2>yB=(ujHNAQ%k^FrhrP#A%|VnM7H~eLqb(KI0$-7X4L2KVGI92s ziMm8symM|w(DNCPkVRZeXc6Z4k6QW{n~9O|hb8iDO!G^37*=u?w4kxCP)Z~A2LVWc zXKz8Jp-@dh_q}6=5C_K?`KlT(^srRksKLtI{#I}4Uw-KJ=uUkH=;zeZaEhV=*_}Ny zJQ2$`S-Mu(sjsU^opGW=z^fg2D&Y~JM`b3q8q73iesM$MU`UfFpQ2x0HI(m0UOi9U ztBS1fT;axHiNhRIxjR14F>@^YuH3^j#murw$d0EO9BWf-EjfR7Fj;<43af*+D58cF z6=tqyA}`ab{KLMH4j3pZ#Nc8+rt9@#KIW1^8n~HUct(+>-UKA;ki@~md(B|s#YEYmDjHPRGlU7$XzBBuMjhfmuS9JMe?oIfGG9An(rm$`L zXq8+A!^dfzl|fWJ9$RDdpqp_$Okc+0sm&u&$|w$Wt9Co(kKF-;Y> zq8i|kxG1PEQC@(Kfg;#yuEA8LxyN2LE&>zXnBH{Os8^IexCIpq1ghR*%~LWPzqC)X z;SiG#PabM(DRUNGokV-q8g+Vw&{a$*g!HJInEtaclB}_2Wb2?X%D|D7@Ay0{k#&|3 zpPUI!a;P0F2I>b;^O8s4Ijumf7#TduH<;7r!dxXn(m+v5eS>{_*7i5GavE>!n3Y&Q z1WIlT{$SF{%Tt$B6Rvq4OZUer$SFhZL(!}m(4*i+MA%*RDqkmPqs#nJ;dlrA4N-wuzzJ+xa#bhafQh_;wMQVj#C0YXJuM zvk&7qk7vmh4rDIvQV36t!rXO&H4W=gEs6ZE$mRF&1Yg{Pf`yDxEs@kS0f^hIn|-#v zv|9UtK(Z->Xz@-lRMM>JO#u%oE$>+uLk|OoJK{B*djP+lm1He*4cQ6-14r)eSdtDl zM|K-J7%`O2E5i%+Ij$P&pmiJ9x$}ZR9k8mTMLKDa8LhPnq|A!Djy@t=hFV zmyw|}sAH6(-WIeCQ8ORL)~(!E?5Xu)D19iIc$;xz(a zko+`yC!3&b(quweskE9pMxx!Xf=eX_pl>qIm(XTg8Z&8Fs-iE=KJulZbif-0nV-fB zDp=(c3S%s5;N<7~0ulfa zWQ}u$l*QSuN9eN}q5Gwqh@mCM`i~21AT=mcE8DXYO@ROjQUu`Cl7LN-T>>KQ$vmw3 z<;v(3KE$fx_En4(-HC9~643ug!#fA}@;u+ev3XDxA5cfIl{p0q;Z7C z?a8V;_M;;hOQHj`s8e25Q(7U3j?miVuNV)B$V5Y@=@nTaDN#u+1qLGFLdfCNiJKJ_ zk((DK{5I$?P`yEfgUHf>c&exrN*`;4x==x(V%!)wVC#N}Qk`7gSVl<2ngI^n!5E5k)` zAvH-rBbu03QQ2hG?mzkLJZ_dA2lb7myPL{K()&(2epFO2;Lp;E)f}4j3fCm;Mrklm z&~XKdMIJ3Dd6KI%i;BHzjDPnOn*mG!p;eYkJhF;>p|mbxV6T0EC-Xd3%V!G;DU=+2Nms45uS-f&aTT0Z{o5_Qll*W2uG~$(8xk+ zeTy^VN@{Pg?N`))j=5JW<_k*JMpg^s4TjaOgGJi{j3;K< z|8*}RmN6Gy&({i@)97(EvTY88sK%-Re<&@|@g0iW4`HeB9%o=`o~cY$K}~4tl8&kR zOI$QM_4os0b2ejoOEN*&Gxiq@VY6r99_!XV{n;py&#B$a?WSTc<3dC128&8-d&ayD z7L()Cr%MzL7#AKq3gBzMkVebXk2X}!0Y;E5Q|ic(%DoccMvJcI`J=m7m$1Xeg34VN zLo&>dim1SJDsd*tk#)HLYzaW<;vxAE0Rj4-#H-k=zUPUwif%Wkc;=9iA~48A=wnST zS#o^{{UY|BrER^Sh3du0TR3fam5Ut-?^+5kaT5*zJX z-{ugdEdn_y4|I5eY?!Mw|K4qj6S;bBD+!H#ymKEePQDY zu^ZA<6wv>tH>xJ&tAi2Rh-XKhge8}@Hjk=V9%)Sh?TWgP=CaA@^ZQ@4A`y78p>PG$ z2M5@ae2gd>&FMY)E`&Cy2mk}5W(|Vdmmw3DWF}!nDQDHck+-yYE@#48U|An{p7-h{ z`^33T|9A^`QJ=s@pU>qK8bzZMve|M5aVk@Ap$_gZgI6{H78ULx&Q%>0+QxN%Rs*9s zE?G-a-k4LmB%09c#D7w7qD2`wU+L~K9Gc(GQKXQ zht5=<8CWYVbF!r%^VnYKSTrUkEdG#wo#nxH>BhG?ldmD}PTmc=2$OXM@KL!mAfS{| zpw(LKWRfo?7kLweaqU&2#!B+#ESKpB~m~o>D=smx=+gV}q1W%H#T?W;vfu?X!9ME>qE71}ISdxZyMkl% zATo{7eo?OMjaJFMQQJW78i2F?1p}RLny3up6vVA-R3qzTQ2GQ~t~zA=f4h@9*oIpB z18z!%R%HvkceIc{+gD1i6=!!D_$m`!eOpZvxc(h3iT>C(V+Yh zY{e7N(B)j9>IuJ3@l-a2W0~{msyaG`iqHOB@ zqRzgm`W@dkn+cuEfW<b|Y8+R<5Jb z8MB`gnmZ$oDSO~`Tn=iY^`d(F6CkBcWIz9sU!=cd&gV=y_HJdv>hN8=zY2R97tanp zqyP{F7F{DC)?Ai#w70<4j<1-FTQ5CxklZ}_PbX{eD1*r42=4a)&xiWkLS9Yq?LQ=9 zzrAj^)*`@HJUBSFjN2ZGyLK{V+e8(6UpFuQWZM$UD`;8y&r?&izJMho(~X!sJG*_{M(OjPF_WH}&`@o`k$H07 zAgFRoZXY(=^~Hr}F=I>SCJvR7Rbhx>y67`4pKhwgWDzkxd=Z7gjV}}J{<{i3So~l+ zr5($viQ*K{z!x%uB4)-*+9n^2G)K;woglblHF52plD-#EqHxYnq!m3rq)LmCoyq+= zKrPT6zJ#voiD=OL`d2j-zt8fOQ23$?E{b2?+>AM7qlEPz_9sExAJ#UxayQSV}YSe_Ob0C6y`s^IhzPFhb8I%D2@YIA5z!0Zl)K@Fhb7k*xBNkd>`!~anf@4fdiKSQ4{O3 zSG!^bshrkmdk9@u%K}p!U5Xy(!uT{@xR1kO+!5G^?#*rxg}LU!Gm~2pP-107bC>lr z;G$WBsAQT}w!Q!3qSG6>jdu2=GZFI)1db7=nW`dT!!Ca|<6z^v)0%3S(Dhix4eqmf z`Yr%|yyo%x3d9~pD0VtxEeip6VV%5I8V5dYip=g5!yOG>l~${uO1crZX~`>z;b@48 zj7nWcqizu?BMvIfK{`T|rcij2Kx7g@f7On;Hhg$`vd5)ho87uZ7F)^q6O7lR?RV$D z7)9ii7EOHi&vc$@gH66E^7y7u{hT-I_=Z^h+y`7LdsKjAR_$-uXiwJ3>ZVT$6O79= z_BjaJQkvm}_e!CKmwdEX9y-l_=V+*n#=|Z{kwtaCrcgPQLK9ui#SXDaHs3lY97M#vb)}i@tB$VpSjVI0ht33`Fp7Ue8X0bGMiWOeEir8QAmuKVq5)ZBUzj^Cc)c z!*NbF8J@mWc?e^toF>jb*nexH1&vBXIa*_F9Se*i$Jkr7c^T$Y(xwGJ_xJ@Z2W^Tabx~EdCD9 zMklVCgM1fy3%fT0D++9GV{>zf@w49f)%%qQ*JpXten0-t3#XmY=RRM*5y7tu_d`2m z{2en#hXfGW}A5q!P-aHn`ofQxTZEh+PE&3_<|W-)#ZShO)v4+Wr0DyV72l zaWdb;crRH7U)2dmqea7os(oVu@>!kj?pUuHWo0g6xX@T0^~S$Fmt{Id9CVQ0pZPv+UZzEr z6WiA|O>FwIQ=AszR!@LQaojpDUnT@qV;wpwwrhjNK{e}Ihm7|4Z6z0K8~#LdW7ceF zV~f-zL~WUtcmS9B$rk`fIA(;8eYFA&41wVVZZ1G6Mq}r$aos3Y)}d~220Nb9Je8?x z#<2L4UNr@O#BtR5&6R5xNlW-|nuBvexL+R7oZw8;BWb~n0 zfTAFCNj$YH9w1}GdpltBjk+G8vRKrh0vC0k%zPD1(oMg?cnEh`F7T0%UBW%bAlRH8 z;X62k_mtTc@-NVbHP2}Ag9ua$TmnXNSoM@lUF(ydnhW-c?J-M*)@M)tk+YQ2`rHuC z49;Y>aQKnZS$H^I6RwU8Vf_WI&kcgko6+5$tW1S^I0ts-@63At1h;+9)S6Dq_^!kY zFwSUrI({cw3O<0A;cbTUY-i;kE@(SS? z=JqcQ&1O`s0_-e|rHy%xnMB7REH^hfjg!sY%BzaE}r z*kmOy{+%Ce)X5h~Guz@sI;?qD7mDN-%z15&yXJTOr%%ep>qxq;{O_ms>QpHQv*dE8 zXv}pF9oIt4O`D?T>dC1TTboNbd2O{b~ZIjEV zz>rn#h6F(A43c0yyfK@<;DNiYbvY79;;$kKtM1Y2VsmspG`)Z$67>;X$ia?7rp}RF zlL+}kn*(OrId2s_aEF%A(hsdQD=^6)SsAj8sak%A$A|2x&gp}vnlhF%N@w_3A6BnL zcvDFc2rv{1U=lt)uWXONAphj09O5rq?suUMay(O4+MjSoU`EuE1eW1>qV?ubP1*ML zhCaprq-seF^4xKo=lbt`smXe|rvzS@T<1j9f3U@$Xs#m4O~r+@&;0F0aF31QvJf~> z(t}MxzN1p;Mn=w2==b|j$6@vQ(@)vRb8V%8>ht?c&%H2+p*wgl^VSdYC09IOM2d-o z>7OKOpad^@6|<*Ih@Fzp0SD08y@ZY8cz+<%r`5Y3-8M9&)1;}lfvfds4%gcYr*~grzreho@x7vacp1&vD$WQx!Oc>3{pXv$P#Ah1&iWJu zu)Qd??z24XpOt?8(?e*jE$!!Ii7#`U0eSl-OsmC*w0Sfk;~KdBR^}}XQ_$-=GFxcY zxB+FDi5Q(TzIoi}hEKczxhObR1xnGG@}EL3IS2 zbBvzrU6-Z!)2fB5d5}9JE(92hJn%vNV<3L{==Qv?f1xs3my_VAJ-NpF(=j+|h8;*ORuvv~?yr*>t)pjPc z`2jJJ1!frr0S>NF(d0{s5C}oE9xG&>9gWyc)szk3P$sWnQqk)xg8%+ki=g%Oa%P6{ z6dySW0OUOFv1zzYII*0W_}h(2>HR2n$)!{R9u>hTIsLLWMlr0-mP--Kx*+XT;_n(w z(-Fb2=?VR9e9QHCgLTF21i>}C6?w}0`sw}@{flDzmE&eGoLK?Wt@Z;%+k1lY_TXa{ z`jw+`D@J@Y`PIc%Ph*oP_K)V2X@l+bZ@(}q>fcrhGJi+xzC{qw92uj9&5eTiB&DLk z9$p!)ZFY4vaLOi{ZomDsnZ9Bx^BbW{=Niv#;b4jj{&`)#@0(4v#w;{u+jsHzg9NP` zaq_I&e7=mJkcApxJ#8K58wRr{eG!}PI}HGV4lKGHXd26!O02%;C1+SRqY-6JHIgS@ ze*rpvMnzm>{5<gkw z3Tp}(enHnK2rI!iYLD+}*xi^JZ&-D9;H&s@(|d!H5jQf-r&9>Jtxd>~xC&0%AeeZ2 zjeDabT!`e%1m(%fB^&~KzpEVi@_2$SF>-r{1 zVbY)kv_cL3b7SrKbo82j!+@wdT&_@n`K)hg_(bkAv8z#`MNRb~d%s1!tDx%BXro3a zEk858S(PuQVkaION*0-7%O)EYgPD$+A{@Yw%N5Ac>c@C#Cxb)ZCV%2J7}#>I>-IFu zjFtfb70gFjhAF5^W*SyZ{eSg7WU|wf(AIIG?!>)%DMCRzO&F>NSM^E(47~aTs2tN9 zVrJCyO+aQ9iF$;mi?b1w5`z*ccW@_fZISNKW;b6PTTUO?T{qRMeX|2^j#=K{@a}g# zas_gtxe1#KUHhE01{s)UA{f->a@r;Eolu`6Wgn^5$ATGMU29eSXF+j6+mWbH*->a! zK;TWEgY+H!8A^Ak5NqgJe^y>)U$f??qO|xleP^MsLpygh22LD3r?Max%DID@g)dIXuPby}lPYW9Kv@fH?~3j8CGdQh`=% zACFRIjYCIZRCS--?jG#?=w$W0DNfIj%Dhmm)Oul8wZCb#zkOm4*ZDrdw;pqUq0DC3 z?BXo5`H7(eXDsdZ*1=;isvcLTJsSCxH}O!xpLfuxeT5iNG9GUhyxtKHGFrC-i!p&% z9d498XrQ-sWEv>kjg{LeO&}HP2Esr6T_XQzCiZ6eGYdkJx&P0Ih(amnZ zM7ZzNVyD8uq6P#hGR{99^d!IoVl!3-Mr7K)?7mmo9hzVv;<(?#+I|s#h-a+Xj4Kp; z4i7rz$mD-d47|#(IXEf~d7vd*&_-Gw-5|Cptzj9%6(?sDL^?OlnYm88nEsOQt#Lyz zAF;C+Lg}UhBA%}iY)U!{qm4haMk{E9#Ak>6=T8{1WP(#*eg_= zDUC889jA-w@=(bNdxo+)tC92XovW#G9MAQ@BFu}zbrFCBC4}rl{w{yB-#5Lz%i0f8 zZAZozU;W#O%=(@u3GQAS7vlINsiq1{0MLp=ggi(<0Rj}XbH(cwhXu+{2q2#bT=uhM zzC3{3?uIf%HdDKH0=3RbanpyLFX*a=d2tPbTu7Q9e!CHnkJ@)$^v<~yp`jENH9j&A zOZLdfT7MuzbF$HB_-SDlzuv6P&^*(+=&^I>IuFHUMKa!Eas?1THHnJT?Xi2J_x`vJ zZI=n69_QKmijVq!{LjI_+LF5RyxBf=iEs*S4~CpX%L}YVfXe_?Zjm{Qrd9v}Z0Khc zAFd~t>{?11YJ{lnyn@H@{|%zfxUloG>fqqwJ>$-mREFBr(SyV<}iK{W+ z=;VXuQyjlHxn;|KU6qMvZuuQ9+6{o$_F#oda}QrQ{o*5{$pFP-ViiU`yK>2@ItW6=i{%>vfFACi}hn<>XU9Z zE0#;-=rBK7WdfYd^m#kGle@e{9SRfjrTg%>3D<0?7t5vZh5ODDUa{9zq{7B`y#oS1 znu^7AQfFprLQ;DFS4W^^=HH~PGE#<;R}HNphVGA3eN53Uxn1M%SUahf^y%@NA(xta zZGZ>)cD7ENIj^BDRv8)Z#t;OPY|py|`Qp2n!^=C(-jOG|fqF04T3%0{2 zncJa|)!skUmtk`nnji`w-98XpbZcH6mwbokqk2`w`3oD(>@Js`4)1Ke@L{n8BBeN> z;~pfZxq~NzxqU{tZ+P6kyJ}(1`LIJ-w4O|~9XBw}M&JuvYrb!X?hn+nN4+OAl(-(# zS`KgF2C7S3vHS0{U(hqwFgIl!W7Yf*W7G!De|It-eD|{^`7!YJZ*F z4uR8k!gVjZ40R*Kb%isz{V;jIyxt7W3`Jh%d3}&&b=|XS-&L%xzjqk^>HC&>n&pjX zMEt_a`ItmJ9EZdgDG#Z$eb7^_3Fqk~JiY60_zqHr10S?6 zb^$2g&P=<~H=r?~4hxCc*Gw63SCXN4sZMa&;ot@}K<~@DwaGKCNjhX0tx2Lga;CE; zvZT4mM8PTqyv5|n{?i3XLlr+>_RT(WyxNuY&UFu@+71)|6PE9xDx*D|>q;%oF3K2e z!j&g~qoUl_yw-4e(z3sf?IKXq?x}xOb?pskMBIre<$ZLk10UM*|2yBS9;Z-|Qo~jr1X_f?pFq#t|Xj4o=vu1jO`!~n%4b|Zm3l2Q6 zB}uM13OZg182=M@45A-LCIewE41=RfXO0KL`osO}GAdx5#Ky9dZ2!NA)q!BfnJrJ8 znCFo+YnKz~m4_!{#vtS901U_+53|9^ouU`e7X&gLH?Ex^w z@&zBWgDfzye-1eXnIVKA^fg`Rs^~G!kh60Ie2Hmr`GY`~hTBHtNGaK~-wFz0kgSR$ zm18O_3G@haXnh|ryOA>~)R6NYU=YUv;@ARa`x|Lcfy%4SwfaEJVO{e1{~|Tb-ZST)b`GHMsrKvs$0= z^S$`(71QkmZ6DDi_)X3pEc<=psb62?ExxT4t6#))B8AM5?uJ(Oo|4<2FO!Q3rw|KI z>IhG=?LUS5cWwT9S#Q7I-W~70ueu-HGnzEQ+@H4|Ufh1%+8bwmLzD?LH~FU%UONt*K*ScbkK5??7~j)%3;V_yMi* z-4omm`#ts^SjkyqM1@iQ)A`lyI^eOZlZeF2`d$lq8&S&Mfx5|A(@jiCr3m3cfBfG0-@}R1z z)Ub+5@f=f>x3W&9_)L8K$fC9F!7-IvmsRyr6(W{7O?v|u(74vac7l-p1D#QF^@`D| zkuE^A^`-72pLY z@=P+S{h+gs>e4+MPeb0#3R$QKL=8lA-oRxXUpTwAr{%WS)ZMVKo`gmm_3WYY+Ygm3=S^xS z5)`O=k==;ZFGMwi=iM*391Xg+CWwS!WJ#8pFuVMM^PLD7S6Q@xr9UY(zY1G-L41Km zI40gpCRM%nW_KHIy(pF0UA-vzPV<}h4+LJ|2;VoKcf(u+P1i^Q0hDTb-x<$qqI8eH zz$&Gt?T^jop2!XDvqeYgb{&c=isoLbQ;`aDb^9V-$A6qOpfrAjW7i#^z>1UnL{9>gdlKL%@`w`^+?)ss}^0X&^>Mxr0 z1e5#zcDp~w>4r`2K05smrKclfO9x%!Z&s#y!8_rgM^q=M6;@w$Oix+JCoEjfqCx8& zz^vJ3BWutoltyPV)(rxes2Q*8JKk~pcRIIA3$Rn>rWhflu(y$5 za=Wr2=VDbh`PD^1w=lGC)|LxJPOdZVo|3E^K^rb4&9N3k92xE9xsVm^SVI~Ht51mt z>l$k6t76G*Y^Cw=T5oD5MOW(+*jG&@-i94jH2>pwf%lt54ZwW|otM7hzsuQA@Ux;J zL`kzyfbEBHxar!tG|-6yk$4D4MR^b5EK^`|CzjZu_SQ;nl_{!}SUjvIpv6aV*G1$< zTc}C3!$7wmRN9_lQa`LMzMyNf9)MFUUwHL4%TtU_RP*3$VJ^a^BVLv7;_M;(?yu~> zQ6bmw_EGzn_}PPYuU~Afc@uW;=}U(rfK}ZeQ=3k;!-n49O!*7QyHz)y6ylGDfWqCE z%C`4STfx*&zS~OoA1Swk^)P~gl@nU?W5FsNXBt-8u0K|#wN1I1hZ-(5115Y=nQi+n zrC}qF|7Q4pz`NegQva7_>ObU>JkLJa0`5&%!1B=o1VoypTn;$p3ukU_aIQM2{ zM(x~~J&FbwQ}^PnZoPbKJfxzKnB@+=m*Nksm*#-3(DgmsN9NB&0rqPS<~D!9Z9lZ^ z_}RL!c0_*DKkp9;U-zesUJV|v{;1OahXtJziI~D$l;L0h*uAE#5u`}203J{=w!jv zTKv+j6$wSUHps_*cf^!pcj#og{B5+d>Aro2LLq9X=(yYdvb zcM}nGKU52=?YopJe-64$MZMws8@>zK9 z`%xf&)%u@Mzd)ScTQ3Lqe}SxyWySLWc4jeMMdlSF@E+7(o7DkMPU`=DUI+L(r++5>bZ(b3miaV93H3IcAim);w%gak1u~)` z@2JVr;Nq_?&($p~7hQhu`yW@f*}pQtg2G*M*JH}5PtNHl_b%Ojyg<|*MJNM@>qb6! zYDoZPL3SSluR2(jTupu@6u%~nLwVUybiggj3>QO>PfJfeKqaFr3OLZjl#B>NRIDu$ z;~`1qJ)YpdHnR;1p-8c^ozq~^f)zN!mR{vbFqrqx&J`qgKlr_ z$}C#@RD4 zZ0DyFJfN1OGkn0NEA@#;U`*0K1Zc2QcfHJnY7?YuJS248_28N|Bh&w4@;u+Y7jnIN zqe~hPgk_3ImDRd4P}OeDIFm-0dz=$<-~Y{t1a34UHw_QK_=zx^!96LE^NHwSwBl`A zZ>_W6{_eUvx_@)p*BH8D>&n0tLYUGx1#iOP`0Fq*m%xxJ3~R=5{M-*QA5-Z}e0y!l1n{CUK9 ziYDWXCfh&xHCbInWN_Zh{--W)_|0yQ+*rFlww}v9QZ_{EuL6v00x88I>l%|J{me%6 z(O>~75krDvY1&IL9%5`6h*o(%y8^`f>Z(2@c~E@UB}kE05@S%(QzILcNEuD>I0PoL zjtry*Mf+~_(Jss8pY;bbYehFsT#2uA8qtr^Xu}QYlnUd}8doVp^)D&1omGTmw16A$_GVh+zGsEm^w6csp`QB)egDd~^R;hMBUetzr?M2bej);`r2<+6LtSLz z>+bkEEzkb5PTc`(inVUgZY6(NWKQ+&!5(X7jAUiOSAiSDZ$_*9rg8{2=ua?|+s(-p z%I@(ViWU|^ai`oD>c6)5b+sMg!-Qj0^v^?e(+Flk%y05Do;$GW%^%^>ebA^O^Gxcu z6yLOAwd(#;1tii&ZP^Hb-}`9$-6DZ_T`k;G3!l?fz~`CE=v|5RsN5%$C)T z;B;FfGTByh*bBMef6wL^kr;Du1LPHyml4JW;_9X*89ygl=jxt7Kn_e`n@nR(4l%G%u3nvN5Uc%b~t78KW4E5t7{@@*<^7Q^C zj6Q3hRg-KgX{|e|W!;ZlH{E`^agR_S&f36DH?!#erOuKD`WcDl#;z^3kVw8H4|@9A zcYPrT@+)LCAcnJkXY4eiIX$30S)-2$^jp`mFn3QXG!t|<3`lss&950q#(=pwK9lRA zXL#cxYc)e4KLbK{S<-!nko2A>N9cCM=){)<`RQo1E%lrJ39BhMuu0v-n>bds{i2r4 z{Y2pDXHO3+!AWNrU2dk);_&)av*6_sz-MyKTI_u%TaN4%Q)*5*JIX7;70UTEVE)bW zLHvq9))9bmo0l%wC#*ZMSy~o;bZK~nM%Z@K`*XLNO|&x{vAZSpO#YL>*xR^kThQ_% zk)bt+R3COeol1OdKF+GKG!t?7N;Wk@@4fM@4hPYo^>G(3ztHc=BeyUbWeh`j4>J1 z*N(l24}`A4>8Z$Busc#IckAYz792P5-kKHEH_m>R$k89@%uzm^b`uxT=~FD#YP*3A z<$~^lLpykz6WO0??(2%Eq!ojdXMBjE@wmdKa1h%oKcFN#f6(gKUw~ub`SIB0d@BTZ z4z0#h@Qqbmpm;aao=kfC0S3<`nP3fxR_#s6l9{U5c>n!m`;G49=fn3+Y*ACbB0dfO zJJevsD!(W5Wg|#UO#cgkKIKQ_Wapky*!x9}aKoKUlvlQ=bLXqteS5gHiYk5P4^<8I z8}-aQqb_&olI^_pir>QHK=SSe4NlnQe!4Sopk-H>U;b}=3p%M!dScZ(?qS)^=;!6O z{u9G(ktq!)vs6`2_!~#7cijgOld5jUc=Asqxb5 zo|RR~B@A9nU0Z6Kf;Su@dG2#mLjqI>a9crRuF^ILx+nBDyWPKQQ3~(C(Rc~)GknPc z`xJ4%SJo3=oc@(L9QieReeD?=M{OPzxfhx8d+lvBS4kAgh@{dE7m|3;>Cuo* z+Lai;XQnNF{SCYQMla3yRBGEt<7T2OwH*e3S%*5b>y0hk%s^&Ytv~zLGhEqv05cm5 zDz#*ZX8VrofJdzV4f~xsZzN2WE6k(9R)mofn?69_?^mJDgkn@%BQIZK zD0Ke>fxZ4v&-%WWK7}>1lCbVot^t>3{55yu*C!9qC%ONZ_^FEAVa`=gZ}33IXh$Ro zN`?B*G6I*gCLUl_iNopgK_A935@mQOTkKP0#DNHPD&~76=3B&<6}&sds%(hHIBxN; zeGh*fsP`VFgi>wubWie+>vc-n-}zhA=yX-L8ICDPs`x; z=A^gn_lQyU78AX#Qj2x!mVsCnLS7OQo z{Zvr>h*|7DsH}85(e0>UNdXkwPq*4r6th2Hvu&_zsHrVZS2>T0Z6{7uzOz~=AXE1Q zwSf(jzaf!0W(|imTxVBu$d1(NBUi86;|D76MY>j`@|CRhcP)DI-n(JzKSR_g{tqxc z$E{A|Hn+u7x&7~ofIIZ}Ke_PvfdwGoV6@+2D_b9&AUn>iTK;_*vvn<|5S_Ol*wxwj zTk5HBlvu{>s7{jzyI6VU*Y&B92d=M1tZ!EM1N!5H_QOcQ4BKMr=zHbQV zH06?)E=dQl>7M~!6ct|-bbMVwcg7i6NmnhHsor-}??9D5CrnF873J5TA8ZW|C{!nG zyp!j$J|H+P5hl4^K^`&zQCHEb+Sp-ta;DPH1{e8Bef;|tc`wy&b(W8UOGo9RpDQSb ztNg};d`I5G0CWjdg@*H74WC7o`~C~)9kt4=2sNoa>0+L70coeGYz&wRdyMpA-J@b< z?csx1@96bLz@no{cjHc9gWOE%omlR{UQY~3tr6PSFocJyLb}U>n%5Tj_2S_(-8!4FZ&x{mr%+ckJI#!bu#5QUIAdHRxYaDf6Gfna1o1s1h{ zxHSFlsi;hhkismEemC_Wv4_Ae>%P5Uoqj?7A%d(uks?y16vPrIwh}g=f5Mumz~cxz zdZu;B{ov%&QPG7;lqA8)a8o4gQSvO|%H{b-O?rA#T{;EJwIyX^-?~0e*Sj+I6ZpMJ z57fQ7^QNsd(bLz&@s1p{k#< zeyQDdBSUhf%;~Auo#6zP=K7@md~{E@@AQ~&t#fY2D0_W;6Ii-@&*SB#DGOnz9T}^l zpA~|7O+RuvJC2++32M#R0<9fn*q;lXr)v-Ylhd4{(qraAp+WI4cgagAWftTzE#dcv z%5oig$XKdF0`*Tg^~W>vx_zrEuT8Z2jCoVOpihGRtDNhnY~BI=)xVa<-jb%(1)kS9 zWtmDAT&Ey5C!6Z``@n*`Kdjpt^--B%ufOD8w?8QOa?k;=wx%x=>+yg8dVl%G@bxC@ z2NsAr-JwC~ESJsKFuf8bEBX%eDf;EZ|73i_;cp0z?&CQVY)!#Ov)FYc!a|a-5i8MiJMB(@OVzgY>!EZzk>h>llwO|Ue{6Q-ITId7(iYlI zFDIpXXbVih|MPh~bpBoqiX!pOcdW4cf;?&K*TW)mzmSl%d8e@vi>2RM4Xc6W7FkAB zoyn^+MHqghEww$y1_`mmRkES)IHi5r`G#b+qZFauowzz?BAz11FZ><6$9PE)4_wDx zo1GJmZ>q{W=%8bAN{0WLP!P0%Jmcv|+(G%oJVVG&o-Hyy*Id%YV>o7$1SVDU32L_M zF_uOaPMbTY$y)#TdmVnrDSZ6`y#^-G zd=|~9>7gnx7#`D=<#_+6j>F3S3ayw6UZ}VC4FR7=(VH~0cL>&2go+15{X+_ zeM%a5;u6T{3eo>3G!PYbupESV^ zBvi*IiDTuUPovuMOq>IOX;o2MV(Z39$-U!Fl?oYgzYFy%^`=~WFz4Et(@pbzb0H91 zxlovp`RaEE^}p;qt#q3sAG_G{btnF}44}z3%>V!*WoZk2OoO=Vrz^hjo)*@H_44JK zyfP#RqqH&>n3Jmfx#UkqF5SGtD|>{~&ZvYCSRFV`PU2BF#w^yvIV57US;IMFP|#tp zjEp(+m~@Y-=^55=tWp$OTNK*zG%GDGnFedrTk3Lp$n{8FJH1?6|yVX z>;*a0YCx8hdttkZDCz*Hez^4O(;?)9e)Y@5-Z<)|Guu{dVbxukRB!-rPrezhzi<_03`hv?&A^#lI3BQ9FaN4hM+4`B#A2`j-?dO6RJ4O|fkpJF}Dg*!eB=7@R#+ z?K@ZOi$Xfm&z8F1&fKH3dft(zY-DWq$+7cnXXyTNv7QjcCjSa4+X8R>f63*EeXMbU zBAMT=DZLJjRSgVKy?ytPlL>SJ*3aG7!KN~a(KxYEb5>2Zq#A7KadF5 z98A7^yzj&@+HV#sU9a8B!Y@WB&uTie@jQG+e>G4l6{WUieh0YO-mIMGo=^P@R_%Vr z_@l@sHAFXF7wWJ5*k8`9)W3de>ForHpO+-@p6x!kWy1IdB39;@>)G+YV0GoXA7%YM z{&3;DJHu_?xpKB_kH&|wHNFYynf-u-L8uk$4|k@`zhQ>S4WCB;NmipjEofJupSjBW z{@HYYpU*y9$oE#0M+y%0f@&rxcm=v!isdL%k?*>Cp2}Kfsj=EP^Gt7??SXTre9@bp zI%cvN9U|HK63fVS=j8%;+Yzf&nyLTtdWJ9de*F7v?Fppaj%m+3KJUEF6Heby(S9?a zb=Ud#M*Z39@Rj3tFm|Ja`6rWC0&;yq{L{eml@G@62OqNQIjPo%E4oqBXtrQS_Vxwx z3|tsq+0GHPFU;b0<2t3`*}?Oc{Mvf}c@`lWCGzK*3G1mHQ_ z{OZN$&06KC&28bK10NA%Fk7$yO`KNT`Yk98p5*bOi-`@i!$zCUDW)FHl*n}jTaMaw3X13v5B-!%Fh?5W=5Ct2o}@ugOc%4CZ+8Z3$p#EzxjEyzPhjWL>6nlL?dJ7mq54PDd*eZmj* z3iIce1|lwDc!P!5&v{Af3b4VXVGV|=yP(CSA(>;|1fP+LB19aXWZRb$CP>|@S+cwk zAP?Mt(qpiMDA8-94>TtEK+x$5IH!7;PL}yogsviT$ZK#4t9Tpi(x>M#l|@AXAfF&} zM6fn2Vjo)pk$rcKq+gqeI#HKilCoQr5_^tUx*wLNFT5hSiP>@P*Dp<6+t%Tp2MFT- zOfRQ}0@Vp~HuVVBvz3mWDe)U_gniK&OtN!-8-f^Jm!MB9y>XnVk83p0RkWgC1LcIH z^G9Gh2WL*qWubSnyUwERRaQh56X5Ym_`RN?+G19ItXY5SwfJ1ZHjyl0!!ve$UtUq@ z^@Xn0$c}Be&Ag7< zdGSG~p^ar%EY9Q=J$xi6c((>gt2YLHtm(yVEsFAeD81@>yli^CSaZZ<;6mWwzdg)7 zO5dTgABWr(jrevfaAtzl>x^Id_078P@uVb;Olbqk@Z}`VAX4C@za z`aRdPkZWPR&^GP5?^XsYpfk$)qTIZFL+pSsnbL^K?_%CK^SQF~a5%fvez>``zFU(U zFTO3jDYwb8Ty<*cbaFa5yc&Jkt^3Z*J(V_NzxUm`hj&e))j#B-i@h0LUsclbA^jZ~xpG z8Iz{z>q^Jk>qJ;k%G{N2oSN^44Z!>QTSnLXn&t=nTzTSjrR+^ZB6r9ssSO9QuXba2 zo9k*I4(?I_Byel0zq)<3n>^w>mRxDZmwL53(a*&(ZKlR_gbl>OpSv<6V zDwi{=n|2;`UCGY3*t~M~=lp(g0(yV_mXg;~23o^6R3bSXK7b4s`O^$CLFRdJ;4zdA z3YcICK7hUOqd|Yj#6zEMdop=C8()FY#2(qIn~_rxP+C;u;Wn99u}HA5jk^h_#T_@Q z5wjfkY?b&UlPL2-zV%4S+-ELg5+TsZn=^F7l9~T?8Lb7 zhqt%T8UDxeu!Y3u*W(U-8f~$2;k@~D=9r?!v%r|&G{MdV3)+^1__Z($>p*ll1t6 zl{$WXO2>9qB9k|^6-)|R)7pr)%8+bgEWJ6qdQtO~s$_Pyg}ea>KN0MLV8)Vwe~nrT zlrevXN*`h*Z2+iz4DVy8aIQ*{qmV(xuu9{jOB|h?C1z0Z>0X!S-x)7_$9n3=-NKqn z;!(gsqf^C&`3KUChr*c_Gio!nmYo~m`G1QFe^X$P{#gsvj)2iEFqcfJLvcal^^1fc z%1I9%f&Bkk0D-FTO1Nhv1etmUrcHC7JFl$k3@A)EhPMSebFb;*sj8OKb-vgM4fw39 zv%Ye;1Y4bxzL2Rl_j2leJNk!(RgO9qjy2QwFfNY!Os}%<%~*vKf5HIRbcb=r8SXk_ zS+P9HeL!Y;xg*Cwe|J{ft1RqSbi3$?Zn=S|>sCKCo!-pGGZPVBds_beIu6X+wiTu`?QF5 zUBSeM!o8+xjh6IekQYNqK(^$W^qA`g{ueDxHi|%n0YvL}R^w`onQF98G}=_Lp(%Kl zMf5MVB#Migj$Hi7M(k#9{|=3qVrJt0HSYIw_ma0 z&*NVA<98I463eL=G4_`Mukvow`0EsOq%=QZUlRhMLthO6>e^^!u0bfFFt0T+H=k7Gvr$9cK2C{i$Yp>~GVKrp zl!YIvGNNoss*(oHi6JDG` zIJ}*iyLOAax+h;7o_y=_zckem6VJuQYl9Prai^2>hdt@H?{3`&gqCpiBdlX|)84TOO&QOG8EflL4v`Qp-v=sGRU z^&^J<Tl8*|V(KWf|B-1qi~JLW=2g}h|Y#kD3~f&ARq*@TNtm1@>d6n1OT(-ray zZQMvFpOB%--R)19MJU5GJwl>?g}Xc|P4WBeaCR^dlVIM}5ftibZjzhO1of$Z|GFEv zlv)iJfz;_zm)s!I0K(sVZ7vD1R(Bk-eGg?x3O(p?|0_~tjIHTIJ~@Xb#kT(8-R&|pn(zI z#Uvgk@-+8y$r0=QOlN!scI@P-R|u0F_p~`+r*{4eCj)Uya=k+GliU}e))Sh*ccZU; z*u~_% zA>uyD@iX9~xuBgaNyVlu#2?9-6Eyn+IU0*l^rP_sJ@a$_o7VjVifRQEf=Z(!)j#Nk zwN%=N&ygHlQ^9=ToPI9mJJO#jTjClB={oOOlwFbm;iU?Io-!9MWT7>wTd>D#L|5rJ zSUTnS>bu31JcJ8H{LLcv+8xSRX06k0NZ8Og&N@HO!4KtY%REHdJgrM&Bx$Ca0X5YrB*gsd)GtD(hM)GZfq<(;Uf`6L7SApHYc#K>}6$Sm)3 zUW`g{^X*D7`r0x&Kgnvy>9;6>9Wx6m0jDIEin9GKnWRinpp7c5#8+a7!H70Zc)WEHeuPdjNbp2p;no|ch8(MU0RZ*MF62IGB{31UYOGw?LY5cU zLeMK*AM ztHv)u#vorEojxr2B|f*5P(^>MV^k}x)(VnmA`tG{w6iwZa`5-;NX%Gh68l|S%a{vf zFqNdOxUj(1$Gp<8hYvt&);r;PQ6sqe;yw-YMl^i9(i*=(M3BKY+UMlDYz z)m98p=>NkS;6g?mn&x`o&{~~s>ngFnk^;E2Pb&ibya-oovk8bYYu~yvFt>MytJ*$W zZ7~f3s4m=^A|Bx^bxyt9KahxpgskK}RS1~Jm6nXLX}n@Hp*Ce1m}H1V8&U#!O*V%NR>Lo^y9y zvcaOm8M!PvCb{2aM9{7NGC10c9Dq`{4f8f}x}JH?(SN@MLAs)fS}9xP@R`l&;w|>P znL(e>hMC`(pInPR7oee1v(_2e6C^f2>MJYUOQ@R%?0E_t8k)amOR`d-rl?JVd6f-< zT>&Lxmee2<)A&pn8r#Dxn##0}Y1mWPAig?Q- zD-VHpI^(i$199Q$iZ><~*U%F&J0I_LahcD7v7Zr1)?k2Rg^OBK_&7>&^{{F2eJU3d z28)$GJF>$e{iNOHN;*k_Br#u^wyjx`3!T zWuZNq0#dJDh=kn0Xr#Hl!H$5Z8Y>H4%xPRNWcOACYu+YzAv`CV_R{)|XJwtD>r80M z(-cEY7A~i=(N4(}#vm|onmc|cqg}(9QD%<)CNshHxs3|~DgF9dTp@UhvHxfRH|Fdw zAjxlaqxFx+%pchQCt6g>avEdzOXSR=CM?NgQzKTITmAk~SZQV+&@ScYfUnqDyUl>J zpQj2%U3e(QotU#=IC{^2yQF`BwovjvRj%aVA>d7o-b6^tBcWlBJN(hv7{)`vpknvA zPE@kjk3leO(~|2}K}GeT_X=c~20@t#QuV(Wv5hi#+Di-0!6oEAx>22zhlO$UGK@BO zs*@0A9px69q_Z_yt(lSFAZ29NpUzE8gk3s(1nzf!kp~7(HX^y7iOdf?kl?|m4>}WY zOTsa>pFH*0Z{?Obzlw8c0F!B5nXOEuLad%`3F*AvXa zQH3>d`=O$A`}tGdFn%x}{MTYfRG2eB#FGF!|4D zR45~@XojH{Du7B^StJ|mZnb@HO59E93xT}#q})L1TLy30=|cCEeqaBeIi>e-y)yHu zHyopP3ypzKeBnOEvO5Cu&5dKacYvlm>TY;A48V+SZP-4;u-x-Cc-0)HtZl7iZe1A1`u%!(j=PcVi_5HG6jT?G~gI?26s zOR~HILx!4PrHLWMB0Rpa+M*5BKu{;U{+NopRT_s1zWWoC*aFP(L>y9p4Zd5|zhrn<&T~}u~-+jWLUfQ#jtV)sB$h^#C1u&I-&_adA~a>qm;ETOqxz!`99s3v@cQYhc1{$K~-@g zvqHg>syJiOR4qL@7aWTtcm#v%p@9~xL8h`ecF4Q9ZJC(2jU6C#naN_|{;)ZVB7 z@x?&=s;HCS-5bh4sW6R}M^g^?$FTKfoSvA5#zM((Vjo>J6kaXT5Xeu2GO#A?R5kMQ zuA?d)*V@#cUycbGmt<`RFq2SLC8bcPvdvziPT6)!i*UWuH=)9UJndL*it@PI8}WX7 zWA?Tb>3ro2i1C?S^!i}VuXFYSN6MeV_j|WgaWVphtq#br;uD%L!#Arg+GasJ9rCoI zpmC7_XoioL#;cZ}7=s~|M4%pWr7(PAo#TriDrcSrb*s| z*t6(}Ahp|#vLKTbk7!dXY4xqYJV2%RF+|NoHn9wg*zp0#bB6s}lA<`HJ*DA)j`G6_ z;D6$qj)%-GI?+)RHFv+CE%?}|Rq&baMY`FLd)+BD-+hGB5z{kpr(l+exG6m8t{lG>#l>8^RRAiop<$PcXibiCqpeI_gq z-`HC4?4l9|R1sI9gB<`$O?30z% z6enFNqDb6wjTY`lp^1tkGxYVCnH%hdbTmUmsiv@r7LU)AHc}hRB|tn46msJ)R(<2nqT)RpYS2VMr~*OvTDVJha3QYg7D7Die7iyS&d?GKid z8Olf=cunXKryA3htjhFfwZB4maQL2CDW?QQF0%-sp)RRb2OFm^=c=#(!yWKl>k8WR zY*4$RzLk9Zj6f#-;Eu_pj^nX3BOn{2xV<})fJMtbh~7frV7nQYsf@%(3mTzJbfCHb zUiP>XBa%`M^qNm4WKQB)pO9{*3Jr&0aQCgZjJv&ZO^NH1*t(Oc6tJNCw19_~*@2GX7Q)6PcKby#!;EyF1o7J1MW29Kfklz0pC9r*hwq)}ImR9(mQAN+gyN(~nujPP@fa#Y25{lt>Pws3O)$*y)eb-TPMwU=gf&_6ev&KKh(gatW)n z6aPz-tKA|oxS66WI12x+;$rY|!O5;`E?8USC`mHQIO|C<34Ug&$o8jnjIoSiYRI_( zXV(EP;!425CY@GstaHfw?5wM-T&Sq&C9FNpZ<3iiA+8%!E>Ba-sk+v!%@J_)Wk<&x zJZE3#l@G;zk`+5H{=l^67>|VuODPa=?lgIvD7LzWL@G%Cv0d-q8+%(vWbK{W8?(Aw zmuW9}P{ck_TWD#d7Nc8|`t27AUS-?(TNvm!->jVUmEQQBXs-)_IKRy*ZlqC<>mq7r|e`}xnNB>7c=j1rzG5mj1ZAwER>?Q4dIrNm$DZ=B%+ zKpIs=^(7k4fj%ryCjb?#OThaPtj+||p^N9AP5)vpjKZgphqM(rUR0fQ@ zt;+&SWvwLXyeQ08nADQUlkKQ&xR4*gEBD9hr6duKVSynul$ky=LGst*4u&igYlJ=! z(-dGPOFeMu)Y=#V6>B<&T=vTNA7CnIwhb6YqRIo*uhp=w#Mp$hz7xGMeQ1WnUCoEx zz3=JJ8$ac)zBex2e*#7^ablov{Y5>s2w{|hZ;cjY^A)?^u~Oxjm z3CjtAt50NinaMV=>NI`uKmgCWaLy=kdz%An0o4s*VhtsY+kU&F3UPYMiNSrR-6a=P zsP-AZhjmN~6CRQ^D?&GfFe6g}xe2m+jX-Eet7`f^v*vuguyJ^?O7sUEjItd%ns%RO zYQHR3Yd_!j=C@FJ@$pN7ZbSW934;y^g9?F!z8u6Hp(w$MSsdPr;et2bk`1dO@)wUU z_@fp&{1R=w9y?_*gO`1_<($uvo1SxvluXyZ)DIWizWVro=~P{rnS4VfC{xfM&UQS! zDfuLUi5?$#i@eN{p+B4`QCaicrS3SSkE4n*M`XR1q@n4ZwrBMYh6k=Ed>uQdKmy{*18Iq<`t#ivjd3%~9XQXn{pP?` zVY(uBXQn(v=9igVsCP|*4?c!=LhOuQyjxK<=(@dJ8L&^cr(&v`avUXADVWMOy=g=^ zta=%-IG!+hKxt1VCo0pt&I`up*H~uent#h+-JTV?Zt#|pO0h9iwO-&xm+8(4KmY$`fp0w0_ z@h~oSEe}jY50r^4NpH>@$XMdr53miEnmDnF!cFcWrk95&V;#_FD$o1RU~|g7u%D8r z4u^$Q>65%`4&~*<(eq~nN^+M>BN$6&PD~dl=+8&z`Lok$T?l(nh>|r4j5n4a=OZS3 z5=s=-Xs!Rsjklg=)7cB+Px-SBEk#Q+M`=+KTvJEim)8XBk0A>z}`uL&l9R$58`W zMkjS`*<^Ukedf!8LC)b4WPAtZ%Dt6sTUeNmTJWr}2QAp%PTx3g3>wS|a zU;2*jboTV6ufz@CBiCDzDaKw$v3R-7wVWd5WA3A^a)>`0u5_MXGmyLZu`7Qr)@W|R z8Fe6&H|7R($Ih>FWEFETFmS%+^-er|4cNY-QaF_P2}a#?M%w6oG3k5 zDF>xP^TjnI8XAHH)o2Okp{W&+S#CtFAyjrUWrR4AKyIX z6Ppkz*P4xN$S5zVlCk6X!l?NMN}>10EWUoRaJAr1o>{YhZ~_X7 zi+4eU@Qh^X0JQSP%4^CvG z9Lm;ylsFu8rEjC*z&_aqYdQ_<8xLEH+~mC@WQs6jCTa8+6upSnGJ#6+~I_76*nI(wHXHMj@rs&qX%2O-D$s8|j6(d}U5uFqCfn zQ*ywWt#_s(3VY4O*%D^6S;InCyI3LmlDFlY99PHRdXagD&PQ_%Z@zFS<*PJaXn)x! z>HH#6@%f}_2Qb!u=*4op5SLf~HARL?m38b#PVqbmAP~&59Bxv8Zu-jIHdmH4M7#^X zi=JqA#jS+trQi7^eXKH?El)Mg2F!Qo_6sB~z<5nhtSmO!0$0c4X8kpNKx#WWoXXM5 zGLEgN@uC?eXZDU`^79NV;h2AZt$xFdT)j0oO*zCG@|u4nVMt(VgAM?gcr7#+s)Esy z%USX(@S7`0SzI{y1XMlpGX8{6qN0hsRU0BQWu;UjyE+vbS_z(xR7hcTiUu~L5@`yj z94Q?PucBvGWbkgLeBR8i;dl1(Ju{`0hUIKANC4H@bHqu?^3EP0kJePM;jU7hD>!E5 zKQ4O+OG+E;3jxFvrTgX$CPAW*k-?csU%!6+2!;ND%MO<6nd-lh!DI^xNmA-If!#8h zm8d7P;I#@xy=w#lNPIAPj7b-&75r-pa6?+2aPf!3(1o@u3lU?B6IdCkQtTjKru#iwy*4PG8HF>XnG-Wz%NrQZH z)0L%<)yAU}yr*p!f*?_5!a#ZkQNvx4m)@xeJ-^r;ed`C3f?;}@t4uUz&Tp@l9d<{_ zirmrLQNjU2V$WkrLI}N%pzhfm!rTUeTXRvD<3z01zxhmB94@BRrM~1yKiGg%9ntBE z$})|fn1qP~2IZ4S^R9DO<a~#Oi#?&0>XYb(U{1(~Q?Vd7l*Cr=fkC5qZ8EJOBm7 zU}0J~+^t<{p7IFIwgfrU5QHcbywdN10=!{b zIdEV z^g6BZd7lZ%&NyiQ|CrmoCA{URbI{t0c3j}LGX(;}A(>aUtegigaIfvE0LhDR(Ugus zRpyZc;|hiaQFb$TnDeYr?X#K^k+`9hq6~I^#qn>N@ruKhe-B^`?N=Q;FNir_kDrJ>sCZBB(}Wfq;qicuz>q>g`yg9xv9o9P0hUUe4>$jI-OKz|iushR zu+wiU!YEVyz(1}4u#wq2TX840)_g24`ER7a9=({!I|`Q*m0WL4ZWZNMX0xMKQO~qi zPaiLm?*Z=!k#};wkf%JCoRnYxJ~N%6FqtnDWpiwM@gjXm9sSm(LAniXDw;Uv2sq-U<50H*5*Lo$MpO5Pa& zn{JF8No$F;CUP4|+bu>Gw*{t^yUQDEs0qiI!n;cL0q z*^QJCiYjMF!?~tf`rune8BaJ`dGrG6=|PW!VH=6n1#^>x2q8-lSVZPVL53(^8?1 zyihTf({omUGxr<#v&Riq?&tcL`!SakRJ41Ncc?3wC7y};`Y3#77yXgea$NeW zr+y}(@i*H~Hn;I_Fuy{#dy^n@Gt&Q#P@SX?lWyoeu_E&S&=ur$BzS8`5&7|L-@r!T z+7$Zj+Oa#%ig~;^U3z>`=boJ1Br+s*Cs`Zsz-K0c86~z*+UPPZ_egP5`g8xmB37=< z|M0Q6#%eZn1#}4g>8=IccDYGT;6Q~CKG~}+L`@|H&yKp|9)mlFbs6a9VMyLDDBGc$ zOYcjKK>d<{M%}BejxN_^hUA)?cA8h)_x*>W6v|-2E}~g_@ zgHj*hcMpNybyJaKJ`pT0k4BfF>0jX9;N{mDsUeO+m|d7aX_FSd1sp$%1UMcn_YJ<7 z2DUN3a+1;_mldr@Qu0|-pKvoQTV{lH4iVBQ`#=V)CZCP%GXFmqKVguj#RT^W|BV5C z!hEUKR37QDKw^E4I=HaJFTig1L`xZ$ECEwRx2BZc+$0gxw}P3uf;<@!4CEdeVho<>@LBATA# zpv}O^`$W_`7JjU|Gz&?x{vgBQ{js>fp*F+;PWq1_)R?W8-WV(wI~hKxf7BB+p6*|d z3vBJ-$NW6uG(ETP%rj+T-Tts-{+^&PPgM}+aHh^lQl$CN!0!H1*Zj0Xsy7+; z$TYyI?(Ga}+^#8`VTv4a`-yU~>j+ISw40K}(4-7FCNS7G`^nab2G&pNKOsJM;hS{j z%=O7KSQU<}z)^SjlvD5W#K)h0jqs0{vn8Py z(CtqmGf;~CikPS^E(E_pr9Ga(XI~mS%#0{VkF@R)TFWaHCmxZ0#ZO)sVjfHj&B2q3 zNUB%#m)PaWAdfjEUMJaK@j*G4L|+f+m95tctxa>OZ)N5WjW2Ox9pv`Q&Ok5AEDe?A zcH9Eak^uLqz?q*{#Jf%6M58Im3SBDX$l8bqRZ+|I>PEJ3Q-I});C(OuH(WyzvnW6t z+-wt)Tt{+nCwra2)vvdpFTyvnPBUAt-)~g_Bz`|U)nklB)4LnZ8{Mkc1od~=gO&4) zZ#%SoZT>{%eraa7)P^)`B(h?enu5{+>vK-yV>YJNl$rB|kr_?|VKTBcrl7(wN(s-R z%LHrq@$}%O@@b_TF4~mC!xQnF&L_+!%(dZ3Y1crtkjA$_S&6e2+D0pE5*hu>#tReI zmm2s~2au|`t}bom=Z9-1RzDNe3SpzZ9~27bJ0ybdt%;}YH#CNAj@@i0pwlWuT%Q4F~{F+Dt!B<{->XokQb$U_<}^X6@t)igk`_PNWK=S31iQFhGh`qdWT zLh$n!4S16dH3Urc8{SII2i55A-yj}M6apmj4;9RR!;OJa*b#T8Z@{>(oj9+fcX<3c zq3(7Gui!6VS>Qd$XMY~rJBrCYDgTKj3JF0Uf>@o0YG(l&lAL@9JQe}f$4Ov(%Y&i# zmG35hfci+KqP%O5p{7khwB?lalj3T;?k#zFd2cRx6dZ=|OF&b4LT|S6)s!JPQ2P}= zxXD)Us3UZAFMN-Evh#xE^h7AgQwn`?jH;}1;2<>$e|>Od_Y3JT$cJ)AJzgD~Bn}7G zE(4d2hgg3rreaR;gSl)nid)OUNNm*7gc&W13 zn!h;CNLKipykLT3ys}H0e3Ud*!b~46ulnln)aYDfpzb*UVB_JUDz4O*C3{DxO#c@@ zTMR`SA)Fe){5-XGLj?YozG-PCBQ#$cP01)_gF(K5fdG|7)s}e+6?3R|a^+8rE%;1? zN)xtMYoV4LO6>O^l}4bqNE0pEd|ih8kG)wBgo5|JcsEtR?`^wl%XR4$(ODrwhAnCE|!U})g5rQM&17z}yFnxMj;(S?n zYf&Cw+J$qb`d{tJ*^Rm%i6h{a%x)W0E-Crk52F^`Cm2EO4~O0mot*x7xl6vu*pW`{osZw-#}|7hbnNH zWbg)|@-GG8n34=zw~V8aArNm3hji*ToN1cjc^`tnN;g`*)}7-ruAOas(gfU89LI5C zU=QD+I7jyUt@J1lDg2bCETh`lgg-jSRofzX*^f9?@tYPJma@qdBo&m5CRAJ-eu1{l zbU4W+iI*?g4HiD|*TKyn?ni&NTid5vXudClI2yYlD4xm#^PaWm?@7 z9(Q!8{L#+H=8bkm`ILK}RkR?`JogxuUMKl7x3z6-_`M{SbK|D|T$8HUe`BD_)aHKSl@{X~rw%oAlt zYZtG%JofCmw)mGK?K|95@{6(?>&ko@i$+{ebe}ij&~g}{-_QFM4M>{{orerF8qCyr zGb}&Nfw?t-D-NPjA!S!`7_Vk}tg(J(rU~oLWQwswu?^^-&xvCRnV%M4>%TYkj+7_w z-ncVr0R`=s|Jf#e9=>^~!a9$M91ihKpzdsf+1n2mV zUm*LHdG;rgRH-%vuE(Mk=+y;H`3$sgRxwZcnJAm`DrFkuY?=mADIsEl5@R1EHb}}D z`&nz?0sLd?eglSB(1kdK!2?2PAK|1fNyMENK0PtEQTl25sJyEy?Bu?1II(CZU)_ay z&}cIAWcr0oy;2vhsSbcBlLdamqn32}wudc?Hy#w3(naJfs=EK7`+m*oD1}`jy(-Z@ z1+z_LRG$mZ)EeA>5#o04YC_G0<$G!ML70ncW|=y(<=z43-zG)6?FJ@~WHwi^fPc2N zoJnA4tHZ(lDRc)xyFDK4?mI(;RD<*tfJl<=9c;2jGsJbqwRDk&{RLMtQ0!MaR;zHJ zH=$(J`mf5E%#!xtRkM?h=!E{!-r*Dcut(?|gXSx)vx@@tn_5q&E5G7nCL1d+C&sj|o1kXr22<;a;yp-Q=*&5LH3G6U6R zMJuh<)bygUlx?xzr}lD-`Ym-wa1hR~$x^puF`iQXx~NbDrz{@^4f(>@cupnbkaGA^ zO^N+k!<`tk)0}JJ< z`d{2qP|1e^8l5D>0;=dNVW_C_l;#`guse5%c?N;V__555vL?;wLV3y_yWjo)^!KCA zu81u1-l`5#8LRR3w&~0=He`LbOGh#zeznP6%|7+a9U_Ymf}`TN>b~{jCv(yT2&NE^ z=^I-`2q$;his0bA=j_YDgjrfV0@T%ZV5ak zw=$V%)N`4|bXcYYL`HbxZWPL;a5{i|+=8&(JN#y^H_hzNZO{{9C^@s{NuRIm??*TH z{c-Q9vK9UJmc%2S`?-`_<8$ik;v$B$fhx(#o&sl!cj9*M?w?GqC;}BE?kAs|-!B#J z$49TTD_mI}0s6I>z5qR^y-&N7@!Q?WzFGrFQ^b)(<}o)q5LI$$2$>(?@_L`@3+aQ&_thodg4#tv6tGOFg4d)0mLvP zhu}H$ERXv3nk>w|xx(Ipu!Nr7U$fiE!>h82uin;+=Y*LBi-s@~V??fC8RH>=6(poB zG^7v%`y`RHcM*m?3W~o`f)GS`#83c#e`IZcFi-~lzx?8VBcTalB{;XwojoOPzjrFV z{QQ=>Ri1Twiz{@OH$S{j2gSu-wQRG!ZaGf9W?tKNXsc@tCV4OpnujCn+{_w3SD8EJ zT2EQ7JU=qkT}Ellt&i7VTjf|lOtWD*DC!un)anCpj-(D$zj9Y7m9l%e z!Vf|rRHcVgW;FuGG9{vcn$_nV|9kz`)j8MWXxRi5XkWZ3}#P-3aa`a&i5mx4L? zxI{@Dl+yT|7mQ=K7;a6!#HwAhV(iDP+j#`p)PDZajX8bLrEA+I@fK=_Nxy7xx8Gj~ zS2j1VKUJZ4L6mxJC}KVb^iMrqoVA2m?VXUEFa^gfSGuprBRLGy2?6+yTPkUchc@1A z-NaH!ED%OB?I49=T)HeDz}R|zI0~a1P7?f}+va-T|1@W~5e}DbmGL7eA8Gl&2mSb2 zdwCh}4X1d&!-Hd*&cdYTHUI9cgk!EkurF`la));Rdj2Vq zP4ej#lI@F{{K12~{lr3WhVhe&Af%5l-%Mb~9fWY$5#;VR8y<{f@=iI>KCu?Ga=92= zI5X$*K`f0?A^SWbV`_pvxtiHqC*JbnC#Ci9S2=)oe9np_qtebHb_0dseKK$CSWbEG zs7(zVMbh<)(*;6?=UYwR&N-h%q%n(jn6i)?j+p$$ynNn>NTu4pmx~O%v+rdATJl;8 z5#=*Ll2H`6d`afq|3;DzG`N$b`*uS^>S~47wCj!9zb~(i$r)~x$_h?C-u6v_jv=EY ze7R^tlyQGCN^?0jJxb+WZksvm>Bo7+23T}tcRk8Kk37MgWu-qTYL9<)Y~nNz;@T~2 z`sd8}LghnNS`)PiF|KB~GbS-RG-bO`-<3m_2`X~0c_+RJK$g$I!a1;gY< zfdUh(=LB@5&l%}{0iVZGI6~oKqflXFpy{4|qI0?>N+54a&s;iMV<_%mq*T>erRyFG ziFnU8u;C%n)OoR{Zb{DQ%=UYPmK;RtrZ3AOb4-|)M2<59X;)Oa(^Md+XMPpd8Hp4(C?FOuBe~?rT zV@K1BWJk-!!wkm8=F6(Wi8pq_cTzl`aMz+|VpsP1YIwrEbUMt5HGh7Dsx&*YMHd!y%`Mv^}>X)?c})_x)=q z^gl(743-bfOG_(2^Fe2Pb^jmL{s14>7xjz7vF$W=(Y59?oXgh6_Lb-giA2bhN%OSUi@8IJQmS zKYE6A%4tUpb<2ux%$n$(?+ojzZ~Qve6wtqTI9~lgdhBioyP!w9Z3lRIxIA_12P?Lt zDGan5Q0s%SeHKE>bibkf@f2%5Up?l-nb}$N&ywlxeU*ten7i(m=Xt}x|6#>$j)WUo zw&NIbtbo(09pc2A<9;PDTYKl(aJ3oQ#sAcbxRA1U1%n+m9)4hFP8oqyGcAUCYG$=T z#LE!6^}eCuQ}fG2yWA(KjKr6@o>2X;dOhQaj)Qx13|!Eb=TJsohdG_m-;F*mkyC2PqjkWSaw`hp}HuXk~_mZDGa9|6hrhH&J|4yFpQ6e2^z<3ET4B^ z6%_h{$tvEbrtV}g?Z$9vvS$Gmt`OZR_rY;W$sckOUsh>?o9aL<``#Oh1L%{hd09|7 z4sC0}2$CLdVX+yAy_@R4{zf2(|M64q(Rf1g`c&fQcYkBmu)_C}3scX7W>c;kXq^0C zD&~!x{W!xo^!jAJw%MCfE_I^+|)D$u(9BMmT&| zzbrP7W8%F6qAl25j+UbHJ2_N*Ds%0Ix_1I>=zEq?qoiosa37?SbEy_SnD<>KTHei- zuUwJZbpY+*WeRthG$x*i^|FpmtVANihx8%b(?4;^L#H@u?y9AjAIrk!$*u}V^Z-HV z))l=&!QNp(LxjnAZa6`NpSaR|cNhaYFR1*>9>gf=+uDf77wGce)+{GhQeJDRX6ii9 z^+nx(56^x)>RSq2h~RUzt5!{OMs(jRWc;}2QExt%X}PP$Z9o;*@55Eo`&Z&z^DO%9Q3XP45u4ld46Sbe9mE-R<+xhz& zHw4-$GiHgoaZg<3oXQm4uAi_i_;2O>OFtrm#}fMG`d!@fwYk%&)u6196Krp+e*7m# zhiRGy0@g%yoVmhxRir^@)jaK%TlBz#Y2tjH{C8oBxs=6XZ2TJT4!axbRs$z%pGfNQ9U3W$Z9ct8WYHiu1SqnT{9i~HKFTM>4 zyP(35u_I--e5i~8Q4)Lav8NwLJYqjyuamsd^ryz?uxENw~p1PuEH!QK` zSvJle;rh=-Fm9?;qu1osf0SuVr#=64uyIFSYwk>;GPn}u%d$Ib4dIwe!rrR*`iz46U~`+km2~FX!UmQto-#yrS2|d~?h5&S_IEj5FCz zrGri#4U8?EW7{v+LF)}tre<5{btwH~Gy=G+%nqjDH6q<;hrd%UqUI)re-X5E!+cu@?(t2oV{6%X}g)tJP z=M6Kyn;ze4bHzZHBkfF`Gtq1N8tNJLjK!%un;mJ8%m?StG#|V{k&KwApP0F|tWTQF zND2}q{&ZiRK(tf44J%nR}l+j;;Xhs|$9MeT0_d-DA%q zq>5}-M5;*vF~WI-SnA~MXQHfNvn&3nOxmPeqiI5sd}cGZ!#7d$V%_I?bYLK^DYoaZ zINS|jg0yLyu-E!$9`Np)pCEhFJnQ6ZDe~5ss!SO}N_hG9iy^(_@^^gpZx= zP@RF+hgVxZ7u}!C=Gg0j!s6p+azxR!*>8wbulwfbe;&U-c64K9T4ge|IK-(#XsXZ$ zMF^ld250+*Qe}rTD^U{XfqGo=d#JCj@FoujMujmC8=QAf47Yf9g4P~B)c`7wW?Q@v zk=WUZSBV;<1uDVZCUZ-8P86kij>2(R7IRba*Mfr7{)pOecXxacEq5C83}tc6(Iw~_ zFkRMBaPCbwnr?i8wrM?*VL2|VylJvldLn!3VY&`E>u!}Tq_E%74N3^(*%Lh+;;?zX4WaA_gNYYZYCtf~@T);5a6e!(jJJb=xt zHzZQ?(LKy_mXu3&K)%M_(D6xy&-?N%qT+{6_wC5l?tQigY^Bzg=x~?Yz0(7CK{Zm& z$A^)r#mTe`?7(th=QLekO21dY4Ven$DNF?K5x>WKje!0zE#pp)_}a|eEVy!1-;Bht z?)+%7!O#g6u^vS7tdFPErI@fiZw()a%1h=+5IVkC2VSj<<@P3yC;pJXf;N-@2aq9ffmO0mzyaApn5X~Rp2meop1i2=K~K*!`G`&Ze%SyZe28_T*64Os*Bu>CHS zq%q&2Fvl{E3jHWQi5++(%H8We7bYf=luOfm_^Hc4ln{9Ew0)d9FEpu7ex(Wm(76ZQ zP+eoYU-%#*yjPjssh2QF_44>LU?hdD+f3tSMt6zT5C1^uHKH`AgE^-xr+>%oA?bR- zE%mk1cA)k82SOlafi$6g54$(YLWGeNlKo)c69MCymMiH@{LWM`dP(1#(BN}Tg1P5G zba)1?`Oi(45E;~X5*{V*Swa^?l_JW=`8M;)8}!V3)#tMOvLAI=Mmi;6I7nJ(V|`qn zgP4Bqbg_iE^iuc&m@~p~dv*!%Xg(WjQ*70$}-oEFLIV$JR2m2+qA2|n&|;eNr+Zk6+d=EWzhE=554NPw|BfM4*|gh zviZ)tsr4K3rt-?*-!sXgY*Yk4;v6Fn@EA^Yeny$_Tu#qR^{J8$rk%%_a>mN!@%AA5`ml z@c|`*2LVbf|SH-;TGQzc*Ed=)Fc5f-T>;s)t!bapaynE$JB;GDp2WJ7^_!ng1Bd_yCXKdV>au zhHxzL=qO?Do}jAX*+V8Vwneoxu+O#Yi9d6~7AH=xZD`|<>*%5{6K z%gErdJrH2Ibg{%_BXuJpb}OR;(3CiJ17n5K?=*SzD!sq${Qh9xmxGmq5G9DV8G4A6 z(egN$O%*gdet*Zjg-!c6f?6&$&Zl6FAyycb>RKFNjOe^bytE$O(DL@=^9|CpRPgZ4 zx1m26bF-h<=5tuA6=FpE|y@M>pcy3terepEm^ ze~&-FwhrCy{fCGj^DEelNxB@u0P}YHUh^jzEotSLKPL_X6J<=j+wWHGJdLKjQ@AKo zZU=0Z6kO?Bb(6IGvH`rm7Gqt?ekUqEsyq2$?@|1iDt;a)x5lu1yvHMRUCUh#Iqw%k@o4JpynQx;T6>Am+h z+jcK-^LX_~P);oGABfya=tR%Gxk%7rZkaW2SrC%U&rdjBe z(r$#bSw1k3=cC?<3+s4H>0&2ZBW zyxGH}>rKzC{wU-}qs;7a(nQh5_`L@?gA2K?ph$}*k|8DD;jnMY2$jMIGdm&5s)dyK zB1CRa7e6}!_9j3_v150r3})xOCuwq!OGS+?T$Gmm&oh z!M%rq1_6=UYmX)rFAd60gX%R)VjfgZ0*?fiZ#fhXPfKy5Tl@~)_SlQOw@jLv`P9Ee zT)WLAX(|=D*QZ>M))WBg)drKe280eS`DP2V#Gq8T{m{)jtvHjzNBjMzXCbJen<#yAkQhZ0bAnK& zXT7A|j9O9VgzI59^KsELmq}2p_JSAK!{-9CiNS)sRX&jpxN5*6m zfZF*DGd6eTfo2YRIuC?QWa2$|ILu8XHQl5KQv5eg$eqh2fxqem#hpk8(|*e-ITeO| zSMNkB7Ma9!15C;v9~VJt7)Zs%iHcbdO+j_8Pu%wfqwa><>My7H;+IJ+qKrB^+jg;H)-}pq+>w65yS!08|B!x5u4?biGB&r2ZQbTGt|1erl_vLV z(uquzBXD{NbC4F&N=@;WF1JGJ8p)yKj-}$y8;ltKldCk}g-1lXJ-N9#%@6M=bso2~ zt%1#MfvD)kj_@pgvICYTW7t#fnWd;t|I;VrzHR;OX8ZF&L#jXbjrra6E4)Xp$Zp7D z8=l^?f&R3g@BsBU2ukl)H)*~T2m}Jn)I*auR4WfWcR&-4)|LzM2R{z`?B_Rjz&ZXo z|L2zNKBP|Xa{mxXUZKS16UWZ>t4Ym=T=!2UCFe)%t3QF>n~tcDQ{0FK(E@k|$O2Hp z;z<5Uqw}Hyd65=1SB+b`Z)MH1*h$}&qN$8viDANMy?kWR$zx#! z`w>%R<>N(@&`TTqUuf{)9mSZQ7m5=!i%|W0+O)50Gh4HkV~OFwBs{fmM(0@&GzqX0 zwGUIZr(MDK6+nG8!fR zZuPzN<-1+adrEFJ~OJw~c#$kKZkr z9`==(EJYmM-u63>*XrRAZFs{sYyjZU?R6eUo5;0KsnxlES8h_SYgzt|1W1(N^5L@O z59OPeco2~gyE*3-Z}GxoAWz`%gO#!?qC79@917DsXgp?NZQM@MFtM{O>I(@+Fi#tp-jp zv%Z@}z)=$-MZylG^9$N|mvzqi9-4IdVcKK{Fb`+>!w!4mJE9M@uHr!hQ)=2-2?%4s@I-aE)a!Dw+E#L4lEP%5Y+ILSa$?NFiihvDW@+; zdmJ5++DozTh-I0ivFzhBv{8>xhzl&?aua{YpkZ=(Nf{>MxV}>#M)!V z9VKSpSVbmq+j*_oO)$6VW*Xp*-3pE7prU>6Qm$+c!}Ap~TUu8e6PAK>S9p9YNujV+ ztR_@n8}TM?!x!%EfASHz_^7VH1Nev6s>}V?;yxbYIGH0wf35gW7=rh5hY-NFk~=Rr z)eQEiIE)FK>iuyj!x2=0bx*-HnO31Dyj`kDN^qjSHOyQ^QI5em`?a0yQWF_WolD*QKBh8u99 z&+t%K>|VOK@AV86`0NnM%!hN__JK^g@H5<*ba5kW^J8sxp$5;BkNISu%h>z1?H)({ zK^=k5fifuSTlDGbYzcmz|C1B(Vk1%Kn{%!^fDq_PUECtpYo~+|`dCs_a_#OBB2t(z zg~g(NE`(?v=V9MuIo&reUKwIQF2)2U|J2TH?oPug+Tuj(HBQeKJ_Rk=`Cj>Hc? zZTnkN5kj)L5%#&baa^$#cG={=?W)7z`1A{!<=9;QYw%G*7YQdNxXk!zvr(Ie8^_kq zAeocU^-I?@sZ_KYyLQ#JaLV{U;K?ZEzLxYA_&VUk#L3*W@MhPVi1_H;XV*6HUOx)T z!s>&`rQ1SQ%KX`m8(HLe4ww*dxd<1?%!%E!X0|p%E<5pNYO8U@aM<@_D(WtAtoKDS zG#Rxug1=%UE62bXCm zL^(aale~Y3E?Kvw$bEA|5Fk;7zM|FEvb}?h_UUo*THEkF;Ac2h^hWgkOSYkz_?1b~ z$_ZxtllkjiJO1H&5p7AcIOBChT!t*}aSn`bkpx>;fT5+H5l-e^wCm43Y2#6T3-itD zgY+Xcq_wqINP#`odKkh(w~O=ltQZysQQsv|@`)u%4A-{6pQ{d~ioNPEFJN+F zmVzNJIWKC~5_#_78b2bLVGKJ(c%N{4;+*wiMa_iJs$OCPjO`w4vq-kAaXy$l(0VQp z8H+<#(e?jyvyaky5qI*oroT*^oo5b*?^ZdkooJ1b+uFUSlYyQiU^pNzK>gFRB^Nxo zog)0L4oKGLua19rtkSX7?%F)>ov1yjit{-2K}8WIE;n$_f>$^Op=g&$QITt7!<(`H zzOx*hr`}$9fFDRa4b_PKkDC+JtrbD~Fg!ewvte3C*5pdJ+pOX(569%b#UZuwbU0xn zFi?7fGi_CWkUDgQGMg1~6VlNf^ zQses-f;1ZI1C711h*77l=jgXsqGMIlxteZeS}+S zQ=p1YW>U0D%|QD@4n;uRRUvCb{tCP>>aFIik$xY2V|H2Qv74}9w(~rYhM*em=8_b& zK!P=8RCy@-p^$9n{7EC1cDy2jT(eqNp@N*4zGcCPl0tw zA6K+_r%NnPjJYQp{q7E09Cr0Ixw$Wq>@EQ6xdV|z7lr}+X+S9a_mpUOKwVoYFkzeJRo=(idpZtM%zeY5Nh?dH=W6k@dI4)H&jwx z_gU20Nia4Q-2wX;^D*Z>p*flyGgOTe%U=|k>z3n>=&|lQ5ObjPCAb0;i&hwEToxmR z4uxUVIOvzEJ`@reWmUx2d5T3OC@=wnSD2mup04Z&{ZWDvT&KLm+DN>^GoMwQDeX(@ zV8ubR(&es{m0=m6(QEJQ{L;0Jd`GQbpS%#q#i{F3f`^T$k}0W7vAQQ+=~vWVBG*H8 zhSz0pgJCrE?GQzYZ_eF-yW^T)*yFOR41#B`*++ep)05!jXrFuH%m2C(xb^F($nq%Ax3R_ zBn-b}slsjC3@RhkNXCGepoAU+C+GCMrtApk8MY)P#~r9m+yE5Foe&aBDPzTS#?F`; zi+}il@BN-U_Jmr^p|~BF1K+{|F>8)UBo(ifbG;1ER_sd z2d@og`@WsHVjzaEAaOx!ImJ!tK?+@RmCiV};(Rq7rIXZq*|I9U=B>sHn~>nO`s~0b zWn#|Hn)8=3Aq}P$P$npaf{ofSMmAo4r6P~Dj6@I_Z)FUUoAMBMhCPB)Fox@T+u06f zUZNDt64T$D2~~cLY79qi@ZQMsmqf;}ZcqgMutd`#Kjmo6=rEAc66m_}d&3S=rkO?! zCh3@-W>E$@meK$H1=E;dGEs_3?}$1dlU;wJp_-DSjB;WjYMD0yFQ)QIy(ISNOx4wV zLxF;2@UX87?M>7y@J1t_3Y7-21r=&Uh zTW_aAS(#eoA9@={-*5y8c}B#=%M%lT~sICxva2KVUcZ3DM!+{mw; z*X>$~efc90p0@tV{cH+vt@nSf#*GOz;H!#oJx0ldF4AKvrZB08j9kge7v)TCIFR-t zgoTR~1z?m=+*#0TQ8593S||L_9#t8qY~oE8!UNj)Vx>;Mo8<_@4Em1#tW8VAUv@Re zEJVx*C4+#*z7Z@BuCFYqQW2b^0V|Da&PIeEa7MkZ4bHf0vZwI&j|q+IrZqh6bNttL zs{uKRhX&04BH7&3U4bwcYWE|bnb#jAt$+WecI+1D3~OpJK>ft~C(c#HJn?MMPEl8>JGouv2Q{KqWL}M!zo?=0@b^@f z%HKx0WF%SU691qasN1=&F%-(nL=c|sAr>?$Yh&75GyI2eFj67!+s08)klva|b5F_^ z`p%O}2{sB2H*SYdkVrCSL@}m%WO_l@X_&y>9>`>}6|nF!o?<b8u!c@&2xX zc5?~FksZx`G|P0Fh0OFq!x<3LRs)%ufkKMG#SZ2x_+1>PSMOSVwVP4=)>${A^o7*7 z^4Gue3Ci$aUkfTW6wriqKzF|E2+|yFnrkL z2FWJ}R|3w$h)stvmQ3OJO#;hJdDtoDENJ!~8yef{`g>ef+;d~6N8y;Frn&N%38pJu zfhxgBT0XiwL^`?cMY?T3rbV57I3YHyM*CQbb)1OgPKjU_xIw$v*zoLANQHLXwD(Xbrf#Pr4fCQvPMM*q+y^$y#z(Dm7=}e+! zZ8mQlipG>+^j7*P4ktx$JnJLL(eiSzT?if2E&Ju@p+<^uVR?eQ>_(3-dXJD~$xX-T zNumVP!8;%dqG}6VTN`FdqqvKQIB{v@-Z!{<`>>ZzWW_~ik(-%-TUg)77 zCFbu~CAJk+c#UDyt!Pa!mDpZMkEHEsm^&lJn}>xE=TmrIm}K+a(qC*dH#3iT`J;Er zs9=~^-o{IAl3`jZly1=YZm#mdl0H_O>~Lm+wkl!aLh82x0~ou-R1_$Lep`t7v<1v_ zcf>^HS|+)lCCvVAjQdemXnB1U4cLg%7(?>2Xv`9@a*ce0#1MvO!%KwzT>V)> zj^q*a&4GS5c6}Ue?TGb^GgXIaJc}#3e|t9LN^gi&30CM%A{3Uv;AWo7SwI7kt$$@x zE{^lTjh(8aL=hIARQw_Z{^BTRhE&n9+`$-(XD0}T!3m8MZC}Cg8+~x^p2(-$rsSw2 z;Y6BF(s=JwPY=W$vyPYth{UMqPCg_@=?ek_1Rdr z-ys2#jUGI@zTq2X`Y=?eeft#%v|Q8ZQ$wV8VJ8uU0k)DXwRy=t#;SEt{2`rv3=L_2 z`-C?>Ns%|e7vG7_xJ>mtP{nhO@7haFwUW;3Yv|mCCPCQuVIT=d%FHw&(y(eDH5q&x z4s8^(6Rm}A-q zN>75QJiT~6RL335CQlIw8$XB%?C(KJX6j#W`yYZMZ%Ia;54+R-DT;-8#I6`aI1VaI z0>qS9NLzfCjajyLB#RkFg<V;BLeZ=(}LS;BG%*HOTOhBdj1`30Hf7kyW z8zTt!QlyYc)2cku1~(6W+R~uR6v3LgduVAmWf1p_c=@MpfzvP6xDMQ(5hbs%WjhDlYr08N-+}*cSJxq`oL8!!UvA|v)Qw)zOF4l(T&@c0M&`#aXh%Zu5`W=R~jIk$oM=E+|PAhV>^F zd*Ky$sEYNVr51U|&QKI(&ALMdL+lJRb5!P1eu>ryA>q4pd!!d6|BzJn%NUR8tqZh? z2_+?F;$^OGEVXU?(0s91kj-`pU#Y7AeL;zTej(LXT`UU?dsS+EId3}HVH*@ zKLyzn>VfG6Z7}BRGs)X3J()@=cBU^+St6;-{rt_!Ubr$~!!16ZaJsmEKJ-phB`fhy zi1T37eR>Y*-}%d8s~Y@Rs`TI@BCnu+{M6-bS44&qztkQ?kTjj9w#VQzF1^5afjX0y zIO}F^J&YULc!^%dTmxg-?JaRWJazsu7~4n1-N%3UXw#qWu_Dt z*vhjZ+r}LAFeW09^@qR6#0No)X^}%*zOxGhk&FTb)`YWs(w-UbMeE&ex+w}uG%n2dx`WcMGEjv~n$a5g7W<&aZZ~P{iFMCWtml2+psHn!&$_#}d zZ-vRVR+$PNUux(&bwEB{nMD=-whg5Ym&gX#imbiG6+SM)Yf1UF9g+-PSOyu#(Vzia zChV`h!mfVA^nDc5WH^_Pg>s!i@i3-kgj!=93Qo}ko_p-z?_GeaTVBYyq}1`Vkwj*f zs-Gf8S6t9IdAp$AekQ9pg_cvWvWogRT$Nx(Uja*M*veQc{#Skl;R z?L)dO_|pz3aP_#jfVpZBrrqh&uEi9}!G9?i8_*K(JT!&=Pqor-`a&Z;tR<~Fbs@BZ z)GS}}3=zQm5IP*#V>Vv5wNuD+hF!LdSo0oeD^;~VP?$DewM8DC6LQNO#59-%pD2ae z=R<;k!)v^`Z~kZlnzvcQ<9*S`NAx#q8$}FZ=3XSvLr|7XC-a{oX~Kz_1XTS`GNdUf z`yfM!BlNgiOA5!-gVl=@X8?;h%P*g!+|tt`s(o0G;SRdNxyARP2BZTxDf*s`6%t+c zkwDaT+TCQcB2Bd#c3#^H-1!h`z!OyRf&N4s(-N3Eq*;6xk8k0>%vaYWshwaAU3pn% zM`{Tn@eXypGIHfOWIodckyHv63u{G3oFk=2RY4!vL?%PROV0Z8`HP7T&|pw>3VOir z5R=3QS5Bxo&kuUV^hgfX&E_m z66UE1{$`_)?PIU~LuW@xd-varY|$#VWa>X;deQ=ahwKX9RYkc-FSj)?vrNdr%qQ?- zAm>_W`hfbaVXh;c9QCxN8_j%Asm~{e>6TETfOh2{xuS2#JFg-|feDz|4TVVMXE@rq z{c-#%s;E~m1|FboS{x{zg^^Rv=Ez^ji3zH*UM{x7v^Iz2Ez{HQNkezy&Bp^Uu1LIn z3dEUN!g>rV-Bp7^>RAD`jKbefazi2M4lWuQoPonCW+}qHW*OIq>dnwZ_uVq$HaH}J zdXjOWrpWQA}PThMgk($(yeNm2hS@I0f7sPGQg5%$Jb&GXnDwM9;qnRb! z`7zVJwFN5!bne&V2FlD@QBQKMF`XJnxJfiS3J}Qx@!EdAleIF~&4Mfz0;!(KHxOog zv1e#&XBoV3>_2a*#9g)N_1m%+J$_!s6g)X4A9cG(B_WLRXuw-B*tv16e|zXv&#_DF zbAu{E9!0AQ>y0a`8OrN%v?Fd8zzY)cF@U0s?S=r;oB4?qX~$Cg8)?7#mMFnTYWd|G z#nwq}$L7X#c!T%IG&fu24NRfP7Bp{AFp=>wjP-hH(CsGqxuuU40dxd;slr%hrThE=7maL}T3Ks2yHNrI=$*eSJ0j_53BD@>X{+T*c^|NYlfviGob4bI^lA1L4bwdF5L*VbY7!w7EPXGJ ztl3sf$u?G9T460s;@*Pl1`m&xnN^YkaT`kruoq*=F8 z7^P)8Oe0hH-dAS~I0(6CnvUr3NTB`kaejhK1lD~_Lp2HRjct>ZPXHAe9xk88bD=(lunBwMjp z`p(9*bX;xYEg963cV6%b7B##6it%2m+9jY-$2TrN)FXNHXr)Iw<7EjH@A3q5M--D@ zJ+3Xp`wA;zQx#x8{n+<-{NYXMz+~*#2pI4QD!>hdO@^z#k9AV~E`2GQUKrsUP>(4N z`)2(+>ByKlz6UkBh>QTwTE$N>!SJ@Y%%C2{7Afe7#w-2%)A5Zvl`P0`sFB+ZALJoj%lCDY8I_HS5icnQEYtf3thBly2j$0F6`hz9}P!SN@4O+{Xi{wh+;|4d13} ztj)V^B!L14duk!HCfg%`o9ujm+3@EDZQ*pnyb-NS?vUmv>0y8ZA?%d1LL?s^9d1w@ zxmO{nd@qj|re4Z0DIAob$v1~04U!bb7P=SaA({z+TO1#kZCA|l z7!iLiZghq=Ur79E1@cXbAAs#b^0lNbr*ecivZXvb_$n+V>c&7O7On4Kp0*hWE9ANG zqF~~6Hfa3_Pyr+ovTZJzcV0U`R=%CDjGPNnCWlA%UdHM2dvTP?6~r`=;M<{gOjylV z{lT=u7jL1fX{=iOozy4fe|YSIV5+7uYCykHiLCV_zvb|wDCsYDl0R8ku2w3Ft);;n zyXG>IYj1ajv9mCS5jHT>L|9X~Dk2PO2DpkINPs&pe3g7vHd`3-n&^c&!<=c7>Gt=T zo;s8tP$UTTcUynd51DkRGq(9=8E>eYjMR=0R6MMCsCP@Flcx~ zWw1ko<=QH>;HhaEC&ko*0!3`O*@KQ-aT_8H?tkfSXgG8≈03b`5Kd6$Fo{7aJ%v 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 literal 0 Hc$@") + qsTr("5. Use Delete key to remove a wagon or locomotive from answer zone.
    ") credit: "" - section: "discovery memory" + section: "discovery logic" createdInVersion: 9500 } diff --git a/src/activities/readingh/ActivityInfo.qml b/src/activities/readingh/ActivityInfo.qml --- a/src/activities/readingh/ActivityInfo.qml +++ b/src/activities/readingh/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("A word is shown on the board. A list of words, displayed horizontally, will appear and disappear. Does the given word belong to the list?") credit: "" - section: "reading" + section: "reading words" createdInVersion: 5000 } diff --git a/src/activities/readingv/ActivityInfo.qml b/src/activities/readingv/ActivityInfo.qml --- a/src/activities/readingv/ActivityInfo.qml +++ b/src/activities/readingv/ActivityInfo.qml @@ -35,7 +35,7 @@ //: Help manual manual: qsTr("A word is shown on the board. A list of words, displayed vertically, will appear and disappear. Does the given word belong to the list?") credit: "" - section: "reading" + section: "reading words" createdInVersion: 5000 } diff --git a/src/activities/redraw/ActivityInfo.qml b/src/activities/redraw/ActivityInfo.qml --- a/src/activities/redraw/ActivityInfo.qml +++ b/src/activities/redraw/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("First, select the proper color from the toolbar. Then click on the grid and drag to paint, then release the click to stop painting.") credit: "" - section: "math geometry puzzle" + section: "puzzle" createdInVersion: 0 } diff --git a/src/activities/redraw_symmetrical/ActivityInfo.qml b/src/activities/redraw_symmetrical/ActivityInfo.qml --- a/src/activities/redraw_symmetrical/ActivityInfo.qml +++ b/src/activities/redraw_symmetrical/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("First, select the proper color from the toolbar. Then click on the grid and drag to paint, then release the click to stop painting.") credit: "" - section: "math geometry symmetry puzzle" + section: "puzzle" createdInVersion: 0 } diff --git a/src/activities/renewable_energy/ActivityInfo.qml b/src/activities/renewable_energy/ActivityInfo.qml --- a/src/activities/renewable_energy/ActivityInfo.qml +++ b/src/activities/renewable_energy/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help prerequisite prerequisite: "" credit: qsTr("Drawing by Stephane Cabaraux") - section: "experiment" + section: "sciences experiment" createdInVersion: 5000 } diff --git a/src/activities/reversecount/ActivityConfig.qml b/src/activities/reversecount/ActivityConfig.qml new file mode 100644 --- /dev/null +++ b/src/activities/reversecount/ActivityConfig.qml @@ -0,0 +1,60 @@ +/* GCompris - ActivityConfig.qml + * + * Copyright (C) 2019 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 + +import "../../core" + +Item { + id: activityConfiguration + property Item background + property alias modeBox: modeBox + property var availableModes: [ + { "text": qsTr("Dots"), "value": "dot" }, + { "text": qsTr("Arabic numbers"), "value": "number" }, + { "text": qsTr("Roman numbers"), "value": "roman" }, + { "text": qsTr("Images"), "value": "image" } + ] + Flow { + id: flow + spacing: 5 + width: parent.width + GCComboBox { + id: modeBox + model: availableModes + background: activityConfiguration.background + label: qsTr("Select Domino Representation") + } + } + + property var dataToSave + function setDefaultValues() { + for(var i = 0 ; i < availableModes.length ; i++) { + if(availableModes[i].value === dataToSave["mode"]) { + modeBox.currentIndex = i; + break; + } + } + } + function saveValues() { + var newMode = availableModes[modeBox.currentIndex].value; + dataToSave = {"mode": newMode}; + } +} diff --git a/src/activities/reversecount/ActivityInfo.qml b/src/activities/reversecount/ActivityInfo.qml --- a/src/activities/reversecount/ActivityInfo.qml +++ b/src/activities/reversecount/ActivityInfo.qml @@ -21,7 +21,7 @@ name: "reversecount/Reversecount.qml" difficulty: 2 icon: "reversecount/reversecount.svg" - author: "Bruno Coudoin <bruno.coudoin@gcompris.net>" + author: "Emmanuel Charruau <echarruau@gmail.com>" demo: false //: Activity title title: qsTr("Practice subtraction with a fun game") @@ -37,4 +37,5 @@ credit: "" section: "math numeration" createdInVersion: 0 + levels: "1,2" } diff --git a/src/activities/reversecount/Reversecount.qml b/src/activities/reversecount/Reversecount.qml --- a/src/activities/reversecount/Reversecount.qml +++ b/src/activities/reversecount/Reversecount.qml @@ -42,7 +42,7 @@ signal stop Component.onCompleted: { - dialogActivityConfig.getInitialConfiguration() + dialogActivityConfig.initialize() activity.start.connect(start) activity.stop.connect(stop) } @@ -52,6 +52,8 @@ id: items property Item main: activity.main property GCSfx audioEffects: activity.audioEffects + readonly property string resourceUrl: activity.resourceUrl + property var levels: activity.datasetLoader.item.data property alias background: background property alias backgroundImg: backgroundImg property alias bar: bar @@ -99,7 +101,7 @@ Image { id: backgroundImg - source: Activity.url + Activity.backgrounds[0] + source: activity.resourceUrl + Activity.backgrounds[0] sourceSize.height: parent.height * 0.5 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter @@ -114,7 +116,7 @@ y: modelData[1] * (background.height- background.height/5) / 5 width: background.width / 5 height: background.height / 5 - source: Activity.url + "iceblock.svg" + source: activity.resourceUrl + "iceblock.svg" } } @@ -164,16 +166,14 @@ Bar { id: bar - content: BarEnumContent { value: help | home | level | config } + content: BarEnumContent { value: help | home | level | activityConfig } onHelpClicked: { displayDialog(dialogHelp) } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() - onConfigClicked: { - dialogActivityConfig.active = true - dialogActivityConfig.setDefaultValues() + onActivityConfigClicked: { displayDialog(dialogActivityConfig) } } @@ -204,8 +204,7 @@ } PropertyAction { target: clock; property: 'source'; - value: "qrc:/gcompris/src/activities/reversecount/resource/" + - "flower" + items.clockPosition + ".svg" + value: activity.resourceUrl + "flower" + items.clockPosition + ".svg" } ParallelAnimation { NumberAnimation { @@ -220,53 +219,27 @@ } } - DialogActivityConfig { + DialogChooseLevel { id: dialogActivityConfig - currentActivity: activity - content: Component { - Item { - property alias modeBox: modeBox - property var availableModes: [ - { "text": qsTr("Dots"), "value": "dot" }, - { "text": qsTr("Arabic numbers"), "value": "number" }, - { "text": qsTr("Roman numbers"), "value": "roman" }, - { "text": qsTr("Images"), "value": "image" } - ] - Flow { - id: flow - spacing: 5 - width: dialogActivityConfig.width - GCComboBox { - id: modeBox - model: availableModes - background: dialogActivityConfig - label: qsTr("Select Domino Representation") - } - } - } - } - onClose: home() - onLoadData: { - if(dataToSave && dataToSave["mode"]) { - items.mode = dataToSave["mode"]; - } + currentActivity: activity.activityInfo + + onClose: { + home() } onSaveData: { - var newMode = dialogActivityConfig.configItem.availableModes[dialogActivityConfig.configItem.modeBox.currentIndex].value; - if (newMode !== items.mode) { - items.mode = newMode; - dataToSave = {"mode": items.mode}; - } - Activity.initLevel(); + levelFolder = dialogActivityConfig.chosenLevel + currentActivity.currentLevel = dialogActivityConfig.chosenLevel + ApplicationSettings.setCurrentLevel(currentActivity.name, dialogActivityConfig.chosenLevel) + home() } - function setDefaultValues() { - for(var i = 0 ; i < dialogActivityConfig.configItem.availableModes.length ; i++) { - if(dialogActivityConfig.configItem.availableModes[i].value === items.mode) { - dialogActivityConfig.configItem.modeBox.currentIndex = i; - break; - } + onLoadData: { + if(activityData && activityData["mode"]) { + items.mode = activityData["mode"]; } } + onStartActivity: { + background.start() + } } ChooseDiceBar { @@ -285,5 +258,4 @@ onLoose: Activity.initLevel() } } - } diff --git a/src/activities/reversecount/Tux.qml b/src/activities/reversecount/Tux.qml --- a/src/activities/reversecount/Tux.qml +++ b/src/activities/reversecount/Tux.qml @@ -27,7 +27,7 @@ Image { id: tux - source: Activity.url + "tux_top_south.svg" + source: activity.resourceUrl + "tux_top_south.svg" fillMode: Image.PreserveAspectFit z: 10 diff --git a/src/activities/reversecount/resource/1/Data.qml b/src/activities/reversecount/resource/1/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/reversecount/resource/1/Data.qml @@ -0,0 +1,50 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("Numbers between 1 and 8") + difficulty: 1 + data: [ + { + "minNumber": 1, + "maxNumber": 1, /* Max number on each domino side */ + "numberOfFish": 3 + }, + { + "minNumber": 1, + "maxNumber": 2, + "numberOfFish": 4 + }, + { + "minNumber": 1, + "maxNumber": 3, + "numberOfFish": 5 + }, + { + "minNumber": 1, + "maxNumber": 4, + "numberOfFish": 5 + } + ] +} diff --git a/src/activities/reversecount/resource/2/Data.qml b/src/activities/reversecount/resource/2/Data.qml new file mode 100644 --- /dev/null +++ b/src/activities/reversecount/resource/2/Data.qml @@ -0,0 +1,55 @@ +/* GCompris - Data.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import GCompris 1.0 +import "../../../../core" + +Dataset { + objective: qsTr("Numbers between 2 and 18") + difficulty: 2 + data: [ + { + "minNumber": 2, + "maxNumber": 5, + "numberOfFish": 5 + }, + { + "minNumber": 3, + "maxNumber": 6, + "numberOfFish": 5 + }, + { + "minNumber": 4, + "maxNumber": 7, + "numberOfFish": 5 + }, + { + "minNumber": 4, + "maxNumber": 8, + "numberOfFish": 5 + }, + { + "minNumber": 5, + "maxNumber": 9, + "numberOfFish": 5 + } + ] +} diff --git a/src/activities/reversecount/reversecount.js b/src/activities/reversecount/reversecount.js --- a/src/activities/reversecount/reversecount.js +++ b/src/activities/reversecount/reversecount.js @@ -42,7 +42,6 @@ var tuxIceBlockNumber = 0 var tuxIceBlockNumberGoal = 0 var tuxIsMoving = false; -var debuginttmp = 0 var placeFishToReachBool = false var level = null; @@ -62,73 +61,20 @@ "Fish02.svg" ] - -var levels = [ - { - "maxNumber": 1, /* Max number on each domino side */ - "minNumber": 1, - "numberOfFish": 3 - }, - { - "maxNumber": 2, - "minNumber": 1, - "numberOfFish": 4 - }, - { - "maxNumber": 3, - "minNumber": 1, - "numberOfFish": 5 - }, - { - "maxNumber": 4, - "minNumber": 1, - "numberOfFish": 5 - }, - { - "maxNumber": 5, - "minNumber": 2, - "numberOfFish": 5 - }, - { - "maxNumber": 6, - "minNumber": 3, - "numberOfFish": 5 - }, - { - "maxNumber": 7, - "minNumber": 4, - "numberOfFish": 5 - }, - { - "maxNumber": 8, - "minNumber": 4, - "numberOfFish": 5 - }, - { - "maxNumber": 9, - "minNumber": 5, - "numberOfFish": 5 - }, - - ] - var numberOfFish var fishIndex = -1 var currentLevel = 0 -var numberOfLevel = levels.length +var numberOfLevel = 0 var items -var url = "qrc:/gcompris/src/activities/reversecount/resource/" - - function start(items_) { items = items_ currentLevel = 0 + numberOfLevel = items.levels.length initLevel() } - function stop() { fishIndex = -1 } @@ -138,21 +84,20 @@ items.chooseDiceBar.value1 = 0 items.chooseDiceBar.value2 = 0 - items.chooseDiceBar.valueMax = levels[currentLevel].maxNumber - numberOfFish = levels[currentLevel].numberOfFish + items.chooseDiceBar.valueMax = items.levels[currentLevel].maxNumber + numberOfFish = items.levels[currentLevel].numberOfFish fishIndex = 0 tuxIceBlockNumber = 0 items.tux.init() calculateNextPlaceFishToReach() placeFishToReach() moveTuxToIceBlock() - items.backgroundImg.source = url + backgrounds[currentLevel % backgrounds.length] + items.backgroundImg.source = items.resourceUrl + backgrounds[currentLevel % backgrounds.length] items.clockPosition = 4 } - function moveTux() { calculateTuxIceBlockNextPos() @@ -169,13 +114,12 @@ } } - function moveTuxToNextIceBlock() { - tuxIsMoving = false; + tuxIsMoving = false tuxIceBlockNumber++ tuxIceBlockNumber = tuxIceBlockNumber % iceBlocksLayout.length - if (tuxIceBlockNumber >= 0 && tuxIceBlockNumber <= 4) + if (tuxIceBlockNumber > 0 && tuxIceBlockNumber <= 4) items.tux.rotation = -90 else if (tuxIceBlockNumber >= 5 && tuxIceBlockNumber <= 8) items.tux.rotation = 0 @@ -205,7 +149,7 @@ return } - items.audioEffects.play(url + 'icy_walk.wav') + items.audioEffects.play(items.resourceUrl + 'icy_walk.wav') //if tux reaches its position + dice number before reaching the fish, calculation was wrong if (tuxIceBlockNumber == tuxIceBlockNumberGoal) { items.clockPosition-- @@ -219,7 +163,6 @@ tuxIsMoving = true } - function moveTuxToIceBlock() { items.tux.x = iceBlocksLayout[tuxIceBlockNumber % iceBlocksLayout.length][0] * items.background.width / 5 + @@ -229,10 +172,7 @@ (items.background.height / 5 - items.tux.height) / 2 } - - function tuxRunningChanged() { - if (tuxIsMoving) { moveTuxToNextIceBlock() } else { @@ -243,7 +183,6 @@ } } - function calculateTuxIceBlockNextPos() { tuxIceBlockNumberGoal = tuxIceBlockNumber + items.chooseDiceBar.value1 + items.chooseDiceBar.value2 @@ -257,9 +196,9 @@ var newFishIndex do { newFishIndex = Math.floor(Math.random() * - (levels[currentLevel].maxNumber * 2 - - levels[currentLevel].minNumber + 1)) + - levels[currentLevel].minNumber + (items.levels[currentLevel].maxNumber * 2 - + items.levels[currentLevel].minNumber + 1)) + + items.levels[currentLevel].minNumber } while((previousFishIndex === newFishIndex) || (newFishIndex >= iceBlocksLayout.length)) previousFishIndex = newFishIndex @@ -274,16 +213,15 @@ else items.fishToReach.opacity = 0 - items.fishToReach.nextSource = url + fishes[fishIndex % fishes.length] + items.fishToReach.nextSource = items.resourceUrl + fishes[fishIndex % fishes.length] items.fishToReach.nextX = iceBlocksLayout[fishIndex % iceBlocksLayout.length][0] * items.background.width / 5 + (items.background.width / 5 - items.tux.width) / 2 items.fishToReach.nextY = iceBlocksLayout[fishIndex % iceBlocksLayout.length][1] * (items.background.height - items.background.height/5) / 5 + (items.background.height / 5 - items.tux.height) / 2 } - function nextLevel() { if(numberOfLevel <= ++currentLevel) { currentLevel = 0 @@ -305,4 +243,3 @@ function won() { items.bonus.good("flower") } - diff --git a/src/activities/roman_numerals/ActivityInfo.qml b/src/activities/roman_numerals/ActivityInfo.qml --- a/src/activities/roman_numerals/ActivityInfo.qml +++ b/src/activities/roman_numerals/ActivityInfo.qml @@ -39,6 +39,6 @@ 2394: we got a sum of 2000 (MM), 300 (CCC), 90 (XC) and 4 units (IV), so we write this combined: MMCCCXCIV\n MMMCMXLIX: we got first thousands (MMM=3000), then we got hundreds (CM=1000–100=900), then we got tens (XL=50–10=40), and at last we got units (IX=10–1=9), so we write this in the decimal system: 3949.") credit: "" - section: "math" + section: "sciences history" createdInVersion: 7000 } diff --git a/src/activities/scalesboard/ActivityInfo.qml b/src/activities/scalesboard/ActivityInfo.qml --- a/src/activities/scalesboard/ActivityInfo.qml +++ b/src/activities/scalesboard/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("To balance the scales, move the weights to the left or the right side (on higher levels). The weights can be arranged in any order.") credit:"" - section: "math" + section: "math measures" createdInVersion: 0 } diff --git a/src/activities/scalesboard_weight/ActivityInfo.qml b/src/activities/scalesboard_weight/ActivityInfo.qml --- a/src/activities/scalesboard_weight/ActivityInfo.qml +++ b/src/activities/scalesboard_weight/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("To balance the scales, move the masses to the left or the right side (on higher levels). They can be arranged in any order. Take care of the weight and the unit of the masses, remember that a kilogram (kg) is 1000 grams (g).") credit: "" - section: "math" + section: "math measures" createdInVersion: 0 } diff --git a/src/activities/scalesboard_weight_avoirdupois/ActivityInfo.qml b/src/activities/scalesboard_weight_avoirdupois/ActivityInfo.qml --- a/src/activities/scalesboard_weight_avoirdupois/ActivityInfo.qml +++ b/src/activities/scalesboard_weight_avoirdupois/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("To balance the scales, move the masses to the left or the right side (on higher levels). They can be arranged in any order. Take care of the weight and the unit of the masses, remember that a pound (lb) is 16 ounce (oz).") credit: "" - section: "math" + section: "math measures" createdInVersion: 0 } diff --git a/src/activities/share/ActivityInfo.qml b/src/activities/share/ActivityInfo.qml --- a/src/activities/share/ActivityInfo.qml +++ b/src/activities/share/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Follow the instructions shown on the screen: first, drag the given number of boys/girls to the middle, then drag pieces of candy to each child's rectangle.") credit: "" - section: "math" + section: "math arithmetic" createdInVersion: 7000 } diff --git a/src/activities/share/Share.qml b/src/activities/share/Share.qml --- a/src/activities/share/Share.qml +++ b/src/activities/share/Share.qml @@ -64,7 +64,7 @@ property int totalCandies property int totalChildren: totalBoys + totalGirls property int barHeightAddon: ApplicationSettings.isBarHidden ? 1 : 3 - property int cellSize: Math.round(Math.min(background.width / 11, background.height / (9 + barHeightAddon))) + property int cellSize: Math.round(Math.min(background.width / 12, background.height / (11 + barHeightAddon))) property alias repeaterDropAreas: repeaterDropAreas property int maxNumberOfCandiesPerWidget: 8 } @@ -255,22 +255,22 @@ border.width: 4 z: 4 - //grid with ok button and images of a boy, a girl, a candy and a basket + //grid with ok button and images of a boy, a girl, a candy, a basket and the button to display the instructions Grid { id: view x: 10 y: 10 width: background.vert ? leftWidget.width : 3 * bar.height height: background.vert ? background.height - 2 * bar.height : bar.height spacing: 10 - columns: background.vert ? 1 : 5 + columns: background.vert ? 1 : 6 //ok button Image { id: okButton source:"qrc:/gcompris/src/core/resource/bar_ok.svg" - sourceSize.width: items.cellSize * 1.5 + sourceSize.width: items.cellSize * 1.5 - view.x / 2 fillMode: Image.PreserveAspectFit MouseArea { @@ -309,6 +309,21 @@ current: background.currentCandies element.opacity: background.easyMode ? 1 : 0 } + + Image { + id: showInstruction + source:"qrc:/gcompris/src/core/resource/bar_hint.svg" + sourceSize.width: items.cellSize * 1.5 - view.x / 2 + fillMode: Image.PreserveAspectFit + + MouseArea { + anchors.fill: parent + enabled: background.finished ? false : true + onPressed: showInstruction.opacity = 0.6 + onReleased: showInstruction.opacity = 1 + onClicked: items.instruction.opacity == 0 ? items.instruction.show() : items.instruction.hide() + } + } } } diff --git a/src/activities/solar_system/ActivityInfo.qml b/src/activities/solar_system/ActivityInfo.qml --- a/src/activities/solar_system/ActivityInfo.qml +++ b/src/activities/solar_system/ActivityInfo.qml @@ -38,6 +38,6 @@ //: Help manual manual: qsTr("Click on a planet or the Sun to reveal questions. Each question contains 4 options. One of those is 100% correct. Try to answer the questions until you get a 100% closeness in the closeness meter.") credit: "" - section: "experiment" + section: "sciences experiment" createdInVersion: 9500 } diff --git a/src/activities/submarine/ActivityInfo.qml b/src/activities/submarine/ActivityInfo.qml --- a/src/activities/submarine/ActivityInfo.qml +++ b/src/activities/submarine/ActivityInfo.qml @@ -54,7 +54,7 @@ + : Increase diving plane angle - : Decrease diving plane angle") credit: "" - section: "experimental" + section: "sciences experiment" enabled: ApplicationInfo.isBox2DInstalled createdInVersion: 9000 } diff --git a/src/activities/sudoku/ActivityInfo.qml b/src/activities/sudoku/ActivityInfo.qml --- a/src/activities/sudoku/ActivityInfo.qml +++ b/src/activities/sudoku/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Select a number or a symbol on the left and click on its target position. GCompris will not let you enter invalid data.") credit: "" - section: "puzzle" + section: "discovery logic" createdInVersion: 0 } diff --git a/src/activities/superbrain/ActivityInfo.qml b/src/activities/superbrain/ActivityInfo.qml --- a/src/activities/superbrain/ActivityInfo.qml +++ b/src/activities/superbrain/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on the items until you find what you think is the correct answer. Then, click on the OK button. In the lower levels, Tux gives you an indication if you found a hiding place by marking the item with a black box. In the levels 4 and 8 an item may be hidden several times.
    You can use the right mouse button to flip the items in the opposite order or the item chooser to directly pick an item. Press and hold a mouse button or on the touch screen to automatically choose the last item selected on a column. Double click or tap on a previously selected item in your guess history to mark it as 'correct'. Such marked items are automatically selected in your current and future guesses until you un-mark them, again by double clicking or tapping.") credit: "" - section: "puzzle" + section: "discovery logic" createdInVersion: 4000 } diff --git a/src/activities/tangram/ActivityInfo.qml b/src/activities/tangram/ActivityInfo.qml --- a/src/activities/tangram/ActivityInfo.qml +++ b/src/activities/tangram/ActivityInfo.qml @@ -40,7 +40,7 @@ //: Help prerequisite prerequisite: qsTr("Mouse-manipulation") //: Help manual - manual: qsTr("Select the tangram to form. Move a piece by dragging it. The symmetrical button appears on items that supports it. Click on the rotation button or drag around it to show the rotation you want. At first levels, simpler objects are used to introduce the tangram concept.") + manual: qsTr("Select the tangram to form. Move a piece by dragging it. The symmetrical button appears on items that supports it. Click on the rotation button or drag around it to show the rotation you want. Check baby tangram activity for an introduction to tangram.") credit: "" section: "puzzle" createdInVersion: 6000 diff --git a/src/activities/tangram/Tangram.qml b/src/activities/tangram/Tangram.qml --- a/src/activities/tangram/Tangram.qml +++ b/src/activities/tangram/Tangram.qml @@ -33,6 +33,9 @@ onStart: focus = true onStop: {} + property var dataset: Dataset + property string resourceUrl: "qrc:/gcompris/src/activities/tangram/resource/" + Keys.onPressed: Activity.processPressedKey(event) pageComponent: Item { @@ -55,7 +58,7 @@ Image { id: bg - source: Activity.url + "tangram/background.svg" + source: activity.resourceUrl + "tangram/background.svg" sourceSize.width: 2000 * ApplicationInfo.ratio sourceSize.height: 2000 * ApplicationInfo.ratio width: 2000 * background.playRatio @@ -89,8 +92,8 @@ property alias userList: userList property alias userListModel: userList.model property Item selectedItem - property var currentTans: Dataset.dataset[bar.level - 1] - property int numberOfLevel: Dataset.dataset.length + property var currentTans: dataset.dataset[bar.level - 1] + property int numberOfLevel: dataset.dataset.length property bool editionMode: false } @@ -101,7 +104,7 @@ Image { id: bgData - source: items.currentTans.bg ? Activity.url + items.currentTans.bg : '' + source: items.currentTans.bg ? activity.resourceUrl + items.currentTans.bg : '' sourceSize.width: 1000 * background.playRatio sourceSize.height: 1000 * background.playRatio width: 1000 * background.playRatio @@ -128,7 +131,7 @@ id: tansModel x: background.playX + background.playWidth * modelData.x - width / 2 y: background.playY + background.playHeight * modelData.y - height / 2 - source: Activity.url + "m-" + modelData.img + source: activity.resourceUrl + "m-" + modelData.img sourceSize.width: modelData.width * background.playWidth sourceSize.height: modelData.height * background.playWidth z: index @@ -186,7 +189,7 @@ Image { id: tans mirror: !items.editionMode ? modelData.initFlipping : modelData.flipping - source: Activity.url + modelData.img + source: activity.resourceUrl + modelData.img sourceSize.width: modelData.width * background.playWidth sourceSize.height: modelData.height * background.playWidth } diff --git a/src/activities/tangram/dataset.js b/src/activities/tangram/dataset.js --- a/src/activities/tangram/dataset.js +++ b/src/activities/tangram/dataset.js @@ -25,699 +25,6 @@ */ var dataset = [ - { - 'bg': '', - 'name': 'train1', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'train/loco.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.238, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.84868, - 'initY': 0.14357, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.237, - 'x': 0.16136986301369866, - 'y': 0.5003377010125074 - }, - { - 'img': 'train/coal.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.144, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.40198, - 'initY': 0.10248, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.221, - 'x': 0.38829064919595, - 'y': 0.5456027397260274 - }, - { - 'img': 'train/wood.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.141, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.58434, - 'initY': 0.23488, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.235, - 'x': 0.6111453245979751, - 'y': 0.5469714115544966 - }, - { - 'img': 'train/passenger.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.213, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.15311, - 'initY': 0.15368, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.238, - 'x': 0.8362608695652176, - 'y': 0.5122281119714115 - }, - ] - }, - { - 'bg': '', - 'name': 'train2', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'train/loco.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.238, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.84868, - 'initY': 0.14357, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.237, - 'x': 0.16136986301369866, - 'y': 0.5003377010125074 - }, - { - 'img': 'train/coal.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.144, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.40198, - 'initY': 0.10248, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.221, - 'x': 0.6116378796902918, - 'y': 0.5491762954139369 - }, - { - 'img': 'train/wood.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.141, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.58434, - 'initY': 0.23488, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.235, - 'x': 0.8368749255509234, - 'y': 0.5493537820131029 - }, - { - 'img': 'train/passenger.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.213, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.15311, - 'initY': 0.15368, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.238, - 'x': 0.3913531864204886, - 'y': 0.5140148898153662 - }, - ] - }, - { - 'bg': '', - 'name': 'train3', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'train/loco.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.238, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.84868, - 'initY': 0.14357, - 'moduloRotation': 360, - 'rotation': 45, - 'width': 0.237, - 'x': 0.19114949374627757, - 'y': 0.22279154258487197 - }, - { - 'img': 'train/coal.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.144, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.40198, - 'initY': 0.10248, - 'moduloRotation': 360, - 'rotation': 45, - 'width': 0.221, - 'x': 0.6336748064324003, - 'y': 0.7272584871947588 - }, - { - 'img': 'train/wood.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.141, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.58434, - 'initY': 0.23488, - 'moduloRotation': 360, - 'rotation': 45, - 'width': 0.235, - 'x': 0.4801149493746279, - 'y': 0.5791334127456819 - }, - { - 'img': 'train/passenger.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.213, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.84311, - 'initY': 0.42368, - 'moduloRotation': 360, - 'rotation': 45, - 'width': 0.238, - 'x': 0.34251459201905915, - 'y': 0.3925139964264443 - }, - ] - }, - { - 'bg': '', - 'name': 'train4', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'train/loco.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.238, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.84868, - 'initY': 0.14357, - 'moduloRotation': 360, - 'rotation': 315, - 'width': 0.237, - 'x': 0.20365693865396073, - 'y': 0.4241018463371054 - }, - { - 'img': 'train/coal.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.144, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.40198, - 'initY': 0.10248, - 'moduloRotation': 360, - 'rotation': 90, - 'width': 0.221, - 'x': 0.7575580702799286, - 'y': 0.6540005955926147 - }, - { - 'img': 'train/wood.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.141, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.58434, - 'initY': 0.23488, - 'moduloRotation': 360, - 'rotation': 45, - 'width': 0.235, - 'x': 0.6689178082191782, - 'y': 0.4540589636688504 - }, - { - 'img': 'train/passenger.svg', - 'flippable': 0, - 'flipping': false, - 'height': 0.213, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.84311, - 'initY': 0.42368, - 'moduloRotation': 360, - 'rotation': 0, - 'width': 0.238, - 'x': 0.4550815961882075, - 'y': 0.3317635497319833 - }, - ] - }, - { - 'bg': '', - 'name': 'train5', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'train/loco.svg', - 'flippable': 1, - 'flipping': true, - 'height': 0.238, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.84868, - 'initY': 0.14357, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.237, - 'x': 0.8474925550923169, - 'y': 0.48902144133412745 - }, - { - 'img': 'train/coal.svg', - 'flippable': 1, - 'flipping': true, - 'height': 0.144, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.40198, - 'initY': 0.10248, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.221, - 'x': 0.619976176295414, - 'y': 0.5354776652769506 - }, - { - 'img': 'train/wood.svg', - 'flippable': 1, - 'flipping': true, - 'height': 0.141, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.58434, - 'initY': 0.2348, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.235, - 'x': 0.39375402025014905, - 'y': 0.5374419297200713 - }, - { - 'img': 'train/passenger.svg', - 'flippable': 1, - 'flipping': true, - 'height': 0.213, - 'initFlipping': 0, - 'initRotation': 0, - 'initX': 0.15311, - 'initY': 0.15368, - 'moduloRotation': 0, - 'rotation': 0, - 'width': 0.238, - 'x': 0.16741036331149514, - 'y': 0.5015074449076831 - }, - ] - }, - { - 'name': 'Level 1', - 'bg': 'truck/traffic_bg.svg', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'truck/engine.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.860, - 'y': 0.573, - 'width': 0.233, - 'height': 0.109, - 'rotation': 0, - 'moduloRotation': 0, - 'initX': 0.866, - 'initY': 0.754, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'truck/cabin.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.847, - 'y': 0.435, - 'width': 0.207, - 'height': 0.178, - 'rotation': 0, - 'moduloRotation': 0, - 'initX': 0.153, - 'initY': 0.789, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'truck/container.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.358, - 'y': 0.489, - 'width': 0.676, - 'height': 0.271, - 'rotation': 0, - 'moduloRotation': 0, - 'initX': 0.338, - 'initY': 0.135, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'truck/back_road.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.181, - 'y': 0.633, - 'width': 0.198, - 'height': 0.092, - 'rotation': 0, - 'moduloRotation': 0, - 'initX': 0.799, - 'initY': 0.146, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'truck/front_road.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.766, - 'y': 0.617, - 'width': 0.403, - 'height': 0.121, - 'rotation': 0, - 'moduloRotation': 0, - 'initX': 0.501, - 'initY': 0.760, - 'initRotation': 0, - 'initFlipping': 0 - } - ] - }, - { - 'name': 'Level 2', - 'bg': 'truck/traffic_bg.svg', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'truck/engine.svg', - 'flippable': 1, - 'flipping': 0, - 'x': 0.860, - 'y': 0.573, - 'width': 0.233, - 'height': 0.109, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.866, - 'initY': 0.754, - 'initRotation': 0, - 'initFlipping': 1 - }, - { - 'img': 'truck/cabin.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.847, - 'y': 0.435, - 'width': 0.207, - 'height': 0.178, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.153, - 'initY': 0.789, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'truck/container.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.358, - 'y': 0.489, - 'width': 0.676, - 'height': 0.271, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.338, - 'initY': 0.135, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'truck/back_road.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.181, - 'y': 0.633, - 'width': 0.198, - 'height': 0.092, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.799, - 'initY': 0.146, - 'initRotation': 270, - 'initFlipping': 0 - }, - { - 'img': 'truck/front_road.svg', - 'flippable': 1, - 'flipping': 0, - 'x': 0.766, - 'y': 0.617, - 'width': 0.403, - 'height': 0.121, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.501, - 'initY': 0.760, - 'initRotation': 90, - 'initFlipping': 1 - } - ] - }, - { - 'name': 'Level 3', - 'bg': 'truck/traffic_bg.svg', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'truck/engine.svg', - 'flippable': 1, - 'flipping': 0, - 'x': 0.860, - 'y': 0.573, - 'width': 0.233, - 'height': 0.109, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.866, - 'initY': 0.754, - 'initRotation': 0, - 'initFlipping': 1 - }, - { - 'img': 'truck/cabin.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.847, - 'y': 0.435, - 'width': 0.207, - 'height': 0.178, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.153, - 'initY': 0.789, - 'initRotation': 45, - 'initFlipping': 0 - }, - { - 'img': 'truck/container.svg', - 'flippable': 1, - 'flipping': 0, - 'x': 0.358, - 'y': 0.489, - 'width': 0.676, - 'height': 0.271, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.338, - 'initY': 0.135, - 'initRotation': 0, - 'initFlipping': 1 - }, - { - 'img': 'truck/back_road.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.181, - 'y': 0.633, - 'width': 0.198, - 'height': 0.092, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.799, - 'initY': 0.146, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'truck/front_road.svg', - 'flippable': 1, - 'flipping': 0, - 'x': 0.766, - 'y': 0.617, - 'width': 0.403, - 'height': 0.121, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.501, - 'initY': 0.760, - 'initRotation': 270, - 'initFlipping': 0 - } - ] - }, - { - 'name': 'Level 4', - 'bg': 'car1/car.svg', - 'colorMask': '#999', - 'pieces': [ - { - 'img': 'car1/windshield.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.492, - 'y': 0.309, - 'width': 0.563, - 'height': 0.227, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.301, - 'initY': 0.133, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'car1/tire_right.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.226, - 'y': 0.720, - 'width': 0.126, - 'height': 0.147, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.863, - 'initY': 0.123, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'car1/tire_right.svg', - 'flippable': 0, - 'flipping': 1, - 'x': 0.782, - 'y': 0.720, - 'width': 0.126, - 'height': 0.147, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.663, - 'initY': 0.123, - 'initRotation': 0, - 'initFlipping': 1 - }, - { - 'img': 'car1/bumper.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.502, - 'y': 0.656, - 'width': 0.710, - 'height': 0.184, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.405, - 'initY': 0.892, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'car1/grille.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.505, - 'y': 0.600, - 'width': 0.365, - 'height': 0.051, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.382, - 'initY': 0.825, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'car1/headlights.svg', - 'flippable': 0, - 'flipping': 0, - 'x': 0.782, - 'y': 0.506, - 'width': 0.134, - 'height': 0.125, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.90, - 'initY': 0.85, - 'initRotation': 0, - 'initFlipping': 0 - }, - { - 'img': 'car1/headlights.svg', - 'flippable': 0, - 'flipping': 1, - 'x': 0.222, - 'y': 0.506, - 'width': 0.134, - 'height': 0.125, - 'rotation': 0, - 'moduloRotation': 360, - 'initX': 0.90, - 'initY': 0.30, - 'initRotation': 0, - 'initFlipping': 1 - } - ] - }, { 'bg': '', 'name': 'Level 5 Real Tangram', diff --git a/src/activities/tangram/resource/README b/src/activities/tangram/resource/README --- a/src/activities/tangram/resource/README +++ b/src/activities/tangram/resource/README @@ -1,26 +1,10 @@ Copyright: 2000, 2008 Bruno Coudoin and others License: Public domain Files: -car1/bumper.svg -car1/car.svg -car1/grille.svg -car1/headlights.svg -car1/tire_right.svg -car1/windshield.svg tangram/background.svg tangram/flip.svg tangram/p0.svg tangram/p1.svg tangram/p2.svg tangram/p3.svg tangram/p4.svg -train/coal.svg -train/loco.svg -train/passenger.svg -train/wood.svg -truck/back_road.svg -truck/cabin.svg -truck/container.svg -truck/engine.svg -truck/front_road.svg -truck/traffic_bg.svg diff --git a/src/activities/tangram/tangram.js b/src/activities/tangram/tangram.js --- a/src/activities/tangram/tangram.js +++ b/src/activities/tangram/tangram.js @@ -22,9 +22,6 @@ .pragma library .import QtQuick 2.6 as Quick -var url = "qrc:/gcompris/src/activities/tangram/resource/" - - var currentLevel = 0 var items diff --git a/src/activities/target/ActivityInfo.qml b/src/activities/target/ActivityInfo.qml --- a/src/activities/target/ActivityInfo.qml +++ b/src/activities/target/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Check the speed and direction of the target, and then click on it to launch a dart. When all your darts are thrown, you are asked to count your score. Enter the score with the keyboard.") credit: "" - section: "math addition" + section: "math addition arithmetic" createdInVersion: 0 } diff --git a/src/activities/traffic/ActivityConfig.qml b/src/activities/traffic/ActivityConfig.qml new file mode 100644 --- /dev/null +++ b/src/activities/traffic/ActivityConfig.qml @@ -0,0 +1,60 @@ +/* GCompris - ActivityConfig.qml + * + * Copyright (C) 2019 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 + +import "../../core" + +Item { + id: activityConfiguration + property Item background + property alias modeBox: modeBox + property var availableModes: [ + { "text": qsTr("Colors"), "value": "COLOR" }, + { "text": qsTr("Images"), "value": "IMAGE" } + ] + Flow { + id: flow + spacing: 5 + width: parent.width + GCComboBox { + id: modeBox + model: availableModes + background: activityConfiguration.background + label: qsTr("Select your mode") + } + } + + property var dataToSave + + function setDefaultValues() { + for(var i = 0 ; i < availableModes.length ; i ++) { + if(availableModes[i].value === dataToSave["mode"]) { + modeBox.currentIndex = i; + break; + } + } + } + + function saveValues() { + var newMode = availableModes[modeBox.currentIndex].value; + dataToSave = {"mode": newMode}; + } +} diff --git a/src/activities/traffic/ActivityInfo.qml b/src/activities/traffic/ActivityInfo.qml --- a/src/activities/traffic/ActivityInfo.qml +++ b/src/activities/traffic/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Each car can only move either horizontally or vertically. You must make some room in order to let the red car move through the gate on the right.") credit: "" - section: "puzzle" + section: "discovery logic" createdInVersion: 0 } diff --git a/src/activities/traffic/Traffic.qml b/src/activities/traffic/Traffic.qml --- a/src/activities/traffic/Traffic.qml +++ b/src/activities/traffic/Traffic.qml @@ -45,7 +45,7 @@ // mode, candidate for a config dialog Component.onCompleted: { - dialogActivityConfig.getInitialConfiguration() + dialogActivityConfig.initialize() activity.start.connect(start) activity.stop.connect(stop) } @@ -105,70 +105,38 @@ id: dialogHelp onClose: home() } - - DialogActivityConfig { - id: dialogActivityConfig - currentActivity: activity - content: Component { - Item { - property alias modeBox: modeBox - property var availableModes: [ - { "text": qsTr("Colors"), "value": "COLOR" }, - { "text": qsTr("Images"), "value": "IMAGE" } - ] + DialogChooseLevel { + id: dialogActivityConfig + currentActivity: activity.activityInfo - Flow { - id: flow - spacing: 5 - width: dialogActivityConfig.width - GCComboBox { - id: modeBox - model: availableModes - background: dialogActivityConfig - label: qsTr("Select your mode") - } - } - } + onClose: { + home() } - onClose: home() - onLoadData: { - if(dataToSave && dataToSave["mode"]) { - mode = dataToSave["mode"]; - Activity.mode = dataToSave["mode"]; - } - } - onSaveData: { - mode = dialogActivityConfig.configItem.availableModes[dialogActivityConfig.configItem.modeBox.currentIndex].value; - dataToSave = {"mode": mode} - Activity.mode = mode; + levelFolder = dialogActivityConfig.chosenLevel + currentActivity.currentLevel = dialogActivityConfig.chosenLevel + ApplicationSettings.setCurrentLevel(currentActivity.name, dialogActivityConfig.chosenLevel) + home() } - - function setDefaultValues() { - for(var i = 0 ; i < dialogActivityConfig.configItem.availableModes.length ; i ++) { - if(dialogActivityConfig.configItem.availableModes[i].value === mode) { - dialogActivityConfig.configItem.modeBox.currentIndex = i; - break; - } + onLoadData: { + if(activityData && activityData["mode"]) { + background.mode = activityData["mode"]; } } } Bar { id: bar - content: BarEnumContent { value: help | home | level | reload | config } + content: BarEnumContent { value: help | home | level | reload | activityConfig } onHelpClicked: { displayDialog(dialogHelp) } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() onReloadClicked: Activity.initLevel() - onConfigClicked: { - dialogActivityConfig.active = true - // Set default values - dialogActivityConfig.setDefaultValues(); + onActivityConfigClicked: { displayDialog(dialogActivityConfig) } } diff --git a/src/activities/watercycle/ActivityInfo.qml b/src/activities/watercycle/ActivityInfo.qml --- a/src/activities/watercycle/ActivityInfo.qml +++ b/src/activities/watercycle/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Click on different active elements: sun, cloud, pumping station, and the sewage treatment plant, in order to reactivate the entire water system. When the system is back up and Tux is in the shower, push the shower button for him.") credit: qsTr("Drawing by Stephane Cabaraux.") - section: "experiment" + section: "sciences experiment" createdInVersion: 5000 } diff --git a/src/activities/wordsgame/ActivityInfo.qml b/src/activities/wordsgame/ActivityInfo.qml --- a/src/activities/wordsgame/ActivityInfo.qml +++ b/src/activities/wordsgame/ActivityInfo.qml @@ -35,6 +35,6 @@ //: Help manual manual: qsTr("Type the complete word as it falls, before it reaches the ground") credit: "" - section: "computer keyboard reading" + section: "computer keyboard reading words" createdInVersion: 0 } diff --git a/src/activities/wordsgame/resource/default-br.json b/src/activities/wordsgame/resource/default-br.json new file mode 100644 --- /dev/null +++ b/src/activities/wordsgame/resource/default-br.json @@ -0,0 +1,732 @@ +{ + "levels" : [ + { + "level" : "1", + "sublevels" : "15", + "words" : [ + "ar", + "al", + "an", + "ul", + "ur", + "un", + "du", + "ti", + "ha", + "re", + "ra", + "en", + "em", + "da", + "eo", + "zo", + "ne", + "ma", + "ta", + "he", + "me", + "te", + "hi", + "ni", + "ho", + "on", + "ki", + "se", + "pe", + "na", + "su", + "vi", + "ya", + "tu", + "ed", + "miz", + "tro", + "tre", + "mat", + "noz", + "mae", + "lun", + "sul", + "tri", + "div", + "nav", + "dek", + "war", + "fri", + "jod", + "kof", + "per", + "kan", + "all", + "bro", + "dor", + "sal", + "beg", + "pav", + "hir", + "aes", + "fin", + "sot", + "noz", + "liv", + "oto", + "eil", + "fav", + "tra", + "sae", + "loa" + ] + }, + { + "level" : "2", + "sublevels" : "15", + "words" : [ + "tad", + "pep", + "roz", + "ket", + "geo", + "eus", + "aze", + "mod", + "int", + "hon", + "hor", + "hol", + "hag", + "out", + "omp", + "anv", + "bet", + "oad", + "niz", + "hen", + "yen", + "mor", + "aod", + "bag", + "tud", + "tan", + "den", + "aon", + "yar", + "biz", + "eur", + "mil", + "pok", + "dre", + "met", + "kig", + "giz", + "tok", + "piv", + "bed", + "rak", + "evit", + "gant", + "skol", + "klas", + "deiz", + "eost", + "yaou", + "here", + "unan", + "daou", + "teir", + "pemp", + "eizh", + "mann", + "bras", + "glas", + "gwer", + "rous", + "gell", + "mouk", + "lenn", + "mont", + "uhel", + "izel", + "pell", + "chom", + "kaer", + "brav", + "lous", + "prop", + "ivez", + "holl", + "kant", + "kozh", + "even", + "ober", + "kazh", + "penn", + "blev", + "kein", + "aval", + "sivi", + "tort", + "golo", + "pizh", + "ouzh", + "levr", + "diri", + "koad", + "korn", + "dall", + "laez", + "taol", + "gwir", + "gaou", + "faos", + "dont", + "buan", + "tost", + "gwez" + ] + }, + { + "level" : "3", + "sublevels" : "15", + "words" : [ + "kêr", + "heol", + "glav", + "dant", + "sili", + "emañ", + "fall", + "tomm", + "loen", + "istr", + "amañ", + "avel", + "hini", + "pesk", + "pebr", + "soñj", + "maen", + "ebet", + "naon", + "oc'h", + "hent", + "hañv", + "teil", + "lemm", + "edaj", + "foto", + "echu", + "dour", + "dañs", + "pont", + "yezh", + "reiñ", + "urzh", + "live", + "tamm", + "sukr", + "diñs", + "litr", + "lomm", + "ouzh", + "koef", + "berr", + "lost", + "maez", + "meur", + "foñs", + "bara", + "karr", + "arzh", + "leun", + "setu", + "ront", + "bout", + "pezh", + "evañ", + "stad", + "bale", + "park", + "prad", + "moan", + "dorn", + "mare", + "sell", + "dous", + "ludu", + "kalz", + "barv", + "korf", + "erru", + "evel", + "mamm", + "stêr", + "lann", + "foar", + "avat", + "kuit", + "geot", + "beaj", + "bran", + "naer", + "loar", + "gour", + "paotr", + "istor", + "kerzu", + "livañ", + "pevar", + "peder", + "seizh", + "klask", + "traoñ", + "bihan", + "gwenn", + "melen", + "niver", + "c'hwi", + "unnek", + "goañv", + "ugent", + "bloaz", + "breur", + "kanañ", + "amzer", + "ebrel", + "roc'h", + "nevez", + "ganet", + "banne", + "hemañ", + "trist", + "lagad", + "demat", + "mouar", + "gwezh", + "homañ", + "petra", + "perak", + "diwar", + "armel", + "kambr", + "boest", + "nec'h", + "logod", + "skrid", + "kador", + "pegen", + "lec'h", + "krank", + "eontr", + "nizez", + "arnev", + "ormel", + "meskl", + "erc'h", + "norzh", + "reter", + "bugel", + "kaout", + "babig", + "magañ", + "amann", + "holen", + "moc'h", + "kaier", + "spont", + "saout", + "begel", + "kreñv", + "timbr", + "douar", + "porzh", + "ingal", + "trenk", + "botoù", + "sevel", + "kraoñ", + "maskl", + "stumm", + "paper", + "sioul", + "gouel", + "kegin", + "bezañ", + "bleud", + "laezh", + "hiziv", + "kemer", + "diaes", + "redek", + "dec'h", + "tapet", + "paket", + "trede", + "bleiz", + "dilun", + "disul", + "dafar", + "doare", + "treiñ", + "nemet", + "dibab", + "seurt", + "brulu", + "sac'h", + "koulz", + "trouz", + "brozh", + "ledan", + "menez", + "asied", + "bevañ", + "foenn", + "traoù", + "bagad", + "burev", + "poull", + "toull", + "paour", + "lifre", + "padus", + "benel" + ] + }, + { + "level" : "4", + "sublevels" : "15", + "words" : [ + "lizher", + "sizhun", + "genver", + "meurzh", + "marc'h", + "gouere", + "gwener", + "sadorn", + "familh", + "sklaer", + "galleg", + "plac'h", + "mouezh", + "kregiñ", + "duhont", + "labour", + "trizek", + "merc'h", + "pemzek", + "seitek", + "hanter", + "gevell", + "teñval", + "diskar", + "deskiñ", + "laouen", + "dindan", + "emaint", + "krec'h", + "kenavo", + "diskan", + "kuzhat", + "dastum", + "penaos", + "dañsal", + "lodenn", + "trepas", + "kentañ", + "rideoz", + "lerc'h", + "diwall", + "breizh", + "plijus", + "heñvel", + "tapout", + "moereb", + "siwazh", + "tremen", + "stered", + "broc'h", + "kregin", + "bremañ", + "kokouz", + "kornog", + "bouloù", + "bugale", + "kavout", + "karout", + "mignon", + "buoc'h", + "kreion", + "torret", + "spered", + "fardañ", + "pignat", + "billig", + "fonnus", + "pomper", + "gouloù", + "sorser", + "digant", + "sekred", + "lipous", + "lakaat", + "rozenn", + "meskañ", + "louarn", + "anezhe", + "tachoù", + "gwetur", + "pevare", + "karrez", + "terriñ", + "paouez", + "kazhig", + "azezañ", + "linenn", + "kistin", + "nebeut", + "kabell", + "dilhad", + "debriñ", + "roched", + "kombod", + "cheñch", + "benveg", + "kinnig", + "farsus", + "ijinañ", + "neuial", + "loeroù", + "kustum", + "bezhin", + "mintin", + "bragoù", + "ezhomm", + "goullo", + "houarn", + "bemdez", + "kelorn", + "kloc'h", + "adarre", + "binioù", + "eostig", + "lapous", + "gourel", + "lammat", + "bannañ", + "konifl", + "bodenn", + "c'hoazh", + "saozneg", + "testenn", + "frazenn", + "daouzek", + "naontek", + "orañjez", + "tregont", + "deiziad", + "skrivañ", + "pegoulz", + "c'hoari", + "goulenn", + "respont", + "sellout", + "reizhañ", + "hennezh", + "honnezh", + "kastell", + "kaouenn", + "c'hoant", + "taolenn", + "yec'hed", + "pesketa", + "yaouank", + "klevout", + "koumoul", + "gwrac'h", + "goustad", + "kousket", + "studiañ", + "levenez", + "prantad", + "reolenn", + "olifant", + "kompren", + "poazhañ", + "skolaer", + "gallout", + "skudell", + "gouzout", + "cholori", + "gwelout", + "chaseal", + "pemoc'h", + "peseurt", + "plijout", + "frouezh", + "diriaou", + "mourroù", + "follenn", + "horolaj", + "gwezenn", + "dervenn", + "lunedoù", + "karotez", + "marmouz", + "daouarn", + "paotrig", + "bremaik", + "didrouz", + "pelec'h", + "furchal", + "chupenn", + "paradoz", + "spontus", + "sec'hed", + "gwinizh", + "gwerenn", + "rastell", + "sac'had", + "bombard", + "melchon", + "menajer", + "fourmaj", + "enezenn", + "meurvor", + "legumaj", + "nedeleg", + "mankout", + "skornet" + ] + }, + { + "level" : "5", + "sublevels" : "15", + "words" : [ + "boutailh", + "bloavezh", + "merc'her", + "dimeurzh", + "gwengolo", + "c'hwec'h", + "logodenn", + "rimadell", + "pevarzek", + "asambles", + "korrigan", + "c'hwezek", + "silabenn", + "triwec'h", + "rigadell", + "bigorned", + "mignonez", + "skoazell", + "diwezhañ", + "kurunenn", + "vakañsoù", + "sorserez", + "furlukin", + "pellgomz", + "kouezhañ", + "chokolad", + "flamboez", + "skuilhañ", + "chaseour", + "keniterv", + "douarenn", + "nemetken", + "digwener", + "troc'hañ", + "disadorn", + "plankenn", + "prenestr", + "kolonenn", + "pinvidik", + "kentoc'h", + "trugarez", + "plantenn", + "halegenn", + "strollad", + "plac'hig", + "sonerezh", + "taboulin", + "trompilh", + "skeudenn", + "kazetenn", + "melezour", + "arc'hant", + "abardaez", + "lavarout", + "souezhet", + "youc'hal", + "diwezhat", + "marc'had", + "krokodil", + "greunenn", + "gwechall", + "gwerzhañ", + "memestra", + "labourat", + "gwirionez", + "tresadenn", + "tric'horn", + "lizherenn", + "brezhoneg", + "anavezout", + "c'hwevrer", + "kontadenn", + "kanaouenn", + "levraoueg", + "displijus", + "displegañ", + "chifretez", + "steredenn", + "sizailhoù", + "barzhoneg", + "spontailh", + "beilhadeg", + "geriaoueg", + "skolaerez", + "daoulagad", + "bleunienn", + "avalaouer", + "dibunadeg", + "porc'hell", + "briochenn", + "roudenneg", + "kennebeut", + "karrigell", + "kêriadenn", + "sekretour", + "menajerez", + "baleadenn", + "pemzektez", + "dourvarc'h", + "startijenn", + "kenitervez", + "skoazellañ", + "krampouezh", + "pellgomzer", + "dimerc'her", + "warc'hoazh", + "meurlarjez", + "divskouarn", + "serviedenn", + "didroc'hañ", + "urzhiataer", + "araokadenn", + "sekretourez", + "kastelodenn", + "displegadenn", + "diskouezadeg", + "fourchetezenn", + "krampouezhenn", + "dreistordinal", + "reizhskrivadur", + "gourc'hemennoù" + ] + } + ], + "name" : "default-br", + "locale" : "br", + "description" : "Default Breton" +} diff --git a/src/core/ActivityBase.qml b/src/core/ActivityBase.qml --- a/src/core/ActivityBase.qml +++ b/src/core/ActivityBase.qml @@ -122,14 +122,26 @@ */ property Loading loading + /** + * type:string + * The resource folder for the current activity. The resources + * of each activity needs to be stored with the same pattern. + * "qrc:/gcompris/src/activities/" + activity name + "/resource/" + * + */ + property string resourceUrl: (activityInfo && activityInfo.name) ? "qrc:/gcompris/src/activities/" + activityInfo.name.split('/')[0] + "/resource/": "" + /** * type: bool * This variable stores if the activity is a musical activity. * * If it is a musical activity and the audioEffects is disabled, we temporarily unmute the GCSfx audioEffects for that activity and mute again on exiting it in main.qml. */ property bool isMusicalActivity: false + property alias datasetLoader: datasetLoader + property string levelFolder + /** * Emitted when the user wants to return to the Home/Menu screen. */ @@ -232,4 +244,11 @@ anchors.fill: parent active: !activityInfo.demo && ApplicationSettings.isDemoMode } + + Loader { + id: datasetLoader + asynchronous: false + source: resourceUrl + levelFolder + "/Data.qml" + active: levelFolder != "" + } } diff --git a/src/core/ActivityInfo.h b/src/core/ActivityInfo.h --- a/src/core/ActivityInfo.h +++ b/src/core/ActivityInfo.h @@ -39,14 +39,14 @@ */ class ActivityInfo : public QObject { - Q_OBJECT + Q_OBJECT - /** - * Name of the main activity QML file. - * - * Example: "activity/Activity.qml" - */ - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + /** + * Name of the main activity QML file. + * + * Example: "activity/Activity.qml" + */ + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) /** * Section(s) this activity belongs to. @@ -56,63 +56,63 @@ * computer, discovery, experiment, fun, math, puzzle, * reading, strategy. */ - Q_PROPERTY(QString section READ section WRITE setSection NOTIFY sectionChanged) + Q_PROPERTY(QString section READ section WRITE setSection NOTIFY sectionChanged) /** * Difficulty of the activity. * * A difficulty level from 1 (easiest) to 6 (most difficult). */ - Q_PROPERTY(quint32 difficulty READ difficulty WRITE setDifficulty NOTIFY difficultyChanged) + Q_PROPERTY(quint32 difficulty READ difficulty WRITE setDifficulty NOTIFY difficultyChanged) /** * Relative path to the icon of the activity. * * Example: "activity/activity.svg" */ - Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged) + Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged) /** * Author of the activity. */ - Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged) + Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged) /** * Whether the activity is part of the demo version of GCompris. */ - Q_PROPERTY(bool demo READ demo WRITE setDemo NOTIFY demoChanged) + Q_PROPERTY(bool demo READ demo WRITE setDemo NOTIFY demoChanged) /** * Title of the activity. */ - Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) + Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) /** * Description of the activity. */ - Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged) + Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged) /** * Goal that this activity wants to achieve. */ - Q_PROPERTY(QString goal READ goal WRITE setGoal NOTIFY goalChanged) + Q_PROPERTY(QString goal READ goal WRITE setGoal NOTIFY goalChanged) - /** + /** * Prerequisite for using this activity. */ - Q_PROPERTY(QString prerequisite READ prerequisite WRITE setPrerequisite NOTIFY prerequisiteChanged) + Q_PROPERTY(QString prerequisite READ prerequisite WRITE setPrerequisite NOTIFY prerequisiteChanged) /** * Manual describing the activity's usage. */ - Q_PROPERTY(QString manual READ manual WRITE setManual NOTIFY manualChanged) + Q_PROPERTY(QString manual READ manual WRITE setManual NOTIFY manualChanged) /** * Credits to third parties. */ - Q_PROPERTY(QString credit READ credit WRITE setCredit NOTIFY creditChanged) + Q_PROPERTY(QString credit READ credit WRITE setCredit NOTIFY creditChanged) - Q_PROPERTY(bool favorite READ favorite WRITE setFavorite NOTIFY favoriteChanged) + Q_PROPERTY(bool favorite READ favorite WRITE setFavorite NOTIFY favoriteChanged) /** * This activity is enabled. @@ -122,7 +122,17 @@ /** * Version in which this activity has been created */ - Q_PROPERTY(int createdInVersion READ createdInVersion WRITE setCreatedInVersion NOTIFY createdInVersionChanged) + Q_PROPERTY(int createdInVersion READ createdInVersion WRITE setCreatedInVersion NOTIFY createdInVersionChanged) + + /** + * Contains a list of string defining the folder names for the different datasets. + */ + Q_PROPERTY(QStringList levels READ levels WRITE setLevels NOTIFY levelsChanged) + + /** + * Current dataset used for the activity (it is among the 'levels' list) + */ + Q_PROPERTY(QString currentLevel READ currentLevel WRITE setCurrentLevel NOTIFY currentLevelChanged) public: /// @cond INTERNAL_DOCS @@ -158,6 +168,10 @@ void setEnabled(const bool); int createdInVersion() const; void setCreatedInVersion(const int); + QStringList levels() const; + void setLevels(const QStringList&); + QString currentLevel() const; + void setCurrentLevel(const QString&); signals: void nameChanged(); @@ -175,7 +189,8 @@ void favoriteChanged(); void enabledChanged(); void createdInVersionChanged(); - + void levelsChanged(); + void currentLevelChanged(); /// @endcond private: QString m_name; @@ -193,6 +208,13 @@ bool m_favorite; bool m_enabled; int m_createdInVersion; + QStringList m_levels; + QString m_currentLevel; + + /* + * Set current level once we have the name and the levels + */ + void setCurrentLevel(); }; #endif // ACTIVITYINFO_H diff --git a/src/core/ActivityInfo.cpp b/src/core/ActivityInfo.cpp --- a/src/core/ActivityInfo.cpp +++ b/src/core/ActivityInfo.cpp @@ -41,12 +41,16 @@ { return m_name; } + void ActivityInfo::setName(const QString &name) { m_name = name; // Once we are given a name, we can get the favorite property // from the persistant configuration m_favorite = ApplicationSettings::getInstance()->isFavorite(m_name); + + setCurrentLevel(); + emit nameChanged(); } @@ -190,3 +194,39 @@ m_createdInVersion = created; emit createdInVersionChanged(); } + +QStringList ActivityInfo::levels() const +{ + return m_levels; +} + +void ActivityInfo::setLevels(const QStringList &levels) +{ + // levels only contains one element containing all the difficulties + m_levels = levels.front().split(','); + + setCurrentLevel(); + + emit levelsChanged(); +} + +QString ActivityInfo::currentLevel() const +{ + return m_currentLevel; +} + +void ActivityInfo::setCurrentLevel(const QString ¤tLevel) +{ + m_currentLevel = currentLevel; + emit currentLevelChanged(); +} + +void ActivityInfo::setCurrentLevel() +{ + if(!m_name.isEmpty()) { + if(!m_levels.empty() && ApplicationSettings::getInstance()->currentLevel(m_name) == "") { + ApplicationSettings::getInstance()->setCurrentLevel(m_name, m_levels[0]); + } + m_currentLevel = ApplicationSettings::getInstance()->currentLevel(m_name); + } +} diff --git a/src/core/ActivityInfoTree.h b/src/core/ActivityInfoTree.h --- a/src/core/ActivityInfoTree.h +++ b/src/core/ActivityInfoTree.h @@ -49,7 +49,7 @@ QVariantList allCharacters(); protected Q_SLOTS: - Q_INVOKABLE void filterByTag(const QString &tag, bool emitChanged = true); + Q_INVOKABLE void filterByTag(const QString &tag, const QString &category = "", bool emitChanged = true); Q_INVOKABLE void filterLockedActivities(bool emitChanged = true); Q_INVOKABLE void filterEnabledActivities(bool emitChanged = true); // create a tree from the whole list of activities with the activities created between the two versions diff --git a/src/core/ActivityInfoTree.cpp b/src/core/ActivityInfoTree.cpp --- a/src/core/ActivityInfoTree.cpp +++ b/src/core/ActivityInfoTree.cpp @@ -121,13 +121,15 @@ // the tag 'all' means no filter // the tag 'favorite' means only marked as favorite // The level is also filtered based on the global property -void ActivityInfoTree::filterByTag(const QString &tag, bool emitChanged) +void ActivityInfoTree::filterByTag(const QString &tag, const QString &category, bool emitChanged) { m_menuTree.clear(); // https://www.kdab.com/goodbye-q_foreach/, for loops on QList may cause detach const auto constMenuTreeFull = m_menuTreeFull; for(const auto &activity: constMenuTreeFull) { - if((activity->section().indexOf(tag) != -1 || + // filter on category if given else on tag + if(((!category.isEmpty() && activity->section().indexOf(category) != -1) || + (category.isEmpty() && activity->section().indexOf(tag) != -1) || tag == "all" || (tag == "favorite" && activity->favorite())) && (activity->difficulty() >= ApplicationSettings::getInstance()->filterLevelMin() && diff --git a/src/core/ApplicationSettings.h b/src/core/ApplicationSettings.h --- a/src/core/ApplicationSettings.h +++ b/src/core/ApplicationSettings.h @@ -54,6 +54,9 @@ * The [Favorite] group is auto-generated from the favorite activities * selected by a user. * + * The [Levels] group is auto-generated from the levels chosen by + * a user (if the activity provides multiple datasets). + * * Besides these global settings there is one group for each activity that * stores persistent settings. * @@ -423,14 +426,14 @@ m_isDemoMode = !isBought; emit demoModeChanged(); } - } + } bool sectionVisible() const { return m_sectionVisible; } void setSectionVisible(const bool newMode) { - qDebug() << "c++ setSectionVisible=" << newMode; - m_sectionVisible = newMode; - emit sectionVisibleChanged(); - } + qDebug() << "c++ setSectionVisible=" << newMode; + m_sectionVisible = newMode; + emit sectionVisibleChanged(); + } QString wordset() const { return m_wordset; } void setWordset(const QString &newWordset) { @@ -531,6 +534,9 @@ public slots: Q_INVOKABLE bool isFavorite(const QString &activity); Q_INVOKABLE void setFavorite(const QString &activity, bool favorite); + Q_INVOKABLE void setCurrentLevel(const QString &activity, const QString &level); + Q_INVOKABLE QString currentLevel(const QString &activity); + Q_INVOKABLE void saveBaseFontSize(); /// @endcond diff --git a/src/core/ApplicationSettings.cpp b/src/core/ApplicationSettings.cpp --- a/src/core/ApplicationSettings.cpp +++ b/src/core/ApplicationSettings.cpp @@ -44,6 +44,7 @@ static const char *ADMIN_GROUP_KEY = "Admin"; static const char *INTERNAL_GROUP_KEY = "Internal"; static const char *FAVORITE_GROUP_KEY = "Favorite"; +static const char *LEVELS_GROUP_KEY = "Levels"; static const char *FULLSCREEN_KEY = "fullscreen"; static const char *PREVIOUS_HEIGHT_KEY = "previousHeight"; @@ -456,15 +457,28 @@ void ApplicationSettings::setFavorite(const QString &activity, bool favorite) { - updateValueInConfig(FAVORITE_GROUP_KEY, activity, favorite); + updateValueInConfig(FAVORITE_GROUP_KEY, activity, favorite); } bool ApplicationSettings::isFavorite(const QString &activity) { - m_config.beginGroup(FAVORITE_GROUP_KEY); - bool favorite = m_config.value(activity, false).toBool(); - m_config.endGroup(); - return favorite; + m_config.beginGroup(FAVORITE_GROUP_KEY); + bool favorite = m_config.value(activity, false).toBool(); + m_config.endGroup(); + return favorite; +} + +void ApplicationSettings::setCurrentLevel(const QString &activity, const QString &level) +{ + updateValueInConfig(LEVELS_GROUP_KEY, activity, level); +} + +QString ApplicationSettings::currentLevel(const QString &activity) +{ + m_config.beginGroup(LEVELS_GROUP_KEY); + QString level = m_config.value(activity, "").toString(); + m_config.endGroup(); + return level; } template void ApplicationSettings::updateValueInConfig(const QString& group, diff --git a/src/core/Bar.qml b/src/core/Bar.qml --- a/src/core/Bar.qml +++ b/src/core/Bar.qml @@ -172,6 +172,13 @@ */ signal hintClicked + /** + * Emitted when the activity configuration button was clicked. + * + * Only in menu to change the activity configuration. + */ + signal activityConfigClicked + /** * Emitted when the home button was clicked. * @@ -244,6 +251,11 @@ 'contentId': content.hint, 'allowed': true }, + { + 'bid': activityConfigImage, + 'contentId': content.activityConfig, + 'allowed': true + }, { 'bid': downloadImage, 'contentId': content.download, @@ -456,6 +468,14 @@ onClicked: bar.hintClicked() } } + Component { + id: activityConfigImage + BarButton { + source: "qrc:/gcompris/src/core/resource/bar_activity_config.svg"; + sourceSize.width: fullButtonScaled + onClicked: bar.activityConfigClicked() + } + } Component { id: reload BarButton { diff --git a/src/core/BarEnumContent.qml b/src/core/BarEnumContent.qml --- a/src/core/BarEnumContent.qml +++ b/src/core/BarEnumContent.qml @@ -113,4 +113,12 @@ * Used for displaying a hint to the children to help. */ readonly property int hint: 512 + + /** + * type:int + * Representation of the activity configuration button. + * + * Used for displaying the configuration of activities in the menu. + */ + readonly property int activityConfig: 1024 } diff --git a/src/activities/algebra_plus/AlgebraPlus.qml b/src/core/Dataset.qml copy from src/activities/algebra_plus/AlgebraPlus.qml copy to src/core/Dataset.qml --- a/src/activities/algebra_plus/AlgebraPlus.qml +++ b/src/core/Dataset.qml @@ -1,9 +1,9 @@ -/* GCompris - AlgebraPlus.qml +/* GCompris - Dataset.qml * - * Copyright (C) 2015 Bruno Coudoin + * Copyright (C) 2018 Johnny Jazeix * * Authors: - * Bruno Coudoin + * Johnny Jazeix * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,15 +16,24 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, see . + * along with this program; if not, see . */ import QtQuick 2.6 +import GCompris 1.0 -import "../../core" -import "../algebra_by/" +/** + * Contains objective and data variable to instanciate new dataset. + * Each activity defines its own data format. + * @ingroup components + * + * Used by each activities wanting to provide multiple dataset along with + * their objectives. + * + */ +Item { + id: dataset -Algebra { - onStart: { - operand.text = "+" - } + property string objective + property int difficulty + property var data } diff --git a/src/core/DialogActivityConfig.qml b/src/core/DialogActivityConfig.qml --- a/src/core/DialogActivityConfig.qml +++ b/src/core/DialogActivityConfig.qml @@ -135,7 +135,7 @@ function getInitialConfiguration() { if(activityName == "") { - activityName = ActivityInfoTree.currentActivity.name.split('/')[0]; + activityName = activityInfo.name.split('/')[0]; } dataToSave = ApplicationSettings.loadActivityConfiguration(activityName) loadData() @@ -239,9 +239,10 @@ console.log("Configuration data is invalid, not saving!"); return; } - saveData() - ApplicationSettings.saveActivityConfiguration(activityName, dataToSave) + if(activityName != "") { + ApplicationSettings.saveActivityConfiguration(activityName, dataToSave) + } parent.close() } } diff --git a/src/core/DialogChooseLevel.qml b/src/core/DialogChooseLevel.qml new file mode 100644 --- /dev/null +++ b/src/core/DialogChooseLevel.qml @@ -0,0 +1,374 @@ +/* GCompris - DialogChooseLevel.qml + * + * Copyright (C) 2018 Johnny Jazeix + * + * Authors: + * Johnny Jazeix + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.6 +import QtQuick.Controls 1.5 +import GCompris 1.0 + +/** + * todo + * @ingroup components + * + * todo + * + * @sa ApplicationSettings + * @inherit QtQuick.Item + */ +Rectangle { + id: dialogChooseLevel + visible: false + + /* Public interface: */ + + /** + * type:string + * The name of the activity in case of per-activity config. + * + * Will be autogenerated unless set by the caller. + */ + property string activityName: currentActivity.name.split('/')[0] + + /// @cond INTERNAL_DOCS + + property bool isDialog: true + + /** + * type:string + * Title of the configuration dialog. + */ + readonly property string title: currentActivity ? qsTr("%1 settings").arg(currentActivity.title) : "" + + property var difficultiesModel: [] + property QtObject currentActivity + + property string chosenLevel + + property var activityData + onActivityDataChanged: loadData() + /// @endcond + + /** + * By default, we display configuration (this avoids to add code in each + * activity to set it by default). + */ + property bool displayDatasetAtStart: !hasConfig + + /** + * Emitted when the config dialog has been closed. + */ + signal close + + /** + * Emitted when the config dialog has been started. + */ + signal start + + onStart: initialize() + + signal stop + + /** + * Emitted when the settings are to be saved. + * + * The actual persisting of the settings in the settings file is done by + * DialogActivityConfig. The activity has to take care to update its + * internal state. + */ + signal saveData + + signal startActivity + + /** + * Emitted when the config settings have been loaded. + */ + signal loadData + + property bool hasConfigOrDataset: hasConfig || hasDataset + property bool hasConfig: activityConfigFile.exists("qrc:/gcompris/src/activities/"+activityName+"/ActivityConfig.qml") + property bool hasDataset: currentActivity && currentActivity.levels.length !== 0 + + color: "#696da3" + border.color: "black" + border.width: 1 + + function initialize() { + // dataset information + chosenLevel = currentActivity.currentLevel + difficultiesModel = [] + if(currentActivity.levels.length == 0) { + print("no levels to load for", activityName) + } + else { + for(var level in currentActivity.levels) { + objectiveLoader.dataFiles.push({"level": currentActivity.levels[level], "file": "qrc:/gcompris/src/activities/"+activityName+"/resource/"+currentActivity.levels[level]+"/Data.qml"}) + } + objectiveLoader.start() + } + + // Defaults to config if in an activity else to dataset if in menu + if(displayDatasetAtStart) { + datasetVisibleButton.clicked() + } + else { + optionsVisibleButton.clicked() + } + } + + Loader { + id: objectiveLoader + property var dataFiles: [] + property var currentFile + signal start + signal stop + + onStart: { + var file = dataFiles.shift() + currentFile = file + source = file.file.toString() + } + + onLoaded: { + difficultiesModel.push({"level": currentFile.level, "objective": item.objective, "difficulty": item.difficulty}) + if(dataFiles.length != 0) { + start() + } + else { + stop() + } + } + onStop: { + difficultiesRepeater.model = difficultiesModel + } + } + + Row { + visible: true + spacing: 2 + Item { width: 10; height: 1 } + + Column { + spacing: 10 + anchors.top: parent.top + Item { width: 1; height: 10 } + Rectangle { + color: "#e6e6e6" + radius: 6.0 + width: dialogChooseLevel.width - 30 + height: title.height * 1.2 + border.color: "black" + border.width: 2 + + Row { + spacing: 2 + padding: 8 + Image { + id: titleIcon + anchors { + left: parent.left + top: parent.top + margins: 4 * ApplicationInfo.ratio + } + } + + GCText { + id: title + text: dialogChooseLevel.title + width: dialogChooseLevel.width - (30 + cancel.width) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "black" + fontSize: 20 + font.weight: Font.DemiBold + wrapMode: Text.WordWrap + } + } + } + + // Header buttons + Row { + id: datasetOptionsRow + height: datasetVisibleButton.height + width: parent.width + spacing: parent.width / 4 + anchors.leftMargin: parent.width / 8 + Button { + id: datasetVisibleButton + text: qsTr("Dataset") + enabled: hasDataset + width: parent.width / 3 + property bool selected: true + style: GCButtonStyle { + selected: datasetVisibleButton.selected + } + onClicked: { selected = true; } + } + Button { + id: optionsVisibleButton + text: qsTr("Options") + enabled: hasConfig + width: parent.width / 3 + style: GCButtonStyle { + selected: !datasetVisibleButton.selected + } + onClicked: { datasetVisibleButton.selected = false; } //showOptions() + } + } + + // "Dataset"/"Options" content + Rectangle { + color: "#e6e6e6" + radius: 6.0 + width: dialogChooseLevel.width - 30 + height: dialogChooseLevel.height - (30 + title.height * 1.2) - saveAndPlayRow.height - datasetOptionsRow.height - 3 * parent.spacing + border.color: "black" + border.width: 2 + + Flickable { + id: flick + anchors.margins: 8 + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + flickableDirection: Flickable.VerticalFlick + clip: true + contentHeight: contentItem.childrenRect.height + 40 * ApplicationInfo.ratio + + Loader { + id: configLoader + visible: !datasetVisibleButton.selected + active: optionsVisibleButton.enabled + source: active ? "qrc:/gcompris/src/activities/"+activityName+"/ActivityConfig.qml" : "" + + onItemChanged: { + if(item) { + item.background = dialogChooseLevel + dialogChooseLevel.saveData.connect(save) + getInitialConfiguration() + } + } + function getInitialConfiguration() { + activityData = Qt.binding(function() { return item.dataToSave }) + if(item) { + item.dataToSave = ApplicationSettings.loadActivityConfiguration(activityName) + item.setDefaultValues() + } + } + function save() { + item.saveValues() + ApplicationSettings.saveActivityConfiguration(activityName, item.dataToSave) + } + } + + Column { + visible: datasetVisibleButton.selected + spacing: 10 + + ExclusiveGroup { + id: levelsGroup + } + Repeater { + id: difficultiesRepeater + delegate: Row { + height: objective.height + Image { + id: difficultyIcon + source: "qrc:/gcompris/src/core/resource/difficulty" + + modelData.difficulty + ".svg"; + sourceSize.height: objective.indicatorImageHeight + anchors.verticalCenter: objective.verticalCenter + } + GCDialogCheckBox { + id: objective + width: dialogChooseLevel.width - 30 - difficultyIcon.width - 2 * flick.anchors.margins + text: modelData.objective + exclusiveGroup: levelsGroup + checked: chosenLevel === modelData.level + onClicked: chosenLevel = modelData.level + } + } + } + } + } + + // The scroll buttons + GCButtonScroll { + anchors.right: parent.right + anchors.rightMargin: 5 * ApplicationInfo.ratio + anchors.bottom: flick.bottom + anchors.bottomMargin: 5 * ApplicationInfo.ratio + onUp: flick.flick(0, 1400) + onDown: flick.flick(0, -1400) + upVisible: flick.visibleArea.yPosition <= 0 ? false : true + downVisible: flick.visibleArea.yPosition + flick.visibleArea.heightRatio >= 1 ? false : true + } + } + // Footer buttons + Row { + id: saveAndPlayRow + height: cancelButton.height + width: parent.width + spacing: parent.width / 16 + Button { + id: cancelButton + text: qsTr("Cancel") + width: parent.width / 4 + property bool selected: true + style: GCButtonStyle {} + onClicked: dialogChooseLevel.close() + } + Button { + id: saveButton + text: qsTr("Save") + width: parent.width / 4 + property bool selected: true + style: GCButtonStyle { } + onClicked: { + saveData(); + } + } + Button { + id: saveAndStartButton + text: qsTr("Save and start") + width: parent.width / 3 + style: GCButtonStyle { } + onClicked: { + saveData(); + startActivity(); + } + } + } + + Item { width: 1; height: 10 } + } + } + + // The cancel button + GCButtonCancel { + id: cancel + onClose: { + parent.close() + } + } + + File { + id: activityConfigFile + } +} diff --git a/src/core/GCButtonStyle.qml b/src/core/GCButtonStyle.qml --- a/src/core/GCButtonStyle.qml +++ b/src/core/GCButtonStyle.qml @@ -30,6 +30,7 @@ * @inherit QtQuick.Controls.Styles.ButtonStyle */ ButtonStyle { + id: buttonStyle /** * type:real * Fixed font size of the label in pt. @@ -85,6 +86,8 @@ } } + property bool selected: false + property string textSize: "regular" property var textSizes: { @@ -101,14 +104,14 @@ fontBold: true } } - + background: Rectangle { border.width: control.activeFocus ? 4 : 2 border.color: themes[theme].borderColor radius: 10 gradient: Gradient { - GradientStop { position: 0 ; color: control.pressed ? themes[theme].selectedColorGradient0 : themes[theme].backgroundColorGradient0 } - GradientStop { position: 1 ; color: control.pressed ? themes[theme].selectedColorGradient1 : themes[theme].backgroundColorGradient1 } + GradientStop { position: 0 ; color: (control.pressed || buttonStyle.selected) ? themes[theme].selectedColorGradient0 : themes[theme].backgroundColorGradient0 } + GradientStop { position: 1 ; color: (control.pressed || buttonStyle.selected) ? themes[theme].selectedColorGradient1 : themes[theme].backgroundColorGradient1 } } } label: Item { diff --git a/src/core/GCComboBox.qml b/src/core/GCComboBox.qml --- a/src/core/GCComboBox.qml +++ b/src/core/GCComboBox.qml @@ -232,7 +232,7 @@ function hidePopUpAndRestoreFocus() { popup.visible = false; // Restore focus on previous activity for keyboard input - background.currentActivity.forceActiveFocus(); + background.forceActiveFocus(); } Rectangle { diff --git a/src/core/LanguageList.qml b/src/core/LanguageList.qml --- a/src/core/LanguageList.qml +++ b/src/core/LanguageList.qml @@ -65,7 +65,7 @@ { "text": "Italiano", "locale": "it_IT.UTF-8" }, //{ "text": "Lietuvių", "locale": "lt_LT.UTF-8" }, //{ "text": "Latviešu", "locale": "lv_LV.UTF-8" }, - { "text": "മലയാളം", "locale": "ml_IN.UTF-8" }, + { "text": "മലയാളം", "locale": "ml_IN.UTF-8" }, { "text": "Nederlands", "locale": "nl_NL.UTF-8" }, { "text": "Norsk (nynorsk)", "locale": "nn_NO.UTF-8" }, { "text": "Polski", "locale": "pl_PL.UTF-8" }, diff --git a/src/core/ParticleSystemStar.qml b/src/core/ParticleSystemStar.qml --- a/src/core/ParticleSystemStar.qml +++ b/src/core/ParticleSystemStar.qml @@ -37,12 +37,12 @@ ParticleSystem { id: particles anchors.fill: parent + running: false /// @cond INTERNAL_DOCS property alias emitter: clickedEmitter property alias clip: imageParticle.clip - /// @endcond Emitter { diff --git a/src/core/ParticleSystemStarLoader.qml b/src/core/ParticleSystemStarLoader.qml --- a/src/core/ParticleSystemStarLoader.qml +++ b/src/core/ParticleSystemStarLoader.qml @@ -42,8 +42,18 @@ * Cf. Emitter.burst */ function burst(val) { - if(active) + if(active) { + item.start() item.emitter.burst(val) + stopParticleSystem.restart() + } + } + + Timer { + id: stopParticleSystem + interval: item.emitter.lifeSpan + item.emitter.lifeSpanVariation + repeat: false + onTriggered: item.stop() } onLoaded: item.clip = clip source: "ParticleSystemStar.qml" diff --git a/src/core/main.qml b/src/core/main.qml --- a/src/core/main.qml +++ b/src/core/main.qml @@ -236,8 +236,9 @@ !properties.enterItem.isDialog) // going into an activity then playIntroVoice(properties.enterItem.activityInfo.name); // play intro + // Don't restart an activity if you click on help if (!properties.exitItem.isDialog || // if coming from menu or - properties.enterItem.alwaysStart) // start signal enforced (for special case like transition from config-dialog to editor) + properties.enterItem.alwaysStart) // start signal enforced (for special case like transition from config-dialog to editor) properties.enterItem.start(); if(properties.name === "pushTransition") { @@ -346,27 +347,5 @@ property Component replaceTransition: pushHTransition } } - - onSceneGraphError: { - print("scene graph error ", error, message) - ApplicationSettings.renderer = "software" - Core.showMessageDialog( - main, - qsTr("There is an issue while running GCompris. " + - "We have fallbacken to software renderer mode that should solve the issue. ") + - "You need to restart GCompris so it can take effect.", - "", null, "", null, null); - } - - onSceneGraphInvalidated: { - print("scene graph invalidated") - ApplicationSettings.renderer = "software" - Core.showMessageDialog( - main, - qsTr("There is an issue while running GCompris. " + - "We have fallbacken to software renderer mode that should solve the issue. ") + - "You need to restart GCompris so it can take effect.", - "", null, "", null, null); - } /// @endcond } diff --git a/src/activities/tangram/resource/m-truck/cabin.svg b/src/core/resource/bar_activity_config.svg rename from src/activities/tangram/resource/m-truck/cabin.svg rename to src/core/resource/bar_activity_config.svg --- a/src/activities/tangram/resource/m-truck/cabin.svg +++ b/src/core/resource/bar_activity_config.svg @@ -9,47 +9,46 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="58.625103mm" - height="50.264404mm" - viewBox="0 0 207.72674 178.10222" - id="svg6809" + width="66" + height="66" + id="svg4211" version="1.1" - inkscape:version="0.92.1 r15371" - sodipodi:docname="cabin.svg"> + inkscape:version="0.92.2 2405546, 2018-03-11" + sodipodi:docname="bar_activity_config.svg"> + id="defs4213" /> + id="metadata4216"> image/svg+xml - - 2017 + + 2015 Timothée Giet @@ -79,11 +78,28 @@ inkscape:label="Calque 1" inkscape:groupmode="layer" id="layer1" - transform="translate(-264.70806,-303.3111)"> + transform="translate(-541.69224,-591.06935)"> + sodipodi:nodetypes="sssss" + inkscape:connector-curvature="0" + style="fill:#d666d6;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 574.69959,592.0743 c -17.664,0 -32,14.33603 -32,32 0,17.66398 14.3361,32.00001 32,32 17.664,0 32,-14.33601 32,-32 0,-17.66398 -14.336,-32 -32,-32 z" + id="path5756" /> + diff --git a/tests/core/ApplicationSettingsTest.cpp b/tests/core/ApplicationSettingsTest.cpp --- a/tests/core/ApplicationSettingsTest.cpp +++ b/tests/core/ApplicationSettingsTest.cpp @@ -155,6 +155,11 @@ applicationSettingsMock.saveActivityProgress(dummyActivity, 0); QCOMPARE(applicationSettingsMock.loadActivityProgress(dummyActivity), 0); + // Test current level getter/setter + QCOMPARE(applicationSettingsMock.currentLevel(dummyActivity), ""); + applicationSettingsMock.setCurrentLevel(dummyActivity, "3"); + QCOMPARE(applicationSettingsMock.currentLevel(dummyActivity), "3"); + // By Default the activity QVariantMap configuration; configuration.insert(QStringLiteral("DummyKey1"), QStringLiteral("DummyValue1"));