Se afișează postările cu eticheta ATtiny. Afișați toate postările
Se afișează postările cu eticheta ATtiny. Afișați toate postările

sâmbătă, 23 februarie 2019

Modul temporizator reglabil pentru stergatoare de Logan/Renault

    Materialul mi-a fost trimis de dl Liviu HINOVEANU si nu am o prea mare contributie la conceperea lui, asa ca daca va intereseaza detalii contactati-l de dumnealui pe email (liviuhinoveanu@gmail.com). Pentru cei pasionati de domeniul auto, tot de la dumnealui am primit materialul cu Modul "Daytime Running Light" (DRL) cu ATtiny85.


   Funcționare modul stergatoare cu temporizare reglabilă
   Timpul de temporizare a stergătoarelor la multe autoturisme este fix .
   Pentru modificarea timpului de temporizare se trece maneta din pozitiain pozitia zero în poziția de ștergere temporizată (pozitia 1 la Logan, Sandero, Renault ), stergătoarele vor stege initial odată apoi  la intervale regulate de 5 secunde cum o facea si UCH-ul si, pentru modificarea timpului se trece maneta din poziția 1 în poziția 0 si se lasa pana cand geamul nu mai ofera suficienta vizibilitate si consideram ca trebuie ca stergatoarele sa baleieze, repunem maneta in pozitia stergere temporizata, moment in care se memoreaza timpul de asteptare in pozitia zero ca timp de temporizare, nici nu ne intereseaza efectiv acest timp si are loc stergerea imediata, urmatoarele stergeri au loc la intervalul memorat.  
   Daca timpul memorat este mai mic de 2 sec sau mai mare de 15 secunde ramane memorat timpul anterior.
   Ce face intrarea de sprituitoare? La apasarea manetei in pozitia spalare geam, UCH-ul stie sa dea o baleiere daca s-a tinut apasat sub 0,3 secunde sau 3 baleieri daca s-a tinut mai mult, uneori lichidul de parbriz mai ajunge pe plafon si dupa 4-5 secunde incepe sa se scurga pe geam, modulul prin intrarea sprituitoare asteapta 5 secunde si mai comanda o încă baleiere .


Montare 
- Firul de la manetă care dădea comanda de ștergere temporizată către UCH (A1 la Logan) se taie.
Capătul dinspre maneta(ieșirea manetei) se leagă la intratea temporizată a modulului.
Ieșirea modulului se leagă la intrarea temporizată a UCH-ului.
- Întrarea auxiliară a modulului se leagă la ieșirea sprițuitoare a manetei (A4 la Logan)
Plusul modulului se ia de la plusul contact al manetei (pin A7)
Masa modulului se leagă la caroseria mașinii
Funcționare
    R1/R2 ȘI R3/R4 asigură translatarea nivelului analogic de 12 volti in nivel logic(divizor1/3).
Microcontrolerul prin optocuplor da cei 12V către UCH pe o perioadă de 200 milisecunde ca și când am pune scurt timp maneta în poziția1, UCH ul comanda stergerea, iar stergătoarele prin contactul lor cu camă continuă până revin la zero.
   Dacă folosim sprițuitoarele asteaptă 5 secunde apoi prin aceiași ieșire mai comandă o baleiere.


Realizare
   Pentru a nu mai da gauri în cablaj pentru microcontroler am realizat cablajul acestuia în oglindă iar integratul l-am lipit direct pe spate dupa ce i-am indoit pinii la 90 de grade .

 Liviu HINOVEANU

    Modul de temporizare reglabila a baleierii stergatoarelor asigura este realizat cu un microcontroler micut, un ATtiny85 programat cu limbaj Arduino, dupa cum am prezentat in mai multe articole, de exemplu articolul Programator pentru ATtiny25/45/85 cu Arduino Nano. Programul, scris de dl. Liviu Hinoveanu, care se foloseste pentru acest modul este wiper_timer_0.ino.
    Am primit si posta un filmulet numit Modul temporizator reglabil pentru stergatoare de Logan / Renault, care descrie si functionarea si cum se monteaza montajul:

