[r384]: / trunk / Library / POUs / FB_TestSuite / AssertEquals / svnobj  Maximize  Restore  History

Download this file

366 lines (366 with data), 40.5 kB

Gx_l,·!0┘jЭo%{oЙhъ"б─%┬System.StringL{f8a58466-d7f6-439f-bbb8-d4600e41d099}ImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocumentL{f3878285-8e4f-490b-bb1b-9acbb7eb04db}TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}	Id
longTagText
░IF GVL_CfUnit.IgnoreCurrentTest OR GVL_CfUnit.CurrentTestIsFinished THEN    RETURN;END_IF(*√    This compares two instances of any object type and returns whether they═    are the same type, size and value or not. This is necessary for two reasons:═    1. So that we can know exactly what differs between the two input parameters╗    2. It's not possible to do a comparison (= or <>) between two instances of ANY. *)d(* Check whether the type of the inputs differs *)\IF Expected.TypeClass <> Actual.TypeClass THEN>    DataTypesNotEquals := TRUE;d(* Check whether the size of the inputs differs *)<IF NOT DataTypesNotEquals THEN\    IF (Expected.diSize <> Actual.diSize) THEND        DataSizeNotEquals := TRUE;    END_IFє(* Even though the data type and size are equals, the contents may still differ *) pIF NOT DataTypesNotEquals AND NOT DataSizeNotEquals THEN!R    // Compare each byte in the ANY-types"v    FOR IteratorCounter := 0 TO Expected.diSize - 1 BY 1 DO#є        IF Expected.pValue[IteratorCounter] <> Actual.pValue[IteratorCounter] THEN$R            DataContentNotEquals := TRUE;%"            EXIT;&        END_IF'    END_FOR(л(* First check whether the input data are any of the standard data types that are supported by TcUnit.)т   In this case call the standard Assert-methods for that data. But before doing that we need to make sure*J   that both the expected and actual:+B   - Have both the same data type,B   - Both have the same data size-    (* BOOL *).·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BOOL THEN/╝		MEMCPY(destAddr := ADR(boolExpected), srcAddr := Expected.pValue, n := SIZEOF(BOOL));0╡        MEMCPY(destAddr := ADR(boolActual), srcAddr := Actual.pValue, n := SIZEOF(BOOL));1╪        AssertEquals_BOOL(Expected := boolExpected, Actual := boolActual, Message := Message);2        RETURN;3    (* BYTE *)4·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BYTE THEN5╨        MEMCPY(destAddr := ADR(byteExpected), srcAddr := Expected.pValue, n := SIZEOF(BYTE));6╡        MEMCPY(destAddr := ADR(byteActual), srcAddr := Actual.pValue, n := SIZEOF(BYTE));7╪        AssertEquals_BYTE(Expected := byteExpected, Actual := byteActual, Message := Message);8    (* DATE *)9·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATE THEN:╨        MEMCPY(destAddr := ADR(dateExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE));;╡        MEMCPY(destAddr := ADR(dateActual), srcAddr := Actual.pValue, n := SIZEOF(DATE));<╪        AssertEquals_DATE(Expected := dateExpected, Actual := dateActual, Message := Message);=.    (* DATE_AND_TIME *)>╛    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATEANDTIME THEN?з        MEMCPY(destAddr := ADR(dateAndTimeExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE_AND_TIME));@р        MEMCPY(destAddr := ADR(dateAndTimeActual), srcAddr := Actual.pValue, n := SIZEOF(DATE_AND_TIME));AЙ        AssertEquals_DATE_AND_TIME(Expected := dateAndTimeExpected, Actual := dateAndTimeActual, Message := Message);B    (* DINT *)C·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DINT THEND╨        MEMCPY(destAddr := ADR(dintExpected), srcAddr := Expected.pValue, n := SIZEOF(DINT));E╡        MEMCPY(destAddr := ADR(dintActual), srcAddr := Actual.pValue, n := SIZEOF(DINT));F╪        AssertEquals_DINT(Expected := dintExpected, Actual := dintActual, Message := Message);G    (* DWORD *)H═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DWORD THENI╬        MEMCPY(destAddr := ADR(dwordExpected), srcAddr := Expected.pValue, n := SIZEOF(DWORD));JІ        MEMCPY(destAddr := ADR(dwordActual), srcAddr := Actual.pValue, n := SIZEOF(DWORD));Kб        AssertEquals_DWORD(Expected := dwordExpected, Actual := dwordActual, Message := Message);L    (* INT *)M°    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_INT THENNІ        MEMCPY(destAddr := ADR(intExpected), srcAddr := Expected.pValue, n := SIZEOF(INT));O╝        MEMCPY(destAddr := ADR(intActual), srcAddr := Actual.pValue, n := SIZEOF(INT));PІ        AssertEquals_INT(Expected := intExpected, Actual := intActual, Message := Message);Q    (* LINT *)R·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LINT THENS╨        MEMCPY(destAddr := ADR(lintExpected), srcAddr := Expected.pValue, n := SIZEOF(LINT));T╡        MEMCPY(destAddr := ADR(lintActual), srcAddr := Actual.pValue, n := SIZEOF(LINT));U╪        AssertEquals_LINT(Expected := lintExpected, Actual := lintActual, Message := Message);V    (* LREAL *)W═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LREAL THENX╬        MEMCPY(destAddr := ADR(lrealExpected), srcAddr := Expected.pValue, n := SIZEOF(LREAL));YІ        MEMCPY(destAddr := ADR(lrealActual), srcAddr := Actual.pValue, n := SIZEOF(LREAL));Zч        AssertEquals_LREAL(Expected := lrealExpected, Actual := lrealActual, Delta := 0.0, Message := Message);[    (* LTIME *)\═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LTIME THEN]╬        MEMCPY(destAddr := ADR(ltimeExpected), srcAddr := Expected.pValue, n := SIZEOF(LTIME));^І        MEMCPY(destAddr := ADR(ltimeActual), srcAddr := Actual.pValue, n := SIZEOF(LTIME));_б        AssertEquals_LTIME(Expected := ltimeExpected, Actual := ltimeActual, Message := Message);`    (* LWORD *)a═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LWORD THENb╬        MEMCPY(destAddr := ADR(lwordExpected), srcAddr := Expected.pValue, n := SIZEOF(LWORD));cІ        MEMCPY(destAddr := ADR(lwordActual), srcAddr := Actual.pValue, n := SIZEOF(LWORD));dб        AssertEquals_LWORD(Expected := lwordExpected, Actual := lwordActual, Message := Message);e    (* REAL *)f·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_REAL THENg╨        MEMCPY(destAddr := ADR(realExpected), srcAddr := Expected.pValue, n := SIZEOF(REAL));h╡        MEMCPY(destAddr := ADR(realActual), srcAddr := Actual.pValue, n := SIZEOF(REAL));iь        AssertEquals_REAL(Expected := realExpected, Actual := realActual, Delta := 0.0, Message := Message);j    (* SINT *)k·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_SINT THENl╨        MEMCPY(destAddr := ADR(sintExpected), srcAddr := Expected.pValue, n := SIZEOF(SINT));m╡        MEMCPY(destAddr := ADR(sintActual), srcAddr := Actual.pValue, n := SIZEOF(SINT));n╪        AssertEquals_SINT(Expected := sintExpected, Actual := sintActual, Message := Message);o     (* STRING *)p╒    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_STRING THENqБ        MEMCPY(destAddr := ADR(stringExpected), srcAddr := Expected.pValue, n := DINT_TO_UDINT(Expected.diSize));rж        MEMCPY(destAddr := ADR(stringActual), srcAddr := Actual.pValue, n := DINT_TO_UDINT(Actual.diSize));sх        AssertEquals_STRING(Expected := stringExpected, Actual := stringActual, Message := Message);t    (* TIME *)u·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIME THENv╨        MEMCPY(destAddr := ADR(timeExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME));w╡        MEMCPY(destAddr := ADR(timeActual), srcAddr := Actual.pValue, n := SIZEOF(TIME));x╪        AssertEquals_TIME(Expected := timeExpected, Actual := timeActual, Message := Message);y*    (* TIME_OF_DAY *)z╗    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIMEOFDAY THEN{р        MEMCPY(destAddr := ADR(timeOfDayExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME_OF_DAY));|й        MEMCPY(destAddr := ADR(timeOfDayActual), srcAddr := Actual.pValue, n := SIZEOF(TIME_OF_DAY));}ч        AssertEquals_TIME_OF_DAY(Expected := timeOfDayExpected, Actual := timeOfDayActual, Message := Message);~    (* UDINT *)═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UDINT THEN─╬        MEMCPY(destAddr := ADR(udintExpected), srcAddr := Expected.pValue, n := SIZEOF(UDINT));│І        MEMCPY(destAddr := ADR(udintActual), srcAddr := Actual.pValue, n := SIZEOF(UDINT));┌б        AssertEquals_UDINT(Expected := udintExpected, Actual := udintActual, Message := Message);┐    (* UINT *)└·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UINT THEN┘╨        MEMCPY(destAddr := ADR(uintExpected), srcAddr := Expected.pValue, n := SIZEOF(UINT));├╡        MEMCPY(destAddr := ADR(uintActual), srcAddr := Actual.pValue, n := SIZEOF(UINT));┤╪        AssertEquals_UINT(Expected := uintExpected, Actual := uintActual, Message := Message);┬    (* ULINT *)┴═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_ULINT THEN┼╬        MEMCPY(destAddr := ADR(ulintExpected), srcAddr := Expected.pValue, n := SIZEOF(ULINT));▀І        MEMCPY(destAddr := ADR(ulintActual), srcAddr := Actual.pValue, n := SIZEOF(ULINT));▄б        AssertEquals_ULINT(Expected := ulintExpected, Actual := ulintActual, Message := Message);█    (* USINT *)▌═    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_USINT THEN▐╬        MEMCPY(destAddr := ADR(usintExpected), srcAddr := Expected.pValue, n := SIZEOF(USINT));░І        MEMCPY(destAddr := ADR(usintActual), srcAddr := Actual.pValue, n := SIZEOF(USINT));▒б        AssertEquals_USINT(Expected := usintExpected, Actual := usintActual, Message := Message);▓    (* WORD *)⌠·    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_WORD THEN■╨        MEMCPY(destAddr := ADR(wordExpected), srcAddr := Expected.pValue, n := SIZEOF(WORD));∙╡        MEMCPY(destAddr := ADR(wordActual), srcAddr := Actual.pValue, n := SIZEOF(WORD));√╪        AssertEquals_WORD(Expected := wordExpected, Actual := wordActual, Message := Message);≈Х(* If we've come to this row, it means that the data input is not any of the standard primitive data types, and thus≤H   we need to do special handling *)≥╬TestInstancePath := AddTestNameToInstancePath(TestInstancePath := FINDTestSuiteInstancePath()); 4IF DataTypesNotEquals THEN⌡Б    ExpectedDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString((Expected.TypeClass)));°■    ExpectedDataString := CONCAT(STR1 := ExpectedDataString, STR2 := ')');²ж    ActualDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString(Actual.TypeClass));·▄    ActualDataString := CONCAT(STR1 := ActualDataString, STR2 := ')');÷8ELSIF DataSizeNotEquals THEN═д    ExpectedDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Expected.diSize));║╪    ActualDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Actual.diSize));╒>ELSIF DataContentNotEquals THENёЭ    FOR Count := 0 TO MIN(Expected.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)є─        ExpectedDataString := CONCAT(STR1 := ExpectedDataString,╔л                                                  STR2 := BYTE_TO_HEXSTR(in := Expected.pValue[Count],ін                                                                                       iPrecision := 2,їт                                                                                       bLoCase := FALSE));╗√    ExpectedDataString := CONCAT(STR1 := '0x', STR2 := ExpectedDataString);╘Ь    FOR Count := 0 TO MIN(Actual.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)╙x        ActualDataString := CONCAT(STR1 := ActualDataString,╚д                                                STR2 := BYTE_TO_HEXSTR(in := Actual.pValue[Count],╛й                                                                                     iPrecision := 2,ґп                                                                                     bLoCase := FALSE));╝▌    ActualDataString := CONCAT(STR1 := '0x', STR2 := ActualDataString);╞■AssertResults.ReportResult(ExpectedSize := DINT_TO_UDINT(Expected.diSize),╟╒                           ExpectedTypeClass := UDINT_TO_INT(Expected.TypeClass),╠x                           ExpectedValue := Expected.pValue,╡▄                           ActualSize := DINT_TO_UDINT(Actual.diSize),Ё                            ActualTypeClass := UDINT_TO_INT(Actual.TypeClass),Єp                           ActualValue := Actual.pValue,╣\                           Message := Message,І─                           TestInstancePath := TestInstancePath,Ї~                           AlreadyReported => AlreadyReported);╦бIF NOT AlreadyReported AND (DataTypesNotEquals OR DataSizeNotEquals OR DataContentNotEquals) THEN╧x    SetTestFailed(AssertionType := E_AssertionType.Type_ANY,╨^                  AssertionMessage := Message);╩√    AssertMessageFormatter.LogAssertFailure(Expected := ExpectedDataString,╪▌                                            Actual := ActualDataString,Ґ~                                            Message := Message,╬є                                            TestInstancePath := TestInstancePath);©InterfaceюL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}ал(* | Asserts that two objects (of any type) are equal. If they are not, an assertion error is created.бн | For REAL and LREAL it s recommended to use the AssertEquals_REAL or AssertEquals_LREAL respectively цЄ | as these give the possibility to specify a delta between the expected and actual value.д Parameters:е@     | Expected   Expected valueф8     | Actual   Actual valueг─     | Message   The identifying message for the assertion errorх$ Positive example:и0 .. code-block:: codesysй     VARк,         a : INT := 5;л,         b : INT := 5;м     END_VARн:     TEST('Test_ANY_Equals');о@     AssertEquals(Expected := a,п<                  Actual := b,я\                  Message := 'Values differ');р*     TEST_FINISHED();с" Failing example:т.         b : UINT := 5;уL     TEST('Test_ANY_Differ_DataType');ж4METHOD PUBLIC AssertEqualsвVAR_INPUTьJ    Expected : ANY; // Expected valueыp    Actual : ANY; // The value to check against expectedз     Message : T_MaxString; // The identifying message for the assertion errorшEND_VARэVARщ"    Count : DINT;чH    ExpectedDataString : STRING(80);ъD    ActualDataString : STRING(80);ЮF    TestInstancePath : T_MaxString;А6    AlreadyReported : BOOL;Б0    boolExpected : BOOL;Ц,    boolActual : BOOL;Д0    byteExpected : BYTE;Е,    byteActual : BYTE;Ф0    dateExpected : DATE;Г,    dateActual : DATE;ХP    dateAndTimeExpected : DATE_AND_TIME;ИL    dateAndTimeActual : DATE_AND_TIME;Й0    dintExpected : DINT;К,    dintActual : DINT;Л4    dwordExpected : DWORD;М0    dwordActual : DWORD;Н,    intExpected : INT;О(    intActual : INT;П0    lintExpected : LINT;Я,    lintActual : LINT;Р4    lrealExpected : LREAL;С0    lrealActual : LREAL;Т4    ltimeExpected : LTIME;У0    ltimeActual : LTIME;Ж4    lwordExpected : LWORD;В0    lwordActual : LWORD;Ь0    realExpected : REAL;Ы,    realActual : REAL;З0    sintExpected : SINT;Ш,    sintActual : SINT;ЭB    stringExpected : T_MaxString;Щ>    stringActual : T_MaxString;Ч0    timeExpected : TIME;Ъ,    timeActual : TIME;─H    timeOfDayExpected : TIME_OF_DAY;│D    timeOfDayActual : TIME_OF_DAY;┌4    udintExpected : UDINT;┐0    udintActual : UDINT;└0    uintExpected : UINT;┘,    uintActual : UINT;├4    ulintExpected : ULINT;┤0    ulintActual : ULINT;┬4    usintExpected : USINT;┴0    usintActual : USINT;┼0    wordExpected : WORD;▀,    wordActual : WORD;▄    █D    (* ANY comparison variables *)▌╨    DataTypesNotEquals : BOOL; // The data type of the two ANY input parameters are not equal▐╦    DataSizeNotEquals : BOOL; // The data size of the two ANY input parameters are not equal░д    DataContentNotEquals : BOOL; // The data content of the two ANY input parameters are not equal▒6    IteratorCounter : DINT;пппE┤пп	
ґdзп-
пп	
ґeзп-пп	
ґзп-пп	
ґезп-пп	
ґёзп-пп	
ґєзп-пп	
ґ╔зп-пп	
ґізп-пп	
ґїзп-пп	
ґ╗зп-пп	
ґ╘зп-пп	
ґ╙зп-пп	
ґ╚зп-пп	
ґ╛зп-пп	
ґґзп-пп	
ґ╝зп-пп	
ґ╞зп-пп	
ґ╟зп-пп	
ґ╠зп-пп	
ґ╡зп-пп	
ґЁзп-пп	
ґЄзп-пп	
ґ╣зп-пп	
ґІзп- пп	
ґЇзп-!пп	
ґ╦зп-"пп	
ґ╧зп-#пп	
ґ╨зп-$пп	
ґ╩зп-%пп	
ґ╪зп-&пп	
ґҐзп-'пп	
ґ╬зп-пп	
ґ©зп-пп	
ґюзп-(пп	
ґазп-)пп	
ґбзп-*пп	
ґцзп-+пп	
ґдзп-,пп	
ґзп-пп	
ґзп- пп	
ґзп-пп	
ґзп--пп	
ґзп-.пп	
ґ)зп-/пп	
ґ*зп-пп	
ґзп-0пп	
ґзп-1пп	
ґзп-2пп	
ґзп-пп	
ґзп-пп	
ґзп-3пп	
ґзп-4пп	
ґзп-5пп	
ґзп-6пп	
ґзп-7пп	
ґзп-2пп	
ґ зп-пп	
ґ!зп-пп	
ґ"зп-8пп	
ґ#зп-9пп	
ґ$зп-:пп	
ґ%зп-;пп	
ґ&зп-<пп	
ґ'зп-2пп	
ґ(зп-пп	
ґ)зп-пп	
ґ*зп-=пп	
ґ+зп->пп	
ґ,зп-?пп	
ґ-зп-@пп	
ґ.зп-Aпп	
ґ/зп-2пп	
ґ0зп-пп	
ґ1зп-пп	
ґ2зп-Bпп	
ґ3зп-Cпп	
ґ4зп-Dпп	
ґ5зп-Eпп	
ґ6зп-Fпп	
ґ7зп-2пп	
ґ8зп-пп	
ґ9зп-пп	
ґ:зп-Gпп	
ґ;зп-Hпп	
ґ<зп-Iпп	
ґ=зп-Jпп	
ґ>зп-Kпп	
ґ?зп-2пп	
ґ@зп-пп	
ґAзп-пп	
ґBзп-Lпп	
ґCзп-Mпп	
ґDзп-Nпп	
ґEзп-Oпп	
ґFзп-Pпп	
ґGзп-2пп	
ґHзп-пп	
ґIзп-пп	
ґJзп-Qпп	
ґKзп-Rпп	
ґLзп-Sпп	
ґMзп-Tпп	
ґNзп-Uпп	
ґOзп-2пп	
ґPзп-пп	
ґQзп-пп	
ґRзп-Vпп	
ґSзп-Wпп	
ґTзп-Xпп	
ґUзп-Yпп	
ґVзп-Zпп	
ґWзп-2пп	
ґXзп-пп	
ґYзп-пп	
ґZзп-[пп	
ґ[зп-\пп	
ґ\зп-]пп	
ґ]зп-^пп	
ґ^зп-_пп	
ґ_зп-2пп	
ґ`зп-пп	
ґaзп-пп	
ґbзп-`пп	
ґcзп-aпп	
ґdзп-bпп	
ґeзп-cпп	
ґfзп-dпп	
ґgзп-2пп	
ґhзп-пп	
ґiзп-пп	
ґjзп-eпп	
ґkзп-fпп	
ґlзп-gпп	
ґmзп-hпп	
ґnзп-iпп	
ґoзп-2пп	
ґpзп-пп	
ґqзп-пп	
ґrзп-jпп	
ґsзп-kпп	
ґtзп-lпп	
ґuзп-mпп	
ґvзп-nпп	
ґwзп-2пп	
ґxзп-пп	
ґyзп-пп	
ґzзп-oпп	
ґ{зп-pпп	
ґ|зп-qпп	
ґ}зп-rпп	
ґ~зп-sпп	
ґзп-2пп	
ґ─зп-пп	
ґ│зп-пп	
ґ┌зп-tпп	
ґ┐зп-uпп	
ґ└зп-vпп	
ґ┘зп-wпп	
ґ├зп-xпп	
ґ┤зп-2пп	
ґ┬зп-пп	
ґ┴зп-пп	
ґ┼зп-yпп	
ґ▀зп-zпп	
ґ▄зп-{пп	
ґ█зп-|пп	
ґ▌зп-}пп	
ґ▐зп-2пп	
ґ░зп-пп	
ґ▒зп-пп	
ґ▓зп-~пп	
ґ⌠зп-пп	
ґ■зп-─пп	
ґ∙зп-│пп	
ґ√зп-┌пп	
ґ≈зп-2пп	
ґ≤зп-пп	
ґ≥зп-пп	
ґ зп-┐пп	
ґ⌡зп-└пп	
ґ°зп-┘пп	
ґ²зп-├пп	
ґ·зп-┤пп	
ґ÷зп-2пп	
ґ═зп-пп	
ґ║зп-пп	
ґ╒зп-┬пп	
ґёзп-┴пп	
ґєзп-┼пп	
ґ╔зп-▀пп	
ґізп-▄пп	
ґїзп-2пп	
ґ╗зп-пп	
ґ╘зп-пп	
ґ╙зп-█пп	
ґ╚зп-▌пп	
ґ╛зп-▐пп	
ґґзп-░пп	
ґ╝зп-▒пп	
ґ╞зп-2пп	
ґ╟зп-пп	
ґ╠зп-пп	
ґ╡зп-▓пп	
ґЁзп-⌠пп	
ґЄзп-■пп	
ґ╣зп-∙пп	
ґІзп-√пп	
ґЇзп-2пп	
ґ╦зп-пп	
ґ╧зп-пп	
ґ╨зп-пп	
ґ╩зп-пп	
ґ╪зп-≈пп	
ґҐзп-≤пп	
ґ╬зп-≥пп	
ґ©зп-пп	
ґюзп- пп	
ґазп-⌡пп	
ґбзп-°пп	
ґцзп-²пп	
ґдзп-·пп	
ґезп-÷пп	
ґфзп-═пп	
ґгзп-°пп	
ґхзп-║пп	
ґизп-·пп	
ґйзп-╒пп	
ґкзп-ёпп	
ґлзп-єпп	
ґмзп-╔пп	
ґнзп-іпп	
ґозп-їпп	
ґпзп-'пп	
ґязп-╗пп	
ґрзп-пп	
ґсзп-╘пп	
ґтзп-╙пп	
ґузп-╚пп	
ґжзп-╛пп	
ґвзп-ґпп	
ґьзп-'пп	
ґызп-╝пп	
ґззп-пп	
ґшзп-пп	
ґфзп-╞пп	
ґгзп-╟пп	
ґхзп-╠пп	
ґизп-╡пп	
ґйзп-Ёпп	
ґкзп-Єпп	
ґлзп-╣пп	
ґмзп-Іпп	
ґБзп-Їпп	
ґЦзп-пп	
ґДзп-╦пп	
ґcзп-╧пп	
ґЕзп-╨пп	
ґФзп-пп	
ґГзп-╩пп	
ґХзп-╪пп	
ґИзп-Ґпп	
ґЙзп-╬пп	
ґзп-п©юпEeпп	
ґ=зп-апп	
ґ>зп-бпп	
ґ?зп-цпп	
ґ@зп-пп	
ґAзп-дпп	
ґBзп-епп	
ґCзп-фпп	
ґDзп-гпп	
ґEзп-пп	
ґFзп-хпп	
ґGзп-пп	
ґHзп-ипп	
ґIзп-пп	
ґJзп-йпп	
ґKзп-кпп	
ґLзп-лпп	
ґMзп-мпп	
ґNзп-пп	
ґOзп-нпп	
ґPзп-опп	
ґQзп-ппп	
ґRзп-япп	
ґSзп-рпп	
ґTзп-пп	
ґUзп-спп	
ґVзп-пп	
ґWзп-ипп	
ґXзп-пп	
ґYзп-йпп	
ґZзп-кпп	
ґ[зп-тпп	
ґ\зп-мпп	
ґ]зп-пп	
ґ^зп-упп	
ґ_зп-опп	
ґ`зп-ппп	
ґaзп-япп	
ґ<зп-рпп	
ґbзп-пп	
ґfзп-жпп	
ґgзп-впп	
ґhзп-ьпп	
ґiзп-ыпп	
ґjзп-зпп	
ґkзп-шпп	
ґlзп-эпп	
ґmзп-щпп	
ґnзп-чпп	
ґoзп-ъпп	
ґpзп-Юпп	
ґqзп-Апп	
ґrзп-пп	
ґsзп-Бпп	
ґtзп-Цпп	
ґuзп-Дпп	
ґvзп-Епп	
ґwзп-Фпп	
ґxзп-Гпп	
ґyзп-Хпп	
ґzзп-Ипп	
ґ{зп-Йпп	
ґ|зп-Кпп	
ґ}зп-Лпп	
ґ~зп-Мпп	
ґзп-Нпп	
ґ─зп-Опп	
ґ│зп-Ппп	
ґ┌зп-Япп	
ґ┐зп-Рпп	
ґ└зп-Спп	
ґ┘зп-Тпп	
ґ├зп-Упп	
ґ┤зп-Жпп	
ґ┬зп-Впп	
ґ┴зп-Ьпп	
ґ┼зп-Ыпп	
ґ▀зп-Зпп	
ґ▄зп-Шпп	
ґ█зп-Эпп	
ґ▌зп-Щпп	
ґ▐зп-Чпп	
ґ░зп-Ъпп	
ґ▒зп-─пп	
ґ▓зп-│пп	
ґ⌠зп-┌пп	
ґ■зп-┐пп	
ґ∙зп-└пп	
ґ√зп-┘пп	
ґ≈зп-├пп	
ґ≤зп-┤пп	
ґ≥зп-┬пп	
ґ зп-┴пп	
ґ⌡зп-┼пп	
ґ°зп-▀пп	
ґ²зп-▄пп	
ґ·зп-█пп	
ґ÷зп-▌пп	
ґ═зп-▐пп	
ґ║зп-░пп	
ґ╒зп-▒пп	
ґзп-ш