diff --git a/include/minecraft_data.inc b/include/minecraft_data.inc index 524caca..6e7cf37 100644 --- a/include/minecraft_data.inc +++ b/include/minecraft_data.inc @@ -8,6 +8,7 @@ short index_buffer_configuration_offsets[] = { 768, 780, 798, 816, 840, 858, 882, 906, 936, 954, 978, 1002, 1032, 1056, 1086, 1116, }; +// generated from struct { short offset; short count; @@ -15,6 +16,7 @@ struct { {1152, 3180}, // candle.obj {4332, 1584}, // custom_mushroom.obj {5916, 36}, // fence.obj - {5952, 12}, // tall_grass.obj - {5964, 2082}, // wall_torch.obj + {5952, 24}, // stair.obj + {5976, 12}, // tall_grass.obj + {5988, 2082}, // wall_torch.obj }; diff --git a/include/world/world.h b/include/world/world.h index e0c89ad..a1e8ff0 100644 --- a/include/world/world.h +++ b/include/world/world.h @@ -25,8 +25,8 @@ namespace world { }; }; - // also update index_buffer_custom_offsets in data.inc - const int custom_block_types = 5; + // also update index_buffer_custom_offsets in include/minecraft_data.inc + const int custom_block_types = 6; const int instance_cfg_length = 64 + custom_block_types; struct instance_cfg_entry { diff --git a/minecraft/block_id_to_texture_id.data b/minecraft/block_id_to_texture_id.data deleted file mode 100644 index 0b688ae..0000000 Binary files a/minecraft/block_id_to_texture_id.data and /dev/null differ diff --git a/minecraft/configuration.idx b/minecraft/configuration.idx index 6fb2cd9..40b70af 100644 Binary files a/minecraft/configuration.idx and b/minecraft/configuration.idx differ diff --git a/minecraft/gen/block_ids.csv b/minecraft/gen/block_ids.csv index 05cb66b..4dcf47f 100644 --- a/minecraft/gen/block_ids.csv +++ b/minecraft/gen/block_ids.csv @@ -5,16 +5,13 @@ Wooden Planks,5,,4,,,,"""linear texture index"" is invalid if unspecified" Trunk,17,,5,,,,"""properties"" is (empty) if unspecified" Trunk,17,1,5,,,, Birch Block,17,2,6,,,, -Leaves,18,,12,,,, -Leaves,18,1,12,,,, -Leaves,18,2,12,,,, -Leaves,18,3,12,,,, +Leaves,18,"0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15",12,,,, Unused,20,,11,,,, Door Bottom,21,,18,,,, Door Top,22,,17,,,, -Tall Grass,31,"0,1",22,tall_grass,,, +Tall Grass,31,"0,1",22,tall_grass,two_sided,, Tan Block 1,35,1,2,,,, -White Block 2,35,5,6,,,,if you say so +White Block 2,35,5,6,,,, Arch Bottom,35,6,10,,,, Tan Block 2,35,8,3,,,, White Block 1,35,9,21,,,, @@ -23,13 +20,14 @@ Unused,35,10,,,,, Arch Top,35,14,9,,,, Grey Bricks 1,35,15,8,,,, White Block 3,35,,7,,,, -Lilac Grass,37,,15,tall_grass,,, -Spider Plant,38,,13,tall_grass,,, -Spider Plant,39,,13,tall_grass,,, +Lilac Grass,37,,15,tall_grass,two_sided,, +Spider Plant,38,,13,tall_grass,two_sided,, +Spider Plant,39,,13,tall_grass,two_sided,, Red Mushroom,40,,14,custom_mushroom,,, Start/Finish Line,45,,16,,,, Shadow Block,49,,20,,,, -Wall Torch,50,"1,2,3,4",,wall_torch,emits_light,, -Candle,50,5,,candle,emits_light,, +Wall Torch,50,"1,2,3,4",62,wall_torch,"emits_light,torch_oriented",, +Candle,50,5,61,candle,emits_light,, +Stair,53,"0,1,2,3,4,5,6,7",4,stair,stair_oriented,, Fence,85,0,4,fence,,, -Lamp Block,89,,19,,,, +Lamp Block,89,,19,,,, \ No newline at end of file diff --git a/minecraft/gen/block_ids.py b/minecraft/gen/block_ids.py index 23a4db9..dffae20 100644 --- a/minecraft/gen/block_ids.py +++ b/minecraft/gen/block_ids.py @@ -77,5 +77,17 @@ def get_texture_id(block_id, block_data): decl = by_id_data.get((block_id, block_data), default_decl) return decl.linear_texture_index +def get_special(block_id, block_data): + decl = by_id_data.get((block_id, block_data), default_decl) + if "two_sided" in decl.properties: + return -1 + if "torch_oriented" in decl.properties: + return 1 + if "stair_oriented" in decl.properties: + return 2 + return 0 + if __name__ == "__main__": - print(sorted_custom_mesh) + from pprint import pprint + #print(sorted_custom_mesh) + pprint(sorted_decls) diff --git a/minecraft/gen/candle.obj b/minecraft/gen/candle.obj index dc7dd3a..9155473 100644 --- a/minecraft/gen/candle.obj +++ b/minecraft/gen/candle.obj @@ -1553,9 +1553,15 @@ vn -0.2920 0.6453 -0.7059 vn -0.2919 0.6454 -0.7059 vn -0.2921 0.6452 -0.7060 vn -0.3822 -0.0280 -0.9237 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 +vt 0.377875 0.161326 +vt 0.592596 0.161326 +vt 0.592596 0.376047 +vt 0.363336 0.685699 +vt 0.538233 0.685699 +vt 0.538233 0.860595 +vt 0.569816 0.668247 +vt 0.784537 0.668247 +vt 0.784537 0.882968 s 1 f 1/1/1 2/2/1 3/3/2 f 3/1/2 4/2/2 1/3/1 @@ -1887,9 +1893,9 @@ f 269/1/164 192/2/164 158/3/164 f 158/1/164 157/2/164 269/3/164 f 192/1/165 193/2/165 159/3/166 f 159/1/166 158/2/166 192/3/165 -f 193/1/167 194/2/167 160/3/168 -f 160/1/168 159/2/168 193/3/167 -f 160/1/169 194/2/170 411/3/90 +f 193/4/167 194/5/167 160/6/168 +f 160/4/168 159/5/168 193/6/167 +f 160/4/169 194/5/170 411/6/90 f 161/1/171 195/2/172 253/3/101 f 253/1/101 127/2/104 161/3/171 f 162/1/173 196/2/174 195/3/172 @@ -1988,9 +1994,9 @@ f 269/1/283 232/2/283 233/3/283 f 233/1/283 192/2/283 269/3/283 f 192/1/165 233/2/284 234/3/284 f 234/1/284 193/2/165 192/3/165 -f 193/1/167 234/2/285 235/3/285 -f 235/1/285 194/2/167 193/3/167 -f 235/1/286 411/2/90 194/3/170 +f 193/7/167 234/8/285 235/9/285 +f 235/7/285 194/8/167 193/9/167 +f 235/4/286 411/5/90 194/6/170 f 236/1/287 202/2/221 253/3/220 f 253/1/220 195/2/288 236/3/287 f 237/1/289 236/2/287 195/3/288 @@ -2089,9 +2095,9 @@ f 157/1/396 158/2/396 295/3/396 f 295/1/396 510/2/396 157/3/396 f 158/1/166 159/2/166 511/3/397 f 511/1/397 295/2/397 158/3/166 -f 159/1/168 160/2/168 296/3/398 -f 296/1/398 511/2/398 159/3/168 -f 296/1/399 160/2/169 411/3/90 +f 159/4/168 160/5/168 296/6/398 +f 296/4/398 511/5/398 159/6/168 +f 296/4/399 160/5/169 411/6/90 f 161/1/400 127/2/335 279/3/338 f 279/1/338 297/2/401 161/3/400 f 162/1/402 161/2/400 297/3/401 @@ -2190,9 +2196,9 @@ f 233/1/513 232/2/513 329/3/513 f 329/1/513 526/2/513 233/3/513 f 234/1/284 233/2/284 526/3/514 f 526/1/514 330/2/514 234/3/284 -f 235/1/285 234/2/285 330/3/515 -f 330/1/515 331/2/515 235/3/285 -f 411/1/90 235/2/286 331/3/516 +f 235/7/285 234/8/285 330/9/515 +f 330/7/515 331/8/515 235/9/285 +f 411/4/90 235/5/286 331/6/516 f 202/1/450 236/2/517 332/3/518 f 332/1/518 310/2/451 202/3/450 f 236/1/517 237/2/519 333/3/520 @@ -2291,9 +2297,9 @@ f 403/1/625 404/2/625 406/3/625 f 406/1/625 405/2/625 403/3/625 f 405/1/626 406/2/627 408/3/627 f 408/1/627 407/2/626 405/3/626 -f 407/1/628 408/2/629 410/3/629 -f 410/1/629 409/2/628 407/3/628 -f 410/1/630 411/2/90 409/3/631 +f 407/4/628 408/5/629 410/6/629 +f 410/4/629 409/5/628 407/6/628 +f 410/4/630 411/5/90 409/6/631 f 412/1/632 343/2/563 344/3/562 f 344/1/562 413/2/633 412/3/632 f 414/1/634 412/2/632 413/3/633 @@ -2392,9 +2398,9 @@ f 403/1/744 405/2/744 476/3/744 f 476/1/744 475/2/744 403/3/744 f 405/1/626 407/2/626 477/3/745 f 477/1/745 476/2/745 405/3/626 -f 407/1/628 409/2/628 478/3/746 -f 478/1/746 477/2/746 407/3/628 -f 478/1/747 409/2/631 411/3/90 +f 407/7/628 409/8/628 478/9/746 +f 478/7/746 477/8/746 407/9/628 +f 478/4/747 409/5/631 411/6/90 f 479/1/748 413/2/749 344/3/681 f 344/1/681 445/2/684 479/3/748 f 480/1/750 415/2/751 413/3/749 @@ -2493,9 +2499,9 @@ f 404/1/859 510/2/859 295/3/859 f 295/1/859 406/2/859 404/3/859 f 406/1/627 295/2/397 511/3/397 f 511/1/397 408/2/627 406/3/627 -f 408/1/629 511/2/398 296/3/398 -f 296/1/398 410/2/629 408/3/629 -f 296/1/399 411/2/90 410/3/630 +f 408/4/629 511/5/398 296/6/398 +f 296/4/398 410/5/629 408/6/629 +f 296/4/399 411/5/90 410/6/630 f 412/1/860 297/2/861 279/3/798 f 279/1/798 343/2/797 412/3/860 f 414/1/862 298/2/863 297/3/861 @@ -2594,9 +2600,9 @@ f 476/1/973 526/2/973 329/3/973 f 329/1/973 475/2/973 476/3/973 f 477/1/745 330/2/514 526/3/514 f 526/1/514 476/2/745 477/3/745 -f 478/1/746 331/2/515 330/3/515 -f 330/1/515 477/2/746 478/3/746 -f 411/1/90 331/2/516 478/3/747 +f 478/7/746 331/8/515 330/9/515 +f 330/7/515 477/8/746 478/9/746 +f 411/4/90 331/5/516 478/6/747 f 445/1/913 310/2/912 332/3/974 f 332/1/974 479/2/975 445/3/913 f 479/1/975 332/2/974 333/3/976 diff --git a/minecraft/gen/mc.py b/minecraft/gen/mc.py index 481c5f9..2c8d5f1 100644 --- a/minecraft/gen/mc.py +++ b/minecraft/gen/mc.py @@ -96,9 +96,11 @@ def build_block_configuration_table(): yield indices def pack_instance_data(position, block_id, block_data, texture_id): + special = block_ids.get_special(block_id, block_data) + packed = struct.pack("2,џ=2џ8џ1&џ$џ$џ*% џ$џ1&џ8џ8џ=.џNеџT|џ%BTџT|џ Fnџ/L^џ&_‡џ;cџPxџT|џ%BTџT|џ!Z‚џ?\nџT|џ5_ПџџџџџџџџџџџџџџџџџџџџџџџџџџџџџъёїџцюєџџџџџлущџАЗФџнхыџџџџџсшяџвктџўџџџксщџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ=.џ$џ*% џ=.џ8џ=.џJ5џJ5џ=.џJ5џ=.џ8џg;0џџ=.џ=.џJ5џN=0џI9/џ>2,џN=0џN=0џN=0џN=0џ$џ=2џ8џN=0џC5-џN=0џ=.џ8џT|џ%BTџЪ™љџўўўџš™љџўўўџўўўџT|џT|џўўўџўўўџ‹‹Фџўўўџ™Ыљџ%BTџLtџџџџџџџџџџџџџџџџџАЗФџАЗФџЩамџцюєџЖНЪџ ЇЕџЅЌЙџџџџџМФаџЩамџЖНЪџšЁЎџипшџЩамџМФаџАЗФџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ=.џ$џ$џ=.џ8џ=.џJ5џC5-џ=.џQ@џ=.џ1&џN=0џџ=.џ1&џN=0џN=0џN=0џJ5џN=0џN=0џQ@џN=0џN=0џg;0џ]UZџQKQџN=0џI9/џ=.џ.)џ6HџЪ™љџ4FџўўўџўўўџўўўџT|џ‘Џтџўўўџ4Fџўўўџ™Ыљџўўўџ4Fџ™Ыљџ%BTџџџџџџџџџџџџџџџџџ№јќџєќџџћџџџаипџШЯйџчяєџэѕљџїџџџўџџџсшяџШбйџбксџАЗФџАЗФџЩамџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџJ5џ$џ1&џJ5џ=.џ=.џ=.џI9/џJ5џN=0џ=.џ$џN=0џ$џ8џ=.џMџJ5џ8џ1&џ=.џ=.џ=2џQ@џ8џQ@џ1&џ*% џ$џ$џ1&џ=2џT|џўўўџўўўџ%^†џўўўџ%BTџ‘Џтџ‘Џтџ‘Џтџ‘Џтџ%^†џ‹‹Фџ%^†џ‘ЏтџШйџџ"[ƒџџџџџџџџџџџџџџџџџфьђџѓћўџўџџџбисџПЧбџэѕњџфьђџЭеоџџџџџФЬеџ ЇЕџюіњџ§џџџџџџџџџџџЩамџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ1&џ=2џ$џ.)џ>2,џ=2џ8џ1&џ$џ$џ*% џ$џ1&џ8џ8џ=.џ33;џ??Kџ8џ*% џ=.џ=.џ=.џ8џ8џJ5џ$џ$џ$џ$џ1&џ$џT|џўўўџўўўџГиџџT|џГиџџ‘Џтџ‘Џтџ‘Џтџўўўџ‘ЏтџT|џ™ЫљџШйџџЂхџ BjџџџџџџџџџџџџџџџџџвктџМФаџвктџЛТЯџФЬеџвктџвктџМФаџЛТЯџаипџЁЈЕџџџџџіўџџџџџџџџџџџџџџE~2џE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ]UZџN=0џ]UZџC5-џQKQџN=0џ]UZџI9/џ=2џ=2џI9/џ$џ$џ$џ8џMџOO[џ++3џ8џ=.џ=.џJ5џ=.џ=.џ1&џJ5џ8џ1&џ$џџ1&џ$џ%BTџЂхџўўўџ%^†џўўўџ%BTџ‘ЏтџГУџџўўўџ‘Џтџ%BTџ‘Џтџ%BTџЂхџЂхџ%BTџџџџџџџџџџџџџџџџџіўџџњџџџЩамџЪгкџџџџџаипџирчџщ№іџЩамџўџџџџџџџщёїџџџџџџџџџцюєџўџџџЛњ‚џE~2џE~2џE~2џ6r,џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџN=0џN=0џN=0џJ5џN=0џN=0џQ@џN=0џN=0џg;0џ]UZџQKQџN=0џI9/џ=.џ.)џOO[џ++3џ??Kџ8џMџ=.џ$џ8џ=.џJ5џ=.џ$џ=2џ$џ=2џ=2џT|џўўўџ4FџўўўџГиџџ‘ЏтџT|џШйџџГУџџT|џГУџџўўўџ‘ЏтџT|џўўўџT|џџџџџџџџџџџџџџџџџўџџџёљ§џšЁЎџЪвлџфьђџѓћўџўџџџЬднџНХЯџъёїџэѕљџєќџџўџџџџџџџвктџэѕљџE~2џE~2џЛњ‚џЇъlџE~2џE~2џE~2џbœAџ6r,џЁфfџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џOO[џ#џ8џ8џ=.џQ@џ1&џ8џ1&џ=.џ1&џ$џ1&џџ8џ=2џT|џT|џШйџџўўўџўўўџГУџџШйџџ%BTџT|џГУџџ‘Џтџ‘ЏтџўўўџЂхџT|џJrџџџџџџџџџџџџџџџџџЖНЪџфьѓџšЁЎџЦЮзџЛТЯџсшяџвктџБИХџШаиџџџџџіўџџѓћўџџџџџќџџџšЁЎџЪвлџE~2џЛњ‚џЛњ‚џЛњ‚џr­IџF3џr­IџE~2џЇъlџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ8џ$џ=2џ=.џQ@џ=.џ1&џQ@џN=0џ=.џ8џ1&џџ8џ$џ33;џ#џ=2џ8џJ5џJ5џ8џ=.џ=.џ=.џ$џ$џ$џџ=2џ1&џ%^†џ%BTџўўўџиЉяџўўўџ‘Џтџ‘Џтџ?\nџ FnџГУџџГУџџГУџџЊФяџЊФяџT|џT|џџџџџџџџџџџџџџџџџџџџџџџџџирчџнхыџМФаџўџџџлущџ§џџџџџџџбйсџЛТЯџсшяџЛТЯџБИХџШаиџбйсџE~2џЇъlџE~2џЛњ‚џ6r,џЁфfџЇъlџЛњ‚џE~2џbœAџE~2џЛњ‚џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ33;џ??Kџ1&џ=.џ=.џ=.џJ5џ=.џ=.џQ@џ=.џ$џ1&џ$џ=.џ*% џOO[џ8џQ@џ8џJ5џQ@џ8џ=.џ8џ=.џ8џ8џ$џџ.)џ=2џT|џ‹‹ФџT|џиЉяџ‘Џтџ‘ЏтџLtџГУџџўўўџLtџГУџџГУџџ‘ЏтџT|џЊФяџT|џџџџџџџџџџџџџџџџџњџџџўџџџёљ§џъёїџгкфџчяєџ№јќџџџџџџџџџТЪдџИРЬџзпцџъёїџџџџџирчџжохџE~2џЛњ‚џЛњ‚џЛњ‚џ6r,џЁфfџE~2џЁфfџ6r,џbœAџE~2џЁфfџE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ#џ8џ=.џJ5џJ5џJ5џC5-џ=.џQ@џ=.џ.)џ8џ$џN=0џ$џ1&џ=2џ$џ.)џ>2,џ=2џ8џ1&џ$џ$џ*% џ$џ1&џ8џ8џ=.џ+=џиЉяџиЉяџ4Fџўўўџ%BTџ‘ЏтџўўўџўўўџГУџџ%BTџўўўџ%BTџўўўџЊФяџ2DџџџџџџџџџџџџџџџџџэѕњџџџџџЇЎМџёљ§џяїћџџџџџџџџџџџџџвктџцюєџсшяџџџџџ№јќџўџџџџџџџџџџџE~2џЛњ‚џЇъlџE~2џЛњ‚џЛњ‚џ6r,џЛњ‚џЛњ‚џ6r,џŠЧUџE~2џЛњ‚џЛњ‚џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ++3џ??Kџ8џQ@џQ@џQ@џN=0џ=.џQ@џ1&џ$џ8џџN=0џ1&џ]UZџN=0џ]UZџC5-џQKQџN=0џ]UZџI9/џ=2џ=2џI9/џ$џ$џ$џ8џMџ FnџиЉяџўўўџўўўџ%^†џўўўџШйџџ‘ЏтџЮГџџГУџџўўўџT|џўўўџЋЊяџиЉяџT|џџџџџџџџџџџџџџџџџўџџџћџџџёљ§џџџџџЁЈЕџўџџџшяѕџїџџџіўџџўџџџШЯйџўџџџ§џџџїџџџјџџџўџџџЁфfџЇъlџЁфfџЛњ‚џЇъlџ6r,џЛњ‚џЇъlџE~2џЛњ‚џЛњ‚џE~2џЇъlџЛњ‚џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ33;џ$џ=.џ=.џJ5џQ@џN=0џ1&џQ@џ=.џ$џ=.џ$џJ5џ1&џN=0џN=0џN=0џJ5џN=0џN=0џQ@џN=0џN=0џg;0џ]UZџQKQџN=0џI9/џ=.џ.)џT|џШйџџГьџџT|џўўўџT|џЂхџЮГџџГУџџЮГџџ%^†џўўўџT|џГиџџўўўџT|џџџџџџџџџџџџџџџџџєќџџѓћўџфьђџЬднџПЧбџТЪдџЇЎМџпчюџћџџџџџџџџџџџџџџџЇЎМџпчюџ№јќџџџџџЛњ‚џ6r,џЛњ‚џЛњ‚џ6r,џ6r,џЇъlџ6r,џЁфfџЇъlџЮYџE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ1&џ=2џ=.џ=.џ=2џJ5џI9/џ8џJ5џ8џ$џ=.џ$џ=.џ1&џ8џQ@џ1&џ8џ8џMџ8џ=.џ=.џ8џ$џ$џ$џ$џџ8џ%BTџиЉяџ&CUџГьџџГьџџЂхџ%BTџўўўџЮГџџ4FџШйџџўўўџўўўџ&CUџиЉяџ%BTџџџџџџџџџџџџџџџџџвктџМФаџАЗФџАЗФџšЁЎџЖНЪџфьѓџфьђџѓћџџџџџџъёїџирчџИРЬџўџџџџџџџџџџџЇъlџE~2џЛњ‚џЇъlџE~2џЛњ‚џЗњ}џ6r,џ6r,џЁфfџE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ=.џ:3џ=.џJ5џ1&џ=.џQ@џI9/џ=.џQ@џ1&џ1&џ1&џ$џ8џ1&џ=.џN=0џ1&џ8џ8џ=.џ8џMџ1&џ8џ$џ$џ$џ$џ$џ1&џAiџ%BTџўўўџўўўџўўўџš™љџўўўџT|џT|џ‘Џтџ™Ыљџ‹‹Фџўўўџ‘Џтџ%BTџT|џџџџџџџџџџџџџџџџџЩамџўџџџѓћџџџџџџџџџџжохџжоцџМФаџвктџлуыџНХЯџЖНЪџЩамџсшяџЩамџАЗФџЁфfџ6r,џЛњ‚џЁфfџЛњ‚џ6r,џЇъlџЛњ‚џЛњ‚џЛњ‚џЛњ‚џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ.)џ.)џ=2џ8џ1&џ1&џ8џ=.џN=0џ=.џ8џN=0џJ5џQ@џg;0џJ5џ1&џ8џ8џ8џ8џ=.џ8џ=.џ=.џ=.џ8џ$џ$џ$џ$џI9/џ&KЁџT|џ$ASџT|џT|џ-J\џT|џT|џ!Z‚џT|џ.@џT|џT|џ3PbџT|џYоџџџџџџџџџџџџџџџџџЇЎМџпчюџ№јќџџџџџџџџџџџџџзпцџксщџєќџџїџџџНХЯџТЪдџфьђџѓћўџўџџџџџџџЇъlџE~2џЛњ‚џЛњ‚џE~2џ6r,џЛњ‚џЇъlџE~2џЛњ‚џЇъlџE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ŠЃџ{ŠЃџ›ЈНџ›ЈНџo€šџ[m‰џ{ŠЃџ{ŠЃџ›ЈНџ›ЈНџo€šџ[m‰џ{ŠЃџ{ŠЃџ›ЈНџ›ЈНџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпээџпээџс№№џс№№џ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџс№№џпээџс№№џпээџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЧемџжфчџаоуџс№№џo€šџДТЮџЧемџжфчџс№№џс№№џo€šџс№№џЧемџжфчџс№№џс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ŠЃџ›ЈНџ{ŠЃџ{ŠЃџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџ›ЈНџ›ЈНџ›ЈНџ{ŠЃџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџпээџ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџпээџряяџс№№џс№№џ›ЈНџжфчџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџФвкџс№№џo€šџДТЮџЧемџжфчџс№№џс№№џo€šџДТЮџЧемџжфчџжфчџс№№џo€šџДТЮџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЧемџ[m‰џФвкџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџo€šџ›ЈНџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпээџпээџс№№џс№№џ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџс№№џпээџс№№џпээџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЧемџжфчџаоуџс№№џ›ЈНџДТЮџЧемџжфчџс№№џс№№џ›ЈНџс№№џЧемџжфчџс№№џс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџжфчџРЮзџс№№џo€šџжфчџЧемџжфчџЧемџжфчџo€šџжфчџс№№џжфчџРЮзџжфчџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ŠЃџ›ЈНџ{ŠЃџ{ŠЃџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџ›ЈНџ›ЈНџ›ЈНџ{ŠЃџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџпээџряяџс№№џс№№џ›ЈНџжфчџпээџпээџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџo€šџДТЮџЧемџжфчџс№№џс№№џo€šџДТЮџЧемџжфчџжфчџс№№џo€šџДТЮџЧемџс№№џ \ No newline at end of file +џFD=џоиаџШПЖџB?9џкдЬџЬЧПџojbџFD=џоиаџШПЖџB?9џкдЬџЬЧПџojbџЋЁ™џ“‹џFD=џоиаџШПЖџ&KЁџT|џ$ASџT|џT|џ-J\џT|џT|џ!Z‚џT|џ.@џT|џT|џ3PbџT|џYоџKд2џџџџFЯ-џџUѕ5џeџ mџХ]џЄдqџ…МZџB‚,џyВNџa";џa";џweЇџхУџџхУџџСЄџџweЇџСЄџџo_œџхУџџweЇџweЇџСЄџџџКpџКpџФ…џФ…џКpџЎZџ 4џ 4џ 4џЎZџЎZџФ…џ™џƒџџ'џ'џ'џ'џ'џ'џ'џ'џ'џ'џ'џ'џ'џ'џ'џ'џ1&џ=2џ$џ.)џ>2,џ=2џ8џ1&џ$џ$џ*% џ$џ1&џ8џ8џ=.џNеџT|џ%BTџT|џ Fnџ/L^џ&_‡џ;cџPxџT|џ%BTџT|џ!Z‚џ?\nџT|џ5_ПџџџџџџџџџџџџџџџџџџџџџџџџџџџџџъёїџцюєџџџџџлущџАЗФџнхыџџџџџсшяџвктџўџџџксщџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ=.џ$џ*% џ=.џ8џ=.џJ5џJ5џ=.џJ5џ=.џ8џg;0џџ=.џ=.џJ5џN=0џI9/џ>2,џN=0џN=0џN=0џN=0џ$џ=2џ8џN=0џC5-џN=0џ=.џ8џT|џ%BTџЪ™љџўўўџš™љџўўўџўўўџT|џT|џўўўџўўўџ‹‹Фџўўўџ™Ыљџ%BTџLtџџџџџџџџџџџџџџџџџАЗФџАЗФџЩамџцюєџЖНЪџ ЇЕџЅЌЙџџџџџМФаџЩамџЖНЪџšЁЎџипшџЩамџМФаџАЗФџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ=.џ$џ$џ=.џ8џ=.џJ5џC5-џ=.џQ@џ=.џ1&џN=0џџ=.џ1&џN=0џN=0џN=0џJ5џN=0џN=0џQ@џN=0џN=0џg;0џ]UZџQKQџN=0џI9/џ=.џ.)џ6HџЪ™љџ4FџўўўџўўўџўўўџT|џ‘Џтџўўўџ4Fџўўўџ™Ыљџўўўџ4Fџ™Ыљџ%BTџџџџџџџџџџџџџџџџџ№јќџєќџџћџџџаипџШЯйџчяєџэѕљџїџџџўџџџсшяџШбйџбксџАЗФџАЗФџЩамџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџJ5џ$џ1&џJ5џ=.џ=.џ=.џI9/џJ5џN=0џ=.џ$џN=0џ$џ8џ=.џMџJ5џ8џ1&џ=.џ=.џ=2џQ@џ8џQ@џ1&џ*% џ$џ$џ1&џ=2џT|џўўўџўўўџ%^†џўўўџ%BTџ‘Џтџ‘Џтџ‘Џтџ‘Џтџ%^†џ‹‹Фџ%^†џ‘ЏтџШйџџ"[ƒџџџџџџџџџџџџџџџџџфьђџѓћўџўџџџбисџПЧбџэѕњџфьђџЭеоџџџџџФЬеџ ЇЕџюіњџ§џџџџџџџџџџџЩамџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ1&џ=2џ$џ.)џ>2,џ=2џ8џ1&џ$џ$џ*% џ$џ1&џ8џ8џ=.џ33;џ??Kџ8џ*% џ=.џ=.џ=.џ8џ8џJ5џ$џ$џ$џ$џ1&џ$џT|џўўўџўўўџГиџџT|џГиџџ‘Џтџ‘Џтџ‘Џтџўўўџ‘ЏтџT|џ™ЫљџШйџџЂхџ BjџџџџџџџџџџџџџџџџџвктџМФаџвктџЛТЯџФЬеџвктџвктџМФаџЛТЯџаипџЁЈЕџџџџџіўџџџџџџџџџџџџџџE~2џE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ]UZџN=0џ]UZџC5-џQKQџN=0џ]UZџI9/џ=2џ=2џI9/џ$џ$џ$џ8џMџOO[џ++3џ8џ=.џ=.џJ5џ=.џ=.џ1&џJ5џ8џ1&џ$џџ1&џ$џ%BTџЂхџўўўџ%^†џўўўџ%BTџ‘ЏтџГУџџўўўџ‘Џтџ%BTџ‘Џтџ%BTџЂхџЂхџ%BTџџџџџџџџџџџџџџџџџіўџџњџџџЩамџЪгкџџџџџаипџирчџщ№іџЩамџўџџџџџџџщёїџџџџџџџџџцюєџўџџџЛњ‚џE~2џE~2џE~2џ6r,џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџN=0џN=0џN=0џJ5џN=0џN=0џQ@џN=0џN=0џg;0џ]UZџQKQџN=0џI9/џ=.џ.)џOO[џ++3џ??Kџ8џMџ=.џ$џ8џ=.џJ5џ=.џ$џ=2џ$џ=2џ=2џT|џўўўџ4FџўўўџГиџџ‘ЏтџT|џШйџџГУџџT|џГУџџўўўџ‘ЏтџT|џўўўџT|џџџџџџџџџџџџџџџџџўџџџёљ§џšЁЎџЪвлџфьђџѓћўџўџџџЬднџНХЯџъёїџэѕљџєќџџўџџџџџџџвктџэѕљџE~2џE~2џЛњ‚џЇъlџE~2џE~2џE~2џbœAџ6r,џЁфfџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џ$џOO[џ#џ8џ8џ=.џQ@џ1&џ8џ1&џ=.џ1&џ$џ1&џџ8џ=2џT|џT|џШйџџўўўџўўўџГУџџШйџџ%BTџT|џГУџџ‘Џтџ‘ЏтџўўўџЂхџT|џJrџџџџџџџџџџџџџџџџџЖНЪџфьѓџšЁЎџЦЮзџЛТЯџсшяџвктџБИХџШаиџџџџџіўџџѓћўџџџџџќџџџšЁЎџЪвлџE~2џЛњ‚џЛњ‚џЛњ‚џr­IџF3џr­IџE~2џЇъlџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ8џ$џ=2џ=.џQ@џ=.џ1&џQ@џN=0џ=.џ8џ1&џџ8џ$џ33;џ#џ=2џ8џJ5џJ5џ8џ=.џ=.џ=.џ$џ$џ$џџ=2џ1&џ%^†џ%BTџўўўџиЉяџўўўџ‘Џтџ‘Џтџ?\nџ FnџГУџџГУџџГУџџЊФяџЊФяџT|џT|џџџџџџџџџџџџџџџџџџџџџџџџџирчџнхыџМФаџўџџџлущџ§џџџџџџџбйсџЛТЯџсшяџЛТЯџБИХџШаиџбйсџE~2џЇъlџE~2џЛњ‚џ6r,џЁфfџЇъlџЛњ‚џE~2џbœAџE~2џЛњ‚џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ33;џ??Kџ1&џ=.џ=.џ=.џJ5џ=.џ=.џQ@џ=.џ$џ1&џ$џ=.џ*% џOO[џ8џQ@џ8џJ5џQ@џ8џ=.џ8џ=.џ8џ8џ$џџ.)џ=2џT|џ‹‹ФџT|џиЉяџ‘Џтџ‘ЏтџLtџГУџџўўўџLtџГУџџГУџџ‘ЏтџT|џЊФяџT|џџџџџџџџџџџџџџџџџњџџџўџџџёљ§џъёїџгкфџчяєџ№јќџџџџџџџџџТЪдџИРЬџзпцџъёїџџџџџирчџжохџE~2џЛњ‚џЛњ‚џЛњ‚џ6r,џЁфfџE~2џЁфfџ6r,џbœAџE~2џЁфfџE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ#џ8џ=.џJ5џJ5џJ5џC5-џ=.џQ@џ=.џ.)џ8џ$џN=0џ$џ1&џ=2џ$џ.)џ>2,џ=2џ8џ1&џ$џ$џ*% џ$џ1&џ8џ8џ=.џ+=џиЉяџиЉяџ4Fџўўўџ%BTџ‘ЏтџўўўџўўўџГУџџ%BTџўўўџ%BTџўўўџЊФяџ2DџџџџџџџџџџџџџџџџџэѕњџџџџџЇЎМџёљ§џяїћџџџџџџџџџџџџџвктџцюєџсшяџџџџџ№јќџўџџџџџџџџџџџE~2џЛњ‚џЇъlџE~2џЛњ‚џЛњ‚џ6r,џЛњ‚џЛњ‚џ6r,џŠЧUџE~2џЛњ‚џЛњ‚џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ++3џ??Kџ8џQ@џQ@џQ@џN=0џ=.џQ@џ1&џ$џ8џџN=0џ1&џ]UZџN=0џ]UZџC5-џQKQџN=0џ]UZџI9/џ=2џ=2џI9/џ$џ$џ$џ8џMџ FnџиЉяџўўўџўўўџ%^†џўўўџШйџџ‘ЏтџЮГџџГУџџўўўџT|џўўўџЋЊяџиЉяџT|џџџџџџџџџџџџџџџџџўџџџћџџџёљ§џџџџџЁЈЕџўџџџшяѕџїџџџіўџџўџџџШЯйџўџџџ§џџџїџџџјџџџўџџџЁфfџЇъlџЁфfџЛњ‚џЇъlџ6r,џЛњ‚џЇъlџE~2џЛњ‚џЛњ‚џE~2џЇъlџЛњ‚џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ33;џ$џ=.џ=.џJ5џQ@џN=0џ1&џQ@џ=.џ$џ=.џ$џJ5џ1&џN=0џN=0џN=0џJ5џN=0џN=0џQ@џN=0џN=0џg;0џ]UZџQKQџN=0џI9/џ=.џ.)џT|џШйџџГьџџT|џўўўџT|џЂхџЮГџџГУџџЮГџџ%^†џўўўџT|џГиџџўўўџT|џџџџџџџџџџџџџџџџџєќџџѓћўџфьђџЬднџПЧбџТЪдџЇЎМџпчюџћџџџџџџџџџџџџџџџЇЎМџпчюџ№јќџџџџџЛњ‚џ6r,џЛњ‚џЛњ‚џ6r,џ6r,џЇъlџ6r,џЁфfџЇъlџЮYџE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџOO[џ1&џ=2џ=.џ=.џ=2џJ5џI9/џ8џJ5џ8џ$џ=.џ$џ=.џ1&џ8џQ@џ1&џ8џ8џMџ8џ=.џ=.џ8џ$џ$џ$џ$џџ8џ%BTџиЉяџ&CUџГьџџГьџџЂхџ%BTџўўўџЮГџџ4FџШйџџўўўџўўўџ&CUџиЉяџ%BTџџџџџџџџџџџџџџџџџвктџМФаџАЗФџАЗФџšЁЎџЖНЪџфьѓџфьђџѓћџџџџџџъёїџирчџИРЬџўџџџџџџџџџџџЇъlџE~2џЛњ‚џЇъlџE~2џЛњ‚џЗњ}џ6r,џ6r,џЁфfџE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ=.џ:3џ=.џJ5џ1&џ=.џQ@џI9/џ=.џQ@џ1&џ1&џ1&џ$џ8џ1&џ=.џN=0џ1&џ8џ8џ=.џ8џMџ1&џ8џ$џ$џ$џ$џ$џ1&џAiџ%BTџўўўџўўўџўўўџš™љџўўўџT|џT|џ‘Џтџ™Ыљџ‹‹Фџўўўџ‘Џтџ%BTџT|џџџџџџџџџџџџџџџџџЩамџўџџџѓћџџџџџџџџџџжохџжоцџМФаџвктџлуыџНХЯџЖНЪџЩамџсшяџЩамџАЗФџЁфfџ6r,џЛњ‚џЁфfџЛњ‚џ6r,џЇъlџЛњ‚џЛњ‚џЛњ‚џЛњ‚џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ.)џ.)џ=2џ8џ1&џ1&џ8џ=.џN=0џ=.џ8џN=0џJ5џQ@џg;0џJ5џ1&џ8џ8џ8џ8џ=.џ8џ=.џ=.џ=.џ8џ$џ$џ$џ$џI9/џ&KЁџT|џ$ASџT|џT|џ-J\џT|џT|џ!Z‚џT|џ.@џT|џT|џ3PbџT|џYоџџџџџџџџџџџџџџџџџЇЎМџпчюџ№јќџџџџџџџџџџџџџзпцџксщџєќџџїџџџНХЯџТЪдџфьђџѓћўџўџџџџџџџЇъlџE~2џЛњ‚џЛњ‚џE~2џ6r,џЛњ‚џЇъlџE~2џЛњ‚џЇъlџE~2џE~2џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ŠЃџ{ŠЃџ›ЈНџ›ЈНџo€šџ[m‰џ{ŠЃџ{ŠЃџ›ЈНџ›ЈНџo€šџ[m‰џ{ŠЃџ{ŠЃџ›ЈНџ›ЈНџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпээџпээџс№№џс№№џ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџс№№џпээџс№№џпээџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЧемџжфчџаоуџс№№џo€šџДТЮџЧемџжфчџс№№џс№№џo€šџс№№џЧемџжфчџс№№џс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ŠЃџ›ЈНџ{ŠЃџ{ŠЃџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџ›ЈНџ›ЈНџ›ЈНџ{ŠЃџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџпээџ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџпээџряяџс№№џс№№џ›ЈНџжфчџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџФвкџс№№џo€šџДТЮџЧемџжфчџс№№џс№№џo€šџДТЮџЧемџжфчџжфчџс№№џo€šџДТЮџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЧемџ[m‰џФвкџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџo€šџ›ЈНџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпээџпээџс№№џс№№џ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџс№№џпээџс№№џпээџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЧемџжфчџаоуџс№№џ›ЈНџДТЮџЧемџжфчџс№№џс№№џ›ЈНџс№№џЧемџжфчџс№№џс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџжфчџРЮзџс№№џo€šџжфчџЧемџжфчџЧемџжфчџo€šџжфчџс№№џжфчџРЮзџжфчџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџЩжнџ[m‰џФвкџжфчџРЮзџжфчџс№№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ŠЃџ›ЈНџ{ŠЃџ{ŠЃџ[m‰џo€šџ{ŠЃџ›ЈНџ{ŠЃџ›ЈНџ[m‰џo€šџ›ЈНџ›ЈНџ›ЈНџ{ŠЃџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ›ЈНџжфчџпээџс№№џс№№џпээџ›ЈНџжфчџпээџряяџс№№џс№№џ›ЈНџжфчџпээџпээџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џG@џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџo€šџДТЮџЧемџжфчџс№№џс№№џo€šџДТЮџЧемџжфчџжфчџс№№џo€šџДТЮџЧемџс№№џ \ No newline at end of file diff --git a/minecraft/terrain2.png b/minecraft/terrain2.png index 33826cc..ab699b4 100644 Binary files a/minecraft/terrain2.png and b/minecraft/terrain2.png differ diff --git a/shader/lighting.frag b/shader/lighting.frag index 6172382..3f4e4c2 100644 --- a/shader/lighting.frag +++ b/shader/lighting.frag @@ -38,7 +38,7 @@ void main() vec3 light_direction = normalize(Eye.xyz - position.xyz); float diffuse = max(dot(normal.xyz, light_direction), 0.0); - if (normal.w > 1.0) + if (normal.w == 1.0) // two-sided diffuse = 1.0; out_color = color.xyz * diffuse; diff --git a/shader/minecraft.frag b/shader/minecraft.frag index 58b8434..9d46d3f 100644 --- a/shader/minecraft.frag +++ b/shader/minecraft.frag @@ -8,12 +8,13 @@ in VS_OUT { flat int BlockID; flat int Data; flat int TextureID; + flat int Special; } fs_in; layout (location = 0) out vec3 Position; layout (location = 1) out vec4 Normal; layout (location = 2) out vec3 Color; -layout (location = 3) out vec3 Block; +layout (location = 3) out vec4 Block; uniform sampler2D TerrainSampler; uniform vec3 MousePosition; @@ -22,16 +23,6 @@ uniform vec3 MousePosition2; void main() { int texture_id = fs_in.TextureID; - if (fs_in.BlockID == 2) // grass - texture_id = 0; - if (fs_in.BlockID == 50 && fs_in.Data == 0) // ? - texture_id = 61; - if (fs_in.BlockID == 18) - texture_id = 11; - if (fs_in.BlockID == 21) - texture_id = 17; - if (fs_in.BlockID == 22) - texture_id = 16; int terrain_x = texture_id % 8; int terrain_y = texture_id / 8; @@ -44,10 +35,10 @@ void main() return; } - float two_sided = float(fs_in.BlockID == 31 || fs_in.BlockID == 37 || fs_in.BlockID == 38 || fs_in.BlockID == 39); + float two_sided = float(fs_in.Special == -1); // special Position = fs_in.BlockPosition.xzy; - Normal = vec4(normalize(fs_in.Normal.xzy), two_sided * 2.0); + Normal = vec4(normalize(fs_in.Normal.xzy), two_sided); Color = texture_color.xyz; - Block = vec3(fs_in.BlockID, fs_in.Data, fs_in.TextureID); + Block = vec4(fs_in.BlockID, fs_in.Data, fs_in.TextureID, fs_in.Special); } diff --git a/shader/minecraft.vert b/shader/minecraft.vert index 3db139d..6d66cf5 100644 --- a/shader/minecraft.vert +++ b/shader/minecraft.vert @@ -9,6 +9,7 @@ in vec3 BlockPosition; in int BlockID; in int Data; in int TextureID; +in int Special; out VS_OUT { vec3 Position; @@ -18,13 +19,30 @@ out VS_OUT { flat int BlockID; flat int Data; flat int TextureID; + flat int Special; } vs_out; uniform mat4 Transform; +vec3 orientation(vec3 position) +{ + if (Special == 1) { // oriented torch + if (Data == 1) + return vec3(position.z, position.y, -position.x); + else if (Data == 2) + return vec3(-position.z, position.y, position.x); + else if (Data == 4) + return vec3(position.x, position.y, -position.z); + else + return position; + } else { + return position; + } +} + void main() { - vec3 position = Position + BlockPosition; // world coordinates + vec3 position = orientation(Position) + BlockPosition; // world coordinates vs_out.Position = position; vs_out.BlockPosition = BlockPosition; @@ -33,6 +51,7 @@ void main() vs_out.BlockID = BlockID; vs_out.Data = Data; vs_out.TextureID = TextureID; + vs_out.Special = Special; gl_Position = Transform * vec4(position.xzy, 1.0); } diff --git a/src/hud.cpp b/src/hud.cpp index 2a6fc64..c6f3eb5 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -36,7 +36,7 @@ namespace hud { inline static float draw_vector(font::font const& ter_best, char * const buf, float y, char const * const label, XMVECTOR vec) { - labeled_value(buf, label, ": %5.2f %5.2f %5.2f", XMVectorGetX(vec), XMVectorGetY(vec), XMVectorGetZ(vec)); + labeled_value(buf, label, ": %5.2f %5.2f %5.2f %5.2f", XMVectorGetX(vec), XMVectorGetY(vec), XMVectorGetZ(vec), XMVectorGetW(vec)); font::draw_string(ter_best, buf, 10, y); y += ter_best.desc->glyph_height; return y; @@ -115,7 +115,7 @@ namespace hud { font::draw_string(ter_best, "mouse:", 10, y); y += ter_best.desc->glyph_height; - y = draw_vector(ter_best, buf, y, " position", XMLoadFloat3((XMFLOAT3*)mouse_position)); - y = draw_vector(ter_best, buf, y, " block", XMLoadFloat3((XMFLOAT3*)mouse_block)); + y = draw_vector(ter_best, buf, y, " position", XMLoadFloat4((XMFLOAT4*)mouse_position)); + y = draw_vector(ter_best, buf, y, " block", XMLoadFloat4((XMFLOAT4*)mouse_block)); } } diff --git a/src/minecraft.cpp b/src/minecraft.cpp index 1cdc657..7bf8033 100644 --- a/src/minecraft.cpp +++ b/src/minecraft.cpp @@ -23,6 +23,7 @@ namespace minecraft { unsigned int block_id; unsigned int data; unsigned int texture_id; + unsigned int special; } attrib; struct { unsigned int transform; @@ -61,15 +62,17 @@ namespace minecraft { location.attrib.block_id = glGetAttribLocation(program, "BlockID"); location.attrib.data = glGetAttribLocation(program, "Data"); location.attrib.texture_id = glGetAttribLocation(program, "TextureID"); + location.attrib.special = glGetAttribLocation(program, "Special"); printf("minecraft program:\n"); - printf(" attributes:\n position %u\n normal %u\n texture %u\n block_position %u\n block_id %u\n data %u\n texture_id %u\n", + printf(" attributes:\n position %u\n normal %u\n texture %u\n block_position %u\n block_id %u\n data %u\n texture_id %u\n special %u\n", location.attrib.position, location.attrib.normal, location.attrib.texture, location.attrib.block_position, location.attrib.block_id, location.attrib.data, - location.attrib.texture_id); + location.attrib.texture_id, + location.attrib.special); location.uniform.transform = glGetUniformLocation(program, "Transform"); location.uniform.terrain_sampler = glGetUniformLocation(program, "TerrainSampler"); @@ -114,6 +117,10 @@ namespace minecraft { glVertexAttribIFormat(location.attrib.texture_id, 1, GL_SHORT, 12); glVertexAttribBinding(location.attrib.texture_id, 1); + glEnableVertexAttribArray(location.attrib.special); + glVertexAttribIFormat(location.attrib.special, 1, GL_SHORT, 14); + glVertexAttribBinding(location.attrib.special, 1); + glBindVertexArray(0); } diff --git a/src/test.cpp b/src/test.cpp index 5305d7d..a168c45 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -377,8 +377,8 @@ int clamp(int n, int high) return n; } -float mouse_position[3] = {}; -float mouse_block[3] = {}; +float mouse_position[4] = {}; +float mouse_block[4] = {}; void update_mouse(int x, int y) { @@ -392,7 +392,7 @@ void update_mouse(int x, int y) geometry_buffer_pnc.height - y, 1, // width 1, // height - GL_RGB, + GL_RGBA, GL_FLOAT, (void*)&mouse_position); @@ -401,7 +401,7 @@ void update_mouse(int x, int y) geometry_buffer_pnc.height - y, 1, // width 1, // height - GL_RGB, + GL_RGBA, GL_FLOAT, (void*)&mouse_block); }