luni, 26 noiembrie 2018

Folosire programator Tiny AVR

   Făcând rost, pentru teste, de un programator numit Tiny AVR ce este comercializat de Sparkfun, am zis sa îl probez rapid. Pentru a-l utiliza, am folosit imformaţiile oferite în articolul Tiny AVR Programmer Hookup Guide.
   Dupa introducerea programatorului într-o mufă USB primim un mesaj ca este un dispozitiv conectat, doar ca nu este instalat corect.
    Pentru sistemul de operare Windows 7 (pe 64 biţi), în CONTROL PANEL -> SYSTEM găsim informaţia
Descarcăm driverul de la https://github.com/sparkfun/Tiny-AVR-Programmer/tree/master/Drivers
se dezarhivează şi se actualizează driver-ul
şi vom avea un alt dispozitiv
   Am deschis programul Arduino IDE 1.8.5, unde am deja instalată partea de ATtiny25/45/85
alegând programatorul mai înainte instalat
   Pentru a avea placa de dezvoltare ATtiny25/45/85 în versiunea Arduino IDE 1.8.5 se intră la plăcile de dezvoltare si se caută ATtiny, instalandu-le, după cum mai prezentasem şi în alte articole anterioare.
   Am pus un ATtiny85 în soclu şi l-am programat
   Am făcut nişte filmuleţe, în care se vede modul simplu de utilizare în care am folosit programele (sketch-urile) postate pe https://github.com/tehniq3/ATtinyx5_test:
PS: recomand şi studierea articolului ATTiny Adventures: Exploring the Mysteries!

luni, 23 octombrie 2017

Modul "Daytime Running Light" (DRL) cu ATtiny85

english version

    Dl. Liviu Hinoveanu, care a realizat si varianta de DRL cu 555 prezentata la http://www.arduinotehniq.com/old/DRL/DRL.htm a dorit sa realizeze acest montaj si cu un ATtiny85 programat ca Arduino (acest mod de folosire l-am prezentat in articolul Programarea unui microcontroler ATTiny85 cu sketch Arduino). Eu mai prezentasem o versiune cu Arduino de DRL combinat cu CHLH, la Combinare module DRL (Day Time Light) si CHLH (coming home/leaving home) folosind Arduino, dar nu am mai finalizat testele...
   Schema DRL-ului realizat este
iar cablajul si montajul proiectare sunt:
    Poze cu montajul realizat de dl. Liviu Hinoveanu:
   Sketch-ul DRL_ATtiny85.ino l-am scris dupa informatiile furnizate de dl. Liviu Hinoveanu si permite aprinderea becurilor doar dupa pornirea motorului, la o anumita intensitate, care se poate regla in cateva trepte prin apasarea butonului de la minim la maxim si apoi iar la minim spre maxim. Daca se aprind manual luminile, sistemul se deconecteaza, masina functionand normal (faza scurt. faza lunga).... la oprirea motorului becurile se sting lent de la maxim la zero.
   Un filmulet cu functionarea dispozitivului, cu o descriere foarte buna a dlui Hinoveanu, este DRL cu ATtiny85:

24.05.2019
   In urma unor discutii cu un cititor ar articolului, am realizat ca era o greseala in schema, pe partea de comanda a tranzistorului MOS-FET... asa c aam corectat...

vineri, 21 iulie 2017

Programator pentru ATtiny25/45/85 cu Arduino Nano

   Pentru proiecte simple cu Arduino se pot folosi microcontrolere mai slabute cum sunt cele din seria ATtiny25/45/85, vedeti proiectele:
Indicator stare acumulator auto cu LED multicolor comandat de un ATtiny85(45)
Termometru dublu cu ATTiny85
ATtiny85 si senzorul de umiditate si temperatura DHT11
ATtiny85 si senzori de temperatura DS18B20
   Pentru programare se foloseste o placa Arduino (Nano in cazul meu, dar merge la fel si cu Uno), dupa cum am prezentat in articolul Programarea unui microcontroler ATTiny85 cu sketch Arduino.
   Nu mai repet modul de programare, ci voi prezenta schema unui montaj pentru programare, care se poate face pe cablaj, pentru a fi mereu la indemana:
   Fata de schema din articolul anterior, am mai pus si 3 leduri, care indica intrarea in modul de programare (led verde), "bataile inimii", adica comunicarea (led galben) si daca apare vreo eroare (led rosu).
   Cablajul cu piese ar arata asa
   Cablajul pentru metoda transferului de toner (prezentata in articolele Cum facem un cablaj (partea a 2-a) respectiv Cum facem un cablaj) se gaseste AICI !!!

PS: revin in curand cu poze ....

marți, 27 ianuarie 2015

Termometru dublu si indicator tensiune baterie cu ATtiny85 pe afisaj LCD1602

   Daca am putut face cu microcontroleul ATtiny85 un termometru dublu cu afisare pe ecran alfanumeric LCD1602 prin intermediul unui registru de deplasare 74HC595, m-am gandit ca pot sa am si indicarea tensiunii bateriei unei masini si astfel sa am indicatii despre temperatura din exterior si cea din interior, asta daca pot folosi pinul fizic 1, RESET, dar si ADC0 (A0), dupa cum e prezentat pe site-ul http://www.pighixxx.com/
   In cel mai rau caz, voi renunta la temperatura din interior...
   Schema gandita de mine deriva din cea a termometrului dublu la care am adaugat un divizor rezistiv cu raport de 1:4 (tensiune maxima de intrare de 20V), cum am facut la indicarul starii bateriei masinii cu led multicolor.
   Trebuie sa schimb pictogramele, iar afisarea sa fie ceva de genul:
    Pictogramele vor fi de genul:
- baterie: 
- temperatura interior (masina):
- temperatura exterior (un copac):
   Sketch-ul pe care l-am gandit si de care am fost multumit:
/*
this sketch is adapted by niq_ro from
http://www.tehnic.go.ro
http://www.niqro.3x.ro
http://nicuflorica.blogspot.ro/
http://arduinotehniq.blogspot.com/
for made a dual thermometer & battery status for car with ATtiny85 as Arduino..

 * 3-pin Arduino interface for HD44780 LCDs via 74HC595 Shift Register
 *     by Rowan Simms   code@rowansimms.com
 *     License: Creative Commons - Attribution.
 *     Full Documentation and Description:  http://rowansimms.com/article.php/lcd-hookup-in-seconds
 *
 * This sketch allows Arduinos to use a shift register to control an LCD, allowing 
 * a reduction in pins it requires from 6 to 3 while still retaining full control
 * including backlight on/off.
 * This requires the use of the LiquidCrystal595 library
 * available at: http://code.google.com/p/arduino-lcd-3pin/
 */

#include <LiquidCrystal595.h>    // include the library
LiquidCrystal595 lcd(0,1,2);     // datapin, latchpin, clockpin

byte baterie1[8] = {
  B00000,
  B01100,
  B11111,
  B10000,
  B10000,
  B10000,
  B10000,
  B11111,
};

byte baterie2[8] = {
  B00000,
  B00110,
  B11111,
  B00001,
  B00001,
  B00001,
  B00001,
  B11111,
};

byte masina1[8] = {
  B00111,
  B01000,
  B01111,
  B10110,
  B10000,
  B11111,
  B01100,
  B01100
};

byte masina2[8] = {
  B11100,
  B00010,
  B11110,
  B01101,
  B00001,
  B11111,
  B00110,
  B00110
};


byte grad[8] = {
  B01110,
  B10001,
  B10001,
  B01110,
  B00000,
  B00000,
  B00000,
};

byte pom1[8] = {
  B00111,
  B01000,
  B10101,
  B10010,
  B10000,
  B01111,
  B00001,
  B00001
};

byte pom2[8] = {
  B11000,
  B00110,
  B10101,
  B01001,
  B00010,
  B11100,
  B10000,
  B10000
};



// variables 
// variabile 
int t1, t2;
float t10, t20;
float t11, t21;
float t12, t22;


int temperaturePin1 = A0; // output from first LM335 is put at analog input no.0
int temperaturePin2 = A3; // output from second LM335 is put at analog input no.1
// cei 2 senzori de temperaturia LM335 sunt legati la pinii A0 si A1

int divbaterie = A2; //the input pin for voltage divider
int u = 0;  // variable to store the value coming from the sensor
float k=4.90/5; // corection voltage (real voltage after 7805 output)
float k1 = k; // real divider correction

float u1 = 0; // voltage on battery
float divizor = 0.25; // divider raport

void setup() {
    lcd.begin(16,2);             // 16 characters, 2 rows
  lcd.createChar(0, grad);
  lcd.createChar(1, baterie1);
  lcd.createChar(2, baterie2);
  lcd.createChar(3, masina1);
  lcd.createChar(4, masina2);
  lcd.createChar(5, pom1);
  lcd.createChar(6, pom2);


 lcd.clear(); // clear the screen
 lcd.setCursor(2, 0); // put cursor at colon 2 and row 0 = left/up
 lcd.print("ATtiny85 dual"); // print a text
 lcd.setCursor(2, 1); // put cursor at colon 0 and row 0 = left/down
 lcd.print("thermometer +"); // print a text
 delay (3000);
 lcd.clear(); // clear the screen

 lcd.setCursor(0, 0); // put cursor at colon 2 and row 0 = left/up
 lcd.print("+ battery status"); // print a text
 lcd.setCursor(4, 1); // put cursor at colon 0 and row 0 = left/down
 lcd.print("by niq_ro"); // print a text
 delay (3000);
 lcd.clear(); // clear the screen

}


void loop() {

  // Read and store Sensor Data
t11=0;
t21=0;
//lcd.clear(); // clear the screen

for (int x=1; x <= 5; x++)
  {
// calculate the value  
t1 = analogRead(temperaturePin1); // read value from temperature from first sensor (LM335);
 t10 = 100.0*(k*5.0*t1/1023-2.980)+25.0;
 t11 = t10 + t11;

t2 = analogRead(temperaturePin2); // read value from temperature from second sensor (LM335);
 t20 = 100.0*(k*5.0*t2/1023-2.980)+25.0;
 t21 = t20 + t21;

delay (500);
  }   

t12 = t11/5.0 -1.5 ; // average and corrected temperature  
t22 = t21/5.0 -1.0; // average and corrected temperature  

    lcd.setCursor(0, 0);
    lcd.write(byte(3));
    lcd.write(byte(4));
    lcd.print(":");
  //  lcd.print("t1="); 
    if (t12<10) lcd.print(" "); 
    if (t12>0.0) lcd.print("+"); 
    lcd.print(t12,1);
  //  lcd.write(0b11011111);
  lcd.write(byte(0));
    lcd.print("C ");
  
  
    lcd.setCursor(0, 1);
//   lcd.print("ext:");
  //  lcd.print("t2="); 
    lcd.write(byte(5));
    lcd.write(byte(6));
lcd.print(":");
    if (t22<10) lcd.print(" "); 
    if (t22>0.0) lcd.print("+"); 
    lcd.print(t22,1);
   // lcd.write(0b11011111);
   lcd.write(byte(0));
    lcd.print("C ");


 // read the value from the sensor:
  u = analogRead(divbaterie);      

u1 = k1*5.0*u/1023.0; // conver ADC in voltage value
u1 = u1/divizor+0.05;

lcd.setCursor(14, 0);
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(11, 1);
  if (u1<10) lcd.print(" "); 
  lcd.print(u1,1);
  lcd.print("V"); 
}
   Ca marime, el nu este foarte mare fata de cel care avea doar termometru dublu:
   Am realizat montajul si am comparat cu un multimetru:
   Ca de obicei, am facut un filmulet.. numit termometru dublu cu indicare stare acumulator masina cu ATtiny85

luni, 19 ianuarie 2015

Indicator stare acumulator auto cu LED multicolor comandat de un ATtiny85(45)

   Dupa ce am vazut cum se poate programa un microcontroler ATtiny85 cu sketch Arduino si avand in vedere ca este mai ieftin decat un ATmega328P-PU, poate functiona si fara cuart (oscilator intern la 1MHz), am zis sa fac "ceva" si, avand in vedere ca este iarma si pot fi probleme cu acumulatorul masinii, am facut un indicator pentru starea acumulatorului si pentru alternator si releul regulator.
   Schema initiala de test a fost cea in care am pus un semireglabil conectat intre +5V si masa, iar cursorul la intrarea analogica:
ulterior am pus si divizorul rezistiv de la intrare:
si am facut un filmulet cu prima varianta la care ma gandisem, numit indicator stare acumulator auto cu ATtiny85 programat cu sketch Arduino
dar are prea deranjanta cu modul de afisare, asa ca am modificat sketch-ul sa am mai putine situatii si sa am o afisare frumoasa si nederanjanta, facand si schema completa cu alimentarea de la acumulator prin intermediul unui LM7805:
   Am facut si 3 filmulete:
RGB LED battery status with ATtiny85 as Arduino (descriere in "engleza mea"):
   Am facut si poze pentru starile indicate:
- tensiune pe acumulator mai mica de 10,8V (acumulatorul descarcat... ledul se aprinde cu intermitenta):
- tensiune pe acumulator intre 10,8V si 11,8V (daca motorul este oprit, bateria este destul de descarcata si sunt sanse sa nu porneasca masina, daca tensiunea este cu motorul pornit sunt probleme cu alternatorul si releul regulator, ledul este aprins permanent in rosu): 
- tensiune pe acumulator intre 11,8V si 13,5V (daca motorul este oprit, situatia este normala, daca motorul este pornit, bateria poate fi descarcata dupa o perioada de nefolosire sau alternatorul nu incarca suficient, trebuie verificat alternatorul si releul regulator):
- tensiune pe acumulator intre 13,5V si 14,37V (motor pornit, becuri aprinse sau nu, situatia normala, se aprinde doar ledul verde):
- tensiune pe acumulator mai mare de 14,37 (motor pornit, acumulator supravoltat, se aprinde permanent ledul albastru, iar ledul verde se aprinde cu intermitenta, trebuie verificat alternatorul si releul regulator):
   Sketch-ul scris de mine pentru schema de mai sus este:
/*
basesd sketch named "Analog Input" from Examples -> 03.Analog
created by David Cuartielles, modified 30 Aug 2011, By Tom Igoe
http://arduino.cc/en/Tutorial/AnalogInput
*/

/* original circuit made by niq_ro from http://www.tehnic.go.ro
http://nicuflorica.blogspot.ro/
http://arduinotehniq.blogspot.com/
1) uC: ATtiny85 (ATtiny45) at 1MHz (internal clock)
2) common chatode RGB LED code OSTA5131A-C, see http://nicuflorica.blogspot.ro/2012/12/arduino-uno-si-un-led-multicolor-rgb.html
- an 180ohms resistor at pin D0 (phisical pin 5) in series with RED LED at GND
- an 100ohms resistor at pin D1 (phisical pin 6) in series with GREN LED at GND
- an 100ohms resistor at pin D2 (phisical pin 7) in series with BLUE LED at GND
3) a voltage divisor 1:4 made like this: +BAT --|=10k=|-|=10k=|-|=10k=|-A2|=10k=|-GND, pin A2 is phisical pin 3
- for tests can use an 10-50kohms variabile resistor put at +5V and GND, midle at A2 (phisical pin 3)
4) Vcc (phisical pin 8) at 5V
5) GND (phisixcal pin 4) at GND
*/

int sensorPin = A2;   // select the input pin for the potentiometer / resistor divider
int ledRPin = 0;      // select the pin for the RED LED
int ledGPin = 1;      // select the pin for the GREEN LED
int ledBPin = 2;      // select the pin for the BLUE LED

int u = 0;  // variable to store the value coming from the sensor

float k=4.95/5; // corection voltage
// define voltage steps:
int treapta1 = 552/k;       // Ubat=10,8V
int treapta2 = 604/k;       // Ubat=11,8V
int treapta3 = 690/k;       // Ubat=13,5V
int treapta4 = 735/k;       // Ubat=14,37V (14,4V)



void setup() {
  // declare the ledPins as an OUTPUT:
  pinMode(ledRPin, OUTPUT);  
  pinMode(ledGPin, OUTPUT);
  pinMode(ledBPin, OUTPUT);
}

void loop() {
/*
  // all leds are off
    digitalWrite(ledRPin, LOW);    // turn the red led off
    digitalWrite(ledGPin, LOW);    // turn the green led off
    digitalWrite(ledBPin, LOW);    // turn the blue led off
*/ 
  
  // read the value from the sensor:
  u = analogRead(sensorPin);    

// voltage below 10,8V
if (u < treapta1)
{
  digitalWrite(ledGPin, LOW);    // turn the green led off
  digitalWrite(ledBPin, LOW);    // turn the blue led off

  digitalWrite(ledRPin, HIGH);   // turn the red led on
  delay(100);
  digitalWrite(ledRPin, LOW);    // turn the red led off
  delay(100);
  digitalWrite(ledRPin, HIGH);   // turn the red led on
  delay(100);
  digitalWrite(ledRPin, LOW);    // turn the red led off
  delay(1000);
}

// voltage ower 10,8V & below 11,8V
if (u > treapta1 && u < treapta2)
{
  digitalWrite(ledGPin, LOW);    // turn the green led off
  digitalWrite(ledBPin, LOW);    // turn the blue led off

  digitalWrite(ledRPin, HIGH);   // turn the red led on
  delay(100);
}

// voltage ower 11,8V & below 13,5V
if (u > treapta2 && u < treapta3)
{ 
  digitalWrite(ledBPin, LOW);    // turn the blue led off
 
  digitalWrite(ledRPin, HIGH);   // turn the red led on
  delay(500);
  digitalWrite(ledRPin, LOW);    // turn the red led off
  delay(100);
  digitalWrite(ledGPin, HIGH);   // turn the green led on
  delay(200);
}

// voltage ower 13,5V & below 14,37V
if (u >= treapta3 && u < treapta4)
{ 
  digitalWrite(ledRPin, LOW);    // turn the red led off
  digitalWrite(ledBPin, LOW);    // turn the blue led off

  digitalWrite(ledGPin, HIGH);   // turn the green led on
  delay(100);
}

// voltage ower 14,37
if (u > treapta4)
{
  digitalWrite(ledRPin, LOW);    // turn the red led off
  
  digitalWrite(ledGPin, HIGH);   // turn the green led on
  delay(500);
  digitalWrite(ledGPin, LOW);   // turn the green led off
  delay(100);
  digitalWrite(ledBPin, HIGH);   // turn the blue led on
  delay(200);
}
}
   Scrierea sketch-ului in microcontrolerul nostru, care poate fi ATTiny85 sau ATtiny45, datorita dimensiunii reduse...
se face conform indicatiilor din articolul Programarea unui microcontroler ATTiny85 cu sketch Arduino.
PS: Am desenat cu ajutorul programului CadSoft EAGLE PCB Design o varianta de cablaj pentru acest montaj:
21.01.2015
   Pentru cei care vor sa programeze clasic microcontrolerul ATtiny85 (lucreaza la 1MHz cu oscilatorul intern), pun si continutul fisierului "hex":
:1000000027C04BC04AC049C048C072C146C045C0A5
:1000100044C043C042C041C040C03FC03EC00000D9
:10002000000037000000000038000000000036002B
:10003000020202020202020202020102040810206D
:1000400020041008010200000400000000004E001F
:1000500011241FBECFE5D2E0DEBFCDBF10E0A0E689
:10006000B0E0E4EAF7E002C005900D92AA36B107CD
:10007000D9F710E0AAE6B0E001C01D92A038B107A0
:10008000E1F710E0C0E5D0E003C02297FE0184D381
:10009000CE34D107D1F789D283C3B2CFEF92FF928A
:1000A0000F931F93E0906600F09067000091680046
:1000B0001091690060E070E08AE094E4A801970183
:1000C0007FD2E6D270936F0060936E0060E070E0C4
:1000D00087E194E4A801970173D2DAD2709371009A
:1000E0006093700060E070E88CE294E4A8019701EE
:1000F00067D2CED2709373006093720060E070ECB0
:1001000087E394E4A80197015BD2C2D27093750093
:10011000609374001F910F91FF90EF90089580916C
:100120006000ADD190936D0080936C0020916E00C3
:1001300030916F008217930764F58091620060E050
:10014000F6D18091640060E0F2D180916A0061E0B4
:10015000EED164E670E080E090E01ED180916A000C
:1001600060E0E5D164E670E080E090E015D1809138
:100170006A0061E0DCD164E670E080E090E00CD1E0
:1001800080916A0060E0D3D168EE73E080E090E097
:1001900003D120916C0030916D0080916E009091A0
:1001A0006F0082179307C4F48091700090917100E2
:1001B000281739078CF48091620060E0B8D18091F3
:1001C000640060E0B4D180916A0061E0B0D164E67F
:1001D00070E080E090E0E0D020916C0030916D0004
:1001E00080917000909171008217930734F580918F
:1001F00072009091730028173907FCF48091640015
:1002000060E095D180916A0061E091D164EF71E086
:1002100080E090E0C1D080916A0060E088D164E61F
:1002200070E080E090E0B8D08091620061E07FD122
:1002300068EC70E080E090E0AFD020916C003091ED
:100240006D00809172009091730028173907C4F0F7
:100250008091740090917500281739078CF4809173
:100260006A0060E064D18091640060E060D18091B8
:10027000620061E05CD164E670E080E090E08CD0E8
:1002800020916C0030916D00809174009091750008
:1002900082179307FCF480916A0060E048D1809156
:1002A000620061E044D164EF71E080E090E074D0DE
:1002B0008091620060E03BD164E670E080E090E015
:1002C0006BD08091640061E032D168EC70E080E036
:1002D00090E062D0089580916A0061E0E9D0809159
:1002E000620061E0E5D08091640061E0E1D00895B2
:1002F0001F920F920FB60F9211242F933F934F939B
:100300005F936F937F938F939F93AF93BF9320914E
:100310007A0030917B0040917C0050917D0070917B
:100320007E00DA01C9014096A11DB11D672F605DF5
:100330006D3730F06D57DA01C9014196A11DB11D2D
:1003400060937E0080937A0090937B00A0937C0062
:10035000B0937D008091760090917700A091780015
:10036000B09179000196A11DB11D80937600909304
:100370007700A0937800B0937900BF91AF919F91DF
:100380008F917F916F915F914F913F912F910F903E
:100390000FBE0F901F9018959B01AC017FB7F8948A
:1003A0008091760090917700A0917800B0917900CB
:1003B00062B708B601FE05C06F3F19F00196A11D96
:1003C000B11D7FBFBA2FA92F982F8827860F911DA7
:1003D000A11DB11D66E0880F991FAA1FBB1F6A955A
:1003E000D1F7BC012EC0FFB7F894809176009091B0
:1003F0007700A0917800B0917900E2B708B601FECD
:1004000005C0EF3F19F00196A11DB11DFFBFBA2F26
:10041000A92F982F88278E0F911DA11DB11DE6E0F1
:10042000880F991FAA1FBB1FEA95D1F7861B970B50
:10043000885E9340C0F221503040404050406851A7
:100440007C4F211531054105510569F608957894D1
:100450008AB582608ABD8AB581608ABD83B78260B1
:1004600083BF83B7816083BF89B7826089BF80B74C
:10047000826080BF329A319A309A379A0895982FC5
:100480008E3008F09E50977080917F008295880F83
:10049000880F807C892B87B9369A3699FECF24B194
:1004A00045B1942F80E030E0282B392BC901089505
:1004B000CF93DF93482F50E0CA01865C9F4FFC0129
:1004C0003491405D5F4FFA018491882369F190E097
:1004D000880F991FFC01E25EFF4FA591B491FC01CA
:1004E000EC5DFF4FC591D491662351F42FB7F8947A
:1004F0008C91932F909589238C93888189230BC0AD
:10050000623061F42FB7F8948C91932F90958923E2
:100510008C938881832B88832FBF06C09FB7F89464
:100520008C91832B8C939FBFDF91CF910895482F9F
:1005300050E0CA018C5B9F4FFC012491CA01865C8C
:100540009F4FFC019491405D5F4FFA01349133233A
:1005500059F12223A9F0223081F0233018F4213000
:1005600079F408C0233011F0243051F48CB58F7D1C
:100570008CBD06C08AB58F7702C08AB58F7D8ABDD3
:10058000E32FF0E0EE0FFF1FEC5DFF4FA591B4915C
:100590002FB7F894662321F48C919095892302C09B
:1005A0008C91892B8C932FBF0895CF93DF934FDFCE
:1005B00092DEC0E0D0E0B3DD2097E9F321DDFBCF90
:1005C0000CD0AEC0A6D040F09DD030F021F45F3FFB
:1005D00019F08FC05111D8C092C0B3D098F39923AD
:1005E000C9F35523B1F3951B550BBB27AA276217F7
:1005F0007307840738F09F5F5F4F220F331F441F3C
:10060000AA1FA9F333D00E2E3AF0E0E830D0915073
:100610005040E695001CCAF729D0FE2F27D0660F60
:10062000771F881FBB1F261737074807AB07B0E89F
:1006300009F0BB0B802DBF01FF2793585F4F2AF0B5
:100640009E3F510568F055C09FC05F3FECF3983E58
:10065000DCF3869577956795B795F7959F5FC9F712
:10066000880F911D9695879597F90895E1E0660F9B
:10067000771F881FBB1F621773078407BA0720F014
:10068000621B730B840BBA0BEE1F88F7E09508957D
:1006900004D06894B11178C008955BD088F09F575A
:1006A00090F0B92F9927B751A0F0D1F0660F771FBE
:1006B000881F991F1AF0BA95C9F712C0B13081F09E
:1006C00062D0B1E008955FC0672F782F8827B85FA8
:1006D00039F0B93FCCF3869577956795B395D9F7FF
:1006E0003EF490958095709561957F4F8F4F9F4F09
:1006F000089597F99F6780E870E060E008959FEFA4
:1007000080EC089500240A941616170618060906A8
:10071000089500240A941216130614060506089577
:10072000092E0394000C11F4882352F0BB0F40F4FF
:10073000BF2B11F460FF04C06F5F7F4F8F4F9F4F3F
:10074000089557FD9058440F551F59F05F3F71F0C1
:100750004795880F97FB991F61F09F3F79F0879528
:100760000895121613061406551FF2CF4695F1DFB1
:1007700008C0161617061806991FF1CF8695710541
:10078000610508940895E894BB2766277727CB0175
:1007900097F90895EE0FFF1F0590F491E02D09944D
:0407A000F894FFCFFB
:0A07A400080001000200A3707D3F71
:00000001FF