From 3c34a04605483879b8c9f91443ca63e669ce57d6 Mon Sep 17 00:00:00 2001 From: kaeza Date: Tue, 13 Aug 2013 04:36:06 -0300 Subject: [PATCH 01/40] Make signslib optional via configuration variable --- fences.lua | 10 ++++++---- init.lua | 9 ++++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/fences.lua b/fences.lua index 7752f5ba..f11a32b1 100644 --- a/fences.lua +++ b/fences.lua @@ -446,8 +446,10 @@ minetest.register_node("homedecor:fence_chainlink_corner", { }, }) -minetest.register_alias("homedecor:fence_wood_with_sign", "signs:sign_post") +if not homedecor_disable_signs then + minetest.register_alias("homedecor:fence_wood_with_sign", "signs:sign_post") -homedecor_register_fence_with_sign("default:fence_wood", "signs:sign_post") -homedecor_register_fence_with_sign("homedecor:fence_brass", "homedecor:fence_brass_with_sign") -homedecor_register_fence_with_sign("homedecor:fence_wrought_iron", "homedecor:fence_wrought_iron_with_sign") + homedecor_register_fence_with_sign("default:fence_wood", "signs:sign_post") + homedecor_register_fence_with_sign("homedecor:fence_brass", "homedecor:fence_brass_with_sign") + homedecor_register_fence_with_sign("homedecor:fence_wrought_iron", "homedecor:fence_wrought_iron_with_sign") +end diff --git a/init.lua b/init.lua index 6a1d5f2f..738b82db 100644 --- a/init.lua +++ b/init.lua @@ -22,6 +22,10 @@ else S = function ( s ) return s end end +-- Global stuff + +homedecor_disable_signs = minetest.setting_getbool("homedecor.disable_signs") + -- Various Functions local dbg = function(s) @@ -79,7 +83,10 @@ dofile(minetest.get_modpath("homedecor").."/slopes.lua") dofile(minetest.get_modpath("homedecor").."/door_models.lua") dofile(minetest.get_modpath("homedecor").."/doors_and_gates.lua") -dofile(minetest.get_modpath("homedecor").."/signs_lib.lua") +if not homedecor_disable_signs then + dofile(minetest.get_modpath("homedecor").."/signs_lib.lua") +end + dofile(minetest.get_modpath("homedecor").."/fences.lua") dofile(minetest.get_modpath("homedecor").."/lighting.lua") From 53e9690679a8a93ee09f9811cd1f918829190a2a Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 16 Aug 2013 13:11:29 -0300 Subject: [PATCH 02/40] Fix disabled signs. --- fences.lua | 10 +-- init.lua | 4 +- signs_lib.lua | 213 ++++++++++++++++++++++++++------------------------ 3 files changed, 118 insertions(+), 109 deletions(-) diff --git a/fences.lua b/fences.lua index f11a32b1..7752f5ba 100644 --- a/fences.lua +++ b/fences.lua @@ -446,10 +446,8 @@ minetest.register_node("homedecor:fence_chainlink_corner", { }, }) -if not homedecor_disable_signs then - minetest.register_alias("homedecor:fence_wood_with_sign", "signs:sign_post") +minetest.register_alias("homedecor:fence_wood_with_sign", "signs:sign_post") - homedecor_register_fence_with_sign("default:fence_wood", "signs:sign_post") - homedecor_register_fence_with_sign("homedecor:fence_brass", "homedecor:fence_brass_with_sign") - homedecor_register_fence_with_sign("homedecor:fence_wrought_iron", "homedecor:fence_wrought_iron_with_sign") -end +homedecor_register_fence_with_sign("default:fence_wood", "signs:sign_post") +homedecor_register_fence_with_sign("homedecor:fence_brass", "homedecor:fence_brass_with_sign") +homedecor_register_fence_with_sign("homedecor:fence_wrought_iron", "homedecor:fence_wrought_iron_with_sign") diff --git a/init.lua b/init.lua index 738b82db..49f25c93 100644 --- a/init.lua +++ b/init.lua @@ -83,9 +83,7 @@ dofile(minetest.get_modpath("homedecor").."/slopes.lua") dofile(minetest.get_modpath("homedecor").."/door_models.lua") dofile(minetest.get_modpath("homedecor").."/doors_and_gates.lua") -if not homedecor_disable_signs then - dofile(minetest.get_modpath("homedecor").."/signs_lib.lua") -end +dofile(minetest.get_modpath("homedecor").."/signs_lib.lua") dofile(minetest.get_modpath("homedecor").."/fences.lua") diff --git a/signs_lib.lua b/signs_lib.lua index 9e8f8431..d27fbf5e 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -100,113 +100,115 @@ homedecor_update_sign = function(pos, fields) text:setyaw(sign_info.yaw) end -minetest.register_node(":default:sign_wall", { - description = "Sign", - inventory_image = "default_sign_wall.png", - wield_image = "default_sign_wall.png", - node_placement_prediction = "", - paramtype = "light", - sunlight_propagates = true, - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, - selection_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, - tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"}, - groups = sign_groups, +if not homedecor_disable_signs then + minetest.register_node(":default:sign_wall", { + description = "Sign", + inventory_image = "default_sign_wall.png", + wield_image = "default_sign_wall.png", + node_placement_prediction = "", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, + selection_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, + tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"}, + groups = sign_groups, - on_place = function(itemstack, placer, pointed_thing) - local name - name = minetest.get_node(pointed_thing.under).name - if fences_with_sign[name] then - if homedecor_node_is_owned(pointed_thing.under, placer) then - return itemstack + on_place = function(itemstack, placer, pointed_thing) + local name + name = minetest.get_node(pointed_thing.under).name + if fences_with_sign[name] then + if homedecor_node_is_owned(pointed_thing.under, placer) then + return itemstack + end + else + name = minetest.get_node(pointed_thing.above).name + local def = minetest.registered_nodes[name] + if homedecor_node_is_owned(pointed_thing.above, placer) + or (not def.buildable_to) then + return itemstack + end end + + local node=minetest.get_node(pointed_thing.under) + + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer) else - name = minetest.get_node(pointed_thing.above).name - local def = minetest.registered_nodes[name] - if homedecor_node_is_owned(pointed_thing.above, placer) - or (not def.buildable_to) then - return itemstack + local above = pointed_thing.above + local under = pointed_thing.under + local dir = {x = under.x - above.x, + y = under.y - above.y, + z = under.z - above.z} + + local wdir = minetest.dir_to_wallmounted(dir) + + local placer_pos = placer:getpos() + if placer_pos then + dir = { + x = above.x - placer_pos.x, + y = above.y - placer_pos.y, + z = above.z - placer_pos.z + } end - end - local node=minetest.get_node(pointed_thing.under) + local fdir = minetest.dir_to_facedir(dir) - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer) - else - local above = pointed_thing.above - local under = pointed_thing.under - local dir = {x = under.x - above.x, - y = under.y - above.y, - z = under.z - above.z} + local sign_info + local pt_name = minetest.get_node(under).name + print(dump(pt_name)) - local wdir = minetest.dir_to_wallmounted(dir) + if fences_with_sign[pt_name] then + minetest.add_node(under, {name = fences_with_sign[pt_name], param2 = fdir}) + sign_info = signs_post[fdir + 1] - local placer_pos = placer:getpos() - if placer_pos then - dir = { - x = above.x - placer_pos.x, - y = above.y - placer_pos.y, - z = above.z - placer_pos.z - } - end + elseif wdir == 0 then + --how would you add sign to ceiling? + minetest.add_item(above, "default:sign_wall") + itemstack:take_item() + return itemstack + elseif wdir == 1 then + minetest.add_node(above, {name = "signs:sign_yard", param2 = fdir}) + sign_info = signs_yard[fdir + 1] + else + minetest.add_node(above, {name = "default:sign_wall", param2 = fdir}) + sign_info = signs[fdir + 1] + end - local fdir = minetest.dir_to_facedir(dir) + local text = minetest.add_entity({x = above.x + sign_info.delta.x, + y = above.y + sign_info.delta.y, + z = above.z + sign_info.delta.z}, "signs:text") + text:setyaw(sign_info.yaw) - local sign_info - local pt_name = minetest.get_node(under).name - print(dump(pt_name)) - - if fences_with_sign[pt_name] then - minetest.add_node(under, {name = fences_with_sign[pt_name], param2 = fdir}) - sign_info = signs_post[fdir + 1] - - elseif wdir == 0 then - --how would you add sign to ceiling? - minetest.add_item(above, "default:sign_wall") + + if not homedecor_expect_infinite_stacks then itemstack:take_item() - return itemstack - elseif wdir == 1 then - minetest.add_node(above, {name = "signs:sign_yard", param2 = fdir}) - sign_info = signs_yard[fdir + 1] - else - minetest.add_node(above, {name = "default:sign_wall", param2 = fdir}) - sign_info = signs[fdir + 1] + end + return itemstack end - - local text = minetest.add_entity({x = above.x + sign_info.delta.x, - y = above.y + sign_info.delta.y, - z = above.z + sign_info.delta.z}, "signs:text") - text:setyaw(sign_info.yaw) - - - if not homedecor_expect_infinite_stacks then - itemstack:take_item() - end - return itemstack - end - end, - on_construct = function(pos) - homedecor_construct_sign(pos) - end, - on_destruct = function(pos) - homedecor_destruct_sign(pos) - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields then - print(S("%s wrote \"%s\" to sign at %s"):format( - (sender:get_player_name() or ""), - fields.text, - minetest.pos_to_string(pos) - )) - end - homedecor_update_sign(pos, fields) - end, - on_punch = function(pos, node, puncher) - homedecor_update_sign(pos) - end, -}) + end, + on_construct = function(pos) + homedecor_construct_sign(pos) + end, + on_destruct = function(pos) + homedecor_destruct_sign(pos) + end, + on_receive_fields = function(pos, formname, fields, sender) + if fields then + print(S("%s wrote \"%s\" to sign at %s"):format( + (sender:get_player_name() or ""), + fields.text, + minetest.pos_to_string(pos) + )) + end + homedecor_update_sign(pos, fields) + end, + on_punch = function(pos, node, puncher) + homedecor_update_sign(pos) + end, + }) +end minetest.register_node(":signs:sign_yard", { paramtype = "light", @@ -281,17 +283,28 @@ minetest.register_node(":signs:sign_post", { }, }) +local signs_text_on_activate + +if not homedecor_disable_signs then + signs_text_on_activate = function(self) + local meta = minetest.get_meta(self.object:getpos()) + local text = meta:get_string("text") + self.object:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) + end +else + signs_text_on_activate = function(self) + self.object:remove() + end +end + + minetest.register_entity(":signs:text", { collisionbox = { 0, 0, 0, 0, 0, 0 }, visual = "upright_sprite", textures = {}, - on_activate = function(self) - local meta = minetest.get_meta(self.object:getpos()) - local text = meta:get_string("text") - self.object:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) - end + on_activate = signs_text_on_activate, }) -- CONSTANTS From 2c8a91c362630bd7d055bf4728d3b7856a137150 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 28 Aug 2013 05:31:42 -0400 Subject: [PATCH 03/40] Condense shutters into a nice loop, give them wood sounds instead of leaves. Make shutters and curtains pass sunlight through to avoid ugly shadows vertical shadows. --- listnodes.sh | 0 misc_nodes.lua | 2 +- shutters.lua | 241 +++++++------------------------------------------ 3 files changed, 36 insertions(+), 207 deletions(-) mode change 100755 => 100644 listnodes.sh diff --git a/listnodes.sh b/listnodes.sh old mode 100755 new mode 100644 diff --git a/misc_nodes.lua b/misc_nodes.lua index 17dd36d6..a0cd0deb 100644 --- a/misc_nodes.lua +++ b/misc_nodes.lua @@ -211,7 +211,7 @@ minetest.register_node("homedecor:curtain_"..color, { inventory_image = "homedecor_curtain_"..color..".png", wield_image = "homedecor_curtain_"..color..".png", drawtype = 'signlike', - sunlight_propagates = false, + sunlight_propagates = true, paramtype = "light", paramtype2 = "facedir", walkable = false, diff --git a/shutters.lua b/shutters.lua index f6b2da1d..d1b23f5a 100644 --- a/shutters.lua +++ b/shutters.lua @@ -9,213 +9,42 @@ else S = function ( s ) return s end end -minetest.register_node('homedecor:shutter_black', { - description = S("Wooden Shutter (Black)"), - tiles = { 'homedecor_window_shutter_black.png' }, - inventory_image = 'homedecor_window_shutter_black.png', - wield_image = 'homedecor_window_shutter_black.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) +local shutters = { + {"oak", "Unpainted oak"}, + {"mahogany", "Mahogany"}, + {"red", "Red"}, + {"yellow", "Yellow"}, + {"forest_green", "Forest green"}, + {"light_blue", "Light blue"}, + {"violet", "Violet"}, + {"black", "Black"}, + {"dark_grey", "Dark grey"}, + {"grey", "Grey"}, + {"white", "White"}, +} -minetest.register_node('homedecor:shutter_mahogany', { - description = S("Wooden Shutter (Unpainted Mahogany)"), - tiles = { 'homedecor_window_shutter_mahogany.png' }, - inventory_image = 'homedecor_window_shutter_mahogany.png', - wield_image = 'homedecor_window_shutter_mahogany.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) +for i in ipairs(shutters) do + local name = shutters[i][1] + local desc = shutters[i][2] -minetest.register_node('homedecor:shutter_oak', { - description = S("Wooden Shutter (Unpainted Oak)"), - tiles = { 'homedecor_window_shutter_oak.png' }, - inventory_image = 'homedecor_window_shutter_oak.png', - wield_image = 'homedecor_window_shutter_oak.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_dark_grey', { - description = S("Wooden Shutter (Dark Grey)"), - tiles = { 'homedecor_window_shutter_dark_grey.png' }, - inventory_image = 'homedecor_window_shutter_dark_grey.png', - wield_image = 'homedecor_window_shutter_dark_grey.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_forest_green', { - description = S("Wooden Shutter (Forest Green)"), - tiles = { 'homedecor_window_shutter_forest_green.png' }, - inventory_image = 'homedecor_window_shutter_forest_green.png', - wield_image = 'homedecor_window_shutter_forest_green.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_grey', { - description = S("Wooden Shutter (Grey)"), - tiles = { 'homedecor_window_shutter_grey.png' }, - inventory_image = 'homedecor_window_shutter_grey.png', - wield_image = 'homedecor_window_shutter_grey.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_light_blue', { - description = S("Wooden Shutter (Light Blue)"), - tiles = { 'homedecor_window_shutter_light_blue.png' }, - inventory_image = 'homedecor_window_shutter_light_blue.png', - wield_image = 'homedecor_window_shutter_light_blue.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_violet', { - description = S("Wooden Shutter (Violet)"), - tiles = { 'homedecor_window_shutter_violet.png' }, - inventory_image = 'homedecor_window_shutter_violet.png', - wield_image = 'homedecor_window_shutter_violet.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_red', { - description = S("Wooden Shutter (Red)"), - tiles = { 'homedecor_window_shutter_red.png' }, - inventory_image = 'homedecor_window_shutter_red.png', - wield_image = 'homedecor_window_shutter_red.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_white', { - description = S("Wooden Shutter (White)"), - tiles = { 'homedecor_window_shutter_white.png' }, - inventory_image = 'homedecor_window_shutter_white.png', - wield_image = 'homedecor_window_shutter_white.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) - -minetest.register_node('homedecor:shutter_yellow', { - description = S("Wooden Shutter (Yellow)"), - tiles = { 'homedecor_window_shutter_yellow.png' }, - inventory_image = 'homedecor_window_shutter_yellow.png', - wield_image = 'homedecor_window_shutter_yellow.png', - drawtype = 'signlike', - sunlight_propagates = false, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_leaves_defaults(), - paramtype2 = 'wallmounted', - selection_box = { - type = "wallmounted", - --wall_side = = - }, -}) + minetest.register_node("homedecor:shutter_"..name, { + description = S("Wooden Shutter ("..desc..")"), + tiles = { "homedecor_window_shutter_"..name..".png" }, + inventory_image = "homedecor_window_shutter_"..name..".png", + wield_image = "homedecor_window_shutter_"..name..".png", + drawtype = 'signlike', + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + groups = { snappy = 3 }, + sounds = default.node_sound_wood_defaults(), + paramtype2 = 'wallmounted', + selection_box = { + type = "wallmounted", + --wall_side = = + }, + }) +end minetest.register_alias("homedecor:shutter_purple", "homedecor:shutter_violet") From bae93a8ba9d746853c5e671dee022b7bc916c444 Mon Sep 17 00:00:00 2001 From: fairiestoy Date: Fri, 13 Sep 2013 18:21:13 +0200 Subject: [PATCH 04/40] Fixed duplication bug Fixed a little bug within the recipe registration which causes to duplicate shingles when crafted from slopes. --- slopes.lua | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/slopes.lua b/slopes.lua index 84fc45cd..478a3576 100644 --- a/slopes.lua +++ b/slopes.lua @@ -153,13 +153,13 @@ homedecor_register_slope = function(modname, subname, recipeitem, groups, images minetest.register_craft({ type = "shapeless", - output = recipeitem.." 3", + output = recipeitem.." 1", recipe = { modname..":shingle_outer_corner_"..subname } }) minetest.register_craft({ type = "shapeless", - output = recipeitem.." 3", + output = recipeitem.." 1", recipe = { modname..":shingle_inner_corner_"..subname } }) end @@ -173,7 +173,7 @@ minetest.register_craft( { minetest.register_craft( { output = "homedecor:roof_tile_terracotta 8", - recipe = { + recipe = { { "homedecor:shingle_inner_corner_terracotta", "homedecor:shingle_inner_corner_terracotta" } } }) @@ -210,8 +210,8 @@ end -- corners -homedecor_register_roof("homedecor", "wood", - { snappy = 3 }, +homedecor_register_roof("homedecor", "wood", + { snappy = 3 }, { "homedecor_shingles_wood_c_t.png", "homedecor_shingles_wood_c_x.png", @@ -219,12 +219,12 @@ homedecor_register_roof("homedecor", "wood", "homedecor_shingles_wood_c_x.png", "homedecor_shingles_wood_c_z.png", "homedecor_shingles_wood_c_z.png", - }, + }, "Wood Shingles" ) -homedecor_register_roof("homedecor", "asphalt", - { snappy = 3 }, +homedecor_register_roof("homedecor", "asphalt", + { snappy = 3 }, { "homedecor_shingles_asphalt_c_t.png", "homedecor_shingles_asphalt_c_x.png", @@ -232,12 +232,12 @@ homedecor_register_roof("homedecor", "asphalt", "homedecor_shingles_asphalt_c_x.png", "homedecor_shingles_asphalt_c_z.png", "homedecor_shingles_asphalt_c_z.png", - }, + }, "Asphalt Shingles" ) -homedecor_register_roof("homedecor", "terracotta", - { snappy = 3 }, +homedecor_register_roof("homedecor", "terracotta", + { snappy = 3 }, { "homedecor_shingles_terracotta_c_t.png", "homedecor_shingles_terracotta_c_x.png", @@ -251,9 +251,9 @@ homedecor_register_roof("homedecor", "terracotta", -- register just the slopes -homedecor_register_slope("homedecor", "wood", - "homedecor:shingles_wood", - { snappy = 3 }, +homedecor_register_slope("homedecor", "wood", + "homedecor:shingles_wood", + { snappy = 3 }, { "homedecor_shingles_wood_s_t.png", "homedecor_shingles_wood_s_z.png", @@ -261,13 +261,13 @@ homedecor_register_slope("homedecor", "wood", "homedecor_shingles_wood_s_z.png", "homedecor_shingles_wood_s_z.png", "homedecor_shingles_wood_s_z.png", - }, + }, "Wood Shingles" ) -homedecor_register_slope("homedecor", "asphalt", - "homedecor:shingles_asphalt", - { snappy = 3 }, +homedecor_register_slope("homedecor", "asphalt", + "homedecor:shingles_asphalt", + { snappy = 3 }, { "homedecor_shingles_asphalt_s_t.png", "homedecor_shingles_asphalt_s_z.png", @@ -275,13 +275,13 @@ homedecor_register_slope("homedecor", "asphalt", "homedecor_shingles_asphalt_s_z.png", "homedecor_shingles_asphalt_s_z.png", "homedecor_shingles_asphalt_s_z.png", - }, + }, "Asphalt Shingles" ) -homedecor_register_slope("homedecor", "terracotta", - "homedecor:shingles_terracotta", - { snappy = 3 }, +homedecor_register_slope("homedecor", "terracotta", + "homedecor:shingles_terracotta", + { snappy = 3 }, { "homedecor_shingles_terracotta_s_t.png", "homedecor_shingles_terracotta_s_z.png", From fb49c08aea04c1f60ac24096d07809c4bda7ac35 Mon Sep 17 00:00:00 2001 From: kaeza Date: Tue, 1 Oct 2013 16:41:47 -0300 Subject: [PATCH 05/40] Quick n' dirty hax to make locked furnaces work again. --- furnaces.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/furnaces.lua b/furnaces.lua index bee71eb1..15ca8d36 100644 --- a/furnaces.lua +++ b/furnaces.lua @@ -249,7 +249,7 @@ function homedecor_register_furnace(name, furnacedef) minetest.register_node(name_active, def_active) minetest.register_abm({ - nodenames = {name, name_active}, + nodenames = {name, name_active, name.."_locked", name_active.."_locked"}, interval = 1.0, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) From dbc2242d008456200c939f54e66436a6f5c9dd5b Mon Sep 17 00:00:00 2001 From: kaeza Date: Tue, 1 Oct 2013 22:33:26 -0300 Subject: [PATCH 06/40] Make wall signs protection-aware. --- signs_lib.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/signs_lib.lua b/signs_lib.lua index d27fbf5e..70f4c8b6 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -202,6 +202,7 @@ if not homedecor_disable_signs then minetest.pos_to_string(pos) )) end + if homedecor_node_is_owned(pos, sender) then return end homedecor_update_sign(pos, fields) end, on_punch = function(pos, node, puncher) From 2d3a3f21ef777051dffa0f21ff3154b1cb6acac6 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Thu, 3 Oct 2013 07:51:30 -0400 Subject: [PATCH 07/40] fix typos in alternate slope recipes (affects all mods that use the shingles API) --- slopes.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/slopes.lua b/slopes.lua index 478a3576..f8f21a03 100644 --- a/slopes.lua +++ b/slopes.lua @@ -127,8 +127,8 @@ homedecor_register_slope = function(modname, subname, recipeitem, groups, images minetest.register_craft({ output = modname..":shingle_outer_corner_"..subname.." 3", recipe = { - { "", modname..":shingles_side_"..subname, "" }, - { modname..":shingles_side_"..subname, "", modname..":shingles_side_"..subname }, + { "", modname..":shingle_side_"..subname, "" }, + { modname..":shingle_side_"..subname, "", modname..":shingle_side_"..subname }, } }) @@ -145,8 +145,8 @@ homedecor_register_slope = function(modname, subname, recipeitem, groups, images minetest.register_craft({ output = modname..":shingle_inner_corner_"..subname.." 3", recipe = { - {modname..":shingles_side_"..subname, modname..":shingles_side_"..subname}, - {"", modname..":shingles_side_"..subname} + {modname..":shingle_side_"..subname, modname..":shingle_side_"..subname}, + {"", modname..":shingle_side_"..subname} } }) -- convert between flat shingles and inner/outer corners From 2550672352879cad935f772b185dad3616efb465 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 9 Oct 2013 12:27:49 -0400 Subject: [PATCH 08/40] Replaced most uses of get_modpath() with variables cached at the top of init.lua --- crafts.lua | 4 ++-- door_models.lua | 4 ++-- doors_and_gates.lua | 4 ++-- electronics.lua | 4 ++-- fences.lua | 4 ++-- furnaces.lua | 4 ++-- init.lua | 48 +++++++++++++++++++++++---------------------- kitchen_cabinet.lua | 4 ++-- lighting.lua | 4 ++-- locked.lua | 4 ++-- misc_nodes.lua | 4 ++-- nightstands.lua | 4 ++-- refrigerator.lua | 4 ++-- shingles.lua | 4 ++-- shutters.lua | 4 ++-- signs_lib.lua | 4 ++-- slopes.lua | 4 ++-- tables.lua | 4 ++-- 18 files changed, 59 insertions(+), 57 deletions(-) diff --git a/crafts.lua b/crafts.lua index 8c22aa68..795380a5 100644 --- a/crafts.lua +++ b/crafts.lua @@ -8,8 +8,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/door_models.lua b/door_models.lua index 15c9bc48..6542aadf 100644 --- a/door_models.lua +++ b/door_models.lua @@ -1,8 +1,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/doors_and_gates.lua b/doors_and_gates.lua index 7477a1b4..b07b468a 100644 --- a/doors_and_gates.lua +++ b/doors_and_gates.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/electronics.lua b/electronics.lua index 19acd239..a0f64051 100644 --- a/electronics.lua +++ b/electronics.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/fences.lua b/fences.lua index 7752f5ba..fc9afa9c 100644 --- a/fences.lua +++ b/fences.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/furnaces.lua b/furnaces.lua index 15ca8d36..19b60419 100644 --- a/furnaces.lua +++ b/furnaces.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/init.lua b/init.lua index 49f25c93..6b5cd375 100644 --- a/init.lua +++ b/init.lua @@ -12,11 +12,13 @@ -- local DEBUG = 0 +homedecor_modpath = minetest.get_modpath("homedecor") +intllib_modpath = minetest.get_modpath("intllib") -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -73,33 +75,33 @@ else homedecor_expect_infinite_stacks = true end -dofile(minetest.get_modpath("homedecor").."/misc_nodes.lua") -- the catch-all for all misc nodes -dofile(minetest.get_modpath("homedecor").."/tables.lua") -dofile(minetest.get_modpath("homedecor").."/electronics.lua") -dofile(minetest.get_modpath("homedecor").."/shutters.lua") -dofile(minetest.get_modpath("homedecor").."/shingles.lua") -dofile(minetest.get_modpath("homedecor").."/slopes.lua") +dofile(homedecor_modpath.."/misc_nodes.lua") -- the catch-all for all misc nodes +dofile(homedecor_modpath.."/tables.lua") +dofile(homedecor_modpath.."/electronics.lua") +dofile(homedecor_modpath.."/shutters.lua") +dofile(homedecor_modpath.."/shingles.lua") +dofile(homedecor_modpath.."/slopes.lua") -dofile(minetest.get_modpath("homedecor").."/door_models.lua") -dofile(minetest.get_modpath("homedecor").."/doors_and_gates.lua") +dofile(homedecor_modpath.."/door_models.lua") +dofile(homedecor_modpath.."/doors_and_gates.lua") -dofile(minetest.get_modpath("homedecor").."/signs_lib.lua") +dofile(homedecor_modpath.."/signs_lib.lua") -dofile(minetest.get_modpath("homedecor").."/fences.lua") +dofile(homedecor_modpath.."/fences.lua") -dofile(minetest.get_modpath("homedecor").."/lighting.lua") -dofile(minetest.get_modpath("homedecor").."/kitchen_cabinet.lua") -dofile(minetest.get_modpath("homedecor").."/refrigerator.lua") -dofile(minetest.get_modpath("homedecor").."/furnaces.lua") -dofile(minetest.get_modpath("homedecor").."/nightstands.lua") +dofile(homedecor_modpath.."/lighting.lua") +dofile(homedecor_modpath.."/kitchen_cabinet.lua") +dofile(homedecor_modpath.."/refrigerator.lua") +dofile(homedecor_modpath.."/furnaces.lua") +dofile(homedecor_modpath.."/nightstands.lua") -dofile(minetest.get_modpath("homedecor").."/crafts.lua") +dofile(homedecor_modpath.."/crafts.lua") -dofile(minetest.get_modpath("homedecor").."/furniture.lua") -dofile(minetest.get_modpath("homedecor").."/furniture_medieval.lua") -dofile(minetest.get_modpath("homedecor").."/furniture_bathroom.lua") -dofile(minetest.get_modpath("homedecor").."/furniture_recipes.lua") +dofile(homedecor_modpath.."/furniture.lua") +dofile(homedecor_modpath.."/furniture_medieval.lua") +dofile(homedecor_modpath.."/furniture_bathroom.lua") +dofile(homedecor_modpath.."/furniture_recipes.lua") -dofile(minetest.get_modpath("homedecor").."/locked.lua") +dofile(homedecor_modpath.."/locked.lua") print("[HomeDecor] "..S("Loaded!")) diff --git a/kitchen_cabinet.lua b/kitchen_cabinet.lua index 91b1a332..fcd6ea8c 100644 --- a/kitchen_cabinet.lua +++ b/kitchen_cabinet.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/lighting.lua b/lighting.lua index f0b400ff..d5fbbd14 100644 --- a/lighting.lua +++ b/lighting.lua @@ -3,8 +3,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/locked.lua b/locked.lua index 33ace60c..48823243 100644 --- a/locked.lua +++ b/locked.lua @@ -9,8 +9,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/misc_nodes.lua b/misc_nodes.lua index a0cd0deb..bcd4c868 100644 --- a/misc_nodes.lua +++ b/misc_nodes.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/nightstands.lua b/nightstands.lua index c6c74a4d..84098237 100644 --- a/nightstands.lua +++ b/nightstands.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/refrigerator.lua b/refrigerator.lua index 23e5b89a..d5a51074 100644 --- a/refrigerator.lua +++ b/refrigerator.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/shingles.lua b/shingles.lua index 4ac0cf4e..e9d3313a 100644 --- a/shingles.lua +++ b/shingles.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/shutters.lua b/shutters.lua index d1b23f5a..23664cb3 100644 --- a/shutters.lua +++ b/shutters.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/signs_lib.lua b/signs_lib.lua index 70f4c8b6..90db20bb 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/slopes.lua b/slopes.lua index f8f21a03..772f78ee 100644 --- a/slopes.lua +++ b/slopes.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/tables.lua b/tables.lua index 0d0be4f7..07edbd80 100644 --- a/tables.lua +++ b/tables.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if (minetest.get_modpath("intllib")) then - dofile(minetest.get_modpath("intllib").."/intllib.lua") +if intllib_modpath then + dofile(intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end From e04a0e5e4f68833908c3cbee2c5c018e4a37ae19 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 9 Oct 2013 12:47:22 -0400 Subject: [PATCH 09/40] changed all "homedecor_" variable and function names to "homedecor." (underscore -> period). Similarly for intllib calls and the DEBUG variable. --- crafts.lua | 4 +-- door_models.lua | 6 ++-- doors_and_gates.lua | 40 +++++++++++----------- electronics.lua | 4 +-- fences.lua | 10 +++--- furnaces.lua | 10 +++--- init.lua | 65 ++++++++++++++++++----------------- kitchen_cabinet.lua | 4 +-- lighting.lua | 24 ++++++------- locked.lua | 4 +-- misc_nodes.lua | 4 +-- nightstands.lua | 4 +-- refrigerator.lua | 4 +-- shingles.lua | 4 +-- shutters.lua | 4 +-- signs_lib.lua | 82 ++++++++++++++++++++++----------------------- slopes.lua | 36 ++++++++++---------- tables.lua | 10 +++--- 18 files changed, 161 insertions(+), 158 deletions(-) diff --git a/crafts.lua b/crafts.lua index 795380a5..a7af77aa 100644 --- a/crafts.lua +++ b/crafts.lua @@ -8,8 +8,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/door_models.lua b/door_models.lua index 6542aadf..4578e10c 100644 --- a/door_models.lua +++ b/door_models.lua @@ -1,14 +1,14 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end end -homedecor_door_models = { +homedecor.door_models = { { "closet_mahogany", S("Mahogany Closet Door"), diff --git a/doors_and_gates.lua b/doors_and_gates.lua index b07b468a..45cc65b7 100644 --- a/doors_and_gates.lua +++ b/doors_and_gates.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -18,9 +18,9 @@ for i in ipairs(sides) do local side = sides[i] local rside = rsides[i] - for j in ipairs(homedecor_door_models) do - local doorname = homedecor_door_models[j][1] - local doordesc = homedecor_door_models[j][2] + for j in ipairs(homedecor.door_models) do + local doorname = homedecor.door_models[j][1] + local doordesc = homedecor.door_models[j][2] local nodeboxes_top = nil local nodeboxes_bottom = nil local texalpha = false @@ -29,11 +29,11 @@ for i in ipairs(sides) do end if side == "left" then - nodeboxes_top = homedecor_door_models[j][3] - nodeboxes_bottomtom = homedecor_door_models[j][4] + nodeboxes_top = homedecor.door_models[j][3] + nodeboxes_bottomtom = homedecor.door_models[j][4] else - nodeboxes_top = homedecor_door_models[j][5] - nodeboxes_bottomtom = homedecor_door_models[j][6] + nodeboxes_top = homedecor.door_models[j][5] + nodeboxes_bottomtom = homedecor.door_models[j][6] end local lower_top_side = "homedecor_door_"..doorname.."_tb.png" @@ -94,7 +94,7 @@ for i in ipairs(sides) do end end, on_rightclick = function(pos, node, clicker) - homedecor_flip_door({x=pos.x, y=pos.y-1, z=pos.z}, node, clicker, doorname, side) + homedecor.flip_door({x=pos.x, y=pos.y-1, z=pos.z}, node, clicker, doorname, side) end }) @@ -120,11 +120,11 @@ for i in ipairs(sides) do end end, on_place = function(itemstack, placer, pointed_thing) - homedecor_place_door(itemstack, placer, pointed_thing, doorname, side) + homedecor.place_door(itemstack, placer, pointed_thing, doorname, side) return itemstack end, on_rightclick = function(pos, node, clicker) - homedecor_flip_door(pos, node, clicker, doorname, side) + homedecor.flip_door(pos, node, clicker, doorname, side) end }) end @@ -203,7 +203,7 @@ for i in ipairs(gates_list) do fixed = gate_models_closed[i] }, on_rightclick = function(pos, node, clicker) - homedecor_flip_gate(pos, node, clicker, gate, "closed") + homedecor.flip_gate(pos, node, clicker, gate, "closed") end }) @@ -234,7 +234,7 @@ for i in ipairs(gates_list) do }, drop = "homedecor:gate_"..gate.."_closed", on_rightclick = function(pos, node, clicker) - homedecor_flip_gate(pos, node, clicker, gate, "open") + homedecor.flip_gate(pos, node, clicker, gate, "open") end }) @@ -258,7 +258,7 @@ local function get_nodedef_field(nodename, fieldname) return minetest.registered_nodes[nodename][fieldname] end -function homedecor_place_door(itemstack, placer, pointed_thing, name, side) +function homedecor.place_door(itemstack, placer, pointed_thing, name, side) local pointed = pointed_thing.under local pnode = minetest.get_node(pointed) @@ -281,8 +281,8 @@ function homedecor_place_door(itemstack, placer, pointed_thing, name, side) local node_bottom = minetest.get_node(pos1) local node_top = minetest.get_node(pos2) - if not homedecor_node_is_owned(pos1, placer) - and not homedecor_node_is_owned(pos2, placer) then + if not homedecor.node_is_owned(pos1, placer) + and not homedecor.node_is_owned(pos2, placer) then if not get_nodedef_field(node_bottom.name, "buildable_to") or not get_nodedef_field(node_top.name, "buildable_to") then @@ -291,7 +291,7 @@ function homedecor_place_door(itemstack, placer, pointed_thing, name, side) local fdir = minetest.dir_to_facedir(placer:get_look_dir()) minetest.add_node(pos1, { name = "homedecor:door_"..name.."_bottom_"..side, param2=fdir}) minetest.add_node(pos2, { name = "homedecor:door_"..name.."_top_"..side, param2=fdir}) - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() return itemstack end @@ -302,7 +302,7 @@ function homedecor_place_door(itemstack, placer, pointed_thing, name, side) end end -function homedecor_flip_door(pos, node, player, name, side) +function homedecor.flip_door(pos, node, player, name, side) local rside = nil local nfdir = nil if side == "left" then @@ -328,7 +328,7 @@ function homedecor_flip_door(pos, node, player, name, side) minetest.add_node(pos, { name = "homedecor:door_"..name.."_bottom_"..rside, param2=nfdir}) end -function homedecor_flip_gate(pos, node, player, gate, oc) +function homedecor.flip_gate(pos, node, player, gate, oc) minetest.sound_play("homedecor_gate_open_close", { pos=pos, max_hear_distance = 5, diff --git a/electronics.lua b/electronics.lua index a0f64051..018ece45 100644 --- a/electronics.lua +++ b/electronics.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/fences.lua b/fences.lua index fc9afa9c..3953c17e 100644 --- a/fences.lua +++ b/fences.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -448,6 +448,6 @@ minetest.register_node("homedecor:fence_chainlink_corner", { minetest.register_alias("homedecor:fence_wood_with_sign", "signs:sign_post") -homedecor_register_fence_with_sign("default:fence_wood", "signs:sign_post") -homedecor_register_fence_with_sign("homedecor:fence_brass", "homedecor:fence_brass_with_sign") -homedecor_register_fence_with_sign("homedecor:fence_wrought_iron", "homedecor:fence_wrought_iron_with_sign") +homedecor.register_fence_with_sign("default:fence_wood", "signs:sign_post") +homedecor.register_fence_with_sign("homedecor:fence_brass", "homedecor:fence_brass_with_sign") +homedecor.register_fence_with_sign("homedecor:fence_wrought_iron", "homedecor:fence_wrought_iron_with_sign") diff --git a/furnaces.lua b/furnaces.lua index 19b60419..4150c4eb 100644 --- a/furnaces.lua +++ b/furnaces.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -82,7 +82,7 @@ local function make_tiles(tiles, fmt, active) return tiles end -function homedecor_register_furnace(name, furnacedef) +function homedecor.register_furnace(name, furnacedef) local furnacedef = furnacedef @@ -351,7 +351,7 @@ function homedecor_register_furnace(name, furnacedef) end -homedecor_register_furnace("homedecor:oven", { +homedecor.register_furnace("homedecor:oven", { description = "Oven", tile_format = "homedecor_oven_%s%s.png", output_slots = 4, @@ -359,7 +359,7 @@ homedecor_register_furnace("homedecor:oven", { cook_speed = 1.25, }) -homedecor_register_furnace("homedecor:microwave_oven", { +homedecor.register_furnace("homedecor:microwave_oven", { description = "Microwave Oven", tiles = { "homedecor_microwave_top.png", "homedecor_microwave_bottom.png", diff --git a/init.lua b/init.lua index 6b5cd375..f2f266f2 100644 --- a/init.lua +++ b/init.lua @@ -11,14 +11,17 @@ -- License: LGPL 2.0 or higher -- -local DEBUG = 0 -homedecor_modpath = minetest.get_modpath("homedecor") -intllib_modpath = minetest.get_modpath("intllib") +homedecor = {} + +local homedecor.debug = 0 + +homedecor.modpath = minetest.get_modpath("homedecor") +homedecor.intllib_modpath = minetest.get_modpath("intllib") -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -26,17 +29,17 @@ end -- Global stuff -homedecor_disable_signs = minetest.setting_getbool("homedecor.disable_signs") +homedecor.disable_signs = minetest.setting_getbool("homedecor.disable_signs") -- Various Functions local dbg = function(s) - if DEBUG == 1 then + if homedecor.debug == 1 then print('[HomeDecor] ' .. s) end end -function homedecor_node_is_owned(pos, placer) +function homedecor.node_is_owned(pos, placer) local ownername = false if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod if HasOwner(pos, placer) then -- returns true if the node is owned @@ -70,38 +73,38 @@ function homedecor_node_is_owned(pos, placer) end if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then - homedecor_expect_infinite_stacks = false + homedecor.expect_infinite_stacks = false else - homedecor_expect_infinite_stacks = true + homedecor.expect_infinite_stacks = true end -dofile(homedecor_modpath.."/misc_nodes.lua") -- the catch-all for all misc nodes -dofile(homedecor_modpath.."/tables.lua") -dofile(homedecor_modpath.."/electronics.lua") -dofile(homedecor_modpath.."/shutters.lua") -dofile(homedecor_modpath.."/shingles.lua") -dofile(homedecor_modpath.."/slopes.lua") +dofile(homedecor.modpath.."/misc_nodes.lua") -- the catch-all for all misc nodes +dofile(homedecor.modpath.."/tables.lua") +dofile(homedecor.modpath.."/electronics.lua") +dofile(homedecor.modpath.."/shutters.lua") +dofile(homedecor.modpath.."/shingles.lua") +dofile(homedecor.modpath.."/slopes.lua") -dofile(homedecor_modpath.."/door_models.lua") -dofile(homedecor_modpath.."/doors_and_gates.lua") +dofile(homedecor.modpath.."/door_models.lua") +dofile(homedecor.modpath.."/doors_and_gates.lua") -dofile(homedecor_modpath.."/signs_lib.lua") +dofile(homedecor.modpath.."/signs_lib.lua") -dofile(homedecor_modpath.."/fences.lua") +dofile(homedecor.modpath.."/fences.lua") -dofile(homedecor_modpath.."/lighting.lua") -dofile(homedecor_modpath.."/kitchen_cabinet.lua") -dofile(homedecor_modpath.."/refrigerator.lua") -dofile(homedecor_modpath.."/furnaces.lua") -dofile(homedecor_modpath.."/nightstands.lua") +dofile(homedecor.modpath.."/lighting.lua") +dofile(homedecor.modpath.."/kitchen_cabinet.lua") +dofile(homedecor.modpath.."/refrigerator.lua") +dofile(homedecor.modpath.."/furnaces.lua") +dofile(homedecor.modpath.."/nightstands.lua") -dofile(homedecor_modpath.."/crafts.lua") +dofile(homedecor.modpath.."/crafts.lua") -dofile(homedecor_modpath.."/furniture.lua") -dofile(homedecor_modpath.."/furniture_medieval.lua") -dofile(homedecor_modpath.."/furniture_bathroom.lua") -dofile(homedecor_modpath.."/furniture_recipes.lua") +dofile(homedecor.modpath.."/furniture.lua") +dofile(homedecor.modpath.."/furniture_medieval.lua") +dofile(homedecor.modpath.."/furniture_bathroom.lua") +dofile(homedecor.modpath.."/furniture_recipes.lua") -dofile(homedecor_modpath.."/locked.lua") +dofile(homedecor.modpath.."/locked.lua") print("[HomeDecor] "..S("Loaded!")) diff --git a/kitchen_cabinet.lua b/kitchen_cabinet.lua index fcd6ea8c..012905c1 100644 --- a/kitchen_cabinet.lua +++ b/kitchen_cabinet.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/lighting.lua b/lighting.lua index d5fbbd14..a7cddabc 100644 --- a/lighting.lua +++ b/lighting.lua @@ -3,8 +3,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -13,9 +13,9 @@ end local dirs1 = { 20, 23, 22, 21 } local dirs2 = { 9, 18, 7, 12 } -function homedecor_rotate_and_place(itemstack, placer, pointed_thing) - if not homedecor_node_is_owned(pointed_thing.under, placer) - and not homedecor_node_is_owned(pointed_thing.above, placer) then +function homedecor.rotate_and_place(itemstack, placer, pointed_thing) + if not homedecor.node_is_owned(pointed_thing.under, placer) + and not homedecor.node_is_owned(pointed_thing.above, placer) then local node = minetest.get_node(pointed_thing.under) if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then @@ -49,7 +49,7 @@ function homedecor_rotate_and_place(itemstack, placer, pointed_thing) minetest.add_node(pos1, {name = wield_name, param2 = 0 }) -- place right side up end - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() return itemstack end @@ -146,7 +146,7 @@ minetest.register_node('homedecor:glowlight_half_yellow', { sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor_rotate_and_place(itemstack, placer, pointed_thing) + homedecor.rotate_and_place(itemstack, placer, pointed_thing) return itemstack end }) @@ -179,7 +179,7 @@ minetest.register_node('homedecor:glowlight_quarter_yellow', { light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor_rotate_and_place(itemstack, placer, pointed_thing) + homedecor.rotate_and_place(itemstack, placer, pointed_thing) return itemstack end }) @@ -216,7 +216,7 @@ minetest.register_node('homedecor:glowlight_half_white', { light_source = LIGHT_MAX, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor_rotate_and_place(itemstack, placer, pointed_thing) + homedecor.rotate_and_place(itemstack, placer, pointed_thing) return itemstack end }) @@ -249,7 +249,7 @@ minetest.register_node('homedecor:glowlight_quarter_white', { light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor_rotate_and_place(itemstack, placer, pointed_thing) + homedecor.rotate_and_place(itemstack, placer, pointed_thing) return itemstack end }) @@ -285,7 +285,7 @@ minetest.register_node('homedecor:glowlight_small_cube_yellow', { sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor_rotate_and_place(itemstack, placer, pointed_thing) + homedecor.rotate_and_place(itemstack, placer, pointed_thing) return itemstack end }) @@ -318,7 +318,7 @@ minetest.register_node('homedecor:glowlight_small_cube_white', { light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor_rotate_and_place(itemstack, placer, pointed_thing) + homedecor.rotate_and_place(itemstack, placer, pointed_thing) return itemstack end }) diff --git a/locked.lua b/locked.lua index 48823243..506b655f 100644 --- a/locked.lua +++ b/locked.lua @@ -9,8 +9,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/misc_nodes.lua b/misc_nodes.lua index bcd4c868..b3bba7b3 100644 --- a/misc_nodes.lua +++ b/misc_nodes.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/nightstands.lua b/nightstands.lua index 84098237..bab2e26b 100644 --- a/nightstands.lua +++ b/nightstands.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/refrigerator.lua b/refrigerator.lua index d5a51074..6da80694 100644 --- a/refrigerator.lua +++ b/refrigerator.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/shingles.lua b/shingles.lua index e9d3313a..cdce5448 100644 --- a/shingles.lua +++ b/shingles.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/shutters.lua b/shutters.lua index 23664cb3..cdabe5e7 100644 --- a/shutters.lua +++ b/shutters.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end diff --git a/signs_lib.lua b/signs_lib.lua index 90db20bb..6910df1f 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -52,13 +52,13 @@ local sign_groups = {choppy=2, dig_immediate=2} local fences_with_sign = { } -homedecor_construct_sign = function(pos) +homedecor.construct_sign = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", "field[text;;${text}]") meta:set_string("infotext", "") end -homedecor_destruct_sign = function(pos) +homedecor.destruct_sign = function(pos) local objects = minetest.get_objects_inside_radius(pos, 0.5) for _, v in ipairs(objects) do if v:get_entity_name() == "signs:text" then @@ -67,17 +67,17 @@ homedecor_destruct_sign = function(pos) end end -homedecor_update_sign = function(pos, fields) +homedecor.update_sign = function(pos, fields) local meta = minetest.get_meta(pos) if fields then - meta:set_string("infotext", table.concat(homedecor_create_lines(fields.text), "\n")) + meta:set_string("infotext", table.concat(homedecor.create_lines(fields.text), "\n")) meta:set_string("text", fields.text) end local text = meta:get_string("text") local objects = minetest.get_objects_inside_radius(pos, 0.5) for _, v in ipairs(objects) do if v:get_entity_name() == "signs:text" then - v:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) + v:set_properties({textures={homedecor.generate_texture(homedecor.create_lines(text))}}) return end end @@ -100,7 +100,7 @@ homedecor_update_sign = function(pos, fields) text:setyaw(sign_info.yaw) end -if not homedecor_disable_signs then +if not homedecor.disable_signs then minetest.register_node(":default:sign_wall", { description = "Sign", inventory_image = "default_sign_wall.png", @@ -119,13 +119,13 @@ if not homedecor_disable_signs then local name name = minetest.get_node(pointed_thing.under).name if fences_with_sign[name] then - if homedecor_node_is_owned(pointed_thing.under, placer) then + if homedecor.node_is_owned(pointed_thing.under, placer) then return itemstack end else name = minetest.get_node(pointed_thing.above).name local def = minetest.registered_nodes[name] - if homedecor_node_is_owned(pointed_thing.above, placer) + if homedecor.node_is_owned(pointed_thing.above, placer) or (not def.buildable_to) then return itemstack end @@ -182,17 +182,17 @@ if not homedecor_disable_signs then text:setyaw(sign_info.yaw) - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() end return itemstack end end, on_construct = function(pos) - homedecor_construct_sign(pos) + homedecor.construct_sign(pos) end, on_destruct = function(pos) - homedecor_destruct_sign(pos) + homedecor.destruct_sign(pos) end, on_receive_fields = function(pos, formname, fields, sender) if fields then @@ -202,11 +202,11 @@ if not homedecor_disable_signs then minetest.pos_to_string(pos) )) end - if homedecor_node_is_owned(pos, sender) then return end - homedecor_update_sign(pos, fields) + if homedecor.node_is_owned(pos, sender) then return end + homedecor.update_sign(pos, fields) end, on_punch = function(pos, node, puncher) - homedecor_update_sign(pos) + homedecor.update_sign(pos) end, }) end @@ -226,10 +226,10 @@ minetest.register_node(":signs:sign_yard", { drop = "default:sign_wall", on_construct = function(pos) - homedecor_construct_sign(pos) + homedecor.construct_sign(pos) end, on_destruct = function(pos) - homedecor_destruct_sign(pos) + homedecor.destruct_sign(pos) end, on_receive_fields = function(pos, formname, fields, sender) if fields then @@ -239,11 +239,11 @@ minetest.register_node(":signs:sign_yard", { minetest.pos_to_string(pos) )) end - if homedecor_node_is_owned(pos, sender) then return end - homedecor_update_sign(pos, fields) + if homedecor.node_is_owned(pos, sender) then return end + homedecor.update_sign(pos, fields) end, on_punch = function(pos, node, puncher) - homedecor_update_sign(pos) + homedecor.update_sign(pos) end, }) @@ -286,11 +286,11 @@ minetest.register_node(":signs:sign_post", { local signs_text_on_activate -if not homedecor_disable_signs then +if not homedecor.disable_signs then signs_text_on_activate = function(self) local meta = minetest.get_meta(self.object:getpos()) local text = meta:get_string("text") - self.object:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) + self.object:set_properties({textures={homedecor.generate_texture(homedecor.create_lines(text))}}) end else signs_text_on_activate = function(self) @@ -318,7 +318,7 @@ local NUMBER_OF_LINES = 4 local LINE_HEIGHT = 14 local CHAR_WIDTH = 5 -homedecor_string_to_array = function(str) +homedecor.string_to_array = function(str) local tab = {} for i=1,string.len(str) do table.insert(tab, string.sub(str, i,i)) @@ -326,11 +326,11 @@ homedecor_string_to_array = function(str) return tab end -homedecor_string_to_word_array = function(str) +homedecor.string_to_word_array = function(str) local tab = {} local current = 1 tab[1] = "" - for _,char in ipairs(homedecor_string_to_array(str)) do + for _,char in ipairs(homedecor.string_to_array(str)) do if char ~= " " then tab[current] = tab[current]..char else @@ -341,11 +341,11 @@ homedecor_string_to_word_array = function(str) return tab end -homedecor_create_lines = function(text) +homedecor.create_lines = function(text) local line = "" local line_num = 1 local tab = {} - for _,word in ipairs(homedecor_string_to_word_array(text)) do + for _,word in ipairs(homedecor.string_to_word_array(text)) do if string.len(line)+string.len(word) < LINE_LENGTH and word ~= "|" then if line ~= "" then line = line.." "..word @@ -369,17 +369,17 @@ homedecor_create_lines = function(text) return tab end -homedecor_generate_texture = function(lines) +homedecor.generate_texture = function(lines) local texture = "[combine:"..SIGN_WITH.."x"..SIGN_WITH local ypos = 12 for i = 1, #lines do - texture = texture..homedecor_generate_line(lines[i], ypos) + texture = texture..homedecor.generate_line(lines[i], ypos) ypos = ypos + LINE_HEIGHT end return texture end -homedecor_generate_line = function(s, ypos) +homedecor.generate_line = function(s, ypos) local i = 1 local parsed = {} local width = 0 @@ -425,7 +425,7 @@ local function copy ( t ) return nt end -function homedecor_register_fence_with_sign(fencename, fencewithsignname) +function homedecor.register_fence_with_sign(fencename, fencewithsignname) local def = minetest.registered_nodes[fencename] local def_sign = minetest.registered_nodes[fencewithsignname] if not (def and def_sign) then @@ -443,18 +443,18 @@ function homedecor_register_fence_with_sign(fencename, fencewithsignname) local fdir = minetest.dir_to_facedir(placer:get_look_dir()) if def_under and def_under.on_rightclick then return def_under.on_rightclick(pointed_thing.under, node_under, placer, itemstack) or itemstack - elseif (not homedecor_node_is_owned(pointed_thing.under, placer)) + elseif (not homedecor.node_is_owned(pointed_thing.under, placer)) and def_under.buildable_to then minetest.add_node(pointed_thing.under, {name = fencename, param2 = fdir}) - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() end placer:set_wielded_item(itemstack) return itemstack - elseif (not homedecor_node_is_owned(pointed_thing.above, placer)) + elseif (not homedecor.node_is_owned(pointed_thing.above, placer)) and def_above.buildable_to then minetest.add_node(pointed_thing.above, {name = fencename, param2 = fdir}) - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() end placer:set_wielded_item(itemstack) @@ -462,10 +462,10 @@ function homedecor_register_fence_with_sign(fencename, fencewithsignname) end end def_sign.on_construct = function(pos, ...) - homedecor_construct_sign(pos) + homedecor.construct_sign(pos) end def_sign.on_destruct = function(pos, ...) - homedecor_destruct_sign(pos) + homedecor.destruct_sign(pos) end def_sign.on_receive_fields = function(pos, formname, fields, sender, ...) if fields then @@ -475,11 +475,11 @@ function homedecor_register_fence_with_sign(fencename, fencewithsignname) minetest.pos_to_string(pos) )) end - if homedecor_node_is_owned(pos, sender) then return end - homedecor_update_sign(pos, fields) + if homedecor.node_is_owned(pos, sender) then return end + homedecor.update_sign(pos, fields) end def_sign.on_punch = function(pos, node, puncher, ...) - homedecor_update_sign(pos) + homedecor.update_sign(pos) end local fencename = fencename def_sign.after_dig_node = function(pos, node, ...) diff --git a/slopes.lua b/slopes.lua index 772f78ee..60da99b8 100644 --- a/slopes.lua +++ b/slopes.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -11,11 +11,11 @@ end -- Corner shingle nodes, courtesy Bas080 -homedecor_detail_level = 16 +homedecor.detail_level = 16 -homedecor_register_outer_corner = function(modname, subname, groups, images, description) +homedecor.register_outer_corner = function(modname, subname, groups, images, description) local slopeboxedge = {} - local detail = homedecor_detail_level + local detail = homedecor.detail_level for i = 0, detail-1 do slopeboxedge[i+1]={-0.5, -0.5, (i/detail)-0.5, 0.5-(i/detail), (i/detail)-0.5+(1.25/detail), 0.5} end @@ -43,9 +43,9 @@ homedecor_register_outer_corner = function(modname, subname, groups, images, des }) end -homedecor_register_inner_corner = function(modname, subname, groups, images, description) +homedecor.register_inner_corner = function(modname, subname, groups, images, description) local slopeboxedge = {} - local detail = homedecor_detail_level + local detail = homedecor.detail_level for i = 0, detail-1 do slopeboxedge[i+1]={-0.5, -0.5, -0.5, 0.5-(i/detail), (i/detail)-0.5+(1.25/detail), 0.5} slopeboxedge[i+detail+1]={-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1.25/detail), 0.5} @@ -69,9 +69,9 @@ homedecor_register_inner_corner = function(modname, subname, groups, images, des }) end -homedecor_register_slope = function(modname, subname, recipeitem, groups, images, description) +homedecor.register_slope = function(modname, subname, recipeitem, groups, images, description) local slopeboxedge = {} - local detail = homedecor_detail_level + local detail = homedecor.detail_level for i = 0, detail-1 do slopeboxedge[i+1]={-0.5, -0.5, (i/detail)-0.5, 0.5, (i/detail)-0.5+(1.25/detail), 0.5} end @@ -203,14 +203,14 @@ minetest.register_craft({ burntime = 30, }) -homedecor_register_roof = function(modname, subname, groups, images , description) - homedecor_register_outer_corner(modname, subname, groups, images, description) - homedecor_register_inner_corner(modname, subname, groups, images, description) +homedecor.register_roof = function(modname, subname, groups, images , description) + homedecor.register_outer_corner(modname, subname, groups, images, description) + homedecor.register_inner_corner(modname, subname, groups, images, description) end -- corners -homedecor_register_roof("homedecor", "wood", +homedecor.register_roof("homedecor", "wood", { snappy = 3 }, { "homedecor_shingles_wood_c_t.png", @@ -223,7 +223,7 @@ homedecor_register_roof("homedecor", "wood", "Wood Shingles" ) -homedecor_register_roof("homedecor", "asphalt", +homedecor.register_roof("homedecor", "asphalt", { snappy = 3 }, { "homedecor_shingles_asphalt_c_t.png", @@ -236,7 +236,7 @@ homedecor_register_roof("homedecor", "asphalt", "Asphalt Shingles" ) -homedecor_register_roof("homedecor", "terracotta", +homedecor.register_roof("homedecor", "terracotta", { snappy = 3 }, { "homedecor_shingles_terracotta_c_t.png", @@ -251,7 +251,7 @@ homedecor_register_roof("homedecor", "terracotta", -- register just the slopes -homedecor_register_slope("homedecor", "wood", +homedecor.register_slope("homedecor", "wood", "homedecor:shingles_wood", { snappy = 3 }, { @@ -265,7 +265,7 @@ homedecor_register_slope("homedecor", "wood", "Wood Shingles" ) -homedecor_register_slope("homedecor", "asphalt", +homedecor.register_slope("homedecor", "asphalt", "homedecor:shingles_asphalt", { snappy = 3 }, { @@ -279,7 +279,7 @@ homedecor_register_slope("homedecor", "asphalt", "Asphalt Shingles" ) -homedecor_register_slope("homedecor", "terracotta", +homedecor.register_slope("homedecor", "terracotta", "homedecor:shingles_terracotta", { snappy = 3 }, { diff --git a/tables.lua b/tables.lua index 07edbd80..f39b8937 100644 --- a/tables.lua +++ b/tables.lua @@ -2,8 +2,8 @@ -- Boilerplate to support localized strings if intllib mod is installed. local S -if intllib_modpath then - dofile(intllib_modpath.."/intllib.lua") +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") S = intllib.Getter(minetest.get_current_modname()) else S = function ( s ) return s end @@ -79,7 +79,7 @@ for i in ipairs(materials) do else minetest.add_node(above, {name = 'homedecor:'..m..'_table_small_square_b'}) end - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() return itemstack end @@ -207,7 +207,7 @@ for i in ipairs(materials) do else minetest.add_node(above, {name = 'homedecor:'..m..'_table_small_round_b'}) end - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() return itemstack end @@ -334,7 +334,7 @@ for i in ipairs(materials) do else minetest.add_node(above, {name = 'homedecor:'..m..'_table_large_b'}) end - if not homedecor_expect_infinite_stacks then + if not homedecor.expect_infinite_stacks then itemstack:take_item() return itemstack end From 92d8a53f5b5af85f47ba2047d558da81b3a32f65 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 9 Oct 2013 20:14:52 -0400 Subject: [PATCH 10/40] [10-09 20:14] VanessaE: homedecor.debug can't be local since it is in a global table. --- init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.lua b/init.lua index f2f266f2..95590e8b 100644 --- a/init.lua +++ b/init.lua @@ -13,7 +13,7 @@ homedecor = {} -local homedecor.debug = 0 +homedecor.debug = 0 homedecor.modpath = minetest.get_modpath("homedecor") homedecor.intllib_modpath = minetest.get_modpath("intllib") From e4c02a82d612ccb02be87e02388a320c38e96490 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Sun, 13 Oct 2013 13:20:42 -0400 Subject: [PATCH 11/40] Split ownership checking and 6d facedir into separate files. Changed related functions to use homedecor: and lib_6d: namespaces, as necessary, instead of simple "homedecor_" name prefixes. --- doors_and_gates.lua | 4 +-- init.lua | 44 +++---------------------- lib_6d.lua | 52 +++++++++++++++++++++++++++++ lighting.lua | 80 ++++++++++++++------------------------------- ownership.lua | 32 ++++++++++++++++++ signs_lib.lua | 14 ++++---- 6 files changed, 122 insertions(+), 104 deletions(-) create mode 100644 lib_6d.lua create mode 100644 ownership.lua diff --git a/doors_and_gates.lua b/doors_and_gates.lua index 45cc65b7..11d8403e 100644 --- a/doors_and_gates.lua +++ b/doors_and_gates.lua @@ -281,8 +281,8 @@ function homedecor.place_door(itemstack, placer, pointed_thing, name, side) local node_bottom = minetest.get_node(pos1) local node_top = minetest.get_node(pos2) - if not homedecor.node_is_owned(pos1, placer) - and not homedecor.node_is_owned(pos2, placer) then + if not homedecor:node_is_owned(pos1, placer) + and not homedecor:node_is_owned(pos2, placer) then if not get_nodedef_field(node_bottom.name, "buildable_to") or not get_nodedef_field(node_top.name, "buildable_to") then diff --git a/init.lua b/init.lua index 95590e8b..4ecb1067 100644 --- a/init.lua +++ b/init.lua @@ -13,6 +13,8 @@ homedecor = {} + +homedecor.disable_signs = minetest.setting_getbool("homedecor.disable_signs") homedecor.debug = 0 homedecor.modpath = minetest.get_modpath("homedecor") @@ -27,57 +29,21 @@ else S = function ( s ) return s end end --- Global stuff - -homedecor.disable_signs = minetest.setting_getbool("homedecor.disable_signs") - --- Various Functions - local dbg = function(s) if homedecor.debug == 1 then print('[HomeDecor] ' .. s) end end -function homedecor.node_is_owned(pos, placer) - local ownername = false - if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod - if HasOwner(pos, placer) then -- returns true if the node is owned - if not IsPlayerNodeOwner(pos, placer:get_player_name()) then - if type(getLastOwner) == "function" then -- ...is an old version - ownername = getLastOwner(pos) - elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version - ownername = GetNodeOwnerName(pos) - else - ownername = S("someone") - end - end - end - - elseif type(isprotect)=="function" then -- glomie's protection mod - if not isprotect(5, pos, placer) then - ownername = S("someone") - end - elseif type(protector)=="table" and type(protector.can_dig)=="function" then -- Zeg9's protection mod - if not protector.can_dig(5, pos, placer) then - ownername = S("someone") - end - end - - if ownername ~= false then - minetest.chat_send_player( placer:get_player_name(), S("Sorry, %s owns that spot."):format(ownername) ) - return true - else - return false - end -end - if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then homedecor.expect_infinite_stacks = false else homedecor.expect_infinite_stacks = true end +dofile(homedecor.modpath.."/ownership.lua") +dofile(homedecor.modpath.."/lib_6d.lua") + dofile(homedecor.modpath.."/misc_nodes.lua") -- the catch-all for all misc nodes dofile(homedecor.modpath.."/tables.lua") dofile(homedecor.modpath.."/electronics.lua") diff --git a/lib_6d.lua b/lib_6d.lua new file mode 100644 index 00000000..1841bd94 --- /dev/null +++ b/lib_6d.lua @@ -0,0 +1,52 @@ +-- Simplified 6d facedir rotation/prediction library +-- by VanessaE +-- license: WTFPL + +lib_6d = {} + +local dirs1 = { 20, 23, 22, 21 } +local dirs2 = { 9, 18, 7, 12 } + +function lib_6d:rotate_and_place(itemstack, placer, pointed_thing, infinitestacks) + local node = minetest.get_node(pointed_thing.under) + if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then + + local above = pointed_thing.above + local under = pointed_thing.under + local pitch = placer:get_look_pitch() + local pname = minetest.get_node(under).name + local node = minetest.get_node(above) + local fdir = minetest.dir_to_facedir(placer:get_look_dir()) + local wield_name = itemstack:get_name() + + if not minetest.registered_nodes[pname] + or not minetest.registered_nodes[pname].on_rightclick then + + local iswall = (above.x ~= under.x) or (above.z ~= under.z) + local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0) + local pos1 = above + + if minetest.registered_nodes[pname]["buildable_to"] then + pos1 = under + iswall = false + end + + if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end + + if iswall then + minetest.add_node(pos1, {name = wield_name, param2 = dirs2[fdir+1] }) -- place wall variant + elseif isceiling then + minetest.add_node(pos1, {name = wield_name, param2 = 20 }) -- place upside down variant + else + minetest.add_node(pos1, {name = wield_name, param2 = 0 }) -- place right side up + end + + if not infinitestacks then + itemstack:take_item() + return itemstack + end + end + else + minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) + end +end diff --git a/lighting.lua b/lighting.lua index a7cddabc..93c0c047 100644 --- a/lighting.lua +++ b/lighting.lua @@ -10,56 +10,6 @@ else S = function ( s ) return s end end -local dirs1 = { 20, 23, 22, 21 } -local dirs2 = { 9, 18, 7, 12 } - -function homedecor.rotate_and_place(itemstack, placer, pointed_thing) - if not homedecor.node_is_owned(pointed_thing.under, placer) - and not homedecor.node_is_owned(pointed_thing.above, placer) then - local node = minetest.get_node(pointed_thing.under) - if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then - - local above = pointed_thing.above - local under = pointed_thing.under - local pitch = placer:get_look_pitch() - local pname = minetest.get_node(under).name - local node = minetest.get_node(above) - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - local wield_name = itemstack:get_name() - - if not minetest.registered_nodes[pname] - or not minetest.registered_nodes[pname].on_rightclick then - - local iswall = (above.x ~= under.x) or (above.z ~= under.z) - local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0) - local pos1 = above - - if minetest.registered_nodes[pname]["buildable_to"] then - pos1 = under - iswall = false - end - - if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end - - if iswall then - minetest.add_node(pos1, {name = wield_name, param2 = dirs2[fdir+1] }) -- place wall variant - elseif isceiling then - minetest.add_node(pos1, {name = wield_name, param2 = 20 }) -- place upside down variant - else - minetest.add_node(pos1, {name = wield_name, param2 = 0 }) -- place right side up - end - - if not homedecor.expect_infinite_stacks then - itemstack:take_item() - return itemstack - end - end - else - minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) - end - end -end - local colors = {"yellow","white"} for i in ipairs(colors) do @@ -146,7 +96,10 @@ minetest.register_node('homedecor:glowlight_half_yellow', { sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor.rotate_and_place(itemstack, placer, pointed_thing) + if not homedecor:node_is_owned(pointed_thing.under, placer) + and not homedecor:node_is_owned(pointed_thing.above, placer) then + lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) + end return itemstack end }) @@ -179,7 +132,10 @@ minetest.register_node('homedecor:glowlight_quarter_yellow', { light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor.rotate_and_place(itemstack, placer, pointed_thing) + if not homedecor:node_is_owned(pointed_thing.under, placer) + and not homedecor:node_is_owned(pointed_thing.above, placer) then + lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) + end return itemstack end }) @@ -216,7 +172,10 @@ minetest.register_node('homedecor:glowlight_half_white', { light_source = LIGHT_MAX, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor.rotate_and_place(itemstack, placer, pointed_thing) + if not homedecor:node_is_owned(pointed_thing.under, placer) + and not homedecor:node_is_owned(pointed_thing.above, placer) then + lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) + end return itemstack end }) @@ -249,7 +208,10 @@ minetest.register_node('homedecor:glowlight_quarter_white', { light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor.rotate_and_place(itemstack, placer, pointed_thing) + if not homedecor:node_is_owned(pointed_thing.under, placer) + and not homedecor:node_is_owned(pointed_thing.above, placer) then + lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) + end return itemstack end }) @@ -285,7 +247,10 @@ minetest.register_node('homedecor:glowlight_small_cube_yellow', { sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor.rotate_and_place(itemstack, placer, pointed_thing) + if not homedecor:node_is_owned(pointed_thing.under, placer) + and not homedecor:node_is_owned(pointed_thing.above, placer) then + lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) + end return itemstack end }) @@ -318,7 +283,10 @@ minetest.register_node('homedecor:glowlight_small_cube_white', { light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), on_place = function(itemstack, placer, pointed_thing) - homedecor.rotate_and_place(itemstack, placer, pointed_thing) + if not homedecor:node_is_owned(pointed_thing.under, placer) + and not homedecor:node_is_owned(pointed_thing.above, placer) then + lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) + end return itemstack end }) diff --git a/ownership.lua b/ownership.lua new file mode 100644 index 00000000..e057e270 --- /dev/null +++ b/ownership.lua @@ -0,0 +1,32 @@ +function homedecor:node_is_owned(pos, placer) + local ownername = false + if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod + if HasOwner(pos, placer) then -- returns true if the node is owned + if not IsPlayerNodeOwner(pos, placer:get_player_name()) then + if type(getLastOwner) == "function" then -- ...is an old version + ownername = getLastOwner(pos) + elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version + ownername = GetNodeOwnerName(pos) + else + ownername = S("someone") + end + end + end + + elseif type(isprotect)=="function" then -- glomie's protection mod + if not isprotect(5, pos, placer) then + ownername = S("someone") + end + elseif type(protector)=="table" and type(protector.can_dig)=="function" then -- Zeg9's protection mod + if not protector.can_dig(5, pos, placer) then + ownername = S("someone") + end + end + + if ownername ~= false then + minetest.chat_send_player( placer:get_player_name(), S("Sorry, %s owns that spot."):format(ownername) ) + return true + else + return false + end +end diff --git a/signs_lib.lua b/signs_lib.lua index 6910df1f..f8b2a506 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -119,13 +119,13 @@ if not homedecor.disable_signs then local name name = minetest.get_node(pointed_thing.under).name if fences_with_sign[name] then - if homedecor.node_is_owned(pointed_thing.under, placer) then + if homedecor:node_is_owned(pointed_thing.under, placer) then return itemstack end else name = minetest.get_node(pointed_thing.above).name local def = minetest.registered_nodes[name] - if homedecor.node_is_owned(pointed_thing.above, placer) + if homedecor:node_is_owned(pointed_thing.above, placer) or (not def.buildable_to) then return itemstack end @@ -202,7 +202,7 @@ if not homedecor.disable_signs then minetest.pos_to_string(pos) )) end - if homedecor.node_is_owned(pos, sender) then return end + if homedecor:node_is_owned(pos, sender) then return end homedecor.update_sign(pos, fields) end, on_punch = function(pos, node, puncher) @@ -239,7 +239,7 @@ minetest.register_node(":signs:sign_yard", { minetest.pos_to_string(pos) )) end - if homedecor.node_is_owned(pos, sender) then return end + if homedecor:node_is_owned(pos, sender) then return end homedecor.update_sign(pos, fields) end, on_punch = function(pos, node, puncher) @@ -443,7 +443,7 @@ function homedecor.register_fence_with_sign(fencename, fencewithsignname) local fdir = minetest.dir_to_facedir(placer:get_look_dir()) if def_under and def_under.on_rightclick then return def_under.on_rightclick(pointed_thing.under, node_under, placer, itemstack) or itemstack - elseif (not homedecor.node_is_owned(pointed_thing.under, placer)) + elseif (not homedecor:node_is_owned(pointed_thing.under, placer)) and def_under.buildable_to then minetest.add_node(pointed_thing.under, {name = fencename, param2 = fdir}) if not homedecor.expect_infinite_stacks then @@ -451,7 +451,7 @@ function homedecor.register_fence_with_sign(fencename, fencewithsignname) end placer:set_wielded_item(itemstack) return itemstack - elseif (not homedecor.node_is_owned(pointed_thing.above, placer)) + elseif (not homedecor:node_is_owned(pointed_thing.above, placer)) and def_above.buildable_to then minetest.add_node(pointed_thing.above, {name = fencename, param2 = fdir}) if not homedecor.expect_infinite_stacks then @@ -475,7 +475,7 @@ function homedecor.register_fence_with_sign(fencename, fencewithsignname) minetest.pos_to_string(pos) )) end - if homedecor.node_is_owned(pos, sender) then return end + if homedecor:node_is_owned(pos, sender) then return end homedecor.update_sign(pos, fields) end def_sign.on_punch = function(pos, node, puncher, ...) From 1ab5263a559f1075b25835c82b86e210cb844e7a Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 16 Oct 2013 09:59:19 -0400 Subject: [PATCH 12/40] fix nil function call in ownership code. --- init.lua | 8 -------- ownership.lua | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/init.lua b/init.lua index 4ecb1067..1cd3ba6b 100644 --- a/init.lua +++ b/init.lua @@ -13,7 +13,6 @@ homedecor = {} - homedecor.disable_signs = minetest.setting_getbool("homedecor.disable_signs") homedecor.debug = 0 @@ -21,13 +20,6 @@ homedecor.modpath = minetest.get_modpath("homedecor") homedecor.intllib_modpath = minetest.get_modpath("intllib") -- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end local dbg = function(s) if homedecor.debug == 1 then diff --git a/ownership.lua b/ownership.lua index e057e270..70491d93 100644 --- a/ownership.lua +++ b/ownership.lua @@ -1,3 +1,11 @@ +local S +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") + S = intllib.Getter(minetest.get_current_modname()) +else + S = function ( s ) return s end +end + function homedecor:node_is_owned(pos, placer) local ownername = false if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod From 1a18413a37f10862cc4c261ca62590503d9ef3ae Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 16 Oct 2013 10:24:45 -0400 Subject: [PATCH 13/40] fix minor quantity bug in crafting terracotta shingles back into pieces --- crafts.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crafts.lua b/crafts.lua index a7af77aa..b74ed36d 100644 --- a/crafts.lua +++ b/crafts.lua @@ -53,7 +53,7 @@ minetest.register_craft( { }) minetest.register_craft( { - output = "homedecor:roof_tile_terracotta 4", + output = "homedecor:roof_tile_terracotta 8", recipe = { { "homedecor:shingles_terracotta", "homedecor:shingles_terracotta" } } From 07fa9d5583f83979637f633d4ffde811dad2969d Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 16 Oct 2013 10:30:41 -0400 Subject: [PATCH 14/40] oops, S() needs to stay in init.lua --- init.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/init.lua b/init.lua index 1cd3ba6b..d782aba4 100644 --- a/init.lua +++ b/init.lua @@ -20,6 +20,13 @@ homedecor.modpath = minetest.get_modpath("homedecor") homedecor.intllib_modpath = minetest.get_modpath("intllib") -- Boilerplate to support localized strings if intllib mod is installed. +local S +if homedecor.intllib_modpath then + dofile(homedecor.intllib_modpath.."/intllib.lua") + S = intllib.Getter(minetest.get_current_modname()) +else + S = function ( s ) return s end +end local dbg = function(s) if homedecor.debug == 1 then From 7219f6cd493fb8ff3cdea61dcdd8e6838319db2a Mon Sep 17 00:00:00 2001 From: kaeza Date: Wed, 16 Oct 2013 13:31:30 -0200 Subject: [PATCH 15/40] Make registering unknown signs a warning instead of an error. --- signs_lib.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index f8b2a506..d10ce829 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -299,7 +299,6 @@ else end - minetest.register_entity(":signs:text", { collisionbox = { 0, 0, 0, 0, 0, 0 }, visual = "upright_sprite", @@ -429,7 +428,8 @@ function homedecor.register_fence_with_sign(fencename, fencewithsignname) local def = minetest.registered_nodes[fencename] local def_sign = minetest.registered_nodes[fencewithsignname] if not (def and def_sign) then - error("Attempt to register unknown node as fence") + minetest.log("warning", "[homedecor] Attempt to register unknown node as fence") + return end def = copy(def) def_sign = copy(def_sign) From 6b09ea3a6f8c2fd6a27b17185619abcfaf18ab5e Mon Sep 17 00:00:00 2001 From: kaeza Date: Wed, 16 Oct 2013 14:47:16 -0200 Subject: [PATCH 16/40] Optimize create_lines() by using patterns, and prevent truncation of infotext. --- signs_lib.lua | 49 ++++--------------------------------------------- 1 file changed, 4 insertions(+), 45 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index d10ce829..83c3b3b0 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -317,54 +317,13 @@ local NUMBER_OF_LINES = 4 local LINE_HEIGHT = 14 local CHAR_WIDTH = 5 -homedecor.string_to_array = function(str) - local tab = {} - for i=1,string.len(str) do - table.insert(tab, string.sub(str, i,i)) - end - return tab -end - -homedecor.string_to_word_array = function(str) - local tab = {} - local current = 1 - tab[1] = "" - for _,char in ipairs(homedecor.string_to_array(str)) do - if char ~= " " then - tab[current] = tab[current]..char - else - current = current+1 - tab[current] = "" - end - end - return tab -end - homedecor.create_lines = function(text) - local line = "" - local line_num = 1 local tab = {} - for _,word in ipairs(homedecor.string_to_word_array(text)) do - if string.len(line)+string.len(word) < LINE_LENGTH and word ~= "|" then - if line ~= "" then - line = line.." "..word - else - line = word - end - else - table.insert(tab, line) - if word ~= "|" then - line = word - else - line = "" - end - line_num = line_num+1 - if line_num > NUMBER_OF_LINES then - return tab - end - end + for line in text:gmatch("([^|]+)|?") do + line = line:gsub("^%s*(.*)%s*$", "%1") -- Trim whitespace + table.insert(tab, line) + if #tab >= NUMBER_OF_LINES then break end end - table.insert(tab, line) return tab end From 7f850a8e1ec02ec30551ba407d16b5506529a2b5 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 16 Oct 2013 15:48:11 -0400 Subject: [PATCH 17/40] Any kinds of leaves that are in group:leaves (e.g. default leaves, moretrees leaves, possibly others) can be used to make plastic base. You can mix and match any types, if so desired. --- crafts.lua | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/crafts.lua b/crafts.lua index b74ed36d..3d5b7cf5 100644 --- a/crafts.lua +++ b/crafts.lua @@ -99,14 +99,15 @@ minetest.register_craft({ }) minetest.register_craft({ - type = "shapeless", - output = "homedecor:plastic_base 4", - recipe = { "default:leaves", - "default:leaves", - "default:leaves", - "default:leaves", - "default:leaves", - "default:leaves" + type = "shapeless", + output = "homedecor:plastic_base 4", + recipe = { + "group:leaves", + "group:leaves", + "group:leaves", + "group:leaves", + "group:leaves", + "group:leaves" } }) From e6e8cf04e83fba7b81abcfd622a4f9fbe5c64a70 Mon Sep 17 00:00:00 2001 From: kaeza Date: Thu, 17 Oct 2013 23:16:06 -0200 Subject: [PATCH 18/40] Some fixes to signslib. - Optimize texture generation by using `table.insert' and `table.concat' instead of concatenating strings. - Related to first point, use `string.format' to construct individual textures. - Fixed text entity not wrapping. - Fixed small typo: `SIGN_WITH' -> `SIGN_WIDTH' :-) --- signs_lib.lua | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 83c3b3b0..53e31ee2 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -308,7 +308,7 @@ minetest.register_entity(":signs:text", { }) -- CONSTANTS -local SIGN_WITH = 110 +local SIGN_WIDTH = 110 local SIGN_PADDING = 8 local LINE_LENGTH = 16 @@ -328,21 +328,25 @@ homedecor.create_lines = function(text) end homedecor.generate_texture = function(lines) - local texture = "[combine:"..SIGN_WITH.."x"..SIGN_WITH + local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, SIGN_WIDTH) } local ypos = 12 for i = 1, #lines do - texture = texture..homedecor.generate_line(lines[i], ypos) - ypos = ypos + LINE_HEIGHT + local linetex, yp = homedecor.generate_line(lines[i], ypos) + table.insert(texture, linetex) + ypos = yp + LINE_HEIGHT end - return texture + return table.concat(texture, "") end +local math_max = math.max + homedecor.generate_line = function(s, ypos) local i = 1 local parsed = {} local width = 0 + local maxw = 0 local chars = 0 - while chars < max_chars and i <= #s do + while i <= #s do local file = nil if charmap[s:sub(i, i)] ~= nil then file = charmap[s:sub(i, i)] @@ -356,19 +360,31 @@ homedecor.generate_line = function(s, ypos) end if file ~= nil then width = width + CHAR_WIDTH + maxw = math_max(width, maxw) + chars = chars + 1 + if chars > max_chars then + width = 0 + end table.insert(parsed, file) - chars = chars + 1 end end - width = width - 1 + maxw = maxw - 1 - local texture = "" - local xpos = math.floor((SIGN_WITH - 2 * SIGN_PADDING - width) / 2 + SIGN_PADDING) + local texture = { } + local start_xpos = math.floor((SIGN_WIDTH - 2 * SIGN_PADDING - maxw) / 2 + SIGN_PADDING) + local xpos = start_xpos + local linepos = 0 for i = 1, #parsed do - texture = texture..":"..xpos..","..ypos.."="..parsed[i]..".png" + table.insert(texture, (":%d,%d=%s.png"):format(xpos, ypos, parsed[i])) xpos = xpos + CHAR_WIDTH + 1 + linepos = linepos + 1 + if linepos > max_chars then + xpos = start_xpos + linepos = 0 + ypos = ypos + LINE_HEIGHT + end end - return texture + return table.concat(texture, ""), ypos end local function copy ( t ) From ce09d71c4fc7a8e8f4710faf3b33d5416f40bd40 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Thu, 17 Oct 2013 22:05:34 -0400 Subject: [PATCH 19/40] Fixed offset bug in sign entities. Existing signs' text will not be moved - this fix only applies to newly-placed signs (or at leasty, newly-spawned text entities e.g. after /clearobjects followed by punching). Also, made a few functions local that didn't really need to be global, some minor re-arranging of the code to accommodate the above and to tidy it up a bit. --- signs_lib.lua | 253 ++++++++++++++++++++++++++------------------------ 1 file changed, 131 insertions(+), 122 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 53e31ee2..78d0bc66 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -1,5 +1,47 @@ -- Font: 04.jp.org +-- CONSTANTS + +local SIGN_WIDTH = 110 +local SIGN_PADDING = 8 + +local LINE_LENGTH = 16 +local NUMBER_OF_LINES = 4 + +local LINE_HEIGHT = 14 +local CHAR_WIDTH = 5 + +local signs = { + {delta = {x = -0.06, y = 0, z = 0.399}, yaw = 0}, + {delta = {x = 0.399, y = 0, z = 0.06}, yaw = math.pi / -2}, + {delta = {x = 0.06, y = 0, z = -0.399}, yaw = math.pi}, + {delta = {x = -0.399, y = 0, z = -0.06}, yaw = math.pi / 2}, +} + +local signs_yard = { + {delta = {x = -0.06, y = 0, z = -0.05}, yaw = 0}, + {delta = {x = -0.05, y = 0, z = 0.06}, yaw = math.pi / -2}, + {delta = {x = 0.06, y = 0, z = 0.05}, yaw = math.pi}, + {delta = {x = 0.05, y = 0, z = -0.06}, yaw = math.pi / 2}, +} + +local signs_post = { + {delta = {x = -0.06, y = 0, z = -0.226}, yaw = 0}, + {delta = {x = -0.226, y = 0, z = 0.06}, yaw = math.pi / -2}, + {delta = {x = 0.06, y = 0, z = 0.226}, yaw = math.pi}, + {delta = {x = 0.226, y = 0, z = -0.06}, yaw = math.pi / 2}, +} + +local sign_groups = {choppy=2, dig_immediate=2} + +local fences_with_sign = { } + +-- Misc variables + +local chars_file = io.open(minetest.get_modpath("homedecor").."/characters", "r") +local charmap = {} +local max_chars = 16 + -- Boilerplate to support localized strings if intllib mod is installed. local S if homedecor.intllib_modpath then @@ -9,10 +51,92 @@ else S = function ( s ) return s end end +-- some local helper functions + +local homedecor_create_lines = function(text) + local tab = {} + for line in text:gmatch("([^|]+)|?") do + line = line:gsub("^%s*(.*)%s*$", "%1") -- Trim whitespace + table.insert(tab, line) + if #tab >= NUMBER_OF_LINES then break end + end + return tab +end + +local math_max = math.max + +local homedecor_generate_line = function(s, ypos) + local i = 1 + local parsed = {} + local width = 0 + local maxw = 0 + local chars = 0 + while i <= #s do + local file = nil + if charmap[s:sub(i, i)] ~= nil then + file = charmap[s:sub(i, i)] + i = i + 1 + elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then + file = charmap[s:sub(i, i + 1)] + i = i + 2 + else + print("[signs] W: unknown symbol in '"..s.."' at "..i.." (probably "..s:sub(i, i)..")") + i = i + 1 + end + if file ~= nil then + width = width + CHAR_WIDTH + maxw = math_max(width, maxw) + chars = chars + 1 + if chars > max_chars then + width = 0 + end + table.insert(parsed, file) + end + end + maxw = maxw - 1 + + local texture = { } + local start_xpos = math.floor((SIGN_WIDTH - 2 * SIGN_PADDING - maxw) / 2 + SIGN_PADDING) + local xpos = start_xpos + local linepos = 0 + for i = 1, #parsed do + table.insert(texture, (":%d,%d=%s.png"):format(xpos, ypos, parsed[i])) + xpos = xpos + CHAR_WIDTH + 1 + linepos = linepos + 1 + if linepos > max_chars then + xpos = start_xpos + linepos = 0 + ypos = ypos + LINE_HEIGHT + end + end + return table.concat(texture, ""), ypos +end + +local function copy ( t ) + local nt = { }; + for k, v in pairs(t) do + if type(v) == "table" then + nt[k] = copy(v) + else + nt[k] = v + end + end + return nt +end + +local homedecor_generate_texture = function(lines) + local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, SIGN_WIDTH) } + local ypos = 12 + for i = 1, #lines do + local linetex, yp = homedecor_generate_line(lines[i], ypos) + table.insert(texture, linetex) + ypos = yp + LINE_HEIGHT + end + return table.concat(texture, "") +end + -- load characters map -local chars_file = io.open(minetest.get_modpath("homedecor").."/characters", "r") -local charmap = {} -local max_chars = 16 + if not chars_file then print("[signs] "..S("E: character map file not found")) else @@ -27,31 +151,6 @@ else end end -local signs = { - {delta = {x = 0, y = 0, z = 0.399}, yaw = 0}, - {delta = {x = 0.399, y = 0, z = 0}, yaw = math.pi / -2}, - {delta = {x = 0, y = 0, z = -0.399}, yaw = math.pi}, - {delta = {x = -0.399, y = 0, z = 0}, yaw = math.pi / 2}, -} - -local signs_yard = { - {delta = {x = 0, y = 0, z = -0.05}, yaw = 0}, - {delta = {x = -0.05, y = 0, z = 0}, yaw = math.pi / -2}, - {delta = {x = 0, y = 0, z = 0.05}, yaw = math.pi}, - {delta = {x = 0.05, y = 0, z = 0}, yaw = math.pi / 2}, -} - -local signs_post = { - {delta = {x = 0, y = 0, z = -0.226}, yaw = 0}, - {delta = {x = -0.226, y = 0, z = 0}, yaw = math.pi / -2}, - {delta = {x = 0, y = 0, z = 0.226}, yaw = math.pi}, - {delta = {x = 0.226, y = 0, z = 0}, yaw = math.pi / 2}, -} - -local sign_groups = {choppy=2, dig_immediate=2} - -local fences_with_sign = { } - homedecor.construct_sign = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", "field[text;;${text}]") @@ -70,14 +169,14 @@ end homedecor.update_sign = function(pos, fields) local meta = minetest.get_meta(pos) if fields then - meta:set_string("infotext", table.concat(homedecor.create_lines(fields.text), "\n")) + meta:set_string("infotext", table.concat(homedecor_create_lines(fields.text), "\n")) meta:set_string("text", fields.text) end local text = meta:get_string("text") local objects = minetest.get_objects_inside_radius(pos, 0.5) for _, v in ipairs(objects) do if v:get_entity_name() == "signs:text" then - v:set_properties({textures={homedecor.generate_texture(homedecor.create_lines(text))}}) + v:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) return end end @@ -290,7 +389,7 @@ if not homedecor.disable_signs then signs_text_on_activate = function(self) local meta = minetest.get_meta(self.object:getpos()) local text = meta:get_string("text") - self.object:set_properties({textures={homedecor.generate_texture(homedecor.create_lines(text))}}) + self.object:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) end else signs_text_on_activate = function(self) @@ -307,97 +406,7 @@ minetest.register_entity(":signs:text", { on_activate = signs_text_on_activate, }) --- CONSTANTS -local SIGN_WIDTH = 110 -local SIGN_PADDING = 8 - -local LINE_LENGTH = 16 -local NUMBER_OF_LINES = 4 - -local LINE_HEIGHT = 14 -local CHAR_WIDTH = 5 - -homedecor.create_lines = function(text) - local tab = {} - for line in text:gmatch("([^|]+)|?") do - line = line:gsub("^%s*(.*)%s*$", "%1") -- Trim whitespace - table.insert(tab, line) - if #tab >= NUMBER_OF_LINES then break end - end - return tab -end - -homedecor.generate_texture = function(lines) - local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, SIGN_WIDTH) } - local ypos = 12 - for i = 1, #lines do - local linetex, yp = homedecor.generate_line(lines[i], ypos) - table.insert(texture, linetex) - ypos = yp + LINE_HEIGHT - end - return table.concat(texture, "") -end - -local math_max = math.max - -homedecor.generate_line = function(s, ypos) - local i = 1 - local parsed = {} - local width = 0 - local maxw = 0 - local chars = 0 - while i <= #s do - local file = nil - if charmap[s:sub(i, i)] ~= nil then - file = charmap[s:sub(i, i)] - i = i + 1 - elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then - file = charmap[s:sub(i, i + 1)] - i = i + 2 - else - print("[signs] W: unknown symbol in '"..s.."' at "..i.." (probably "..s:sub(i, i)..")") - i = i + 1 - end - if file ~= nil then - width = width + CHAR_WIDTH - maxw = math_max(width, maxw) - chars = chars + 1 - if chars > max_chars then - width = 0 - end - table.insert(parsed, file) - end - end - maxw = maxw - 1 - - local texture = { } - local start_xpos = math.floor((SIGN_WIDTH - 2 * SIGN_PADDING - maxw) / 2 + SIGN_PADDING) - local xpos = start_xpos - local linepos = 0 - for i = 1, #parsed do - table.insert(texture, (":%d,%d=%s.png"):format(xpos, ypos, parsed[i])) - xpos = xpos + CHAR_WIDTH + 1 - linepos = linepos + 1 - if linepos > max_chars then - xpos = start_xpos - linepos = 0 - ypos = ypos + LINE_HEIGHT - end - end - return table.concat(texture, ""), ypos -end - -local function copy ( t ) - local nt = { }; - for k, v in pairs(t) do - if type(v) == "table" then - nt[k] = copy(v) - else - nt[k] = v - end - end - return nt -end +-- And the good stuff here! :-) function homedecor.register_fence_with_sign(fencename, fencewithsignname) local def = minetest.registered_nodes[fencename] From e97ee8256e070c0d6203c959a4cdfea2066df832 Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 18 Oct 2013 00:12:06 -0200 Subject: [PATCH 20/40] Fix signs' text overflowing at bottom. --- signs_lib.lua | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 78d0bc66..8e375925 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -65,7 +65,7 @@ end local math_max = math.max -local homedecor_generate_line = function(s, ypos) +local homedecor_generate_line = function(s, lineno) local i = 1 local parsed = {} local width = 0 @@ -100,16 +100,18 @@ local homedecor_generate_line = function(s, ypos) local xpos = start_xpos local linepos = 0 for i = 1, #parsed do + if lineno >= NUMBER_OF_LINES then break end + local ypos = 12 + (LINE_HEIGHT * lineno) table.insert(texture, (":%d,%d=%s.png"):format(xpos, ypos, parsed[i])) xpos = xpos + CHAR_WIDTH + 1 linepos = linepos + 1 if linepos > max_chars then xpos = start_xpos linepos = 0 - ypos = ypos + LINE_HEIGHT + lineno = lineno + 1 end end - return table.concat(texture, ""), ypos + return table.concat(texture, ""), lineno end local function copy ( t ) @@ -126,11 +128,12 @@ end local homedecor_generate_texture = function(lines) local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, SIGN_WIDTH) } - local ypos = 12 + local lineno = 0 for i = 1, #lines do - local linetex, yp = homedecor_generate_line(lines[i], ypos) + if lineno >= NUMBER_OF_LINES then break end + local linetex, ln = homedecor_generate_line(lines[i], lineno) table.insert(texture, linetex) - ypos = yp + LINE_HEIGHT + lineno = ln + 1 end return table.concat(texture, "") end From 424a374d8358b2f92e3d356f2ee5757ea8b07c7d Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 18 Oct 2013 02:16:40 -0200 Subject: [PATCH 21/40] Add support for high resolution and proportional fonts to signs. This also gets rid of useless constructs, and optimizes others. --- characters | 283 ----------------------------------------- signs_lib.lua | 320 ++++++++++++++++++++++++++++++++--------------- textures/_0.png | Bin 128 -> 0 bytes textures/_1.png | Bin 129 -> 0 bytes textures/_2.png | Bin 135 -> 0 bytes textures/_3.png | Bin 133 -> 0 bytes textures/_4.png | Bin 134 -> 0 bytes textures/_5.png | Bin 132 -> 0 bytes textures/_6.png | Bin 132 -> 0 bytes textures/_7.png | Bin 132 -> 0 bytes textures/_8.png | Bin 127 -> 0 bytes textures/_9.png | Bin 132 -> 0 bytes textures/_a.png | Bin 128 -> 0 bytes textures/_a_.png | Bin 130 -> 0 bytes textures/_am.png | Bin 123 -> 0 bytes textures/_ap.png | Bin 122 -> 0 bytes textures/_as.png | Bin 127 -> 0 bytes textures/_at.png | Bin 133 -> 0 bytes textures/_b.png | Bin 132 -> 0 bytes textures/_b_.png | Bin 129 -> 0 bytes textures/_bl.png | Bin 130 -> 0 bytes textures/_br.png | Bin 130 -> 0 bytes textures/_c.png | Bin 127 -> 0 bytes textures/_c_.png | Bin 129 -> 0 bytes textures/_ca.png | Bin 127 -> 0 bytes textures/_cl.png | Bin 129 -> 0 bytes textures/_cm.png | Bin 123 -> 0 bytes textures/_co.png | Bin 103 -> 0 bytes textures/_cr.png | Bin 128 -> 0 bytes textures/_d.png | Bin 132 -> 0 bytes textures/_d_.png | Bin 126 -> 0 bytes textures/_dl.png | Bin 135 -> 0 bytes textures/_dt.png | Bin 121 -> 0 bytes textures/_dv.png | Bin 133 -> 0 bytes textures/_e.png | Bin 127 -> 0 bytes textures/_e_.png | Bin 130 -> 0 bytes textures/_eq.png | Bin 121 -> 0 bytes textures/_ex.png | Bin 123 -> 0 bytes textures/_f.png | Bin 130 -> 0 bytes textures/_f_.png | Bin 132 -> 0 bytes textures/_g.png | Bin 129 -> 0 bytes textures/_g_.png | Bin 130 -> 0 bytes textures/_gt.png | Bin 129 -> 0 bytes textures/_h.png | Bin 132 -> 0 bytes textures/_h_.png | Bin 129 -> 0 bytes textures/_ha.png | Bin 125 -> 0 bytes textures/_hs.png | Bin 119 -> 0 bytes textures/_i.png | Bin 130 -> 0 bytes textures/_i_.png | Bin 126 -> 0 bytes textures/_j.png | Bin 128 -> 0 bytes textures/_j_.png | Bin 128 -> 0 bytes textures/_k.png | Bin 134 -> 0 bytes textures/_k_.png | Bin 130 -> 0 bytes textures/_l.png | Bin 128 -> 0 bytes textures/_l_.png | Bin 128 -> 0 bytes textures/_lt.png | Bin 129 -> 0 bytes textures/_m.png | Bin 125 -> 0 bytes textures/_m_.png | Bin 127 -> 0 bytes textures/_mn.png | Bin 122 -> 0 bytes textures/_n.png | Bin 125 -> 0 bytes textures/_n_.png | Bin 130 -> 0 bytes textures/_o.png | Bin 125 -> 0 bytes textures/_o_.png | Bin 126 -> 0 bytes textures/_p.png | Bin 129 -> 0 bytes textures/_p_.png | Bin 130 -> 0 bytes textures/_pr.png | Bin 135 -> 0 bytes textures/_ps.png | Bin 125 -> 0 bytes textures/_q.png | Bin 129 -> 0 bytes textures/_q_.png | Bin 127 -> 0 bytes textures/_qo.png | Bin 123 -> 0 bytes textures/_qu.png | Bin 130 -> 0 bytes textures/_r.png | Bin 125 -> 0 bytes textures/_r_.png | Bin 128 -> 0 bytes textures/_re.png | Bin 132 -> 0 bytes textures/_s.png | Bin 128 -> 0 bytes textures/_s_.png | Bin 131 -> 0 bytes textures/_sl.png | Bin 126 -> 0 bytes textures/_sm.png | Bin 107 -> 0 bytes textures/_sp.png | Bin 112 -> 0 bytes textures/_sr.png | Bin 126 -> 0 bytes textures/_t.png | Bin 130 -> 0 bytes textures/_t_.png | Bin 128 -> 0 bytes textures/_tl.png | Bin 124 -> 0 bytes textures/_u.png | Bin 125 -> 0 bytes textures/_u_.png | Bin 126 -> 0 bytes textures/_un.png | Bin 121 -> 0 bytes textures/_v.png | Bin 127 -> 0 bytes textures/_v_.png | Bin 128 -> 0 bytes textures/_vb.png | Bin 120 -> 0 bytes textures/_w.png | Bin 126 -> 0 bytes textures/_w_.png | Bin 128 -> 0 bytes textures/_x.png | Bin 127 -> 0 bytes textures/_x_.png | Bin 129 -> 0 bytes textures/_y.png | Bin 129 -> 0 bytes textures/_y_.png | Bin 130 -> 0 bytes textures/_z.png | Bin 128 -> 0 bytes textures/_z_.png | Bin 130 -> 0 bytes 97 files changed, 221 insertions(+), 382 deletions(-) delete mode 100644 characters delete mode 100644 textures/_0.png delete mode 100644 textures/_1.png delete mode 100644 textures/_2.png delete mode 100644 textures/_3.png delete mode 100644 textures/_4.png delete mode 100644 textures/_5.png delete mode 100644 textures/_6.png delete mode 100644 textures/_7.png delete mode 100644 textures/_8.png delete mode 100644 textures/_9.png delete mode 100644 textures/_a.png delete mode 100644 textures/_a_.png delete mode 100644 textures/_am.png delete mode 100644 textures/_ap.png delete mode 100644 textures/_as.png delete mode 100644 textures/_at.png delete mode 100644 textures/_b.png delete mode 100644 textures/_b_.png delete mode 100644 textures/_bl.png delete mode 100644 textures/_br.png delete mode 100644 textures/_c.png delete mode 100644 textures/_c_.png delete mode 100644 textures/_ca.png delete mode 100644 textures/_cl.png delete mode 100644 textures/_cm.png delete mode 100644 textures/_co.png delete mode 100644 textures/_cr.png delete mode 100644 textures/_d.png delete mode 100644 textures/_d_.png delete mode 100644 textures/_dl.png delete mode 100644 textures/_dt.png delete mode 100644 textures/_dv.png delete mode 100644 textures/_e.png delete mode 100644 textures/_e_.png delete mode 100644 textures/_eq.png delete mode 100644 textures/_ex.png delete mode 100644 textures/_f.png delete mode 100644 textures/_f_.png delete mode 100644 textures/_g.png delete mode 100644 textures/_g_.png delete mode 100644 textures/_gt.png delete mode 100644 textures/_h.png delete mode 100644 textures/_h_.png delete mode 100644 textures/_ha.png delete mode 100644 textures/_hs.png delete mode 100644 textures/_i.png delete mode 100644 textures/_i_.png delete mode 100644 textures/_j.png delete mode 100644 textures/_j_.png delete mode 100644 textures/_k.png delete mode 100644 textures/_k_.png delete mode 100644 textures/_l.png delete mode 100644 textures/_l_.png delete mode 100644 textures/_lt.png delete mode 100644 textures/_m.png delete mode 100644 textures/_m_.png delete mode 100644 textures/_mn.png delete mode 100644 textures/_n.png delete mode 100644 textures/_n_.png delete mode 100644 textures/_o.png delete mode 100644 textures/_o_.png delete mode 100644 textures/_p.png delete mode 100644 textures/_p_.png delete mode 100644 textures/_pr.png delete mode 100644 textures/_ps.png delete mode 100644 textures/_q.png delete mode 100644 textures/_q_.png delete mode 100644 textures/_qo.png delete mode 100644 textures/_qu.png delete mode 100644 textures/_r.png delete mode 100644 textures/_r_.png delete mode 100644 textures/_re.png delete mode 100644 textures/_s.png delete mode 100644 textures/_s_.png delete mode 100644 textures/_sl.png delete mode 100644 textures/_sm.png delete mode 100644 textures/_sp.png delete mode 100644 textures/_sr.png delete mode 100644 textures/_t.png delete mode 100644 textures/_t_.png delete mode 100644 textures/_tl.png delete mode 100644 textures/_u.png delete mode 100644 textures/_u_.png delete mode 100644 textures/_un.png delete mode 100644 textures/_v.png delete mode 100644 textures/_v_.png delete mode 100644 textures/_vb.png delete mode 100644 textures/_w.png delete mode 100644 textures/_w_.png delete mode 100644 textures/_x.png delete mode 100644 textures/_x_.png delete mode 100644 textures/_y.png delete mode 100644 textures/_y_.png delete mode 100644 textures/_z.png delete mode 100644 textures/_z_.png diff --git a/characters b/characters deleted file mode 100644 index d282d23c..00000000 --- a/characters +++ /dev/null @@ -1,283 +0,0 @@ -A -_a_ -7 -B -_b_ -5 -C -_c_ -6 -D -_d_ -6 -E -_e_ -5 -F -_f_ -5 -G -_g_ -6 -H -_h_ -6 -I -_i_ -1 -J -_j_ -4 -K -_k_ -5 -L -_l_ -4 -M -_m_ -7 -N -_n_ -6 -O -_o_ -6 -P -_p_ -5 -Q -_q_ -7 -R -_r_ -5 -S -_s_ -5 -T -_t_ -5 -U -_u_ -6 -V -_v_ -7 -W -_w_ -9 -X -_x_ -5 -Y -_y_ -7 -Z -_z_ -5 -a -_a -5 -b -_b -5 -c -_c -4 -d -_d -5 -e -_e -4 -f -_f -4 -g -_g -5 -h -_h -5 -i -_i -1 -j -_j -1 -k -_k -4 -l -_l -1 -m -_m -7 -n -_n -5 -o -_o -5 -p -_p -5 -q -_q -5 -r -_r -3 -s -_s -4 -t -_t -3 -u -_u -4 -v -_v -5 -w -_w -7 -x -_x -5 -y -_y -4 -z -_z -4 - -_sp -2 -0 -_0 -4 -1 -_1 -2 -2 -_2 -4 -3 -_3 -4 -4 -_4 -4 -5 -_5 -4 -6 -_6 -4 -7 -_7 -4 -8 -_8 -4 -9 -_9 -4 -( -_bl -2 -) -_br -2 -{ -_cl -3 -} -_cr -3 -[ -_sl -2 -] -_sr -2 -' -_ap -1 -! -_ex -1 -? -_qu -4 -@ -_at -5 -# -_hs -5 -$ -_dl -4 -% -_pr -5 -^ -_ca -3 -& -_am -5 -* -_as -3 -_ -_un -3 -+ -_ps -3 -- -_mn -3 -= -_eq -3 -: -_co -1 -; -_sm -1 -, -_cm -2 -" -_qo -3 -/ -_dv -5 -~ -_tl -4 -< -_lt -3 -> -_gt -3 -\ -_re -5 -| -_vb -1 -. -_dt -1 - diff --git a/signs_lib.lua b/signs_lib.lua index 8e375925..b73f96b4 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -1,46 +1,3 @@ --- Font: 04.jp.org - --- CONSTANTS - -local SIGN_WIDTH = 110 -local SIGN_PADDING = 8 - -local LINE_LENGTH = 16 -local NUMBER_OF_LINES = 4 - -local LINE_HEIGHT = 14 -local CHAR_WIDTH = 5 - -local signs = { - {delta = {x = -0.06, y = 0, z = 0.399}, yaw = 0}, - {delta = {x = 0.399, y = 0, z = 0.06}, yaw = math.pi / -2}, - {delta = {x = 0.06, y = 0, z = -0.399}, yaw = math.pi}, - {delta = {x = -0.399, y = 0, z = -0.06}, yaw = math.pi / 2}, -} - -local signs_yard = { - {delta = {x = -0.06, y = 0, z = -0.05}, yaw = 0}, - {delta = {x = -0.05, y = 0, z = 0.06}, yaw = math.pi / -2}, - {delta = {x = 0.06, y = 0, z = 0.05}, yaw = math.pi}, - {delta = {x = 0.05, y = 0, z = -0.06}, yaw = math.pi / 2}, -} - -local signs_post = { - {delta = {x = -0.06, y = 0, z = -0.226}, yaw = 0}, - {delta = {x = -0.226, y = 0, z = 0.06}, yaw = math.pi / -2}, - {delta = {x = 0.06, y = 0, z = 0.226}, yaw = math.pi}, - {delta = {x = 0.226, y = 0, z = -0.06}, yaw = math.pi / 2}, -} - -local sign_groups = {choppy=2, dig_immediate=2} - -local fences_with_sign = { } - --- Misc variables - -local chars_file = io.open(minetest.get_modpath("homedecor").."/characters", "r") -local charmap = {} -local max_chars = 16 -- Boilerplate to support localized strings if intllib mod is installed. local S @@ -51,6 +8,174 @@ else S = function ( s ) return s end end +-- CONSTANTS + +local NUMBER_OF_LINES = 6 + +local MP = minetest.get_modpath("homedecor") + +-- Used by `build_char_db' to locate the file. +local FONT_FMT = "%s/hdf_%02x.png" + +-- Simple texture name for building text texture. +local FONT_FMT_SIMPLE = "hdf_%02x.png" + +-- Path to the textures. +local TP = MP.."/textures" + +local TEXT_SCALE = {x=0.9, y=0.7} + +-- Lots of overkill here. KISS advocates, go away, shoo! ;) -- kaeza + +local PNG_HDR = string.char(0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A) + +-- Read the image size from a PNG file. +-- Returns image_w, image_h. +-- Only the LSB is read from each field! +local function read_png_size(f) + f:seek("set", 0x0) + local hdr = f:read(8) + if hdr ~= PNG_HDR then return end + f:seek("set", 0x13) + local ws = f:read(1) + f:seek("set", 0x17) + local hs = f:read(1) + return ws:byte(), hs:byte() +end + +-- Set by build_char_db() +local LINE_HEIGHT +local SIGN_WIDTH +local SIGN_PADDING + +-- This holds the individual character widths. +-- Indexed by the actual character (e.g. charwidth["A"]) +local charwidth = { } + +-- File to cache the font size to. +local CHARDB_FILE = minetest.get_worldpath().."/homedecor_chardb" + +local function build_char_db() + + LINE_HEIGHT = nil + SIGN_WIDTH = nil + SIGN_PADDING = nil + + -- To calculate average char width. + local total_width = 0 + local char_count = 0 + + -- Try to load cached data to avoid heavy disk I/O. + + local cdbf = io.open(CHARDB_FILE, "rt") + + if cdbf then + minetest.log("info", "[homedecor] Reading cached character database.") + for line in cdbf:lines() do + local ch, w = line:match("(0x[0-9A-Fa-f]+)%s+([0-9][0-9]+)") + if ch and w then + local c = tonumber(ch, 16) + w = tonumber(w) + if c and w then + if c == 0 then + LINE_HEIGHT = h + elseif (c >= 32) and (c < 127) then + charwidth[string.char(c)] = w + total_width = total_width + w + char_count = char_count + 1 + end + end + end + end + cdbf:close() + if LINE_HEIGHT then + -- XXX: Is there a better way to calc this? + -- XXX: Remember to change similar lines below if this changes. + SIGN_WIDTH = math.floor((total_width / char_count) * 16) + SIGN_PADDING = SIGN_WIDTH / 14 -- Totally arbitrary. + return + else + minetest.log("warning", "[homedecor]" + .." Could not find font line height in cached DB." + .." Trying brute force." + ) + end + end + + -- OK, something went wrong... try brute force loading from texture files. + + total_width = 0 + char_count = 0 + LINE_HEIGHT = nil + + for c = 32, 126 do + local filename = FONT_FMT:format(TP, c) + local f = io.open(filename) + if f then + local ch = string.char(c) + local w, h = read_png_size(f) + f:close() + if w and h then + charwidth[ch] = w + total_width = total_width + w + char_count = char_count + 1 + if not LINE_HEIGHT then LINE_HEIGHT = h end + end + end + end + + if not LINE_HEIGHT then + error("Could not find font line height.") + end + + SIGN_WIDTH = math.floor((total_width / char_count) * 16) + SIGN_PADDING = SIGN_WIDTH / 14 -- Totally arbitrary. + + -- Try to save cached list back to disk. + + local e -- Note: `cdbf' is already declared local above. + cdbf, e = io.open(CHARDB_FILE, "wt") + if not cdbf then + minetest.log("warning", "[homedecor] Could not save cached char DB: "..(e or "")) + return + end + + cdbf:write(("0x00 %d\n"):format(LINE_HEIGHT)) + for c = 32, 126 do + local w = charwidth[string.char(c)] + if w then + cdbf:write(("0x%02X %d\n"):format(c, w)) + end + end + cdbf:close() + +end + +local signs = { + {delta = {x = 0, y = 0, z = 0.399}, yaw = 0}, + {delta = {x = 0.399, y = 0, z = 0 }, yaw = math.pi / -2}, + {delta = {x = 0, y = 0, z = -0.399}, yaw = math.pi}, + {delta = {x = -0.399, y = 0, z = 0 }, yaw = math.pi / 2}, +} + +local signs_yard = { + {delta = {x = 0, y = 0.05, z = -0.05}, yaw = 0}, + {delta = {x = -0.05, y = 0.05, z = 0}, yaw = math.pi / -2}, + {delta = {x = 0, y = 0.05, z = 0.05}, yaw = math.pi}, + {delta = {x = 0.05, y = 0.05, z = 0}, yaw = math.pi / 2}, +} + +local signs_post = { + {delta = {x = 0, y = 0, z = -0.226}, yaw = 0}, + {delta = {x = -0.226, y = 0, z = 0}, yaw = math.pi / -2}, + {delta = {x = 0, y = 0, z = 0.226}, yaw = math.pi}, + {delta = {x = 0.226, y = 0, z = 0}, yaw = math.pi / 2}, +} + +local sign_groups = {choppy=2, dig_immediate=2} + +local fences_with_sign = { } + -- some local helper functions local homedecor_create_lines = function(text) @@ -66,52 +191,56 @@ end local math_max = math.max local homedecor_generate_line = function(s, lineno) - local i = 1 - local parsed = {} - local width = 0 - local maxw = 0 - local chars = 0 - while i <= #s do - local file = nil - if charmap[s:sub(i, i)] ~= nil then - file = charmap[s:sub(i, i)] - i = i + 1 - elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then - file = charmap[s:sub(i, i + 1)] - i = i + 2 - else - print("[signs] W: unknown symbol in '"..s.."' at "..i.." (probably "..s:sub(i, i)..")") - i = i + 1 - end - if file ~= nil then - width = width + CHAR_WIDTH - maxw = math_max(width, maxw) - chars = chars + 1 - if chars > max_chars then + + local width = 0 + local maxw = 0 + + local chars = { } + + local max_line_w = SIGN_WIDTH - (SIGN_PADDING * 2) + + -- We check which chars are available here. + for i = 1, #s do + local c = s:sub(i, i) + local w = charwidth[c] + if w then + width = width + w + 1 + maxw = math_max(width, maxw) + if width >= max_line_w then width = 0 end - table.insert(parsed, file) - end - end - maxw = maxw - 1 + table.insert(chars, c) + end + end - local texture = { } - local start_xpos = math.floor((SIGN_WIDTH - 2 * SIGN_PADDING - maxw) / 2 + SIGN_PADDING) - local xpos = start_xpos - local linepos = 0 - for i = 1, #parsed do - if lineno >= NUMBER_OF_LINES then break end - local ypos = 12 + (LINE_HEIGHT * lineno) - table.insert(texture, (":%d,%d=%s.png"):format(xpos, ypos, parsed[i])) - xpos = xpos + CHAR_WIDTH + 1 - linepos = linepos + 1 - if linepos > max_chars then + maxw = maxw - 1 + + -- Okay, we actually build the "line texture" here. + + local start_xpos = math.floor((SIGN_WIDTH - 2 * SIGN_PADDING - maxw) / 2 + SIGN_PADDING) + local xpos = start_xpos + local texture = { } + local ypos = (LINE_HEIGHT * (lineno --[[+ 1]])) + + width = 0 + + for i = 1, #s do + local c = s:sub(i, i) + local w = charwidth[c] + local tex = FONT_FMT_SIMPLE:format(c:byte()) + table.insert(texture, (":%d,%d=%s"):format(xpos, ypos, tex)) + xpos = xpos + w + 1 + width = width + w + 1 + if width > max_line_w then xpos = start_xpos - linepos = 0 + ypos = ypos + LINE_HEIGHT + width = 0 lineno = lineno + 1 end - end - return table.concat(texture, ""), lineno + if lineno >= NUMBER_OF_LINES then break end + end + + return table.concat(texture, ""), lineno end local function copy ( t ) @@ -138,20 +267,11 @@ local homedecor_generate_texture = function(lines) return table.concat(texture, "") end --- load characters map - -if not chars_file then - print("[signs] "..S("E: character map file not found")) -else - while true do - local char = chars_file:read("*l") - if char == nil then - break - end - local img = chars_file:read("*l") - chars_file:read("*l") - charmap[char] = img - end +local function set_obj_text(obj, text) + obj:set_properties({ + textures={homedecor_generate_texture(homedecor_create_lines(text))}, + visual_size = TEXT_SCALE, + }) end homedecor.construct_sign = function(pos) @@ -179,7 +299,7 @@ homedecor.update_sign = function(pos, fields) local objects = minetest.get_objects_inside_radius(pos, 0.5) for _, v in ipairs(objects) do if v:get_entity_name() == "signs:text" then - v:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) + set_obj_text(v, text) return end end @@ -392,7 +512,7 @@ if not homedecor.disable_signs then signs_text_on_activate = function(self) local meta = minetest.get_meta(self.object:getpos()) local text = meta:get_string("text") - self.object:set_properties({textures={homedecor_generate_texture(homedecor_create_lines(text))}}) + set_obj_text(self.object, text) end else signs_text_on_activate = function(self) @@ -479,6 +599,8 @@ function homedecor.register_fence_with_sign(fencename, fencewithsignname) print("Registered "..fencename.." and "..fencewithsignname) end +build_char_db() + if minetest.setting_get("log_mods") then minetest.log("action", S("signs loaded")) end diff --git a/textures/_0.png b/textures/_0.png deleted file mode 100644 index 4cde0513abbf71da3b41b64d30cad7ec81657301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i)x;Tb#Tu=US;6q~~lQWZyUjjpC4Ff~O3HFU# R+Bv!)jh?Q4F6*2UngEkW9-;sM diff --git a/textures/_1.png b/textures/_1.png deleted file mode 100644 index 4c709bc9e44277adc5999341edb1f3b7d5d224ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M1x;Tb#Tu=US;6vj>re+2KX9Z?vk0;CwnI0S$ TH?Tf41L^d1^>bP0l+XkK$CV%N diff --git a/textures/_2.png b/textures/_2.png deleted file mode 100644 index 741bba0385995ac64d34d70103b19b508609514e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1?0(jx;Tb#Tu=US;6q~~lQYv{<~D8~X$dX~2?+-! Zd4@C&j>2Tw!(T!AJzf1=);T3K0RUCcAG`nn diff --git a/textures/_3.png b/textures/_3.png deleted file mode 100644 index 56c72641cc5a8693ef36cd5166b3255f74d5f905..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1?0(ix;Tb#Tu=US;6q~~lQYv{W`&;&9{vdooiz*$ X85SH56+|C=1L^j3^>bP0l+XkKQez>Z diff --git a/textures/_4.png b/textures/_4.png deleted file mode 100644 index f958039f9291f21aa41f574f363d78deeef518a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3G>Eal|aXtCR!4J(3Sr2oziSkJD@HkxKW}9$= ZpCNw&XXc%4TZ}>4Jzf1=);T3K0RY)SBUu0d diff --git a/textures/_5.png b/textures/_5.png deleted file mode 100644 index 9c97f5574a2ea002bb6d2c89f84ea513d10609d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M4x;Tb#Tu=US;6r0$<3a`wRtY(Vg$&FdPna2k WI@k-Z%!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M4x;Tb#Tu=US;6vlW#)S+VtP(;E1x(ByPna1( WJJ<`8Utj(K((LK#=d#Wzp$Py!S|Swy diff --git a/textures/_7.png b/textures/_7.png deleted file mode 100644 index 1bc96a5ec1551aebf8547430f4967dab0fa92eb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M4x;Tb#Tu=US;6r0$qhjMj#>1=%cNkg}Ch{{R XpWygd_5NT3P#J@#tDnm{r-UW|a?T^= diff --git a/textures/_8.png b/textures/_8.png deleted file mode 100644 index ca57489683282a10945c6880cd3bc11f6695d88f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i&x;Tb#Tu=US;6q~~lQWaRA&&_s*cqZN*dK~z R-<%E7=jrO_vd$@?2>_HKAQb=r diff --git a/textures/_9.png b/textures/_9.png deleted file mode 100644 index e690d4678cdd0df3320abdd956fce4432a74e21b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M4x;Tb#Tu=US;6q~~lQWZmnSl+16C>M%6YLBL WFE|31rwhLWY4&vWb6Mw<&;$SvpCCH` diff --git a/textures/_a.png b/textures/_a.png deleted file mode 100644 index 0d66eb40a359510cd49492866fdc9761845fd6c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3J>Eal|aXtCRL54;Y4mjUb6Mw<&;$VWVj({O diff --git a/textures/_a_.png b/textures/_a_.png deleted file mode 100644 index eab424c4236662f7c13126a18bddb5870c0af4b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l7ba4#fxSssuFhi3qPq@T3gDngj8E5=wXDC+T UOg(7I{sW}d)78&qol`;+0OuMYPXGV_ diff --git a/textures/_am.png b/textures/_am.png deleted file mode 100644 index d187fe32b8f8cf3b6703306da32a597100ba7f48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$D3?#QN+_DTvv7|ftIx;Y9?C1WI2$EzA@Ck7R z(m=2@edl=~#Z(gH7yO^$>2?DzAWz8C#W95Adh(2e0S65l6`K>87FVdQ&MBb@086MIy#N3J diff --git a/textures/_ap.png b/textures/_ap.png deleted file mode 100644 index 4c44a61606cd93c3200afb38e0f27bc1c3d2e2eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8$P6TBy1I%0DVB6cUq=Rpjs4tz5?O(Kwg8_H zS0D`pOVf9r2U1KWL4Lvi8J=!8@B;D#JzX3_IIbsWBxEEsG_a*`FzC%-Y5etuQv#&L M)78&qol`;+0F%!g6#xJL diff --git a/textures/_as.png b/textures/_as.png deleted file mode 100644 index 3aa7a3e1d5011a774444d1ec0d9bc51df260ed4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3B>Eal|aXtCR!4J(3*_xRI)+hXEY+xw)z-76J R?QSDTpQo#z%Q~loCIAc&B7pz^ diff --git a/textures/_at.png b/textures/_at.png deleted file mode 100644 index bdd84d2c7db96d61e1879fb4cdb03c3bf24d55c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l4ba4#fxSssu@Q3z?9EbVZSlR>>d=hRjKVdw| Yko<)s^zY2cAafZ!UHx3vIVCg!0GyH}AOHXW diff --git a/textures/_b.png b/textures/_b.png deleted file mode 100644 index 8eb71d548838b4793a3a5c1cf1992fe7f6910c48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3I>Eal|aXtCR!4J&`n-bZb*$=ZBJV{{a{KLSI Ww1FdY;X(UfAkChxelF{r5}E+FZ6qoH diff --git a/textures/_b_.png b/textures/_b_.png deleted file mode 100644 index f3dc2074a2f3a95fd9209352f9da99b87b8d391c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz36>Eal|aXtCRL53z79%%`yh6?5htYVA|sS`LV TmCX`J`BzRuNe+AGsNFu UKd5$l`8JSNPgg&ebxsLQ0256ix&QzG diff --git a/textures/_br.png b/textures/_br.png deleted file mode 100644 index f845aad90c8104f1e6bf1de1b5e14775878405bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y;2qNchn5qe+SkfJR9T^xl_H+M9WCils0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l7ba4#fxSm{b;6sCAV!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i&x;Tb#Tu=USfT2-XLP&zEp@OM}pCRW5$HTJ9qp00i_>zopr0B8^%=>Px# diff --git a/textures/_c_.png b/textures/_c_.png deleted file mode 100644 index fea49cbb0f3d098ec1523e012b46e5fff216fca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M1x;Tb#Tu=USfT2lPLP&zE!GQ4uQ#S)c$_$Rg Sj(QJ}(F~rhelF{r5}E*qrya8Z diff --git a/textures/_ca.png b/textures/_ca.png deleted file mode 100644 index 7c5eabd931f2449944c137be3df378c346efa883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3B>Eal|aXtCR!4J(3*$#8HF}2B`5MZeOz_s#% S@<#`t3I8O`A7>gTe~DWM4f+c+P} diff --git a/textures/_cm.png b/textures/_cm.png deleted file mode 100644 index f637f4abdbaa988395ce589f137e883e082bf7e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-T$P6TlivEcMDVB6cUq=Rpjs4tz5?O(Kwg8_H zS0D`pOVf9r2U1KWL4Lvi8J=!8@B;FLJY5_^IIbsK9BAN@Zn)6+kbxn61_z^EEpsAB NkEg4j%Q~loCII^>9QyzO diff --git a/textures/_co.png b/textures/_co.png deleted file mode 100644 index ae97df03c4a1e62fa6dc5637fe547e3ab0e02974..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-T$P6TlivEcMDYgKg5LX}#1WVI*o(EElB|(0{ u3=Yq3qyahno-U3d9M_W*8kpHtCNVOwN-#7k<*M_7)O))6xvXNd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3I>Eal|aXtCR!4J(3Sq^iz@wM?7%sIdy^plYx Wn}Oq|_8)~4AkChxelF{r5}E*{x+5U~ diff --git a/textures/_d_.png b/textures/_d_.png deleted file mode 100644 index 33346ef3a1345b178a0b2aea0bb62a9a064d3f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3F>Eal|aXtCRL53z79_a-Wn9uxYWJsUEv2eC= Q%w3Q+Pgg&ebxsLQ0I@b8PXGV_ diff --git a/textures/_dl.png b/textures/_dl.png deleted file mode 100644 index 21c6b3d8cbc15847cc19523a2065e5bfc9b39994..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1?0(jx;Tb#Tu=US;6vj>CTC`6#=|Ua>^z(fpO^xk ZFf*jT;Mk~o_Kh}3zo)C8%Q~loCIF?rBHjQ1 diff --git a/textures/_dt.png b/textures/_dt.png deleted file mode 100644 index 271886fb91721867eb92f287eec232dc2e1d9693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8$P6TBy1I%0DVB6cUq=Rpjs4tz5?O(Kwg8_H zS0D`pOVf9r2U1KWL4Lvi8J=!8@B;D#JY5_^IIbsWBsjDwFr+auI7qNEZhYmg2-4x{ L>gTe~DWM4fRyZ0q diff --git a/textures/_dv.png b/textures/_dv.png deleted file mode 100644 index 987804cca7c514b6623f0b3d1f7b34de08bac499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l4ba4#fxSssu@Q3Dy+=rzV_As|pH*9Eo$bVR# Xp)rRmmFcnf4Ule6S3j3^P6!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i&x;Tb#Tu=USfT2-XLP&z8p@OM}pCRK0N8`!V QbA}*&p00i_>zopr0AQLPZ~y=R diff --git a/textures/_e_.png b/textures/_e_.png deleted file mode 100644 index 140b24f1b1a21f2c43378559915ffbe60702a2d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3E>Eal|aXtCRL53zC9%%_Hi82OHHiQ4{45=C% Vg=<@9C;$~Pc)I$ztaD0e0s!&s9_j!9 diff --git a/textures/_eq.png b/textures/_eq.png deleted file mode 100644 index d472687345eb07dc72433df296aaada38022059d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>^~Mx;Tb#Tu=USfT58mfTxuqZwF^0SFxNwNQbAZ KpUXO@geCy1pd0l7 diff --git a/textures/_ex.png b/textures/_ex.png deleted file mode 100644 index eb30a3f79660ed2f0bcb3220c673a34af1cc5308..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8$P6TBy1I%0DVB6cUq=Rpjs4tz5?O(Kwg8_H zS0D`pOVf9r2U1KWL4Lvi8J=!8@B;FLJY5_^IIbsWBxEEwG_V=4IWfpfFf$(G7v%uy N@pScbS?83{1OR{x8NC1i diff --git a/textures/_f.png b/textures/_f.png deleted file mode 100644 index b8c956e2ad81e4b58baffba5dc18bfb8d893c68b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M3x;Tb#Tu=US;6vj>hQn-ZYzp@nmN_cPGbCkj U82Vn0umx%LboFyt=akR{0PUF|8vpNd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3I>Eal|aXtCRL53zC9%%_Hi7Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz36>Eal|aXtCRL54!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M3x;Tb#Tu=USfT2lPLP&y3LZ;yfi@|?phNKP- T!)cD05g@Ieu6{1-oD!MnB TFV6Ix2h!>3>gTe~DWM4fv}Yf< diff --git a/textures/_ha.png b/textures/_ha.png deleted file mode 100644 index 3eff069f16370877b94818ecd90939c11f8cc24a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz37>Eal|aXtCR!4J)etO7;~6CDg0VsEft?97lj P3DV{1>gTe~DWM4fmz^K? diff --git a/textures/_hs.png b/textures/_hs.png deleted file mode 100644 index 6f46e6e1661535ae4d8dae6adcf07429a91a438d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$D3?#QN+_DTvv7|ftIx;Y9?C1WI2$EzA@Ck7R z(m=2@edl=~#Z(gH7yO^$>2?DzAdk<}#W95AdUC|U0|yw6F>pR&{F(bIeF;dtr>mdK II;Vst0PH^=+yDRo diff --git a/textures/_i.png b/textures/_i.png deleted file mode 100644 index 421a1bb76c7102e78ae8bdb863da4b78b6b97b79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3E>Eal|aXtCR!4J(3*#yorOj0;;fI;XdBSXao V&Xd!8)8ar{Jzf1=);T3K0RU^WBLDyZ diff --git a/textures/_i_.png b/textures/_i_.png deleted file mode 100644 index d533cf9d0dec044c829f548fd7b4b5cc6c5c8901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3F>Eal|aXtCRL53zC9`gkg7|;A?WXOx)G(7!( QX(LFRr>mdKI;Vst0JP{Jng9R* diff --git a/textures/_j.png b/textures/_j.png deleted file mode 100644 index 057d7eb02475262e8510ceecffea5a8f3fa36a52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y;2qNchn5qe+SkfJR9T^xl_H+M9WCils0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1qba4#fxSm{b;6uYh1_5IRPl=F(3I>L>9UO{E SCyR|i8a-Y8T-G@yGywpltRBt) diff --git a/textures/_j_.png b/textures/_j_.png deleted file mode 100644 index f1f6cf50c435cbcff3ee69d164a984ce9601bee0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3J>Eal|aXtCRL53z?9{mObW{&iRpY{wT44j=` S<^4cP7(8A5T-G@yGywq2q8~H> diff --git a/textures/_k.png b/textures/_k.png deleted file mode 100644 index 564c593b1a70f038077bd54c6aa335378bbdfe62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3G>Eal|aXtCR!4J&`n-bX%Gqs8G7&k;TGOB!H YW=Q7XDEwCw@CBsZ)78&qol`;+0OzVBwg3PC diff --git a/textures/_k_.png b/textures/_k_.png deleted file mode 100644 index 72f8859be287fd64acb6a45d22d7046875b52cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l7ba4#fxSssuFhi3TPqxG}hL2)woCg2-88Y{9 UoV|HMJrJbT)78&qol`;+0P9pBxc~qF diff --git a/textures/_l.png b/textures/_l.png deleted file mode 100644 index 7875ef9c75e2e67c2784d83e50234cb8ed365035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3J>Eal|aXtCR!4J)eY=?O*QW6+C|1dC=PT*Xb S+u$q=(&*{x=d#Wzp$Py7CLsd= diff --git a/textures/_l_.png b/textures/_l_.png deleted file mode 100644 index 05eccbc6947cf5086bd836217e2c421063cd11b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3J>Eal|aXtCRL53zF9_s@I%*@O){xdUVuHZOm SThBEOq|wvW&t;ucLK6Vl%pbx4 diff --git a/textures/_lt.png b/textures/_lt.png deleted file mode 100644 index 29bed046cbe03e25dfa020add00e0f3cc813ee3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y;2qNchn5qe+SkfJR9T^xl_H+M9WCils0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l3ba4#fxSm{bfT4+9Ld-yg;Ugm($A3nK+#8&Z T|GqXK1L^d1^>bP0l+XkKu%aKV diff --git a/textures/_m.png b/textures/_m.png deleted file mode 100644 index 58320aaf87ae8a518d4e03f333ed4ccb6bbc6241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1kba4#fxSssuFhipik79xZ!$W3Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3B>Eal|aXtCRL53z)9xfh62aZJtl^CKc*e9-7 R8+`?&&(qb!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>^~Ox;Tb#Tu=USfT5X(hvOSNL)8nez>>8)|AMr5 My85}Sb4q9e0OcAULI3~& diff --git a/textures/_n.png b/textures/_n.png deleted file mode 100644 index 4322fa599b90310a7bf6e53a2d91d007e8c313cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1kba4#fxSssuFhipqPxOHRhC}QO#b-EUxh74p P2kG*3^>bP0l+XkKKLs8; diff --git a/textures/_n_.png b/textures/_n_.png deleted file mode 100644 index cfd43ba2ae98303115c493854cb21750429a0c8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l7ba4#fxSssuFhdg;Pqf4`10BXmY6<`388W|c U+%2#yV*+XQboFyt=akR{0NAY`*8l(j diff --git a/textures/_o.png b/textures/_o.png deleted file mode 100644 index 539c44ac986b57f38f8a6bb37e0d547429967844..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i%x;Tb#Tu=USfT2-XLg+vNQwu*sjt9rZT$#-c PKzRmFS3j3^P6!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i(x;Tb#Tu=USfT2lPLTEt&(~SR&49OB4j&t_K Qi-5Fwy85}Sb4q9e082j}3;+NC diff --git a/textures/_p.png b/textures/_p.png deleted file mode 100644 index 4f401394d1b8ed21e5a17bd20849f7af9ad04196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz36>Eal|aXtCRL54;-9_a%cniJWX*$?wG6g=Rl T{Iy1%8>G|I)z4*}Q$iB}24NtD diff --git a/textures/_p_.png b/textures/_p_.png deleted file mode 100644 index 56abf2d240c9c6a19c2e5d4f768f273a13cf98ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3E>Eal|aXtCRL53z79_fY+&57*IEHnNyGo;Pn Un3%Ze$ZL>RPgg&ebxsLQ06bqJDgXcg diff --git a/textures/_pr.png b/textures/_pr.png deleted file mode 100644 index 0645e04740ac4b5de3268de555bbd012431ba178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&@l6ba4#fxSssu@P~HCHpQlcEf0APGqv%wsq-jI Zv}cHl;qdJa_Dccj_jL7hS?83{1OUnhBIE!7 diff --git a/textures/_ps.png b/textures/_ps.png deleted file mode 100644 index 8d822abfff7e7a24666d3f7ae474e5178d18decc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz37>Eal|aXtCRL53#th6#*5PCx7!DjK*n1${C= Psu?_8{an^LB{Ts5hI1b& diff --git a/textures/_q.png b/textures/_q.png deleted file mode 100644 index f73c8359517d8873b7ecc7d5cbb5c80003cead5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz36>Eal|aXtCRL54!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i&x;Tb#Tu=USfT2lPLTEt&lQXji3q!&S_KQY$ R%4$LSJYD@<);T3K0RUwx9+v!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M3x;Tb#Tu=USfT2lPLP$c-ActX-S;J3xh9V8l UjUSRsFMzaqy85}Sb4q9e0LZH!;s5{u diff --git a/textures/_r.png b/textures/_r.png deleted file mode 100644 index f30c9835dc3433622c47e9612fa3d2dbd8bbd691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz37>Eal|aXtCRL54;?9_s@Wm=Cct6ftmGwlStZ Q0Ln9Xy85}Sb4q9e0C7PcPXGV_ diff --git a/textures/_r_.png b/textures/_r_.png deleted file mode 100644 index 7e63a20dc91eb1215d726594f5459ba443d4a9c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1qba4#fxSssuFhi3KPjtfu_72qpf9x4DN;tN@ SZxjRB!QkoY=d#Wzp$P!JC?KQ& diff --git a/textures/_re.png b/textures/_re.png deleted file mode 100644 index abf907f5d7b0a8e6f61cceab898889fa9b37dbe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3I>Eal|aXtCR!2re<>xK_(0{a*a@$=YA)G;t* W7jW);QQQ&+((LK#=d#Wzp$PzT&>^}2 diff --git a/textures/_s.png b/textures/_s.png deleted file mode 100644 index 8564681acb83fd1aaa909a24660926f6f7ae0437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i)x;Tb#Tu=USfT59>hm}WILe7B0;Ri#$1t;U* SLocO38a-Y8T-G@yGywo;l^yE< diff --git a/textures/_s_.png b/textures/_s_.png deleted file mode 100644 index a19b907aa48670be624c6b19528bf3dbc038c249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M2x;Tb#Tu=USfT4+(hm}WILe4mdKI;Vst0JRw%_5c6? diff --git a/textures/_sl.png b/textures/_sl.png deleted file mode 100644 index 49f213bd7ebf2f94311c61acf3dbb0b462b70f0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-T$P6TlivEcMDVB6cUq=Rpjs4tz5?O(Kwg8_H zS0D`pOVf9r2U1KWL4Lvi8J=!8@B;EgJzX3_IIbsK94KgLY&^)wYGfe8z+fuD!ua#f Q6j6{iPgg&ebxsLQ07=9hhX4Qo diff --git a/textures/_sm.png b/textures/_sm.png deleted file mode 100644 index d6e4ab06e36e3c1ae67c32fe11a7f51794187748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-T$P6TlivEcMDYgKg5LX}#1WVI*o(EElB|(0{ z3=Yq3qyag?o-U3d9M_W*8kpHNULLq`-~a;y`wd3N3A}dlKxqa~S3j3^P6s0gabg8QVfhLE`Cpe!VI3SelF{r5}E+8 CtQbfD diff --git a/textures/_sr.png b/textures/_sr.png deleted file mode 100644 index 7d135186fa2a5bd0e79ed79dae9ba6c286309a23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-T$P6TlivEcMDVB6cUq=Rpjs4tz5?O(Kwg8_H zS0D`pOVf9r2U1KWL4Lvi8J=!8@B;EgJzX3_IIbsK94KgLY+T65YGfe8z~B+VdT^KB Qzg&Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3E>Eal|aXtCR!4J)e>;gp%CwY0)B^;FO8L~ET UTH5(snFrG9>FVdQ&MBb@05K9E*8l(j diff --git a/textures/_t_.png b/textures/_t_.png deleted file mode 100644 index 42cf212a47036d7244b6760c159dbe519397025d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3J>Eal|aXtCRL53zC9!4JX0~?sn{AXmylHfG_ S{BL(QNTa8#pUXO@geCy!3n0z_ diff --git a/textures/_tl.png b/textures/_tl.png deleted file mode 100644 index 07443d386765de624b477ee681f891d1d7382e6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>^~Px;Tb#Tu=USfT59Ff=R+oL4l#lgDdcG-{ NCQnyCmvv4FO#t|l9OnQ4 diff --git a/textures/_u.png b/textures/_u.png deleted file mode 100644 index 348bc93bddfbe3efedf8afd991cf0da89daf77f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1kba4#fxSssuFhipjPxOHgEG_&DWi^~{->hE$ P6r{`3)z4*}Q$iB}WpW^x diff --git a/textures/_u_.png b/textures/_u_.png deleted file mode 100644 index 42be4ed9c8e7d4aa22247c8e0264822b5721cc59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1oba4#fxSssuFhdg?PxOKhJTv~YGZfZvZk4)q QcOFQar>mdKI;Vst0Dtx%Z~y=R diff --git a/textures/_un.png b/textures/_un.png deleted file mode 100644 index 1a1d6a930fd4e5629914e6700436b21fdfbf4d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1jba4#fxSssua092L#6Jdxt|weqTfaX&3ew@} L>gTe~DWM4f>8~GC diff --git a/textures/_v.png b/textures/_v.png deleted file mode 100644 index bf70c3c0489aea7854974422446f5b00abed56b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1mba4#fxSssuFhe67kF~@)hKJG|@(fiExDp>; Ry3+^J=jrO_vd$@?2>^icAIAUy diff --git a/textures/_v_.png b/textures/_v_.png deleted file mode 100644 index abe633edb471ea4cdac2d943dd37d1b50b20713d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz$P6T_XU63MDVB6cUq=Rpjs4tz5?MhC0(?ST zfiw^-P2YJQNHLWJ`33)Hc)H!d3&<1qba4#fxSssuFhdg;k19|0fe(B${Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3B>Eal|aXtCRL54;y9&L#{hK)=u{0s#rI1NA8 Rbtr@MdAjNd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz36>Eal|aXtCRL53zS9&L#{hKF1V+&WAQIX5^3 T)vju^gLHbj`njxgN@xNA(rF%a diff --git a/textures/_y.png b/textures/_y.png deleted file mode 100644 index 9cd323df5b320aeb9f533253f6fbed509dd9e007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz36>Eal|aXtCRL54;y9_a%gSPt{Dakt4c6jpFN TG+Ef74ASZ8>gTe~DWM4f{P7?a diff --git a/textures/_y_.png b/textures/_y_.png deleted file mode 100644 index 70cec732ebb1bc9676cfd7076caa886a69ef3fac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1e$P6SWtb3XVq*&4&eH|GXHuiJ>Nd!r<1^9%x z0%;&vn!fWqkYXwc@(cdY@N~O@7mz3E>Eal|aXtCRL53zS9#$T0i9Cix_8I?~8M0S! UI-cdevI(Ts)78&qol`;+00TH5_W%F@ diff --git a/textures/_z.png b/textures/_z.png deleted file mode 100644 index 160d9ccc314212ecf4c4241334439dc7d97fc5f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b|$P6UwbNT{60_l#vjtmSN`?>!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>}i)x;Tb#Tu=USfT59xM_j_pK!qXGK%OC!gQM`@ R!lvI6;R0X`wF zKpF^^rtdrtq?k&A{DS{8Jl$^K1>{M3x;Tb#Tu=USfT4+phm%KK!i>R_&EP*XL);Gb UhYwl&FM_msy85}Sb4q9e0H($st^fc4 From 3d51a36a4fbf7fafea0229f7183eb6c9c9393d26 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 18 Oct 2013 03:32:56 -0400 Subject: [PATCH 22/40] Add font for kaeza's new code, plus some extra fonts that can be copied into textures/ to change resolutions. --- extra_fonts/11px/hdf_20.png | Bin 0 -> 288 bytes extra_fonts/11px/hdf_21.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_22.png | Bin 0 -> 310 bytes extra_fonts/11px/hdf_23.png | Bin 0 -> 321 bytes extra_fonts/11px/hdf_24.png | Bin 0 -> 327 bytes extra_fonts/11px/hdf_25.png | Bin 0 -> 328 bytes extra_fonts/11px/hdf_26.png | Bin 0 -> 325 bytes extra_fonts/11px/hdf_27.png | Bin 0 -> 289 bytes extra_fonts/11px/hdf_28.png | Bin 0 -> 317 bytes extra_fonts/11px/hdf_29.png | Bin 0 -> 317 bytes extra_fonts/11px/hdf_2a.png | Bin 0 -> 312 bytes extra_fonts/11px/hdf_2b.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_2c.png | Bin 0 -> 313 bytes extra_fonts/11px/hdf_2d.png | Bin 0 -> 311 bytes extra_fonts/11px/hdf_2e.png | Bin 0 -> 311 bytes extra_fonts/11px/hdf_2f.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_30.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_31.png | Bin 0 -> 313 bytes extra_fonts/11px/hdf_32.png | Bin 0 -> 327 bytes extra_fonts/11px/hdf_33.png | Bin 0 -> 324 bytes extra_fonts/11px/hdf_34.png | Bin 0 -> 326 bytes extra_fonts/11px/hdf_35.png | Bin 0 -> 327 bytes extra_fonts/11px/hdf_36.png | Bin 0 -> 321 bytes extra_fonts/11px/hdf_37.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_38.png | Bin 0 -> 316 bytes extra_fonts/11px/hdf_39.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_3a.png | Bin 0 -> 311 bytes extra_fonts/11px/hdf_3b.png | Bin 0 -> 314 bytes extra_fonts/11px/hdf_3c.png | Bin 0 -> 317 bytes extra_fonts/11px/hdf_3d.png | Bin 0 -> 312 bytes extra_fonts/11px/hdf_3e.png | Bin 0 -> 317 bytes extra_fonts/11px/hdf_3f.png | Bin 0 -> 324 bytes extra_fonts/11px/hdf_40.png | Bin 0 -> 339 bytes extra_fonts/11px/hdf_41.png | Bin 0 -> 321 bytes extra_fonts/11px/hdf_42.png | Bin 0 -> 316 bytes extra_fonts/11px/hdf_43.png | Bin 0 -> 323 bytes extra_fonts/11px/hdf_44.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_45.png | Bin 0 -> 316 bytes extra_fonts/11px/hdf_46.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_47.png | Bin 0 -> 328 bytes extra_fonts/11px/hdf_48.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_49.png | Bin 0 -> 310 bytes extra_fonts/11px/hdf_4a.png | Bin 0 -> 316 bytes extra_fonts/11px/hdf_4b.png | Bin 0 -> 325 bytes extra_fonts/11px/hdf_4c.png | Bin 0 -> 314 bytes extra_fonts/11px/hdf_4d.png | Bin 0 -> 328 bytes extra_fonts/11px/hdf_4e.png | Bin 0 -> 320 bytes extra_fonts/11px/hdf_4f.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_50.png | Bin 0 -> 317 bytes extra_fonts/11px/hdf_51.png | Bin 0 -> 326 bytes extra_fonts/11px/hdf_52.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_53.png | Bin 0 -> 325 bytes extra_fonts/11px/hdf_54.png | Bin 0 -> 313 bytes extra_fonts/11px/hdf_55.png | Bin 0 -> 314 bytes extra_fonts/11px/hdf_56.png | Bin 0 -> 320 bytes extra_fonts/11px/hdf_57.png | Bin 0 -> 325 bytes extra_fonts/11px/hdf_58.png | Bin 0 -> 321 bytes extra_fonts/11px/hdf_59.png | Bin 0 -> 321 bytes extra_fonts/11px/hdf_5a.png | Bin 0 -> 327 bytes extra_fonts/11px/hdf_5b.png | Bin 0 -> 310 bytes extra_fonts/11px/hdf_5c.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_5d.png | Bin 0 -> 310 bytes extra_fonts/11px/hdf_5e.png | Bin 0 -> 313 bytes extra_fonts/11px/hdf_5f.png | Bin 0 -> 309 bytes extra_fonts/11px/hdf_60.png | Bin 0 -> 308 bytes extra_fonts/11px/hdf_61.png | Bin 0 -> 323 bytes extra_fonts/11px/hdf_62.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_63.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_64.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_65.png | Bin 0 -> 323 bytes extra_fonts/11px/hdf_66.png | Bin 0 -> 314 bytes extra_fonts/11px/hdf_67.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_68.png | Bin 0 -> 317 bytes extra_fonts/11px/hdf_69.png | Bin 0 -> 313 bytes extra_fonts/11px/hdf_6a.png | Bin 0 -> 312 bytes extra_fonts/11px/hdf_6b.png | Bin 0 -> 325 bytes extra_fonts/11px/hdf_6c.png | Bin 0 -> 310 bytes extra_fonts/11px/hdf_6d.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_6e.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_6f.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_70.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_71.png | Bin 0 -> 318 bytes extra_fonts/11px/hdf_72.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_73.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_74.png | Bin 0 -> 317 bytes extra_fonts/11px/hdf_75.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_76.png | Bin 0 -> 321 bytes extra_fonts/11px/hdf_77.png | Bin 0 -> 316 bytes extra_fonts/11px/hdf_78.png | Bin 0 -> 322 bytes extra_fonts/11px/hdf_79.png | Bin 0 -> 319 bytes extra_fonts/11px/hdf_7a.png | Bin 0 -> 323 bytes extra_fonts/11px/hdf_7b.png | Bin 0 -> 289 bytes extra_fonts/11px/hdf_7c.png | Bin 0 -> 291 bytes extra_fonts/11px/hdf_7d.png | Bin 0 -> 315 bytes extra_fonts/11px/hdf_7e.png | Bin 0 -> 314 bytes extra_fonts/17px/hdf_20.png | Bin 0 -> 289 bytes extra_fonts/17px/hdf_21.png | Bin 0 -> 315 bytes extra_fonts/17px/hdf_22.png | Bin 0 -> 314 bytes extra_fonts/17px/hdf_23.png | Bin 0 -> 328 bytes extra_fonts/17px/hdf_24.png | Bin 0 -> 340 bytes extra_fonts/17px/hdf_25.png | Bin 0 -> 351 bytes extra_fonts/17px/hdf_26.png | Bin 0 -> 343 bytes extra_fonts/17px/hdf_27.png | Bin 0 -> 289 bytes extra_fonts/17px/hdf_28.png | Bin 0 -> 317 bytes extra_fonts/17px/hdf_29.png | Bin 0 -> 317 bytes extra_fonts/17px/hdf_2a.png | Bin 0 -> 319 bytes extra_fonts/17px/hdf_2b.png | Bin 0 -> 318 bytes extra_fonts/17px/hdf_2c.png | Bin 0 -> 313 bytes extra_fonts/17px/hdf_2d.png | Bin 0 -> 311 bytes extra_fonts/17px/hdf_2e.png | Bin 0 -> 311 bytes extra_fonts/17px/hdf_2f.png | Bin 0 -> 324 bytes extra_fonts/17px/hdf_30.png | Bin 0 -> 325 bytes extra_fonts/17px/hdf_31.png | Bin 0 -> 317 bytes extra_fonts/17px/hdf_32.png | Bin 0 -> 335 bytes extra_fonts/17px/hdf_33.png | Bin 0 -> 333 bytes extra_fonts/17px/hdf_34.png | Bin 0 -> 328 bytes extra_fonts/17px/hdf_35.png | Bin 0 -> 331 bytes extra_fonts/17px/hdf_36.png | Bin 0 -> 332 bytes extra_fonts/17px/hdf_37.png | Bin 0 -> 324 bytes extra_fonts/17px/hdf_38.png | Bin 0 -> 328 bytes extra_fonts/17px/hdf_39.png | Bin 0 -> 333 bytes extra_fonts/17px/hdf_3a.png | Bin 0 -> 312 bytes extra_fonts/17px/hdf_3b.png | Bin 0 -> 315 bytes extra_fonts/17px/hdf_3c.png | Bin 0 -> 326 bytes extra_fonts/17px/hdf_3d.png | Bin 0 -> 314 bytes extra_fonts/17px/hdf_3e.png | Bin 0 -> 325 bytes extra_fonts/17px/hdf_3f.png | Bin 0 -> 330 bytes extra_fonts/17px/hdf_40.png | Bin 0 -> 353 bytes extra_fonts/17px/hdf_41.png | Bin 0 -> 346 bytes extra_fonts/17px/hdf_42.png | Bin 0 -> 329 bytes extra_fonts/17px/hdf_43.png | Bin 0 -> 338 bytes extra_fonts/17px/hdf_44.png | Bin 0 -> 335 bytes extra_fonts/17px/hdf_45.png | Bin 0 -> 321 bytes extra_fonts/17px/hdf_46.png | Bin 0 -> 321 bytes extra_fonts/17px/hdf_47.png | Bin 0 -> 344 bytes extra_fonts/17px/hdf_48.png | Bin 0 -> 315 bytes extra_fonts/17px/hdf_49.png | Bin 0 -> 310 bytes extra_fonts/17px/hdf_4a.png | Bin 0 -> 319 bytes extra_fonts/17px/hdf_4b.png | Bin 0 -> 341 bytes extra_fonts/17px/hdf_4c.png | Bin 0 -> 314 bytes extra_fonts/17px/hdf_4d.png | Bin 0 -> 330 bytes extra_fonts/17px/hdf_4e.png | Bin 0 -> 328 bytes extra_fonts/17px/hdf_4f.png | Bin 0 -> 337 bytes extra_fonts/17px/hdf_50.png | Bin 0 -> 331 bytes extra_fonts/17px/hdf_51.png | Bin 0 -> 347 bytes extra_fonts/17px/hdf_52.png | Bin 0 -> 331 bytes extra_fonts/17px/hdf_53.png | Bin 0 -> 338 bytes extra_fonts/17px/hdf_54.png | Bin 0 -> 316 bytes extra_fonts/17px/hdf_55.png | Bin 0 -> 321 bytes extra_fonts/17px/hdf_56.png | Bin 0 -> 326 bytes extra_fonts/17px/hdf_57.png | Bin 0 -> 337 bytes extra_fonts/17px/hdf_58.png | Bin 0 -> 338 bytes extra_fonts/17px/hdf_59.png | Bin 0 -> 330 bytes extra_fonts/17px/hdf_5a.png | Bin 0 -> 333 bytes extra_fonts/17px/hdf_5b.png | Bin 0 -> 313 bytes extra_fonts/17px/hdf_5c.png | Bin 0 -> 324 bytes extra_fonts/17px/hdf_5d.png | Bin 0 -> 313 bytes extra_fonts/17px/hdf_5e.png | Bin 0 -> 321 bytes extra_fonts/17px/hdf_5f.png | Bin 0 -> 311 bytes extra_fonts/17px/hdf_60.png | Bin 0 -> 310 bytes extra_fonts/17px/hdf_61.png | Bin 0 -> 332 bytes extra_fonts/17px/hdf_62.png | Bin 0 -> 329 bytes extra_fonts/17px/hdf_63.png | Bin 0 -> 327 bytes extra_fonts/17px/hdf_64.png | Bin 0 -> 330 bytes extra_fonts/17px/hdf_65.png | Bin 0 -> 330 bytes extra_fonts/17px/hdf_66.png | Bin 0 -> 317 bytes extra_fonts/17px/hdf_67.png | Bin 0 -> 329 bytes extra_fonts/17px/hdf_68.png | Bin 0 -> 322 bytes extra_fonts/17px/hdf_69.png | Bin 0 -> 315 bytes extra_fonts/17px/hdf_6a.png | Bin 0 -> 314 bytes extra_fonts/17px/hdf_6b.png | Bin 0 -> 332 bytes extra_fonts/17px/hdf_6c.png | Bin 0 -> 310 bytes extra_fonts/17px/hdf_6d.png | Bin 0 -> 325 bytes extra_fonts/17px/hdf_6e.png | Bin 0 -> 320 bytes extra_fonts/17px/hdf_6f.png | Bin 0 -> 327 bytes extra_fonts/17px/hdf_70.png | Bin 0 -> 329 bytes extra_fonts/17px/hdf_71.png | Bin 0 -> 329 bytes extra_fonts/17px/hdf_72.png | Bin 0 -> 320 bytes extra_fonts/17px/hdf_73.png | Bin 0 -> 326 bytes extra_fonts/17px/hdf_74.png | Bin 0 -> 320 bytes extra_fonts/17px/hdf_75.png | Bin 0 -> 320 bytes extra_fonts/17px/hdf_76.png | Bin 0 -> 323 bytes extra_fonts/17px/hdf_77.png | Bin 0 -> 333 bytes extra_fonts/17px/hdf_78.png | Bin 0 -> 325 bytes extra_fonts/17px/hdf_79.png | Bin 0 -> 327 bytes extra_fonts/17px/hdf_7a.png | Bin 0 -> 327 bytes extra_fonts/17px/hdf_7b.png | Bin 0 -> 289 bytes extra_fonts/17px/hdf_7c.png | Bin 0 -> 291 bytes extra_fonts/17px/hdf_7d.png | Bin 0 -> 317 bytes extra_fonts/17px/hdf_7e.png | Bin 0 -> 317 bytes extra_fonts/25px/hdf_20.png | Bin 0 -> 289 bytes extra_fonts/25px/hdf_21.png | Bin 0 -> 316 bytes extra_fonts/25px/hdf_22.png | Bin 0 -> 313 bytes extra_fonts/25px/hdf_23.png | Bin 0 -> 331 bytes extra_fonts/25px/hdf_24.png | Bin 0 -> 355 bytes extra_fonts/25px/hdf_25.png | Bin 0 -> 372 bytes extra_fonts/25px/hdf_26.png | Bin 0 -> 364 bytes extra_fonts/25px/hdf_27.png | Bin 0 -> 289 bytes extra_fonts/25px/hdf_28.png | Bin 0 -> 333 bytes extra_fonts/25px/hdf_29.png | Bin 0 -> 331 bytes extra_fonts/25px/hdf_2a.png | Bin 0 -> 324 bytes extra_fonts/25px/hdf_2b.png | Bin 0 -> 318 bytes extra_fonts/25px/hdf_2c.png | Bin 0 -> 315 bytes extra_fonts/25px/hdf_2d.png | Bin 0 -> 313 bytes extra_fonts/25px/hdf_2e.png | Bin 0 -> 311 bytes extra_fonts/25px/hdf_2f.png | Bin 0 -> 322 bytes extra_fonts/25px/hdf_30.png | Bin 0 -> 336 bytes extra_fonts/25px/hdf_31.png | Bin 0 -> 320 bytes extra_fonts/25px/hdf_32.png | Bin 0 -> 350 bytes extra_fonts/25px/hdf_33.png | Bin 0 -> 350 bytes extra_fonts/25px/hdf_34.png | Bin 0 -> 345 bytes extra_fonts/25px/hdf_35.png | Bin 0 -> 343 bytes extra_fonts/25px/hdf_36.png | Bin 0 -> 351 bytes extra_fonts/25px/hdf_37.png | Bin 0 -> 337 bytes extra_fonts/25px/hdf_38.png | Bin 0 -> 342 bytes extra_fonts/25px/hdf_39.png | Bin 0 -> 352 bytes extra_fonts/25px/hdf_3a.png | Bin 0 -> 313 bytes extra_fonts/25px/hdf_3b.png | Bin 0 -> 318 bytes extra_fonts/25px/hdf_3c.png | Bin 0 -> 329 bytes extra_fonts/25px/hdf_3d.png | Bin 0 -> 316 bytes extra_fonts/25px/hdf_3e.png | Bin 0 -> 329 bytes extra_fonts/25px/hdf_3f.png | Bin 0 -> 346 bytes extra_fonts/25px/hdf_40.png | Bin 0 -> 387 bytes extra_fonts/25px/hdf_41.png | Bin 0 -> 352 bytes extra_fonts/25px/hdf_42.png | Bin 0 -> 345 bytes extra_fonts/25px/hdf_43.png | Bin 0 -> 350 bytes extra_fonts/25px/hdf_44.png | Bin 0 -> 345 bytes extra_fonts/25px/hdf_45.png | Bin 0 -> 330 bytes extra_fonts/25px/hdf_46.png | Bin 0 -> 325 bytes extra_fonts/25px/hdf_47.png | Bin 0 -> 364 bytes extra_fonts/25px/hdf_48.png | Bin 0 -> 322 bytes extra_fonts/25px/hdf_49.png | Bin 0 -> 310 bytes extra_fonts/25px/hdf_4a.png | Bin 0 -> 324 bytes extra_fonts/25px/hdf_4b.png | Bin 0 -> 359 bytes extra_fonts/25px/hdf_4c.png | Bin 0 -> 317 bytes extra_fonts/25px/hdf_4d.png | Bin 0 -> 355 bytes extra_fonts/25px/hdf_4e.png | Bin 0 -> 345 bytes extra_fonts/25px/hdf_4f.png | Bin 0 -> 352 bytes extra_fonts/25px/hdf_50.png | Bin 0 -> 336 bytes extra_fonts/25px/hdf_51.png | Bin 0 -> 364 bytes extra_fonts/25px/hdf_52.png | Bin 0 -> 338 bytes extra_fonts/25px/hdf_53.png | Bin 0 -> 362 bytes extra_fonts/25px/hdf_54.png | Bin 0 -> 319 bytes extra_fonts/25px/hdf_55.png | Bin 0 -> 337 bytes extra_fonts/25px/hdf_56.png | Bin 0 -> 356 bytes extra_fonts/25px/hdf_57.png | Bin 0 -> 362 bytes extra_fonts/25px/hdf_58.png | Bin 0 -> 363 bytes extra_fonts/25px/hdf_59.png | Bin 0 -> 349 bytes extra_fonts/25px/hdf_5a.png | Bin 0 -> 338 bytes extra_fonts/25px/hdf_5b.png | Bin 0 -> 315 bytes extra_fonts/25px/hdf_5c.png | Bin 0 -> 323 bytes extra_fonts/25px/hdf_5d.png | Bin 0 -> 314 bytes extra_fonts/25px/hdf_5e.png | Bin 0 -> 330 bytes extra_fonts/25px/hdf_5f.png | Bin 0 -> 313 bytes extra_fonts/25px/hdf_60.png | Bin 0 -> 319 bytes extra_fonts/25px/hdf_61.png | Bin 0 -> 351 bytes extra_fonts/25px/hdf_62.png | Bin 0 -> 339 bytes extra_fonts/25px/hdf_63.png | Bin 0 -> 336 bytes extra_fonts/25px/hdf_64.png | Bin 0 -> 339 bytes extra_fonts/25px/hdf_65.png | Bin 0 -> 348 bytes extra_fonts/25px/hdf_66.png | Bin 0 -> 321 bytes extra_fonts/25px/hdf_67.png | Bin 0 -> 344 bytes extra_fonts/25px/hdf_68.png | Bin 0 -> 326 bytes extra_fonts/25px/hdf_69.png | Bin 0 -> 314 bytes extra_fonts/25px/hdf_6a.png | Bin 0 -> 318 bytes extra_fonts/25px/hdf_6b.png | Bin 0 -> 349 bytes extra_fonts/25px/hdf_6c.png | Bin 0 -> 310 bytes extra_fonts/25px/hdf_6d.png | Bin 0 -> 330 bytes extra_fonts/25px/hdf_6e.png | Bin 0 -> 324 bytes extra_fonts/25px/hdf_6f.png | Bin 0 -> 335 bytes extra_fonts/25px/hdf_70.png | Bin 0 -> 339 bytes extra_fonts/25px/hdf_71.png | Bin 0 -> 338 bytes extra_fonts/25px/hdf_72.png | Bin 0 -> 318 bytes extra_fonts/25px/hdf_73.png | Bin 0 -> 345 bytes extra_fonts/25px/hdf_74.png | Bin 0 -> 325 bytes extra_fonts/25px/hdf_75.png | Bin 0 -> 325 bytes extra_fonts/25px/hdf_76.png | Bin 0 -> 330 bytes extra_fonts/25px/hdf_77.png | Bin 0 -> 352 bytes extra_fonts/25px/hdf_78.png | Bin 0 -> 345 bytes extra_fonts/25px/hdf_79.png | Bin 0 -> 352 bytes extra_fonts/25px/hdf_7a.png | Bin 0 -> 339 bytes extra_fonts/25px/hdf_7b.png | Bin 0 -> 289 bytes extra_fonts/25px/hdf_7c.png | Bin 0 -> 292 bytes extra_fonts/25px/hdf_7d.png | Bin 0 -> 328 bytes extra_fonts/25px/hdf_7e.png | Bin 0 -> 323 bytes extra_fonts/34px/hdf_20.png | Bin 0 -> 289 bytes extra_fonts/34px/hdf_21.png | Bin 0 -> 318 bytes extra_fonts/34px/hdf_22.png | Bin 0 -> 317 bytes extra_fonts/34px/hdf_23.png | Bin 0 -> 354 bytes extra_fonts/34px/hdf_24.png | Bin 0 -> 377 bytes extra_fonts/34px/hdf_25.png | Bin 0 -> 389 bytes extra_fonts/34px/hdf_26.png | Bin 0 -> 380 bytes extra_fonts/34px/hdf_27.png | Bin 0 -> 290 bytes extra_fonts/34px/hdf_28.png | Bin 0 -> 341 bytes extra_fonts/34px/hdf_29.png | Bin 0 -> 342 bytes extra_fonts/34px/hdf_2a.png | Bin 0 -> 343 bytes extra_fonts/34px/hdf_2b.png | Bin 0 -> 320 bytes extra_fonts/34px/hdf_2c.png | Bin 0 -> 325 bytes extra_fonts/34px/hdf_2d.png | Bin 0 -> 314 bytes extra_fonts/34px/hdf_2e.png | Bin 0 -> 313 bytes extra_fonts/34px/hdf_2f.png | Bin 0 -> 331 bytes extra_fonts/34px/hdf_30.png | Bin 0 -> 355 bytes extra_fonts/34px/hdf_31.png | Bin 0 -> 329 bytes extra_fonts/34px/hdf_32.png | Bin 0 -> 367 bytes extra_fonts/34px/hdf_33.png | Bin 0 -> 370 bytes extra_fonts/34px/hdf_34.png | Bin 0 -> 354 bytes extra_fonts/34px/hdf_35.png | Bin 0 -> 357 bytes extra_fonts/34px/hdf_36.png | Bin 0 -> 369 bytes extra_fonts/34px/hdf_37.png | Bin 0 -> 344 bytes extra_fonts/34px/hdf_38.png | Bin 0 -> 367 bytes extra_fonts/34px/hdf_39.png | Bin 0 -> 371 bytes extra_fonts/34px/hdf_3a.png | Bin 0 -> 313 bytes extra_fonts/34px/hdf_3b.png | Bin 0 -> 327 bytes extra_fonts/34px/hdf_3c.png | Bin 0 -> 352 bytes extra_fonts/34px/hdf_3d.png | Bin 0 -> 317 bytes extra_fonts/34px/hdf_3e.png | Bin 0 -> 346 bytes extra_fonts/34px/hdf_3f.png | Bin 0 -> 362 bytes extra_fonts/34px/hdf_40.png | Bin 0 -> 417 bytes extra_fonts/34px/hdf_41.png | Bin 0 -> 371 bytes extra_fonts/34px/hdf_42.png | Bin 0 -> 346 bytes extra_fonts/34px/hdf_43.png | Bin 0 -> 371 bytes extra_fonts/34px/hdf_44.png | Bin 0 -> 360 bytes extra_fonts/34px/hdf_45.png | Bin 0 -> 329 bytes extra_fonts/34px/hdf_46.png | Bin 0 -> 325 bytes extra_fonts/34px/hdf_47.png | Bin 0 -> 383 bytes extra_fonts/34px/hdf_48.png | Bin 0 -> 322 bytes extra_fonts/34px/hdf_49.png | Bin 0 -> 311 bytes extra_fonts/34px/hdf_4a.png | Bin 0 -> 337 bytes extra_fonts/34px/hdf_4b.png | Bin 0 -> 371 bytes extra_fonts/34px/hdf_4c.png | Bin 0 -> 317 bytes extra_fonts/34px/hdf_4d.png | Bin 0 -> 353 bytes extra_fonts/34px/hdf_4e.png | Bin 0 -> 358 bytes extra_fonts/34px/hdf_4f.png | Bin 0 -> 371 bytes extra_fonts/34px/hdf_50.png | Bin 0 -> 350 bytes extra_fonts/34px/hdf_51.png | Bin 0 -> 386 bytes extra_fonts/34px/hdf_52.png | Bin 0 -> 348 bytes extra_fonts/34px/hdf_53.png | Bin 0 -> 378 bytes extra_fonts/34px/hdf_54.png | Bin 0 -> 320 bytes extra_fonts/34px/hdf_55.png | Bin 0 -> 341 bytes extra_fonts/34px/hdf_56.png | Bin 0 -> 357 bytes extra_fonts/34px/hdf_57.png | Bin 0 -> 371 bytes extra_fonts/34px/hdf_58.png | Bin 0 -> 376 bytes extra_fonts/34px/hdf_59.png | Bin 0 -> 354 bytes extra_fonts/34px/hdf_5a.png | Bin 0 -> 343 bytes extra_fonts/34px/hdf_5b.png | Bin 0 -> 314 bytes extra_fonts/34px/hdf_5c.png | Bin 0 -> 337 bytes extra_fonts/34px/hdf_5d.png | Bin 0 -> 314 bytes extra_fonts/34px/hdf_5e.png | Bin 0 -> 339 bytes extra_fonts/34px/hdf_5f.png | Bin 0 -> 313 bytes extra_fonts/34px/hdf_60.png | Bin 0 -> 320 bytes extra_fonts/34px/hdf_61.png | Bin 0 -> 360 bytes extra_fonts/34px/hdf_62.png | Bin 0 -> 356 bytes extra_fonts/34px/hdf_63.png | Bin 0 -> 354 bytes extra_fonts/34px/hdf_64.png | Bin 0 -> 354 bytes extra_fonts/34px/hdf_65.png | Bin 0 -> 361 bytes extra_fonts/34px/hdf_66.png | Bin 0 -> 331 bytes extra_fonts/34px/hdf_67.png | Bin 0 -> 360 bytes extra_fonts/34px/hdf_68.png | Bin 0 -> 337 bytes extra_fonts/34px/hdf_69.png | Bin 0 -> 314 bytes extra_fonts/34px/hdf_6a.png | Bin 0 -> 318 bytes extra_fonts/34px/hdf_6b.png | Bin 0 -> 360 bytes extra_fonts/34px/hdf_6c.png | Bin 0 -> 310 bytes extra_fonts/34px/hdf_6d.png | Bin 0 -> 344 bytes extra_fonts/34px/hdf_6e.png | Bin 0 -> 335 bytes extra_fonts/34px/hdf_6f.png | Bin 0 -> 352 bytes extra_fonts/34px/hdf_70.png | Bin 0 -> 353 bytes extra_fonts/34px/hdf_71.png | Bin 0 -> 355 bytes extra_fonts/34px/hdf_72.png | Bin 0 -> 330 bytes extra_fonts/34px/hdf_73.png | Bin 0 -> 361 bytes extra_fonts/34px/hdf_74.png | Bin 0 -> 329 bytes extra_fonts/34px/hdf_75.png | Bin 0 -> 335 bytes extra_fonts/34px/hdf_76.png | Bin 0 -> 349 bytes extra_fonts/34px/hdf_77.png | Bin 0 -> 369 bytes extra_fonts/34px/hdf_78.png | Bin 0 -> 362 bytes extra_fonts/34px/hdf_79.png | Bin 0 -> 356 bytes extra_fonts/34px/hdf_7a.png | Bin 0 -> 342 bytes extra_fonts/34px/hdf_7b.png | Bin 0 -> 290 bytes extra_fonts/34px/hdf_7c.png | Bin 0 -> 292 bytes extra_fonts/34px/hdf_7d.png | Bin 0 -> 338 bytes extra_fonts/34px/hdf_7e.png | Bin 0 -> 334 bytes textures/hdf_20.png | Bin 0 -> 289 bytes textures/hdf_21.png | Bin 0 -> 315 bytes textures/hdf_22.png | Bin 0 -> 314 bytes textures/hdf_23.png | Bin 0 -> 328 bytes textures/hdf_24.png | Bin 0 -> 340 bytes textures/hdf_25.png | Bin 0 -> 351 bytes textures/hdf_26.png | Bin 0 -> 343 bytes textures/hdf_27.png | Bin 0 -> 289 bytes textures/hdf_28.png | Bin 0 -> 317 bytes textures/hdf_29.png | Bin 0 -> 317 bytes textures/hdf_2a.png | Bin 0 -> 319 bytes textures/hdf_2b.png | Bin 0 -> 318 bytes textures/hdf_2c.png | Bin 0 -> 313 bytes textures/hdf_2d.png | Bin 0 -> 311 bytes textures/hdf_2e.png | Bin 0 -> 311 bytes textures/hdf_2f.png | Bin 0 -> 324 bytes textures/hdf_30.png | Bin 0 -> 325 bytes textures/hdf_31.png | Bin 0 -> 317 bytes textures/hdf_32.png | Bin 0 -> 335 bytes textures/hdf_33.png | Bin 0 -> 333 bytes textures/hdf_34.png | Bin 0 -> 328 bytes textures/hdf_35.png | Bin 0 -> 331 bytes textures/hdf_36.png | Bin 0 -> 332 bytes textures/hdf_37.png | Bin 0 -> 324 bytes textures/hdf_38.png | Bin 0 -> 328 bytes textures/hdf_39.png | Bin 0 -> 333 bytes textures/hdf_3a.png | Bin 0 -> 312 bytes textures/hdf_3b.png | Bin 0 -> 315 bytes textures/hdf_3c.png | Bin 0 -> 326 bytes textures/hdf_3d.png | Bin 0 -> 314 bytes textures/hdf_3e.png | Bin 0 -> 325 bytes textures/hdf_3f.png | Bin 0 -> 330 bytes textures/hdf_40.png | Bin 0 -> 353 bytes textures/hdf_41.png | Bin 0 -> 346 bytes textures/hdf_42.png | Bin 0 -> 329 bytes textures/hdf_43.png | Bin 0 -> 338 bytes textures/hdf_44.png | Bin 0 -> 335 bytes textures/hdf_45.png | Bin 0 -> 321 bytes textures/hdf_46.png | Bin 0 -> 321 bytes textures/hdf_47.png | Bin 0 -> 344 bytes textures/hdf_48.png | Bin 0 -> 315 bytes textures/hdf_49.png | Bin 0 -> 310 bytes textures/hdf_4a.png | Bin 0 -> 319 bytes textures/hdf_4b.png | Bin 0 -> 341 bytes textures/hdf_4c.png | Bin 0 -> 314 bytes textures/hdf_4d.png | Bin 0 -> 330 bytes textures/hdf_4e.png | Bin 0 -> 328 bytes textures/hdf_4f.png | Bin 0 -> 337 bytes textures/hdf_50.png | Bin 0 -> 331 bytes textures/hdf_51.png | Bin 0 -> 347 bytes textures/hdf_52.png | Bin 0 -> 331 bytes textures/hdf_53.png | Bin 0 -> 338 bytes textures/hdf_54.png | Bin 0 -> 316 bytes textures/hdf_55.png | Bin 0 -> 321 bytes textures/hdf_56.png | Bin 0 -> 326 bytes textures/hdf_57.png | Bin 0 -> 337 bytes textures/hdf_58.png | Bin 0 -> 338 bytes textures/hdf_59.png | Bin 0 -> 330 bytes textures/hdf_5a.png | Bin 0 -> 333 bytes textures/hdf_5b.png | Bin 0 -> 313 bytes textures/hdf_5c.png | Bin 0 -> 324 bytes textures/hdf_5d.png | Bin 0 -> 313 bytes textures/hdf_5e.png | Bin 0 -> 321 bytes textures/hdf_5f.png | Bin 0 -> 311 bytes textures/hdf_60.png | Bin 0 -> 310 bytes textures/hdf_61.png | Bin 0 -> 332 bytes textures/hdf_62.png | Bin 0 -> 329 bytes textures/hdf_63.png | Bin 0 -> 327 bytes textures/hdf_64.png | Bin 0 -> 330 bytes textures/hdf_65.png | Bin 0 -> 330 bytes textures/hdf_66.png | Bin 0 -> 317 bytes textures/hdf_67.png | Bin 0 -> 329 bytes textures/hdf_68.png | Bin 0 -> 322 bytes textures/hdf_69.png | Bin 0 -> 315 bytes textures/hdf_6a.png | Bin 0 -> 314 bytes textures/hdf_6b.png | Bin 0 -> 332 bytes textures/hdf_6c.png | Bin 0 -> 310 bytes textures/hdf_6d.png | Bin 0 -> 325 bytes textures/hdf_6e.png | Bin 0 -> 320 bytes textures/hdf_6f.png | Bin 0 -> 327 bytes textures/hdf_70.png | Bin 0 -> 329 bytes textures/hdf_71.png | Bin 0 -> 329 bytes textures/hdf_72.png | Bin 0 -> 320 bytes textures/hdf_73.png | Bin 0 -> 326 bytes textures/hdf_74.png | Bin 0 -> 320 bytes textures/hdf_75.png | Bin 0 -> 320 bytes textures/hdf_76.png | Bin 0 -> 323 bytes textures/hdf_77.png | Bin 0 -> 333 bytes textures/hdf_78.png | Bin 0 -> 325 bytes textures/hdf_79.png | Bin 0 -> 327 bytes textures/hdf_7a.png | Bin 0 -> 327 bytes textures/hdf_7b.png | Bin 0 -> 289 bytes textures/hdf_7c.png | Bin 0 -> 291 bytes textures/hdf_7d.png | Bin 0 -> 317 bytes textures/hdf_7e.png | Bin 0 -> 317 bytes 475 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 extra_fonts/11px/hdf_20.png create mode 100644 extra_fonts/11px/hdf_21.png create mode 100644 extra_fonts/11px/hdf_22.png create mode 100644 extra_fonts/11px/hdf_23.png create mode 100644 extra_fonts/11px/hdf_24.png create mode 100644 extra_fonts/11px/hdf_25.png create mode 100644 extra_fonts/11px/hdf_26.png create mode 100644 extra_fonts/11px/hdf_27.png create mode 100644 extra_fonts/11px/hdf_28.png create mode 100644 extra_fonts/11px/hdf_29.png create mode 100644 extra_fonts/11px/hdf_2a.png create mode 100644 extra_fonts/11px/hdf_2b.png create mode 100644 extra_fonts/11px/hdf_2c.png create mode 100644 extra_fonts/11px/hdf_2d.png create mode 100644 extra_fonts/11px/hdf_2e.png create mode 100644 extra_fonts/11px/hdf_2f.png create mode 100644 extra_fonts/11px/hdf_30.png create mode 100644 extra_fonts/11px/hdf_31.png create mode 100644 extra_fonts/11px/hdf_32.png create mode 100644 extra_fonts/11px/hdf_33.png create mode 100644 extra_fonts/11px/hdf_34.png create mode 100644 extra_fonts/11px/hdf_35.png create mode 100644 extra_fonts/11px/hdf_36.png create mode 100644 extra_fonts/11px/hdf_37.png create mode 100644 extra_fonts/11px/hdf_38.png create mode 100644 extra_fonts/11px/hdf_39.png create mode 100644 extra_fonts/11px/hdf_3a.png create mode 100644 extra_fonts/11px/hdf_3b.png create mode 100644 extra_fonts/11px/hdf_3c.png create mode 100644 extra_fonts/11px/hdf_3d.png create mode 100644 extra_fonts/11px/hdf_3e.png create mode 100644 extra_fonts/11px/hdf_3f.png create mode 100644 extra_fonts/11px/hdf_40.png create mode 100644 extra_fonts/11px/hdf_41.png create mode 100644 extra_fonts/11px/hdf_42.png create mode 100644 extra_fonts/11px/hdf_43.png create mode 100644 extra_fonts/11px/hdf_44.png create mode 100644 extra_fonts/11px/hdf_45.png create mode 100644 extra_fonts/11px/hdf_46.png create mode 100644 extra_fonts/11px/hdf_47.png create mode 100644 extra_fonts/11px/hdf_48.png create mode 100644 extra_fonts/11px/hdf_49.png create mode 100644 extra_fonts/11px/hdf_4a.png create mode 100644 extra_fonts/11px/hdf_4b.png create mode 100644 extra_fonts/11px/hdf_4c.png create mode 100644 extra_fonts/11px/hdf_4d.png create mode 100644 extra_fonts/11px/hdf_4e.png create mode 100644 extra_fonts/11px/hdf_4f.png create mode 100644 extra_fonts/11px/hdf_50.png create mode 100644 extra_fonts/11px/hdf_51.png create mode 100644 extra_fonts/11px/hdf_52.png create mode 100644 extra_fonts/11px/hdf_53.png create mode 100644 extra_fonts/11px/hdf_54.png create mode 100644 extra_fonts/11px/hdf_55.png create mode 100644 extra_fonts/11px/hdf_56.png create mode 100644 extra_fonts/11px/hdf_57.png create mode 100644 extra_fonts/11px/hdf_58.png create mode 100644 extra_fonts/11px/hdf_59.png create mode 100644 extra_fonts/11px/hdf_5a.png create mode 100644 extra_fonts/11px/hdf_5b.png create mode 100644 extra_fonts/11px/hdf_5c.png create mode 100644 extra_fonts/11px/hdf_5d.png create mode 100644 extra_fonts/11px/hdf_5e.png create mode 100644 extra_fonts/11px/hdf_5f.png create mode 100644 extra_fonts/11px/hdf_60.png create mode 100644 extra_fonts/11px/hdf_61.png create mode 100644 extra_fonts/11px/hdf_62.png create mode 100644 extra_fonts/11px/hdf_63.png create mode 100644 extra_fonts/11px/hdf_64.png create mode 100644 extra_fonts/11px/hdf_65.png create mode 100644 extra_fonts/11px/hdf_66.png create mode 100644 extra_fonts/11px/hdf_67.png create mode 100644 extra_fonts/11px/hdf_68.png create mode 100644 extra_fonts/11px/hdf_69.png create mode 100644 extra_fonts/11px/hdf_6a.png create mode 100644 extra_fonts/11px/hdf_6b.png create mode 100644 extra_fonts/11px/hdf_6c.png create mode 100644 extra_fonts/11px/hdf_6d.png create mode 100644 extra_fonts/11px/hdf_6e.png create mode 100644 extra_fonts/11px/hdf_6f.png create mode 100644 extra_fonts/11px/hdf_70.png create mode 100644 extra_fonts/11px/hdf_71.png create mode 100644 extra_fonts/11px/hdf_72.png create mode 100644 extra_fonts/11px/hdf_73.png create mode 100644 extra_fonts/11px/hdf_74.png create mode 100644 extra_fonts/11px/hdf_75.png create mode 100644 extra_fonts/11px/hdf_76.png create mode 100644 extra_fonts/11px/hdf_77.png create mode 100644 extra_fonts/11px/hdf_78.png create mode 100644 extra_fonts/11px/hdf_79.png create mode 100644 extra_fonts/11px/hdf_7a.png create mode 100644 extra_fonts/11px/hdf_7b.png create mode 100644 extra_fonts/11px/hdf_7c.png create mode 100644 extra_fonts/11px/hdf_7d.png create mode 100644 extra_fonts/11px/hdf_7e.png create mode 100644 extra_fonts/17px/hdf_20.png create mode 100644 extra_fonts/17px/hdf_21.png create mode 100644 extra_fonts/17px/hdf_22.png create mode 100644 extra_fonts/17px/hdf_23.png create mode 100644 extra_fonts/17px/hdf_24.png create mode 100644 extra_fonts/17px/hdf_25.png create mode 100644 extra_fonts/17px/hdf_26.png create mode 100644 extra_fonts/17px/hdf_27.png create mode 100644 extra_fonts/17px/hdf_28.png create mode 100644 extra_fonts/17px/hdf_29.png create mode 100644 extra_fonts/17px/hdf_2a.png create mode 100644 extra_fonts/17px/hdf_2b.png create mode 100644 extra_fonts/17px/hdf_2c.png create mode 100644 extra_fonts/17px/hdf_2d.png create mode 100644 extra_fonts/17px/hdf_2e.png create mode 100644 extra_fonts/17px/hdf_2f.png create mode 100644 extra_fonts/17px/hdf_30.png create mode 100644 extra_fonts/17px/hdf_31.png create mode 100644 extra_fonts/17px/hdf_32.png create mode 100644 extra_fonts/17px/hdf_33.png create mode 100644 extra_fonts/17px/hdf_34.png create mode 100644 extra_fonts/17px/hdf_35.png create mode 100644 extra_fonts/17px/hdf_36.png create mode 100644 extra_fonts/17px/hdf_37.png create mode 100644 extra_fonts/17px/hdf_38.png create mode 100644 extra_fonts/17px/hdf_39.png create mode 100644 extra_fonts/17px/hdf_3a.png create mode 100644 extra_fonts/17px/hdf_3b.png create mode 100644 extra_fonts/17px/hdf_3c.png create mode 100644 extra_fonts/17px/hdf_3d.png create mode 100644 extra_fonts/17px/hdf_3e.png create mode 100644 extra_fonts/17px/hdf_3f.png create mode 100644 extra_fonts/17px/hdf_40.png create mode 100644 extra_fonts/17px/hdf_41.png create mode 100644 extra_fonts/17px/hdf_42.png create mode 100644 extra_fonts/17px/hdf_43.png create mode 100644 extra_fonts/17px/hdf_44.png create mode 100644 extra_fonts/17px/hdf_45.png create mode 100644 extra_fonts/17px/hdf_46.png create mode 100644 extra_fonts/17px/hdf_47.png create mode 100644 extra_fonts/17px/hdf_48.png create mode 100644 extra_fonts/17px/hdf_49.png create mode 100644 extra_fonts/17px/hdf_4a.png create mode 100644 extra_fonts/17px/hdf_4b.png create mode 100644 extra_fonts/17px/hdf_4c.png create mode 100644 extra_fonts/17px/hdf_4d.png create mode 100644 extra_fonts/17px/hdf_4e.png create mode 100644 extra_fonts/17px/hdf_4f.png create mode 100644 extra_fonts/17px/hdf_50.png create mode 100644 extra_fonts/17px/hdf_51.png create mode 100644 extra_fonts/17px/hdf_52.png create mode 100644 extra_fonts/17px/hdf_53.png create mode 100644 extra_fonts/17px/hdf_54.png create mode 100644 extra_fonts/17px/hdf_55.png create mode 100644 extra_fonts/17px/hdf_56.png create mode 100644 extra_fonts/17px/hdf_57.png create mode 100644 extra_fonts/17px/hdf_58.png create mode 100644 extra_fonts/17px/hdf_59.png create mode 100644 extra_fonts/17px/hdf_5a.png create mode 100644 extra_fonts/17px/hdf_5b.png create mode 100644 extra_fonts/17px/hdf_5c.png create mode 100644 extra_fonts/17px/hdf_5d.png create mode 100644 extra_fonts/17px/hdf_5e.png create mode 100644 extra_fonts/17px/hdf_5f.png create mode 100644 extra_fonts/17px/hdf_60.png create mode 100644 extra_fonts/17px/hdf_61.png create mode 100644 extra_fonts/17px/hdf_62.png create mode 100644 extra_fonts/17px/hdf_63.png create mode 100644 extra_fonts/17px/hdf_64.png create mode 100644 extra_fonts/17px/hdf_65.png create mode 100644 extra_fonts/17px/hdf_66.png create mode 100644 extra_fonts/17px/hdf_67.png create mode 100644 extra_fonts/17px/hdf_68.png create mode 100644 extra_fonts/17px/hdf_69.png create mode 100644 extra_fonts/17px/hdf_6a.png create mode 100644 extra_fonts/17px/hdf_6b.png create mode 100644 extra_fonts/17px/hdf_6c.png create mode 100644 extra_fonts/17px/hdf_6d.png create mode 100644 extra_fonts/17px/hdf_6e.png create mode 100644 extra_fonts/17px/hdf_6f.png create mode 100644 extra_fonts/17px/hdf_70.png create mode 100644 extra_fonts/17px/hdf_71.png create mode 100644 extra_fonts/17px/hdf_72.png create mode 100644 extra_fonts/17px/hdf_73.png create mode 100644 extra_fonts/17px/hdf_74.png create mode 100644 extra_fonts/17px/hdf_75.png create mode 100644 extra_fonts/17px/hdf_76.png create mode 100644 extra_fonts/17px/hdf_77.png create mode 100644 extra_fonts/17px/hdf_78.png create mode 100644 extra_fonts/17px/hdf_79.png create mode 100644 extra_fonts/17px/hdf_7a.png create mode 100644 extra_fonts/17px/hdf_7b.png create mode 100644 extra_fonts/17px/hdf_7c.png create mode 100644 extra_fonts/17px/hdf_7d.png create mode 100644 extra_fonts/17px/hdf_7e.png create mode 100644 extra_fonts/25px/hdf_20.png create mode 100644 extra_fonts/25px/hdf_21.png create mode 100644 extra_fonts/25px/hdf_22.png create mode 100644 extra_fonts/25px/hdf_23.png create mode 100644 extra_fonts/25px/hdf_24.png create mode 100644 extra_fonts/25px/hdf_25.png create mode 100644 extra_fonts/25px/hdf_26.png create mode 100644 extra_fonts/25px/hdf_27.png create mode 100644 extra_fonts/25px/hdf_28.png create mode 100644 extra_fonts/25px/hdf_29.png create mode 100644 extra_fonts/25px/hdf_2a.png create mode 100644 extra_fonts/25px/hdf_2b.png create mode 100644 extra_fonts/25px/hdf_2c.png create mode 100644 extra_fonts/25px/hdf_2d.png create mode 100644 extra_fonts/25px/hdf_2e.png create mode 100644 extra_fonts/25px/hdf_2f.png create mode 100644 extra_fonts/25px/hdf_30.png create mode 100644 extra_fonts/25px/hdf_31.png create mode 100644 extra_fonts/25px/hdf_32.png create mode 100644 extra_fonts/25px/hdf_33.png create mode 100644 extra_fonts/25px/hdf_34.png create mode 100644 extra_fonts/25px/hdf_35.png create mode 100644 extra_fonts/25px/hdf_36.png create mode 100644 extra_fonts/25px/hdf_37.png create mode 100644 extra_fonts/25px/hdf_38.png create mode 100644 extra_fonts/25px/hdf_39.png create mode 100644 extra_fonts/25px/hdf_3a.png create mode 100644 extra_fonts/25px/hdf_3b.png create mode 100644 extra_fonts/25px/hdf_3c.png create mode 100644 extra_fonts/25px/hdf_3d.png create mode 100644 extra_fonts/25px/hdf_3e.png create mode 100644 extra_fonts/25px/hdf_3f.png create mode 100644 extra_fonts/25px/hdf_40.png create mode 100644 extra_fonts/25px/hdf_41.png create mode 100644 extra_fonts/25px/hdf_42.png create mode 100644 extra_fonts/25px/hdf_43.png create mode 100644 extra_fonts/25px/hdf_44.png create mode 100644 extra_fonts/25px/hdf_45.png create mode 100644 extra_fonts/25px/hdf_46.png create mode 100644 extra_fonts/25px/hdf_47.png create mode 100644 extra_fonts/25px/hdf_48.png create mode 100644 extra_fonts/25px/hdf_49.png create mode 100644 extra_fonts/25px/hdf_4a.png create mode 100644 extra_fonts/25px/hdf_4b.png create mode 100644 extra_fonts/25px/hdf_4c.png create mode 100644 extra_fonts/25px/hdf_4d.png create mode 100644 extra_fonts/25px/hdf_4e.png create mode 100644 extra_fonts/25px/hdf_4f.png create mode 100644 extra_fonts/25px/hdf_50.png create mode 100644 extra_fonts/25px/hdf_51.png create mode 100644 extra_fonts/25px/hdf_52.png create mode 100644 extra_fonts/25px/hdf_53.png create mode 100644 extra_fonts/25px/hdf_54.png create mode 100644 extra_fonts/25px/hdf_55.png create mode 100644 extra_fonts/25px/hdf_56.png create mode 100644 extra_fonts/25px/hdf_57.png create mode 100644 extra_fonts/25px/hdf_58.png create mode 100644 extra_fonts/25px/hdf_59.png create mode 100644 extra_fonts/25px/hdf_5a.png create mode 100644 extra_fonts/25px/hdf_5b.png create mode 100644 extra_fonts/25px/hdf_5c.png create mode 100644 extra_fonts/25px/hdf_5d.png create mode 100644 extra_fonts/25px/hdf_5e.png create mode 100644 extra_fonts/25px/hdf_5f.png create mode 100644 extra_fonts/25px/hdf_60.png create mode 100644 extra_fonts/25px/hdf_61.png create mode 100644 extra_fonts/25px/hdf_62.png create mode 100644 extra_fonts/25px/hdf_63.png create mode 100644 extra_fonts/25px/hdf_64.png create mode 100644 extra_fonts/25px/hdf_65.png create mode 100644 extra_fonts/25px/hdf_66.png create mode 100644 extra_fonts/25px/hdf_67.png create mode 100644 extra_fonts/25px/hdf_68.png create mode 100644 extra_fonts/25px/hdf_69.png create mode 100644 extra_fonts/25px/hdf_6a.png create mode 100644 extra_fonts/25px/hdf_6b.png create mode 100644 extra_fonts/25px/hdf_6c.png create mode 100644 extra_fonts/25px/hdf_6d.png create mode 100644 extra_fonts/25px/hdf_6e.png create mode 100644 extra_fonts/25px/hdf_6f.png create mode 100644 extra_fonts/25px/hdf_70.png create mode 100644 extra_fonts/25px/hdf_71.png create mode 100644 extra_fonts/25px/hdf_72.png create mode 100644 extra_fonts/25px/hdf_73.png create mode 100644 extra_fonts/25px/hdf_74.png create mode 100644 extra_fonts/25px/hdf_75.png create mode 100644 extra_fonts/25px/hdf_76.png create mode 100644 extra_fonts/25px/hdf_77.png create mode 100644 extra_fonts/25px/hdf_78.png create mode 100644 extra_fonts/25px/hdf_79.png create mode 100644 extra_fonts/25px/hdf_7a.png create mode 100644 extra_fonts/25px/hdf_7b.png create mode 100644 extra_fonts/25px/hdf_7c.png create mode 100644 extra_fonts/25px/hdf_7d.png create mode 100644 extra_fonts/25px/hdf_7e.png create mode 100644 extra_fonts/34px/hdf_20.png create mode 100644 extra_fonts/34px/hdf_21.png create mode 100644 extra_fonts/34px/hdf_22.png create mode 100644 extra_fonts/34px/hdf_23.png create mode 100644 extra_fonts/34px/hdf_24.png create mode 100644 extra_fonts/34px/hdf_25.png create mode 100644 extra_fonts/34px/hdf_26.png create mode 100644 extra_fonts/34px/hdf_27.png create mode 100644 extra_fonts/34px/hdf_28.png create mode 100644 extra_fonts/34px/hdf_29.png create mode 100644 extra_fonts/34px/hdf_2a.png create mode 100644 extra_fonts/34px/hdf_2b.png create mode 100644 extra_fonts/34px/hdf_2c.png create mode 100644 extra_fonts/34px/hdf_2d.png create mode 100644 extra_fonts/34px/hdf_2e.png create mode 100644 extra_fonts/34px/hdf_2f.png create mode 100644 extra_fonts/34px/hdf_30.png create mode 100644 extra_fonts/34px/hdf_31.png create mode 100644 extra_fonts/34px/hdf_32.png create mode 100644 extra_fonts/34px/hdf_33.png create mode 100644 extra_fonts/34px/hdf_34.png create mode 100644 extra_fonts/34px/hdf_35.png create mode 100644 extra_fonts/34px/hdf_36.png create mode 100644 extra_fonts/34px/hdf_37.png create mode 100644 extra_fonts/34px/hdf_38.png create mode 100644 extra_fonts/34px/hdf_39.png create mode 100644 extra_fonts/34px/hdf_3a.png create mode 100644 extra_fonts/34px/hdf_3b.png create mode 100644 extra_fonts/34px/hdf_3c.png create mode 100644 extra_fonts/34px/hdf_3d.png create mode 100644 extra_fonts/34px/hdf_3e.png create mode 100644 extra_fonts/34px/hdf_3f.png create mode 100644 extra_fonts/34px/hdf_40.png create mode 100644 extra_fonts/34px/hdf_41.png create mode 100644 extra_fonts/34px/hdf_42.png create mode 100644 extra_fonts/34px/hdf_43.png create mode 100644 extra_fonts/34px/hdf_44.png create mode 100644 extra_fonts/34px/hdf_45.png create mode 100644 extra_fonts/34px/hdf_46.png create mode 100644 extra_fonts/34px/hdf_47.png create mode 100644 extra_fonts/34px/hdf_48.png create mode 100644 extra_fonts/34px/hdf_49.png create mode 100644 extra_fonts/34px/hdf_4a.png create mode 100644 extra_fonts/34px/hdf_4b.png create mode 100644 extra_fonts/34px/hdf_4c.png create mode 100644 extra_fonts/34px/hdf_4d.png create mode 100644 extra_fonts/34px/hdf_4e.png create mode 100644 extra_fonts/34px/hdf_4f.png create mode 100644 extra_fonts/34px/hdf_50.png create mode 100644 extra_fonts/34px/hdf_51.png create mode 100644 extra_fonts/34px/hdf_52.png create mode 100644 extra_fonts/34px/hdf_53.png create mode 100644 extra_fonts/34px/hdf_54.png create mode 100644 extra_fonts/34px/hdf_55.png create mode 100644 extra_fonts/34px/hdf_56.png create mode 100644 extra_fonts/34px/hdf_57.png create mode 100644 extra_fonts/34px/hdf_58.png create mode 100644 extra_fonts/34px/hdf_59.png create mode 100644 extra_fonts/34px/hdf_5a.png create mode 100644 extra_fonts/34px/hdf_5b.png create mode 100644 extra_fonts/34px/hdf_5c.png create mode 100644 extra_fonts/34px/hdf_5d.png create mode 100644 extra_fonts/34px/hdf_5e.png create mode 100644 extra_fonts/34px/hdf_5f.png create mode 100644 extra_fonts/34px/hdf_60.png create mode 100644 extra_fonts/34px/hdf_61.png create mode 100644 extra_fonts/34px/hdf_62.png create mode 100644 extra_fonts/34px/hdf_63.png create mode 100644 extra_fonts/34px/hdf_64.png create mode 100644 extra_fonts/34px/hdf_65.png create mode 100644 extra_fonts/34px/hdf_66.png create mode 100644 extra_fonts/34px/hdf_67.png create mode 100644 extra_fonts/34px/hdf_68.png create mode 100644 extra_fonts/34px/hdf_69.png create mode 100644 extra_fonts/34px/hdf_6a.png create mode 100644 extra_fonts/34px/hdf_6b.png create mode 100644 extra_fonts/34px/hdf_6c.png create mode 100644 extra_fonts/34px/hdf_6d.png create mode 100644 extra_fonts/34px/hdf_6e.png create mode 100644 extra_fonts/34px/hdf_6f.png create mode 100644 extra_fonts/34px/hdf_70.png create mode 100644 extra_fonts/34px/hdf_71.png create mode 100644 extra_fonts/34px/hdf_72.png create mode 100644 extra_fonts/34px/hdf_73.png create mode 100644 extra_fonts/34px/hdf_74.png create mode 100644 extra_fonts/34px/hdf_75.png create mode 100644 extra_fonts/34px/hdf_76.png create mode 100644 extra_fonts/34px/hdf_77.png create mode 100644 extra_fonts/34px/hdf_78.png create mode 100644 extra_fonts/34px/hdf_79.png create mode 100644 extra_fonts/34px/hdf_7a.png create mode 100644 extra_fonts/34px/hdf_7b.png create mode 100644 extra_fonts/34px/hdf_7c.png create mode 100644 extra_fonts/34px/hdf_7d.png create mode 100644 extra_fonts/34px/hdf_7e.png create mode 100644 textures/hdf_20.png create mode 100644 textures/hdf_21.png create mode 100644 textures/hdf_22.png create mode 100644 textures/hdf_23.png create mode 100644 textures/hdf_24.png create mode 100644 textures/hdf_25.png create mode 100644 textures/hdf_26.png create mode 100644 textures/hdf_27.png create mode 100644 textures/hdf_28.png create mode 100644 textures/hdf_29.png create mode 100644 textures/hdf_2a.png create mode 100644 textures/hdf_2b.png create mode 100644 textures/hdf_2c.png create mode 100644 textures/hdf_2d.png create mode 100644 textures/hdf_2e.png create mode 100644 textures/hdf_2f.png create mode 100644 textures/hdf_30.png create mode 100644 textures/hdf_31.png create mode 100644 textures/hdf_32.png create mode 100644 textures/hdf_33.png create mode 100644 textures/hdf_34.png create mode 100644 textures/hdf_35.png create mode 100644 textures/hdf_36.png create mode 100644 textures/hdf_37.png create mode 100644 textures/hdf_38.png create mode 100644 textures/hdf_39.png create mode 100644 textures/hdf_3a.png create mode 100644 textures/hdf_3b.png create mode 100644 textures/hdf_3c.png create mode 100644 textures/hdf_3d.png create mode 100644 textures/hdf_3e.png create mode 100644 textures/hdf_3f.png create mode 100644 textures/hdf_40.png create mode 100644 textures/hdf_41.png create mode 100644 textures/hdf_42.png create mode 100644 textures/hdf_43.png create mode 100644 textures/hdf_44.png create mode 100644 textures/hdf_45.png create mode 100644 textures/hdf_46.png create mode 100644 textures/hdf_47.png create mode 100644 textures/hdf_48.png create mode 100644 textures/hdf_49.png create mode 100644 textures/hdf_4a.png create mode 100644 textures/hdf_4b.png create mode 100644 textures/hdf_4c.png create mode 100644 textures/hdf_4d.png create mode 100644 textures/hdf_4e.png create mode 100644 textures/hdf_4f.png create mode 100644 textures/hdf_50.png create mode 100644 textures/hdf_51.png create mode 100644 textures/hdf_52.png create mode 100644 textures/hdf_53.png create mode 100644 textures/hdf_54.png create mode 100644 textures/hdf_55.png create mode 100644 textures/hdf_56.png create mode 100644 textures/hdf_57.png create mode 100644 textures/hdf_58.png create mode 100644 textures/hdf_59.png create mode 100644 textures/hdf_5a.png create mode 100644 textures/hdf_5b.png create mode 100644 textures/hdf_5c.png create mode 100644 textures/hdf_5d.png create mode 100644 textures/hdf_5e.png create mode 100644 textures/hdf_5f.png create mode 100644 textures/hdf_60.png create mode 100644 textures/hdf_61.png create mode 100644 textures/hdf_62.png create mode 100644 textures/hdf_63.png create mode 100644 textures/hdf_64.png create mode 100644 textures/hdf_65.png create mode 100644 textures/hdf_66.png create mode 100644 textures/hdf_67.png create mode 100644 textures/hdf_68.png create mode 100644 textures/hdf_69.png create mode 100644 textures/hdf_6a.png create mode 100644 textures/hdf_6b.png create mode 100644 textures/hdf_6c.png create mode 100644 textures/hdf_6d.png create mode 100644 textures/hdf_6e.png create mode 100644 textures/hdf_6f.png create mode 100644 textures/hdf_70.png create mode 100644 textures/hdf_71.png create mode 100644 textures/hdf_72.png create mode 100644 textures/hdf_73.png create mode 100644 textures/hdf_74.png create mode 100644 textures/hdf_75.png create mode 100644 textures/hdf_76.png create mode 100644 textures/hdf_77.png create mode 100644 textures/hdf_78.png create mode 100644 textures/hdf_79.png create mode 100644 textures/hdf_7a.png create mode 100644 textures/hdf_7b.png create mode 100644 textures/hdf_7c.png create mode 100644 textures/hdf_7d.png create mode 100644 textures/hdf_7e.png diff --git a/extra_fonts/11px/hdf_20.png b/extra_fonts/11px/hdf_20.png new file mode 100644 index 0000000000000000000000000000000000000000..9beb9725bcf2271ba399a0947a3cd288a46fd526 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#2qYNxmkP}TQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OGG)5S4_<9c$!0Tu=Z z5eCMmZ5zCR!m1^%5hW>!C8<`)MX5lF!N|bSSl7@%*U%!wz`)AL)XLCO*TBTez#wP- gJ$Dohx%nxXX_dG&$R0}j4b;Hk>FVdQ&MBb@08&InRR910 literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_21.png b/extra_fonts/11px/hdf_21.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd1df510ac3a73035e7e58ce85fbef568b17534 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?)em7{YNqnIoaWfn6bm;gSObgVYix!6z$s`T?a?OI#yLQW8s2t&)pUffR$0fuXUk zp@FWUMTmicm655Hp}DSsiIstY&4Q&;C>nC}Q!>*kacl7XE4vJ+fx*+&&t;ucLK6TT C^Gm`2 literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_22.png b/extra_fonts/11px/hdf_22.png new file mode 100644 index 0000000000000000000000000000000000000000..91479b5d36494c62dcff839c0935911e896b31c6 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=1R{And7c0%mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z^K@|x;kce$kjUUD0(A5OhO_=2rzZhrR7+eVN>UO_QmvAUQh^kMk%6JHuAzahp+$&+ vft8V|m7%$=fr*uYfz5)YQYad7^HVa@DsgM@{VTf+sDZ)L)z4*}Q$iB}`$9;* literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_23.png b/extra_fonts/11px/hdf_23.png new file mode 100644 index 0000000000000000000000000000000000000000..9f17de9dc71a1b9b304e51052e74c55fcafb8199 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ##0(@~B^+M>q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdE z>Eal|aXmR9Awhs;@dXBhmj@mkVsJ`eV31>D{Pyoluo6&_YKdz^NlIc#s#S7PDv)9@ zGB7mOH8jvQviAx2?#D_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8HDfoOt2VM0O*gW@y>Hb+6Wb_O<}tuhxF&)O-LtOu%9Epd$~Nl7e8 zwMs5Z1yT$~28PDEh6cKZ79j=(Rz{{)hUU5kCRPRpHVc+Yp=ij>PsvQH#I3>iuk13Q O1_n=8KbLh*2~7a25lvPA literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_26.png b/extra_fonts/11px/hdf_26.png new file mode 100644 index 0000000000000000000000000000000000000000..258362e6a3b57b88afbbc4cc95fa792683dfd532 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8H3v&#U*>aF8RZCnWN>UO_QmvAU zQh^kMk%6JHuAzahp+$&+ft8V|m7%$=fr*uYfz5)YQYad7^HVa@DsgM@{VTf+sDZ)L L)z4*}Q$iB}OWR9} literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_27.png b/extra_fonts/11px/hdf_27.png new file mode 100644 index 0000000000000000000000000000000000000000..6bfd9dfc2f8ebeae6c1356ef6c2686a52c4ec63d GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEr2qYM0+@4$pq*&4&eH|GXHuiJ>Nn{1`8HOSQx`q9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS{a(@8kkra7|go9 gZXJq--29Zxv`X9>UU!KJ0W~mqy85}Sb4q9e03EeOt^fc4 literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_28.png b/extra_fonts/11px/hdf_28.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2db5b50e696eebe9f25a95395f4605fcbcb10b GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=1R{And7c0%mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z^>lFz;kcfhkSLHSkigO4#Hi5E%D}&capJiyom)T!swJ)wB`Jv|saDBFsX&Us$iUE8 z*U&)M&?3aZz{<$f%FtZbz{JYHz-GZxDHIL4`6-!cmAEzd{*_$@)WG2B>gTe~DWM4f DFfU65 literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_29.png b/extra_fonts/11px/hdf_29.png new file mode 100644 index 0000000000000000000000000000000000000000..6d6d2360f351966315c55a785f85107f4128257e GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=1R{And7c0%mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z^>lFz;kce$kid~3kRZ_L#Hetdk%4~;rswJ)wB`Jv|saDBFsX&Us$iUE8 z*U&)M&?3aZz{<$f%FtZbz{JYHz-GZxDHIL4`6-!cmAEzd{*_$@)WG2B>gTe~DWM4f D=Qc`M literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_2a.png b/extra_fonts/11px/hdf_2a.png new file mode 100644 index 0000000000000000000000000000000000000000..4bdc0bde32e85790b9eaeba6c20b9a85c23e287d GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=1R{And7c0%mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z@N{tu;kce$kSLH)km$h3z@@`5Q$SwR0w||i;u=wsl30>zm0Xkxq!^4042^XS4Rj4H xLJSP7j7+Tz&2q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdH z>Eal|aXmSKfjP{8i?_ijfq{WXoMG2dRkLKEv}%cKL`h0wNvc(HQ7VvPFfuSS)-^QH zHM9sZFt9Q*wK6o5yZhlH;S|x4`zJFzx0W~mqy85}Sb4q9e09h7F A5C8xG literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_2c.png b/extra_fonts/11px/hdf_2c.png new file mode 100644 index 0000000000000000000000000000000000000000..ec58588fa313acba03787348f9c58e7068900fb2 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?WGi7{YNqIl+O6(Lv+D1EBL<7(T`}c8LNdRZCnWN>UO_QmvAUQh^kMk%6JHuAzah zp+$&+ft8V|m7%$=fr*uYfz5)YQYad7^HVa@DsgM@{VTf+sDZ)L)z4*}Q$iB}Y@uJR22WQ%mvv4FO#qCmN^$@I literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_2e.png b/extra_fonts/11px/hdf_2e.png new file mode 100644 index 0000000000000000000000000000000000000000..3e09f2d1a20a499e2da7de0b9623980c7a7d40a7 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!SCtf7{YNqIl+O6(Sd`7f%yu!C8<`)MX5lF!N|bSSl7@% z*U%!wz`)AL)XLCY*TBTez`$m~QYjP-x%nxXX_dG&`2Lk$2Gqdd>FVdQ&MBb@0Pw&{ A@c;k- literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_31.png b/extra_fonts/11px/hdf_31.png new file mode 100644 index 0000000000000000000000000000000000000000..bd592f6df4c98b85dc4265247bd256e1e9d79130 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=1R{And7c0%mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z^mK6y;kceGkjRlJ;MnBAz`%Wl;o-igr#=BCRZCnWN>UO_QmvAUQh^kMk%6JHuAzah zp+$&+ft8V|m7%$=fr*uYfz5)YQYad7^HVa@DsgM@{VTf+sDZ)L)z4*}Q$iB}lb}mE literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_32.png b/extra_fonts/11px/hdf_32.png new file mode 100644 index 0000000000000000000000000000000000000000..ef92227802b0ac8a9af070dfb8fa38efa0824703 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5kgbh@tu26^4QQ##N+xybH&;RKRxNRjC`m~yNwrEY zN(E93Mh1q)x`qb2h87_P23AIcptHiCr_pj_Spaup{ LS3j3^P6q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdC z>Eal|aXmSqAR(b7A)z!upd_K7B!PpMp|FvIhe7Wq(*a}A6Z?QFRZCnWN>UO_QmvAU zQh^kMk%6JHuAzahp+$&+ft8V|m7%$=fr*uYfz5)YQYad7^HVa@DsgM@{VTf+sDZ)L L)z4*}Q$iB}HDyp7 literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_35.png b/extra_fonts/11px/hdf_35.png new file mode 100644 index 0000000000000000000000000000000000000000..4935914e2425fb23fbdbb64e68788e7495f84d2c GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5%}(13OzF8wUe}g(=hL!UvyL0F|nixJHzuB$lLF zB^RXvDF!10Lt|Y-16@Ol5Ca1%BU39wb6o=yD+2?Y1xuw+H00)|WTsW(*5LbBb{S9u NgQu&X%Q~loCIHjiOwj-U literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_36.png b/extra_fonts/11px/hdf_36.png new file mode 100644 index 0000000000000000000000000000000000000000..040b919dd4bd65788c2c59af50504364f80cbf1d GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5FMGa!f`!WAT@!bB!MF#frHgpfkT6Xjlry*S!8Rj&nloI)e_f;l9a@fRIB8oR3OD* zWMF8lYiOWrXc1yyU}a=#WoWKzU}9xpV6$MU6pDu2{FKbJO57TJ|H>`{YGCkm^>bP0 Hl+XkKwQ)*h literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_37.png b/extra_fonts/11px/hdf_37.png new file mode 100644 index 0000000000000000000000000000000000000000..83387757bfed62c5b42bfbd915e1af874a06d20e GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5XqWt7#<;C=Vju%mOI#yLQW8s2t&)pUffR$0fuXUk zp@FWUMTmicm655Hp}DSsiIstY&4Q&;C>nC}Q!>*kacl7XE4vJ+fx*+&&t;ucLK6TA Cl1d2x literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_38.png b/extra_fonts/11px/hdf_38.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9b7eb41575ba05499904871e79b6bcfac3873e GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5I-tC2iEBhjN@7W>RdP`(kYX@0Ff`UR zG|)A)2r)3QGBUL?G}kpSu`)2QS+Gl&C?85r0sSSp30AvZrIGp!Q02H(H3%YYgfJYD@<);T3K F0RXTyNY(%V literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_3a.png b/extra_fonts/11px/hdf_3a.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e4992b957fe7e3c8cac9ca113f45f1421b33b3 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!SCtf7{YNqIf0>xLBVAaBhM5@$AgCr`+!oaC9V-ADTyViR>?)FK#IZ0z|dIN&_LJF yBE-PJ%E;8p&|KHR#LB?HX2DV^6b-rgDVb@NxHb6xm0bqZz~JfX=d#Wzp$P!%o=Tzs literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_3b.png b/extra_fonts/11px/hdf_3b.png new file mode 100644 index 0000000000000000000000000000000000000000..7977b430cbf95bfcb38c8641c6c9ac9bc5b9e3ed GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>`@e7{YNqIf0>xL80X$6AvE)FAL*DwML&eKv~ri*NBpo#FA92wo1c=IR*74K?_b$vKn)C@u6{1-oD!M< D&|FIu literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_3d.png b/extra_fonts/11px/hdf_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..abe0da46a320cb0c4bbb2d6861a581e79ccaf07a GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5vSQ!}DELbXqq9HdwB{QuOw+7$8vde%P7(8A5T-G@yGywoaAV^FA literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_3e.png b/extra_fonts/11px/hdf_3e.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b52e4d39a56b1a293095452d9de149cbad3fd4 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~#0(_gO%cptHiCr_pj_Spaup{S3j3^P6_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8H4KCh94gp3*pmnD5%o>{edNu+Tsg}4#l%ynUftDnm{ Hr-UW|5;RJB literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_42.png b/extra_fonts/11px/hdf_42.png new file mode 100644 index 0000000000000000000000000000000000000000..cc363f8f2b30eec57fe774b3a1a4defb82d4b18a GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ##0(@~B^+M>q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grd7 z>Eal|aXp!%G=YPILD7Qw5F0Z?_-&R4a&sMk_A;oJxJHzuB$lLFB^RXvDF!10Lt|Y- z16@Ol5Ca1%BU39wb6o=yD+2?Y1xuw+H00)|WTsW(*5LbBb{S9ugQu&X%Q~loCICGb BORN9@ literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_43.png b/extra_fonts/11px/hdf_43.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce2e3bce978a14ce3953318f926f135ad225eeb GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8Hq*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdJ z>Eal|aXpzMHG!iffrGeE-TW18QLKboFyt=akR{ E0D~z@7ytkO literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_45.png b/extra_fonts/11px/hdf_45.png new file mode 100644 index 0000000000000000000000000000000000000000..8d04c19249e9f0f0fe23bfbcc157836c8ac25f36 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5RdP`(kYX@0Ff`UR zG|)A)2r)3QGBUL?G}kpSu`)2QS+G_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8H>SQ!|cdU5qLiiX_$l+3hB+!}Uo&GiRr OVDNPHb6Mw<&;$VQ?@sdo literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_48.png b/extra_fonts/11px/hdf_48.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ec509197745d72ace390dce5ba5cc550d0fcf1 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ##0(@~B^+M>q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdH z>Eal|aXp!XBcWkIfCO{X0S1PsCRVmrQ*UhqN~@N*MwFx^mZVxG7o`Fz1|tJQV_ic7 zT|}#<1A|j9u6{<*kei>9nO2Eg!|tuQ{y+^3p00i_>zopr02Lfg A%m4rY literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_49.png b/extra_fonts/11px/hdf_49.png new file mode 100644 index 0000000000000000000000000000000000000000..59a8c931e75c6718fb2f9dd437876b6a41a8faa6 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!RP7X7{YNqnIplW)q#OQPK2rPo<`^gpp0sXYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FO xF)*+)GPN?a&^0izGB7yx;_7D<4Y~O#nQ4`{HSFG+>krhx;OXk;vd$@?2>|XROaK4? literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_4a.png b/extra_fonts/11px/hdf_4a.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e9c52aec6ffc4e95c08c799d5b8093eb4007f3 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5c!R1C>nC}Q!>*kackJUHP;`gfx*+&&t;ucLK6T} CYfMuB literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_4b.png b/extra_fonts/11px/hdf_4b.png new file mode 100644 index 0000000000000000000000000000000000000000..915a154c0f2fc913ecace262f9f176f91475a8c3 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8HXrqAvZrIGp!Q0hTU6p{ec=7 NJYD@<);T3K0RW93PfP#+ literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_4c.png b/extra_fonts/11px/hdf_4c.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f88f5623784b4bceef4d76b0d36504effd8f2e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5P9XmmPQjlvOQpjVMV;EJ?LWE=mPb3`Pcq#=3?E zx`q}Z1_o9}rdEa)x&|gz1_q~IT>XrqAvZrIGp!Q0hTU6p{ec=7JYD@<);T3K0RW-P BO~e2I literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_4d.png b/extra_fonts/11px/hdf_4d.png new file mode 100644 index 0000000000000000000000000000000000000000..f8a3d6eb8a7473c3701fe6fb866c93e30fdfed9b GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRQ#0(^*v*+jnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI(PcARv&v&B0ND56CNMNzhc!R1C>nC}Q!>*kackJUHP;`g Ofx*+&&t;ucLK6U#aZwKd literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_4e.png b/extra_fonts/11px/hdf_4e.png new file mode 100644 index 0000000000000000000000000000000000000000..6e13cba1513ee112597274eb0db016de297900dd GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8H_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8H0A~V+fTMzfxCRFsg9$U!WAU#u@_q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdF z>Eal|aXp!%G=YPoK}ldXW7h!&2EQlFzfU_^Z3ik)Epd$~Nl7e8wMs5Z1yT$~28PDE zh6cKZ79j=(Rz{{)h8DU8CRPRpr(RtBjG`eoKP5A*61RrkTXX$^8W=oX{an^LB{Ts5 DtXEG{ literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_51.png b/extra_fonts/11px/hdf_51.png new file mode 100644 index 0000000000000000000000000000000000000000..8f100b3c26bdc168ba5dc582429cabdec3e06b0e GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8H0A~V+K;t3@L4oO}4ULVhjg5>9CKH){l$-pV4^*jI;u=wsl30>z zm0Xkxq!^4042^XS4Rj4HLJSP7j7+TzEp!b`tPBiJy}0@rMMG|WN@iLmZVkJ)=K2FQ OFnGH9xvXq*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdH z>Eal|aXp!%G=YPoK`F&df`K8zh2{0T!yXzyY1Iq*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdG z>Eal|aXnd}G=YO7fg>@2!AOExLWap9MnRf~!R7~ZX+cMa3s9kIiEBhjN@7W>RdP`( zkYX@0Ff`URG|)A)2r)3QGBUL?w9qv$u`)0?_2TMh6b-rgDVb@NxHatFn(GhLz~JfX K=d#Wzp$P!EnogVm literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_54.png b/extra_fonts/11px/hdf_54.png new file mode 100644 index 0000000000000000000000000000000000000000..4910cdc67a7dd938531fe969b6fe095cbab53f20 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ##0(@~B^+M>q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdD z>Eal|aXp!XHz6VQK+^#R29Zk)Cmnioffg~SmbgZgq$HN4S|t~y0x1R~14Cn7Ljzqy yix2|?Dq*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grd9 z>Eal|aXp!XBjJF{B0io328Qr!EZhFA@a6%^s+PD$l%yn_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8HjigcrMK?AM1_mQ@rUt#K;yFMyswJ)wB`Jv|saDBFsX&Us z$iUE8*U&)M&?3aZz{<$f%FsgBz{JYH;M9w&pHVdA=BH$)RpQpLduy&gPy>UftDnm{ Hr-UW|0&z>V literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_57.png b/extra_fonts/11px/hdf_57.png new file mode 100644 index 0000000000000000000000000000000000000000..0c022ea3404b7849946cfc1535882a627462b76e GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2hGm!icqpk;}SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z*3-o?gyVWL2M0$&L*hgSb^|fq(u9Q6REA^?28M2BmYY4Nd`p1}RZCnWN>UO_QmvAU zQh^kMk%6JHuAzahp+$&+ft8V|m7#^Mfr*uY!KoKlKci^K%}>cptHiBg_tsp0paup{ LS3j3^P6_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8HwlH=9CL;x<1O^5ZW~Rq;o&THxDpDXrqAvZrIGp!Q0hTU6p{ec=7JYD@< J);T3K0RYAuO&$OM literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_59.png b/extra_fonts/11px/hdf_59.png new file mode 100644 index 0000000000000000000000000000000000000000..3e02cee1f1b3ef7cc61f20a518dbf076d8971c33 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)#0(_Ato$wvq*&4&eH|GXHuiJ>Nn{1`8H)X&^pz-Ov1jV?eBn!R7+eVN>UO_QmvAUQh^kM zk%6JHuAzahp+$&+ft8V|m7#^Mfr*uY!KoKlKci^K%}>cptHiBg_tsp0paup{S3j3^ HP6q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdK z>Eal|aXp!XHz9!|A)zE8AvHk&h!{UgI5a6RFlh5LMM=~>)&(k6Epd$~Nl7e8wMs5Z z1yT$~28PDEh6cKZ79j=(Rz{{)h8DU8CRPRpr(RtBjG`eoKP5A*61RrkTXX$^8W=oX L{an^LB{Ts5_fk+z literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_5b.png b/extra_fonts/11px/hdf_5b.png new file mode 100644 index 0000000000000000000000000000000000000000..70b5cf7ce39de5293389581a14a91a628adc10a8 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=1R{And7c0%mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z^K@|x;kcg6k;viDtjHk0gjw^oI2*_%swJ)wB`Jv|saDBFsX&Us$iUE8*U&)M&?3aZ vz{<$f%FsgBz{JYH;M9w&pHVdA=BH$)RpQpLduy&gPy>UftDnm{r-UW|N^VMD literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_5c.png b/extra_fonts/11px/hdf_5c.png new file mode 100644 index 0000000000000000000000000000000000000000..2172db1378e108eca06481b68d44704066215fd1 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~#0(_gO%}#<1A|j9u6{<*kei>9nO2Eg!|tuQ{y+^3p00i_>zopr E09d?Cy8r+H literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_5d.png b/extra_fonts/11px/hdf_5d.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bc44472821be8b22c8851309de66bb8acfe053 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=1R{And7c0%mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z^K@|x;kcg6ktpEUtjNIggweBBd_pNuMzzE>q9i4;B-JXpC>2OC7#SEE>lzy98d`)H w7+4vZS{YjC8kkra7@T@>^)rfw-29Zxv`X9>c5lt~2WnvOboFyt=akR{07=eDTL1t6 literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_5e.png b/extra_fonts/11px/hdf_5e.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc550b60d78491aadd7a3158c58ece797de395d GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~#0(_gO%UO_QmvAUQh^kMk%6JHuAzah zp+$&+ft8V|m7#^Mfr*uY!KoKlKci^K%}>cptHiBg_tsp0paup{S3j3^P6q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9gxB6 z>Eal|aXmTV0Iw4>1EU1PveW<7RskhcOI#yLQW8s2t&)pUffR$0fuXUkp@FWUMTmic um655Hp@pu2iIsuDsTWs2qiD#@PsvQH#I0fX)?9y}1_n=8KbLh*2~7a@1x#ZA literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_60.png b/extra_fonts/11px/hdf_60.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd8d765b9e61eb78f933b688215301232da5c18 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!Q<)T7{YNqSs>v6P`L|(pzGSR1we7t64!{5l*E!$tK_0oAjM#0U}&ssXrOCo5n^Cq uWn^k)XrXIhVr5`(>c!R1C>nC}Q!>*kackJUHP;`gfx*+&&t;ucLK6T*u1iJ$ literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_61.png b/extra_fonts/11px/hdf_61.png new file mode 100644 index 0000000000000000000000000000000000000000..8d03ce2242611335abe9938acc9025c8eda2ebc5 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ##0(@~B^+M>q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdI z>Eal|aXmSKfjN+k&7GYskiE^pK!~$}gPB2bGgA@w1DDA_WvV5v5hW>!C8<`)MX5lF z!N|bSSl7@%*U%!wz`)AL)XLC8*TBTez~I!2tDjLcmdK II;Vst0PfXIxBvhE literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_62.png b/extra_fonts/11px/hdf_62.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb795b03434c0fa1703e13fbb9d6df786d178d2 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5-(Ln|V+wIK#4DG5QC#jaWMwFx^mZVxG7o`Fz1|tJQ zV_ic7T|}#<1A|j9u6{<*kei>9nO2Eg!|tuQ{y+^3p00i_>zopr E07R}$NB{r; literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_63.png b/extra_fonts/11px/hdf_63.png new file mode 100644 index 0000000000000000000000000000000000000000..cb07be70aaa3cd3b388ac20a7f0d6e803be0dd08 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~#0(_gO%E8WC_UP1d>rRj8J@MwFx^mZVxG7o`Fz1|tJQ zV_ic7T|}#<1A|j9u6{<*kei>9nO2Eg!|tuQ{y+^3p00i_>zopr E0C9Fq@&Et; literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_64.png b/extra_fonts/11px/hdf_64.png new file mode 100644 index 0000000000000000000000000000000000000000..9f153a8458f6584e0e30ca7aef2be61212076ed2 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz56C;CV9dqH7Od+5G2GtVRh?11Vl2ohYqEsNoU}Ruu ztZQhXYiJQ-U|?lrYGr7lYhYq!U~uZi)z2sza`RI%(<*Um*u6E^A7q86tDnm{r-UW| D)?!Sf literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_65.png b/extra_fonts/11px/hdf_65.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ad60e8c3e52b43a8a8c18f720598934adc0e83 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5 AXaE2J literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_67.png b/extra_fonts/11px/hdf_67.png new file mode 100644 index 0000000000000000000000000000000000000000..144321b8105afb0fa6502efc88aecd8ba804a453 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5q0hOqhxJHzuB$lLFB^RXvDF!10 zLt|Y-16@Ol5Ca1%BU39w3ta;fD+7a5FRp$@(U6;;l9^VCTf^?Hx&A;644$rjF6*2U FngBPsO)3BY literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_68.png b/extra_fonts/11px/hdf_68.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fa6dd84a491f0590f14147009db13ca1bbea35 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5gnPb!f`#BBO!rdQ2<+;1G@+d8-sl~^XXG3oqqrosFt`!l%ynI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?WGi7{YNqnIj<~fy1H6fq_Bd2$P|J>M3EMq-u$4L`h0wNvc(HQ7VvPFfuSS)-^QH zHM9sZFt9Q*wKBBOH88OSq)Ux%nxXX_dG&?B1H|57fZm>FVdQ&MBb@0Bk`^ A=>Px# literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_6a.png b/extra_fonts/11px/hdf_6a.png new file mode 100644 index 0000000000000000000000000000000000000000..ba82b27523e0baabe0f400262d25344653eeb73b GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>ira7{YNqnIj<~fy1GZk3sSa)4^vhv*dwtswJ)wB`Jv|saDBFsX&Us$iUE8*U&)M z&?3aZz{<$f%FsgBz{JYH;M9w&pHVdA=BH$)RpQpLduy&gPy>UftDnm{r-UW|-2hET literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_6b.png b/extra_fonts/11px/hdf_6b.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac75f463b1ba191da3b46b3c1c1a1d78c233643 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ##0(@~B^+M>q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdG z>Eal|aXpzMA%S6$1AAKlTblrz0A~t2L#qP=gXKKtM3vW`?)F zK#IZ0z|dIN&_LJFBE-PJ%E;8p&_dV1#LB?n)QhX1Q8eV{r(~v8;?}TxYpy>~1B0il KpUXO@geCw2&QBx& literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_6c.png b/extra_fonts/11px/hdf_6c.png new file mode 100644 index 0000000000000000000000000000000000000000..59a8c931e75c6718fb2f9dd437876b6a41a8faa6 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V#0(@KccI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!RP7X7{YNqnIplW)q#OQPK2rPo<`^gpp0sXYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FO xF)*+)GPN?a&^0izGB7yx;_7D<4Y~O#nQ4`{HSFG+>krhx;OXk;vd$@?2>|XROaK4? literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_6d.png b/extra_fonts/11px/hdf_6d.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2f99dd46960f50318dfabc141e26adbc15579a GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)#0(_Ato$wvq*&4&eH|GXHuiJ>Nn{1`8HBF@)oKasmT$xL}(@xCjdygZ>s~kE(<{Am^x-xJHzuB$lLFB^RXvDF!10Lt|Y- z16@Ol5Ca1%BU39w3ta;fD+7a5FRp$@(U6;;l9^VCTf^?Hx&A;644$rjF6*2UngChp BO-TR% literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_6e.png b/extra_fonts/11px/hdf_6e.png new file mode 100644 index 0000000000000000000000000000000000000000..51da9cfa03e16d9262d67c1324e4dd370e4783dc GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5B;^;PKxx$y*NBpo#FA92E`ZYeY#(Vo9o1a#1RfVlXl= zG}bjV&^5FOF)*+)GPN?a&^0izGB7yx;_7D<4Y~O#nQ4`{HSFG+>krhx;OXk;vd$@? F2>^dRORfL_ literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_71.png b/extra_fonts/11px/hdf_71.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d7ab8496bfa90f41aa7b1151c2d67fa5e9b6aa GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5XrqAvZrIGp!Q0hTU6p{ec=7JYD@<);T3K0RV{A BOdkLM literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_73.png b/extra_fonts/11px/hdf_73.png new file mode 100644 index 0000000000000000000000000000000000000000..945ceea72ae342e9aa7a0657281f93ed3be620ed GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z^>lFz;kcg6kpP5=91Tu_YzhnvvMNlTr>~lp0Trm0xJHzuB$lLFB^RXvDF!10Lt|Y- z16@Ol5Ca1%BU39wOI-sKD+7a^`S;vWH00)|WTsVO(O?15uzPE+KTrdMr>mdKI;Vst E0E6O5`2YX_ literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_75.png b/extra_fonts/11px/hdf_75.png new file mode 100644 index 0000000000000000000000000000000000000000..aa5f0d3e978c6b970a545f0f97f5a021743183f7 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5FMGa!f`!0fuY%fT|+1(K_E3Dp|Qh=fkD}y@t#bP0 Hl+XkKg7Hj< literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_77.png b/extra_fonts/11px/hdf_77.png new file mode 100644 index 0000000000000000000000000000000000000000..30e095a2c153bff2cea5dfb464d44c6205932684 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L#0(@^7p<8Gq*&4&eH|GXHuiJ>Nn{1`8Hb_++<@|`C9V-ADTyViR>?)FK#IZ0z|dIN z&_LJFBE-PJ%E;8p&{EgH#LB=RXZ}5R6b-rgDVb@NxHZTgO8X7ez~JfX=d#Wzp$PzE CDN9iR literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_78.png b/extra_fonts/11px/hdf_78.png new file mode 100644 index 0000000000000000000000000000000000000000..e177f73b72061c702a7de49f4ac651d66ed34088 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ##0(@~B^+M>q*&4&eH|GXHuiJ>Nn{1`8HO>_45U54*zIJt9grdA z>Eal|aXmSKp}B#9Es&ipj7@+ug;`L7fkCC0X~N1gLIFTkswJ)wB`Jv|saDBFsX&Us z$iUE8*U&)M&?3aZz{<$f%Ft5Rz{JYHAZPwPcN7h|`6-!cmAEy?9!mQS)WG2B>gTe~ HDWM4fV;D?V literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_79.png b/extra_fonts/11px/hdf_79.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c9f429c0e37a3cd9033a50fb38951a4a2022ac GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5@8pOPc@y literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_7b.png b/extra_fonts/11px/hdf_7b.png new file mode 100644 index 0000000000000000000000000000000000000000..6f135e1cc8447bf1120c254c3e6db05ab972d948 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEr2qYM0+@4$pq*&4&eH|GXHuiJ>Nn{1`8HOSQx`q9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS{a(_8kkra7}zXW gDutpUH$NpatrE8e-@mfUfEpM)UHx3vIVCg!0M{Et?f?J) literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_7c.png b/extra_fonts/11px/hdf_7c.png new file mode 100644 index 0000000000000000000000000000000000000000..15596be10837f704f05afeff549552d99e5c6c74 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrA$P6U?WtMRQDVB6cUq=Rpjs4tz5?MhCii6yp z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaffh zPlzj!W@uoT_e2q>nt?IN+ueonKa=h~AcwQSBeEDsdw{Xq$!t3ygWJ=^F@)oKa>4-? z1_luZ#;0u?ynw>0C9V-ADTyViR>?)FK#IZ0z|dIN&_LJFBE-PJ%E;8p&{EgH#LB=R iXZ}5R6b-rgDVb@NxHZTgO8X7ez~JfX=d#Wzp$Py3hD6~2 literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_7d.png b/extra_fonts/11px/hdf_7d.png new file mode 100644 index 0000000000000000000000000000000000000000..f6663f29fd821d4559d39cfbdb42a0b918cc46de GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~#0(_gO%x9&S4t5hXfcHxZg7xef%!-7bvY-;u=wsl30>zm0Xkxq!^4042^XS z4Rj4HLJSP7j7+TzEp-h{tPBit=HGKi(U6;;l9^VCTZ8POwBJAt44$rjF6*2UngG`C BOjQ5? literal 0 HcmV?d00001 diff --git a/extra_fonts/11px/hdf_7e.png b/extra_fonts/11px/hdf_7e.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7592036716330e6a2a9e5547c48c06013ae711 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g#0(@E!)q1;DVB6cUq=Rpjs4tz5!C8<`)MX5lF!N|bSSl7@% z*U%!wz`)AL)XLCO*TBTez#wP-J$Dohx%nxXX_dG&$R0}j4b;Hk>FVdQ&MBb@073Uk AQUCw| literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_20.png b/extra_fonts/17px/hdf_20.png new file mode 100644 index 0000000000000000000000000000000000000000..11e46a9b2cbc22526eca61e1a2dc97871fefbb32 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa2qYNfHs4qPq*&4&eH|GXHuiJ>Nn{1`8Hv0}~)=7~yS> dq9HdwB{QuOw+08+&)q-`44$rjF6*2UngDiyL*f7c literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_21.png b/extra_fonts/17px/hdf_21.png new file mode 100644 index 0000000000000000000000000000000000000000..bb60da9872e08ea52b5b9fded883b5a7463f665c GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?)em7{YNqnIpl$f!!d5Ve>%-2HQAhN8e&qAd5k@#5JNMC9x#cD!C{XNHG{07#iyu z8t58YgculD8JSs`TId>>SQ!{BotgmhH9|vfeoAIqC2kE@PTbfA)WG2B>gTe~DWM4f Dipfj# literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_22.png b/extra_fonts/17px/hdf_22.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f7fa970b8c15a1ef4206711ef1e845a199734d GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z$kW9!gyVWLM@d410wX({69a?)2__cHpq_6)S=AEPh?11Vl2ohYqEsNoU}RuutZQhX zYiJQ-U|?lrW@T!jYhYq!V6b#*0?5+{4Y~O#nQ4`{HC#DyV;fKdgQu&X%Q~loCIF literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_23.png b/extra_fonts/17px/hdf_23.png new file mode 100644 index 0000000000000000000000000000000000000000..09f5fbd9a56ccec753d965e2c7989edf3fab8b4e GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2TG_7{YNqIiVyqp&{{N0J}k&Xd=Vo3jrKroDK;p3=AutvfPY3(|R1JR<*=6q9i4; zB-JXpC>2OC7#SEE>lzy98d`)H7+4vZS(#es8kkra7%ZKd015(xhTQy=%(P0}8m^qU Ru??t!!PC{xWt~$(698ljQbzy) literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_24.png b/extra_fonts/17px/hdf_24.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce9de076796b7b125aedad27e27abd97f7493b5 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z=y?)FK#IZ0z|dIN&_LJFBE-PJ%E-*h)I!(5#LB>6>C^;Ja3D0~ b=BH$)RpQog<;0C`Kn)C@u6{1-oD!M<$dpfK literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_25.png b/extra_fonts/17px/hdf_25.png new file mode 100644 index 0000000000000000000000000000000000000000..effd5156ed57edc5d71105ffdefdcd62b8e579fe GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm?3?!X=*FFJKEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YhS zC&U#VV&}Xgj7Z$9vvkICj}7?4lAamvW_jx6HcFC znB>67@Z=IJ8&6ebDbNVj64!{5l*E!$tK_0oAjM#0U}&ssXrOCo5n^CqWn^Y$YN2aj nVr5{kbZP=9WDpv1^HVa@DsgMLa^l7|paup{S3j3^P6&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z`kpS1Asp9}6L=F61b7n@1Oyus1m<5=Y;ZI&Xi!wR(x~V#g|WxAF(=G@feI4?!?u&G z^FD3r%>ZguEpd$~Nl7e8wMs5Z1yT$~28PDEh6cKZ79j=(Rz_x4rWU#eCRPRpOQ$A) gLII&6H$NpatrE9}D<^Jj18QLKboFyt=akR{0ACYVhX4Qo literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_27.png b/extra_fonts/17px/hdf_27.png new file mode 100644 index 0000000000000000000000000000000000000000..dbad65e88d66cb3d383fce0c2ed1e7a34c0f7910 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^NO>_45U54*zIJt9gxA}>Eal|aXmRy4NR;I41(_p fJVw!wo1c=IR*74KQp1XPpaup{S3j3^P6kK($jwj5OsmAL;mU~{+khGvJYD@<);T3K F0RR-eO&9HpKw`qt1|^4&3=9&1jPnY;&TIlIP%UwdC`m~yNwrEYN(E93Mh1q) zx`qb2h87_P23AI9R;CuZ1}0Vp21}9nO2Eg!<7>^wgELTc)I$ztaD0e F0su4sO=$oC literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_2a.png b/extra_fonts/17px/hdf_2a.png new file mode 100644 index 0000000000000000000000000000000000000000..0481e537b671870bd99faf93ebea292636ab6e23 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z+|$J|gyVX0LSjNeVS+#^gCaXS+a3l6?K(!|Juc17Kqaart`Q|Ei6yC4$wjF^iowXh z&{)^dK-bVB#K6GH$jr*rLf62=%D`ah)C7>v5gKyyQ!>*kacj78;>I?h1_n=8KbLh* G2~7Z0yG*(O literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_2b.png b/extra_fonts/17px/hdf_2b.png new file mode 100644 index 0000000000000000000000000000000000000000..111cff5fcecda621656a958a9866213e84706cde GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?E4g7{YNqIl+Ochc7@xip!}$kB5Q5I*93ZC!^#vpbFIz*NBpo#FA92I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?WGi7{YNqIpF{kQ$qj)hb#l@Jw`^qPmLgzswJ)wB`Jv|saDBFsX&Us$iUE8*U&)M z&?3aZz{<$X%G5&Fz{JYHVCmEZke?A6a`RI%(<*UmxN_pgHlPLuPgg&ebxsLQ01<^t Ar~m)} literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_2d.png b/extra_fonts/17px/hdf_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..e3fa218d5eaa7504504c745d3f96a90234cfc93b GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%> z-_yl0gyVX0f&=41hYl77&Mb!2f}vs{N2`{&MwFx^mZVxG7o`Fz1|tJQV_ic7T|XIT>}#<1B0bg6F@#jXvob^$xN%nt>Mav8{2>y7(8A5T-G@yGywp0;YpML literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_2e.png b/extra_fonts/17px/hdf_2e.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7df9b8b68f1356ac347129f8cb7452e93808f8 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!SCtf7{YNqIpF{kQ-c5x1FIav!pF_Nvw%{nC9V-ADTyViR>?)FK#IZ0z|dIN&_LJF zBE-PJ%E-*h)I!(5#LB>6>C^;}j}aPj^HVa@DsgMLa^l7|paup{S3j3^P618w9#&lnQDUfl(#PPN1}q9i4;B-JXpC>2OC z7#SEE>lzy98d`)H7+4vZS(#es8kkra7%ZKd0P;RULvDUbW?Cg~4OdRw*ap?pbO%wnC literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_30.png b/extra_fonts/17px/hdf_30.png new file mode 100644 index 0000000000000000000000000000000000000000..66fb225f4ee75c48e8d278e200a9c0efdecb16af GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?xYl7{YNqIe|ApfH#ptFqI?0)!o5yfk*%&4+BHVaTeb@mS^jL3RO#7BT7;dOH!?p zi&B9UgOP!uv96(kuAxPUfq|8gnU$%9u7Qb_fx*(L2_XL?H00)|WTsW()^O#-jcq^; N44$rjF6*2UngBd>PI&+T literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_31.png b/extra_fonts/17px/hdf_31.png new file mode 100644 index 0000000000000000000000000000000000000000..3f179f71c1d27729d6ea2ed964e43f230af2cb1f GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z)YHW=gyVX0LP0`8NdgC}vYQMC8$-r^<}FVZey{))sFt`!l%ynkK($jwj5OsmAL;mU~{+khGvJYD@<);T3K F0RR&ROz;2z literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_32.png b/extra_fonts/17px/hdf_32.png new file mode 100644 index 0000000000000000000000000000000000000000..bf63f29b4156e1ab1b7a9d7bfe3532759b9c3239 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3-G87{YNqIe|ApfH#ptFqI>LRgo=_txbUK7z0}vyMVEYNJ|0(L(Uu)E3spj!+}~< zOI#yLQW8s2t&)pUffR$0fuXUkp@FWUMTmicm64g1sfDhAiIsuD(y0lckU(h2%}>cp YtHiD0%847>fEpM)UHx3vIVCg!0C&t!d;kCd literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_33.png b/extra_fonts/17px/hdf_33.png new file mode 100644 index 0000000000000000000000000000000000000000..bb761cacbb58b5209ae7a5b0c707129b1ce5fa0d GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3Y@47{YNqIe|ApfH#ptFqI=AH9;UXfrn9%%|Kj(V+xa210zG4C-d2q`FxEa4JED- zB`Jv|saDBFsX&Us$iUE8*U&)M&?3aZz{<$X%G5&Fz{JYHVCmEZP&gnozopr0Pz4%4gdfE literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_34.png b/extra_fonts/17px/hdf_34.png new file mode 100644 index 0000000000000000000000000000000000000000..235269fd5eb56a392e165f154ad765b7b9bdfe50 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2TG_7{YNqIe{ZFfhRFRlu=R8fJ-2egO^p2O;DnVi6P`Yv%>18Pfzopr0DqQE_W%F@ literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_35.png b/extra_fonts/17px/hdf_35.png new file mode 100644 index 0000000000000000000000000000000000000000..22ddf24d0ace83c40c045b4b911bd223dff77850 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3r467{YNqIe|BoL6J>Bh&MriH&H+!wc&%ai(||+1~v%>2Cqv@kBcrJlLRVPEpd$~ zNl7e8wMs5Z1yT$~28PDEh6cKZ79j=(Rz_x4rWU#eCRPRpOQ$A)LII&6H$NpatrE9} UD<^Jj18QLKboFyt=akR{06EoAd;kCd literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_36.png b/extra_fonts/17px/hdf_36.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e8e7155a46392eb20796292e5c9bef668d2d38 GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2lS{7{YNqIe|ApfH#ptFqI=AfrBT3qjf{1BgY8_FGkS=3=AFhEPqbTe7OLqUbVzE zq9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS(#es8kkra7%ZKd015_#hTQy=%(P0} V8m^qUu??t!!PC{xWt~$(696JkQUm}1 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_37.png b/extra_fonts/17px/hdf_37.png new file mode 100644 index 0000000000000000000000000000000000000000..f11b1fe68ab0df301d900588376d56211aaa9fdc GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>--d7{YNqnS(c#L5WS!fQv!Vja?%twLwXOfg!Pj={=k4RFJW%C9V-ADTyViR>?)F zK#IZ0z|dIN&_LJFBE-PJ%E-*h)I!(5#LB>6>C^;}_YoR$^HVa@DsgMLa^l7|paup{ LS3j3^P6I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2TG_7{YNqIe|ApfH#ptFqI=ARX{M&;Te;sg0u$E*+ot)9^bxf+Xz&vTH+c}l9E`G zYL#4+3Zxi}3=EBR4GnY+EkXFVdQ&MBb@06ZN}g8%>k literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_39.png b/extra_fonts/17px/hdf_39.png new file mode 100644 index 0000000000000000000000000000000000000000..b353cfb689fbc48dca783616d4151308bb9a73fa GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3Y@47{YNqIe|ApfH#ptFqI>LRZ+p&WJ=@Jsf~<>_!1ek8W>@!QL+F4 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_3a.png b/extra_fonts/17px/hdf_3a.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bff5502ad5b044730d25289c3e603018b152f8 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>ira7{YNqIiaD6LE%UOGlSqfM#rb`bUO_QmvAUQh^kMk%6JHuAzah zp+$&+ft8V&m8pfUfr*uY!P2P-ATJ{{zopr0Cc!a A-T(jq literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_3b.png b/extra_fonts/17px/hdf_3b.png new file mode 100644 index 0000000000000000000000000000000000000000..a89efa9fbe161674369a0d53fa4cbb2d56595cb7 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?)em7{YNqIiaD6LBS=Bn_(d{gHRmfLcUTbd!V#xiEBhjN@7W>RdP`(kYX@0Ff`UR zG|)A)2r)3QGBUF=wa_&%u`)1NIyC|0YlMc}{FKbJO57T*oVc+KsDZ)L)z4*}Q$iB} DQL;;E literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_3c.png b/extra_fonts/17px/hdf_3c.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c507eef7988b58487099bd31bddb464b80ac7b GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?NAh7{YNqIl+N#4G+&ko;8d-iaZJ|DGWOm95omiw4#{UOJrW>168V)xJHzuB$lLF zB^RXvDF!10Lt|Y-16@Ol5Ca1%BQq;g3ta;fD+7b2QxiY|fY6YepOTqYiCe>!6F0U2 PH86O(`njxgN@xNA{{T&W literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_3d.png b/extra_fonts/17px/hdf_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..5532d24f928552f9c5fc0573f2d0ea1c6b8522c9 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>`@e7{YNqIl+N-;X;L$lWfck=3kjsCVaaI(yvo=IjdcwT zbPX*+3=FJ{%&bf;bPY_b3=Eb|O#pcsp&>UvB{QuOw}vYxZfpZ;VDNPHb6Mw<&;$S^ CSWWx@ literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_3e.png b/extra_fonts/17px/hdf_3e.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0ce33884600c6f1873464f1603144d443419e9 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?xYl7{YNqIl+O6k%wm?56>D0FOimpo`4MsJPZsvFPP*%Uz=JARH$0w8c~vxSdwa$ zT$Bo=7>o=IjdcwTbPX*+3=FJ{%&bf;bPY_b3=Eb|O#t~Hp&>UvB{QuOw}vYxZfpZ; OVDNPHb6Mw<&;$V3$WOok literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_3f.png b/extra_fonts/17px/hdf_3f.png new file mode 100644 index 0000000000000000000000000000000000000000..69b76198643f3c846a389c39c5ceb9ec9ff5cdab GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zD0#X#hHzX@7T`_b;7#NZU{qvN;7Uy3NJuDQP*i9zKES|`!^AvUrgO$Cpla0;*NBpo z#FA92*kacj78 S;>I?h1_n=8KbLh*2~7Y7!cCh1 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_40.png b/extra_fonts/17px/hdf_40.png new file mode 100644 index 0000000000000000000000000000000000000000..838fd10dc2cf26f064cdb4fd6ad0a1fef3d4d4ee GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm?3?!X=*FFJKEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YhS zC&U#FMGa!f{=-dm$r(0?*;51Iowj-?BS@_^-{gq9c>ZdZD&LhQTwTna&=Xe-<{yw#Rze z%$yy1S}dQvG=NjxeZ~PkpdqRyt`Q|Ei6yC4$wjF^iowXh&{)^dK-bVB#K6GH$jr*r qLf62=%D`ah)C5r2AT;FWr(~v8;?{8G#Eor04Gf;HelF{r5}E)+)mI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zVdUxJ7{YNqIe{ZFfg$l&fI?YnLPBY2LPBaufXIT>}#<1B0bg i6F`B2(2$#-l9^VCTf>zTH?{#aFnGH9xvXI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqnS(bmfrB?Sfg_<5h)WnQE7*k@E{IZLVBpJSFZ`z#`5CBKwZt`|BqgyV z)hf9t6-Y4{85kPt8XD*tT7(!FSQ(jFnOf=^m{=JYFh9!PhoT`jKP5A*61Rq;{g;`5 P8W=oX{an^LB{Ts5Raj3K literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_43.png b/extra_fonts/17px/hdf_43.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fafd095aed57b33ea48ef9bfc08fe583df16cf GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zTAnVBAsp9}6L?Y+5_n4!1X6ht1QIzCI1&>WCJFE)H6L*(QZQB63e>b}63bo=UAEak zU8*In5hW>!C8<`)MX5lF!N|bSSl7@%*U%!wz`)AL%*xbK*TBTez<~Kt_C6F1x%nxX YX_dG&6z#vv1k}Lb>FVdQ&MBb@06~^gPXGV_ literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_44.png b/extra_fonts/17px/hdf_44.png new file mode 100644 index 0000000000000000000000000000000000000000..81ebbe2a585589d3cf014db1f828bb1d4a328241 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z>Ygr+Asp9}Id~HiICxVNI1);MnB^e@n+3~8$0P^K2~rcHRDizWXV1OP=d}^2MYY5= zq9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS(#eu8kkra7%)G|-iM+gH$NpatrE9} UqWzbdfEpM)UHx3vIVCg!0Kec+cmMzZ literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_45.png b/extra_fonts/17px/hdf_45.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6b9019a38db4a5502a3e44544d3be39bb7e5d8 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?fMj7{YNqnS(c#VG#qH1{W`*B8#{VH#5V08P?m6`uBtZ6{(iEMwFx^mZVxG7o`Fz z1|tJQV_ic7T|X|T>}#<0|Vwq+51p5mdK II;Vst0CY7=cmMzZ literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_46.png b/extra_fonts/17px/hdf_46.png new file mode 100644 index 0000000000000000000000000000000000000000..68f05c533cef888400064159a254a01f21593a4d GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?fMj7{YNqnS(c#VG#qH1{W`*qJ?-<0t3UeKdkBw&IzA@id0KnBT7;dOH!?pi&B9U zgOP!uv96(kuAxPUfq|8gnU$%fu7Qb_fdTWQ?0qO2a`RI%(<*UmDB6FS38;a=)78&q Iol`;+0H8Qa$p8QV literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_47.png b/extra_fonts/17px/hdf_47.png new file mode 100644 index 0000000000000000000000000000000000000000..1c89782128f9081eaab3a760b16496df3e35d9c7 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z2A(dCAsp9}6L?Y+5_n4!1X6ht1QIzCI1&>WCOMqpO4;mm#Gz=-LPnk*MFmL<28JUp ztjD5~a$|scRZCnWN>UO_QmvAUQh^kMk%6JHuAzahp+$&+ft8V&m8qq!fr*uY0rR8m feJC1o^HVa@DsgKl+JBh|sDZ)L)z4*}Q$iB}>YY_i literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_48.png b/extra_fonts/17px/hdf_48.png new file mode 100644 index 0000000000000000000000000000000000000000..8e873e25d747550f33d3529628e36d80e55eb101 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z!k#XUAsp9}IT9RN7cLa&;Z|Z~&?@CHI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!RP7X7{YNqnIqu<-$4cj=XuNrmHb6|fikKkt`Q|Ei6yC4$wjF^iowXh&{)^dK-bVB w#K6GH$jr*rQrE!5%D{m6QT9F*4Y~O#nQ4`{H5Bc?3_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zh!=%O0q=Au*L4OxhxkG>7X`m9-64!{5l*E!$tK_0oAjM#0 zU}&ssXrOCo5n^CqWn^Y$YN=~rVr5{!{3v@LiiX_$l+3hB+!~7ZUuFVoVDNPHb6Mw< G&;$TaB23}{ literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_4b.png b/extra_fonts/17px/hdf_4b.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e0e285ae0b4d04282d993d1ebb8190f2c4f2ac GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F#0(_;gYPZ|QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3h}57{YNqnInNGfg_o=IjdcwTbPX*+3=FJ{%&bf;bq!3c3=EhbW$#1L ckei>9nO2EgL(%@rOh63`p00i_>zopr09C9~9RL6T literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_4c.png b/extra_fonts/17px/hdf_4c.png new file mode 100644 index 0000000000000000000000000000000000000000..c93b69e9f7fdb2e3e53c0ec539f1fe350ad49794 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>`@e7{YNqnIj?LK(mvxBL^EpelAPt=LdP$fwHP4t`Q|Ei6yC4$wjF^iowXh&{)^d zK-bVB#K6GH$jr*rQrE!5%D{m6QT9F*4Y~O#nQ4`{H5Bc?%mmcH;OXk;vd$@?2>|d_ BOveBK literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_4d.png b/extra_fonts/17px/hdf_4d.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f9328c5cb3152f055cc0aff897e65c1d82e310 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F#0(_;gYPZ|QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2%e}7{YNqnIqBRK!6(uUy4W~M@j1g25|+x#w12THWda2kp}k3mW5mwfvQzYTq8i literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_4e.png b/extra_fonts/17px/hdf_4e.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f0123a0287de80ae6c0a72c69a0b87ac9c9483 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z3Z5>GAsp9}ITAS%I9eY$uygQnG$aXXq_rj;V_;KZU~rD)cyi=IS1wSkYKdz^NlIc# zs#S7PDv)9@GB7mOH8jvQvI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3P-37{YNqIe{lNA%V9vK_HbUK_HPMfrHVB!<*#{+eU{X1yhBsKt0EqSbMc4C4_*Q zR7+eVN>UO_QmvAUQh^kMk%6JHuAzahp+$&+ft8V&m8qq!fr*uY0rR8meJC1o^HVa@ XDsgKl+JBh|sDZ)L)z4*}Q$iB}rHN1I literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_50.png b/extra_fonts/17px/hdf_50.png new file mode 100644 index 0000000000000000000000000000000000000000..359b3eefc652ad196780c4e8f0c7d1501e9238f2 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3r467{YNqnS(bmfrB?Sfg_<5h+C2rq*d4^aVIz&1*-nKg3WkY`SyQ6<*FsF5hW>! zC8<`)MX5lF!N|bSSl7@%*U%!wz`)AL%*xbK*TBTez<~Kt_C6F1x%nxXX_dG&6z#vv Q1k}Lb>FVdQ&MBb@0BEjItpET3 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_51.png b/extra_fonts/17px/hdf_51.png new file mode 100644 index 0000000000000000000000000000000000000000..0033b73b09b58b0248e06aa4d8bfa4a549488a68 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F#0(_;gYPZ|QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zVeIMR7{YN~w`-#yg968qLvwQ&ej6MT-|%0nD(lh`4zmZrOFA9Cdo=IjdcwTbPX*+3=FJ{%&bf;bq!3c k3=EhbW$#1Lkei>9nO2EgL(%@rOh63`p00i_>zopr09z?v7XSbN literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_52.png b/extra_fonts/17px/hdf_52.png new file mode 100644 index 0000000000000000000000000000000000000000..07c019ee57d1c788496d259d414b5286cc0c82e4 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z%APKcAsp9}Ie1eOICx7FI1*Zt!r0k5B$#LLil_51B&#qmNV2ofzm0Xkxq!^4042^XS4Rj4HLJSP7jLfV|Ep-h{tPBj8A7$@D(U6;;l9^VCTSL+Q R%S=EG44$rjF6*2UngG|#P6z-1 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_53.png b/extra_fonts/17px/hdf_53.png new file mode 100644 index 0000000000000000000000000000000000000000..5c719a6bd3a4b8210530e83cd5ee70ad1f8f21f6 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2=k~7{YNqIe|AZL4Y?kfg`arfg_&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zBAzaeAsp9}Ie2*!7!uhOl(>``7%nbj6O@+?qZwZt`|BqgyV)hf9t6-Y4{85kPt z8XD*tT7(!FSQ(jFnOf=^m{=JYFh9!PhoT`jKP5A*61Rq;{g;`58W=oX{an^LB{Ts5 D2W(5T literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_55.png b/extra_fonts/17px/hdf_55.png new file mode 100644 index 0000000000000000000000000000000000000000..85f843e151781ff9d799bc25bbbad5fd6c376a38 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zlAbP(Asp9}IT93joF$kgT%2VkBAg{BFfwqLvwJn)zj+C$NVUW@q9i4;B-JXpC>2OC z7#SEE>lzy98d`)H7+4vZS(#eu8kkra7%)G|-iM+gH$NpatrE9}qWzbdfEpM)UHx3v IIVCg!0C0y)&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 za-J@ZAsp9}IT9Ki1l`yz(o$0!l8*^+uxT|WurM%8Y-e8aYi;*xpi0#e*NBpo#FA92 zI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3P-37{YNqnIj>UBf&vHX-y9wkJ6&PfTqv`QyUvi6-2xYtU45gS1>T>tYq_+e#`tD zs7bZNHKHUXu_VKd3>85l4>%HD^fAvZrI ZGp!Q0hNAtKnSdG?JYD@<);T3K0RTArQy%~T literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_58.png b/extra_fonts/17px/hdf_58.png new file mode 100644 index 0000000000000000000000000000000000000000..44a11ba4ece7834bf1cb937ffce5b6ab35b53776 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2=k~7{YNqnIoYjfg`arK_D?TAwiV!kpLUpF$NB{jgCnQmJ_5VM5!<^Oe$jGU3vFP z9Z;8QiEBhjN@7W>RdP`(kYX@0Ff`URG|)A)2r)3QGBUF=wbV5*u`)1Vew4irMMG|W aN@iLmZVg5IFEar(FnGH9xvX&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zN}eu`Asp9}ITC;{ktabQu_PfOHI*Uxm;eWxS7H(i1H;q?=9iPEN__*WRxNRjC`m~y zNwrEYN(E93Mh1q)x`qb2h87_P23AI9R;HG^1}0Vp2F#DL_n~OW%}>cptHiCLX#Zs< Ppaup{S3j3^P6I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3Y@47{YNqnS(c#L5VGpjZKiPje+eL16vq7TbO}gTe~DWM4fT1-tb literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_5b.png b/extra_fonts/17px/hdf_5b.png new file mode 100644 index 0000000000000000000000000000000000000000..c60f640056c2fa30de5d38d2099aaf580991b68b GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z(9^{+gyVWLM=B5=;A%8taG%9;v~SwG13*dD64!{5l*E!$tK_0oAjM#0U}&ssXrOCo y5n^CqWn^Y$YN=~rVr5{!{3v@LiiX_$l+3hB+!~7ZUuFVoVDNPHb6Mw<&;$TG+e{4r literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_5c.png b/extra_fonts/17px/hdf_5c.png new file mode 100644 index 0000000000000000000000000000000000000000..6acbcb58b5f72786afc0d94eec399cf2de3b68e1 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z#?!?ygyVX0K|(bP0l+XkKhOJ6( literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_5e.png b/extra_fonts/17px/hdf_5e.png new file mode 100644 index 0000000000000000000000000000000000000000..b60f84bbaf01d33df3db378e8efd6f40e75a208d GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?fMj7{YNqIiVzhLFpO;o1mZoR|2b|3I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!SCtf7{YNqIYB|VrOk?gfk~C&^#f54H=vYiiEBhjN@7W>RdP`(kYX@0Ff`URG|)A) y2r)3QGBUF=wbV5*u`)1Vew4irMMG|WN@iLmZVg5IFEar(FnGH9xvXNS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z^K@|x;kcg6k&uvhfRll97DH&__AEi5jB1H%L`h0wNvc(HQ7VvPFfuSS)-^QHHM9sZ wFt9Q*vof{RH88OI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2lS{7{YNqIiZ2^B178+fi?y~wl)E_ivn!|f&$VSN?KguObiij%;(b#Ozr~JtCqM% zl%yn_Py>UftDnm{r-UW|d1_C8 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_62.png b/extra_fonts/17px/hdf_62.png new file mode 100644 index 0000000000000000000000000000000000000000..62c2335ecca30e6a0efad318acba58817863aa2d GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqnIj>gVZi~0whIDn0)cG|VH!-E8kHOhB^VgG^jX6sLjz9(6|0uGMwFx^ zmZVxG7o`Fz1|tJQV_ic7T|X|T>}#<0|Vwq+51p5mdKI;Vst09gi5K>z>% literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_63.png b/extra_fonts/17px/hdf_63.png new file mode 100644 index 0000000000000000000000000000000000000000..deb4e4166e7cf8f9e1d510266be92fe3683d8e31 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA@Awp7{YNqIiZ2^8Ux!!fi{7_HU>5grcI4X4uuj744%Hs_IqARWCN9|mbgZgq$HN4 zS|t~y0x1R~14Cn7Ljzqyix2|?DI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2%e}7{YNqIUymnLE%~e+r@x3fxtF~Fb$?njY@0Q@c`}h4QGyIU;OJBP_=4_YeY#( zVo9o1a#1RfVlXl=G}bjV&^5FOF)*+)GP5$Z)HN`%GB99%l)Vo{LvDUbW?Cg~4MqDe RGXXU)c)I$ztaD0e0su&=QQrUn literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_65.png b/extra_fonts/17px/hdf_65.png new file mode 100644 index 0000000000000000000000000000000000000000..71fd1c05a65d5b51fafaa5841e8f95b36de2d891 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2%e}7{YNqIiZ2^8Ux!!fi{M)whI9QTnPyrf~=hkM-v$s!dEii_uRGV8c?-riEBhj zN@7W>RdP`(kYX@0Ff`URG|)A)2r)3QGBUF=wbV5*u`)1Vew4irMMG|WN@iLmZVg5I SFEar(FnGH9xvXgTe~DWM4f DFYZcr literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_67.png b/extra_fonts/17px/hdf_67.png new file mode 100644 index 0000000000000000000000000000000000000000..d46ac645e2930cbfcddd3131b8dce0649980b990 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqIiZ0uES&9PK$}2d8$*}|)22oxhe9?EYZeCY3Kqc`ll#Jeid9QoBT7;d zOH!?pi&B9UgOP!uv96(kuAxPUfq|8gnU$%fu7Qb_fdTWQ?0qO2a`RI%(<*UmDB6FS Q38;a=)78&qol`;+0OB!EW&i*H literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_68.png b/extra_fonts/17px/hdf_68.png new file mode 100644 index 0000000000000000000000000000000000000000..3aa9ac3a0cd89c1cd45e874ef1ba825c21198882 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?4}f7{YNqnIj>gVZi}`whIAm0%2_oJS@x%4HHzm0Xkx zq!^4042^XS4Rj4HLJSP7jLfV|Ep-h{tPBj8A7$@D(U6;;l9^VCTSL+Q%S=EG44$rj JF6*2UngETmPdxwt literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_69.png b/extra_fonts/17px/hdf_69.png new file mode 100644 index 0000000000000000000000000000000000000000..37c9efbd25acf543d72ca7d8d607a029085a863a GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?)em7{YNqnInNCAt8a|KtlopgY`M)!t=Y5m4MQ!C9V-ADTyViR>?)FK#IZ0z|dIN z&_LJFBE-PJ%E-*h)Kb^L#LB>c`BC;h6b-rgDVb@NxHS~*zYGc*22WQ%mvv4FO#mx) BOoIRb literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_6a.png b/extra_fonts/17px/hdf_6a.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffa17fcb936daefe80c5572e22a0f334102e46e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y~1R`Tv=7s|)mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z@^oftZIpCL`h0wNvc(HQ7VvPFfuSS)-^QH zHM9sZFt9Q*vof{RH88OI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2lS{7{YNqnIj>gK`F4UL7?pbLt6lQ+XaTU2@C?}4lF8s%nUQSS)a9Let8B|uUg_7 zQIe8al4_M)lnSI6j0_Bobqx)44J|?p46KaItV}I+4NR;I445Bf??cg$o1c=IR*73f T(f-R!Kn)C@u6{1-oD!M<<>*p_ literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_6c.png b/extra_fonts/17px/hdf_6c.png new file mode 100644 index 0000000000000000000000000000000000000000..66a4e7bc7337d36c602fbca2d5ad2a43bb62de74 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!RP7X7{YNqnIqu<-$4cj=XuNrmHb6|fikKkt`Q|Ei6yC4$wjF^iowXh&{)^dK-bVB w#K6GH$jr*rQrE!5%D{m6QT9F*4Y~O#nQ4`{H5Bc?3Nn{1`8HqoN|u!i5WY6c?@GVN|+dD8#_9#EIo@v}*8KphDFW*NBpo#FA92 zI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>rxb7{YNqIiaEPfI!=YfHr}!HU=IRW`-yQ=H;h8i8=w*sFt`!l%yn_Py>UftDnm{ Hr-UW|tO`yP literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_6f.png b/extra_fonts/17px/hdf_6f.png new file mode 100644 index 0000000000000000000000000000000000000000..f53d0c2baf4b1efffe84b4548f7b89465085e474 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA@Awp7{YNqIiZ2^8Ux!!fi{7_Hij?_rcI4X4uuj73|`Zj{n~FX`VCa7TH+c}l9E`G zYL#4+3Zxi}3=EBR4GnY+EkXFVdQ&MBb@0HtwH00000 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_70.png b/extra_fonts/17px/hdf_70.png new file mode 100644 index 0000000000000000000000000000000000000000..02d47df1a34c17ed8dd8d79224de4ec91c90aa37 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqIiaEP07Kgafi{7_Hij?_rcI4X4j&oVIG7kR@>#=7J{>v*RIFO!8c~vx zSdwa$T$Bo=7>o=IjdcwTbPX*+3=FJ{%&iOzbPY^^q+x`&If{nd{FKbJO57S8SU-bY O&*16m=d#Wzp$Pz;eozI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqIiZ0uES&9PK$}2d8$*}|)22oxheEb64kiXqX=cyZmV?be#i}K)5hW>! zC8<`)MX5lF!N|bSSl7@%*U%!wz`)AL+{(Z}*T4iw8b)}VqiD#@PsvQH#I3=B^)txz N44$rjF6*2UngE*nP7MG6 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_72.png b/extra_fonts/17px/hdf_72.png new file mode 100644 index 0000000000000000000000000000000000000000..7d57396f58e10e66e2ee6607195b45c339bcbe7f GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z!qdeugyVX0LPMhids_f|n*duI0}l%`Lr@5FH0vXtWS|<=64!{5l*E!$tK_0oAjM#0 zU}&ssXrOCo5n^CqWn^w;V4!PY0wfJ1yv_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z$a%UrhHzX@PH14f$k28{pp8MWEx=$l;~_rA%?lYAB5pB%e!k+o3Q(nLiEBhjN@7W> zRdP`(kYX@0Ff`URG|)A)2r)3QGBUR^FwiwH0g{Fh-sUJ8a`RI%(<*UmaA5rmayo;j LtDnm{r-UW|6;V%S literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_74.png b/extra_fonts/17px/hdf_74.png new file mode 100644 index 0000000000000000000000000000000000000000..079be08ec3dda10f0d55c9f01040eb5f55cb8e6e GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z!qdeugyVX0LV^I}p#TMuM(04bFgBoVl5LEEkySrAfofDsTq8Ero1c=IR*74K1M6pyqZvG1{an^LB{Ts5 D34cmm literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_75.png b/extra_fonts/17px/hdf_75.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a674def2c3261f4fba2fd92d2cbd5f89791b3d GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>rxb7{YNqIiaDEA&f`mlz`MJg;!kROblKe%o)Ax0h~ZJswJ)wB`Jv|saDBFsX&Us z$iUE8*U&)M&?3aZz{<$n%D_O^zywGdMtGZ}Xvob^$xN%nt-*oyGsw{lp00i_>zopr E0D}uk-2eap literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_76.png b/extra_fonts/17px/hdf_76.png new file mode 100644 index 0000000000000000000000000000000000000000..df9d81f6bcd731891f268e4df8768d140dddb355 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?@kn7{YNqIiaDEAxuC>uu?)F zK#IZ0z|dIN&_LJFBE-PJ%E;Wxz(Ci)1V|c2c$=eW$jwj5OsmAL!GZNN$lVN{u6{1- HoD!M6E! literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_77.png b/extra_fonts/17px/hdf_77.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd6907e0db5b91239f09dc5d507097f94bb20f7 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP#0(_Y_8+?iq*&4&eH|GXHuiJ>Nn{1`8HV7(8Iz|c!Y(A|EJM;kcJZ1 zh?11Vl2ohYqEsNoU}RuutZQhXYiJQ-U|?lrZe?JgYhVH-4I{kGQ8eV{r(~v8;@056 R`WfT{22WQ%mvv4FO#n2DP}%?h literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_78.png b/extra_fonts/17px/hdf_78.png new file mode 100644 index 0000000000000000000000000000000000000000..040d256e8221f448573ee9fb9827c96ad12d3dc1 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z$a=ashHzX@PH1Rk5EKyNOc3BrNGN5P=wRj|z{cP+k2&MZ9`PkWg{md45hW>!C8<`) zMX5lF!N|bSSl7@%*U%!wz`)AL+{(Z}*T4iw8b)}VqiD#@PsvQH#I3=B^)txj44$rj JF6*2UngAB;OSJ$1 literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_79.png b/extra_fonts/17px/hdf_79.png new file mode 100644 index 0000000000000000000000000000000000000000..f6bcdac7a147f450694234e0b3f8e3b20053c1c7 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA@Awp7{YNqIiaDEAxuDsQAv<3jDss7fkla3LnxJj!9b5`POFvBCZJN)64!{5l*E!$ ztK_0oAjM#0U}&ssXrOCo5n^CqWn^w;V4!PY0wfJ1yv_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z$a}gthHzX@PH1SnARv&$k(j`fkWiA4P?{jn%I(C+5OJCLsfw1yW1v#i64!{5l*E!$ ztK_0oAjM#0U}&ssXrOCo5n^CqWn^w;V4!PY0wfJ1yvO>_45U54*zIJt9gxA}>Eal|aXmRoT7)78&qol`;+02m@e4*&oF literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_7d.png b/extra_fonts/17px/hdf_7d.png new file mode 100644 index 0000000000000000000000000000000000000000..863eb9eebf533d89a948403305d7a690141b6483 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z)YHW=gyVWLM*>HpK%;Y*N*RYU1A}}dlUU}Qg=IhmswJ)wB`Jv|saDBFsX&Us$iUE8 z*U&)M&?3aZz{<$n%D_O^zywGdMtGZ}Xvob^$xN%nt-*oyGswjZp00i_>zopr01IzP AVgLXD literal 0 HcmV?d00001 diff --git a/extra_fonts/17px/hdf_7e.png b/extra_fonts/17px/hdf_7e.png new file mode 100644 index 0000000000000000000000000000000000000000..6210ddfda887fdb9e4e06a4f496dd3f5862c6857 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?oSk7{YNqIpF}qq8^^UJ{~^B8Ac3}f{eNuOIXeT6{wcDMwFx^mZVxG7o`Fz1|tJQ zV_ic7T|}#!X&B*cj-nwqKP5A*61N5i*3TdpGkCiCxvXNS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8W<` zjc?PRtckip~W;uyklJvm_kA6S_2 z|7>MNAWOBxHKHUXu_V$qWphu6{1-oD!M<6^29; literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_21.png b/extra_fonts/25px/hdf_21.png new file mode 100644 index 0000000000000000000000000000000000000000..9297e3bb989aaf99fe48d52bf3b76c152179c61a GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`1R|Zn*Ove(mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z@pN$v;kcg6k$8ZO`G5e6LX8Cj!wL!3&TLnWE}*<>iEBhjN@7W>RdP`(kYX@0Ff`UR zG|)A)2r)3QGP1BTu+TLyu`)3DyeIB1iiX_$l+3hB+!~r5K1&2@VDNPHb6Mw<&;$Tw ChDDVB6cUq=Rpjs4tz5t&iskBg4^9X7Tflm;8W|swJ)wB`Jv|saDBFsX&Us$iUE8*U&)M z&?3aZz{<$N%D_U`z{JYH;PaliyC@oR^HVa@DsgLQdiX36sDZ)L)z4*}Q$iB}LxxQm literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_23.png b/extra_fonts/25px/hdf_23.png new file mode 100644 index 0000000000000000000000000000000000000000..f980e4423f874c3da6a9ab126f35ae30e202cb04 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8HNn{1`8HW>TFr!04)k2*aO%c79r$1tn$-3WE zH+y$+ef#6jnRR@^b)0kDP8w_h8lzg`8c~vxSdwa$T$Bo=7>o=IjdcwTbPX*+3=FJ{ tEUXMHbPY_b3=BT+iMxxUAvZrIGp!Q0hNg$l5`h{RJYD@<);T3K0RSMZV&nh- literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_25.png b/extra_fonts/25px/hdf_25.png new file mode 100644 index 0000000000000000000000000000000000000000..eac937fa44ad9e2152fa45300a5c6c40971f2b28 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^qChOc#0(@ep2yt=QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z;p6Gz7{YPAwPz#m0S69d--8@)oV&j0&G{S7`QGKH(X9%}x1%2xc7`}XbYi#>tns+PD$l%yncptHiCL>EW|Ppaup{ LS3j3^P6Nn{1`8H}#<1B1_d;_jko$jwj5OsmALq3PkXM4$!+Pgg&ebxsLQ05=X^ ALjV8( literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_27.png b/extra_fonts/25px/hdf_27.png new file mode 100644 index 0000000000000000000000000000000000000000..47c2f99051339e8ecccb4afc2c1bc21691afe548 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjV2qYLL6i@a6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OF{)5S4_<9c#}#4RB2 z00X0!QgbYjrCQ<|QIe8al4_M)lnSI6j0_Bobqx)44J|?p46KYStPIR`4NR;I3|PPD fnV@LM%}>cptHiCLWaYFDpaup{S3j3^P6+YZQ3 z^>lFz;kcfhz>$!^laNr#pcu#|Ae5NEaj@G(Vu6<8u7+EZObmDSvPnnnXO{zMC~=J_ zNl7e8wMs5Z1yT$~28PDEh6cKZ79j=(Rz?<91{S&oCRPRppZCPwMbVI(pOTqYiCaU{ S!)J*=4Gf;HelF{r5}E)&yHYy< literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_29.png b/extra_fonts/25px/hdf_29.png new file mode 100644 index 0000000000000000000000000000000000000000..a15ec7f78a8bd79679cd62bc5cb7cf1501b6afb5 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol*#0(^t)TI~zDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI+YZQ3 z_H=O!;kcg6k&wWVm>|Ha9L6q?#IlHC&k4p=LW{Up*fuaSJU+%2J8^&YQJ`|w64!{5 zl*E!$tK_0oAjM#0U}&ssXrOCo5n^CqWn^JxV4-VZVr5|Pc~9J36b-rgDVb@NxHU9A Se3l5*z~JfX=d#Wzp$PyR(Nf_6 literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_2a.png b/extra_fonts/25px/hdf_2a.png new file mode 100644 index 0000000000000000000000000000000000000000..61b259b2e2595b560e9fe4f03cbe722a728a21f2 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^96&6=#0(^NZ4YS%QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>--d7{YNqIiVzhVUa_4+l2tOYYc3Hf&xmi3=C5rF=aHa(pm;or&{6~QIe8al4_M) zlnSI6j0_Bobqx)44J|?p46KYStPCu44NR;I3_kCPyNjYBH$NpatrE9}riafGff^V* MUHx3vIVCg!06I`mf&c&j literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_2b.png b/extra_fonts/25px/hdf_2b.png new file mode 100644 index 0000000000000000000000000000000000000000..cd52ba22294efcebb6fd09915742cbef3f833346 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H4;t7lXo#3=N6o$%h#kS{s;-FSNL!2~?q4;u=wsl30>zm0Xkxq!^40 z42^XS4Rj4HLJSP7j4Z4SEOZS_tPBi3?}@vMq9HdwB{QuOw}z&N&k}(e7(8A5T-G@y GGywpTu260O literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_2c.png b/extra_fonts/25px/hdf_2c.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1579318777c4dca7a61a39d9880b1bded5ba7d GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`1R|Zn*Ove(mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z_H=O!;kcfhpupgCAb^E~*&&93{|sa4F&3-$Kxx$y*NBpo#FA92?xK BOlJT9 literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_2d.png b/extra_fonts/25px/hdf_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..b34f8a55835c09b14947631bee2c859e7765162b GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIFVdQ&MBb@0C{ap A4gdfE literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_2e.png b/extra_fonts/25px/hdf_2e.png new file mode 100644 index 0000000000000000000000000000000000000000..1a75212f4390d3ad05876983f52ecf403513a63e GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`1R|Zn*Ove(mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z_jGX#;kcfhpupgCK!A^d=MTf*^X42?Kq=J{*NBpo#FA92@QlOV0oR literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_2f.png b/extra_fonts/25px/hdf_2f.png new file mode 100644 index 0000000000000000000000000000000000000000..e23ec917ccf8d6b3de81df7bffd17eb79b370999 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fINn{1`8HF@)oKasmU>u>f|qYZn;U0*?!@1+sCtZP<`(!M%cgiFgW|7z4x0n;Zv!?w4}| z>QOCmjVMV;EJ?LWE=mPb3`Pcq#=3?Ex`q}Z1_o9}7FGrpx&|gz1_qz^#N9>Fkei>9 YnO2EgL({`&i9ihup00i_>zopr09+qcp8x;= literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_31.png b/extra_fonts/25px/hdf_31.png new file mode 100644 index 0000000000000000000000000000000000000000..ea129c17528e70c3844f9ba105fac5cc01c742a2 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fINn{1`8Hu>dxafq-cvl;L)YB3~TV^FxxxJK+$3PhSiZAEZ+`_UI&_>TH+c}l9E`GYL#4+3Zxi}3=EBR4GnY+EkXNn{1`8Hu>dxNn{1`8HkF@)oKasmV6F$OlaFb%QRM+X?#+yu&a5)xQXbu(?`5NKy8%*fD?X#T30?8Crt z=`zRSE%!f|12wCbxJHzuB$lLFB^RXvDF!10Lt|Y-16@Ol5Ca1%BMU173ta;fD+7bi hd*be*Xvob^$xN%nt)c1RvqYc<22WQ%mvv4FO#r=jSr`BS literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_35.png b/extra_fonts/25px/hdf_35.png new file mode 100644 index 0000000000000000000000000000000000000000..f27f355c81ca0af92d248fbf0622ffce58f17511 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H#R~!)Y#S#Qu3#2mH|Q{GW2jWr*rb>sb4uWp1XI{yj*xDkYnyo3 z?e6WpyA7ySwZt`|BqgyV)hf9t6-Y4{85kPt8XD*tT7(!FSQ%MZ8Cd8Vm{=JYeBKjx f7ezyEeoAIqC2kE(51%ChH86O(`njxgN@xNA;*nS8 literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_36.png b/extra_fonts/25px/hdf_36.png new file mode 100644 index 0000000000000000000000000000000000000000..d4287c5f25759e2f8c8a0b05f7d04ec92deb41bc GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8HcptHiCL>EW|Ppaup{S3j3^P6Nn{1`8HNn{1`8H!7IkV@cbXg zt=GS1?FZ^qEpd$~Nl7e8wMs5Z1yT$~28PDEh6cKZ79j=(Rz?<91{S&oCRPRppZCPw eMbVI(pOTqYiCaU{!)J*=4Gf;HelF{r5}E)kXjvct literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_39.png b/extra_fonts/25px/hdf_39.png new file mode 100644 index 0000000000000000000000000000000000000000..543654be156a92de04244a0db21a4a96fd8f6839 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8HNS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z^mK6y;kcfh(9kSk;KH7YKdz^NlIc#s#S7PDv)9@GB7mOH8jvQ zvbP0l+XkKM*U3) literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_3b.png b/extra_fonts/25px/hdf_3b.png new file mode 100644 index 0000000000000000000000000000000000000000..b5dc2b3292394aec06165a88bd36f52cb669ac85 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`1R|Zn*Ove(mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z^K@|x;kcfh(9kSk;KD8tD5${0P{?THz*M+yJ$DXJg=&dwL`h0wNvc(HQ7VvPFfuSS z)-^QHHM9sZFt9SRurjdFH88OnjSt&1ZrULboFyt=akR{ E0MKttU;qFB literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_3c.png b/extra_fonts/25px/hdf_3c.png new file mode 100644 index 0000000000000000000000000000000000000000..a5fb597882d1830cd7b1b6f30cd342451f99d5bc GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp@KrF$;3?yUb%|8yLSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z(bL5-gyVX0f&xQ?Y=eu&gals4M1uny2I4x6he{6Q>oBORvb+s%@Dc_pRxNRjC`m~y zNwrEYN(E93Mh1q)x`qb2h87_P23AHERt6Tj1}0Vp2A}uD-9^!mo1c=IR*73f)5B+p PKn)C@u6{1-oD!M<&R$W_ literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_3d.png b/extra_fonts/25px/hdf_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..ce46cdaa813d39fc44b4a3774c3e074db55ffbd4 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^AhrY(GmzZp)Uppqv7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN*sN zh^LEV2*>s01O=v+Hns*stJxe342O>}zvP>u_X8-eTH+c}l9E`GYL#4+3Zxi}3=EBR z4GnY+EkXAi&F;AW+Ja$dSs?=x|JcjqMl%8(WxySSdpi8`}Z{tv1G-Bn}3K z7t`4T8|%dW0ClUDxJHzuB$lLFB^RXvDF!10Lt|Y-16@Ol5Ca1%BMU173ta;fD+7bi hd*be*Xvob^$xN%nt)c1RvqYc<22WQ%mvv4FO#m!ERHgs` literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_40.png b/extra_fonts/25px/hdf_40.png new file mode 100644 index 0000000000000000000000000000000000000000..14823b96a7628b8d378eedc9be00a6ac601bba30 GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8gx#0(^xFFd^gq*&4&eH|GXHuiJ>Nn{1`8H7f z#RdP`(kYX@0Ff`URG|)A)2r)3QGP1BTu+TLyu`)3DyeIB1iiX_$ al+3hB+!~r5K1&2@VDNPHb6Mw<&;$VPi*cd= literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_41.png b/extra_fonts/25px/hdf_41.png new file mode 100644 index 0000000000000000000000000000000000000000..1b80fb89b05a5a09399f7570d9f0715d5f8b9baa GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRm#0(_+&P|;Uq*&4&eH|GXHuiJ>Nn{1`8H+YZPu z^mK6y;kcg6!ONSN03=EiI1&X|1$!80u&ieG;Ea)t;OQ{na1&6JVhCh6lN4uQ@Ymuu zd+^)?=mQ4T64!{5l*E!$tK_0oAjM#0U}&ssXrOCo5n^CqWn^JxV5w_hVr5_udO9={ eMMG|WN@iLmZVf8a-d+W2VDNPHb6Mw<&;$StsZetO literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_43.png b/extra_fonts/25px/hdf_43.png new file mode 100644 index 0000000000000000000000000000000000000000..67ad98155c6ac0c0147a70adc6b8ef823b000c7e GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRm#0(_+&P|;Uq*&4&eH|GXHuiJ>Nn{1`8HF&L(4{vM^m1El?IxiTH+c}l9E`GYL#4+3Zxi}3=EBR4GnY+EkXNn{1`8HkF@)oKG6yejVgisTP2flr;AIf%QFLfx^l5402t4GX;lm!Ge?eqJWy0h_Mur6~ zJO>`sy?YJRtXkq4QIe8al4_M)lnSI6j0_Bobqx)44J|?p46KYStPCu54NR;I3_?$b fW};}w%}>cptHiBAW!l@TKn)C@u6{1-oD!MKd3>85o3~4$VZ-kei>9nO2EggUYnG RSAiNBJYD@<);T3K0RY20P|*MY literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_46.png b/extra_fonts/25px/hdf_46.png new file mode 100644 index 0000000000000000000000000000000000000000..5874e1a2909d50fd2b0984bb5288930ef9b40dc3 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8HrP@!sxYeY#(Vo9o1 za#1RfVlXl=G}bjV&^5FOF)*+)vam9+)HN`%GB5}|9h!-vAvZrIGp!Q029;@VuL3nN Nc)I$ztaD0e0s!9ePznG5 literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_47.png b/extra_fonts/25px/hdf_47.png new file mode 100644 index 0000000000000000000000000000000000000000..3f6de61efd75766cf11599dfc6a63466836277e6 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^fI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z;o|Ay7{YPAwr3-60|U?DGZ%z^`HPpeJ^LT-p?$EWLy5mL#e=cE#IeLA<)P;G&yMv5 zq57TeQO~@N1wS@+YZQ( z@^o5s!}a+jVMV;EJ?LWE=mPb z3`Pcq#=3?Ex`q}Z1_o9}7FGt9x&|gz1_q(0Lo-n{NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z^K@|x;kcg6k*L6Sh>>B-A2wU}lJM_98PyWkh?11Vl2ohYqEsNoU}RuutZQhXYiJQ- wU|?lrVP#;cYhYq!U=VsbG!sQbZhlH;S|x4`D%0Lx1!`dMboFyt=akR{0Qv+04Z6T_No9R8=yHp~aAQ!R0gC`m~yNwrEY zN(E93Mh1q)x`qb2h87_P23AHERtA>31}0Vp2BD`zGf_0;=BH$)RpQp5GVSeEpaup{ LS3j3^P6Nn{1`8H6wGP3<@017tc2e-Z?I4bLDUN#z_x+`Scg^DikRmGm#cC>YJeaq+_l7 z+R!JeVetVxze2^<*%vc3*YRk&SRS1XG)lF^HKHUXu_VKd3>85o3~4$VZ-kei>9nO2EggUYnGSAiNBJYD@<);T3K0RZY_V2}U+ literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_4c.png b/extra_fonts/25px/hdf_4c.png new file mode 100644 index 0000000000000000000000000000000000000000..e8eefacdbe80f4694bdccd3ae78b82dfd703e925 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H}#<1B1}hp_wQea`RI%(<*UmP?`4jDo_K1r>mdKI;Vst E0L1Z5bpQYW literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_4d.png b/extra_fonts/25px/hdf_4d.png new file mode 100644 index 0000000000000000000000000000000000000000..876724cd725801b8217b7931dbb6ac837c555a69 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv+#0(@;f9lNvQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zVeRSS7{YPA_Q*zF1_ch6i~bMUHud+~vcB8jB_XWgv!}k&;(^YDk_$o3vgTD4_csPC z%`xiRJjM0bm%D5#$As2uT&xAzs#@Y2QIe8al4_M)lnSI6j0_Bobqx)44J|?p46KYS rtPCu54NR;I3_?$bW};}w%}>cptHiBAW!l@TKn)C@u6{1-oD!M+YZPu z^mK6y;kcg6k(j`d$l)r$SD?h;(b95&Gf?2*D+Xl=W`{+L1(iS!m%4-_3&%sC(**ce zwK;ed0yV3axJHzuB$lLFB^RXvDF!10Lt|Y-16@Ol5Ca1%BMU17OI-sKD+7bj)1jFt d8glbfGSez?Yfzc?_9{>VgQu&X%Q~loCIH8wQ=I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zVd3fG7{YNqIYEFoH6bB^hnE*f@+R^oCJ2-!FmQD?1!~OT7D-XUGj z5xqSO40m^PM;+@u^dD%3YKdz^NlIc#s#S7PDv)9@GB7mOH8jvQvYFrH86O(`njxgN@xNALKj*T literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_50.png b/extra_fonts/25px/hdf_50.png new file mode 100644 index 0000000000000000000000000000000000000000..e3cfddd2f7fd4eb9177c0042e81d3d4cd14a5d27 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM0#0(_2uT(h#q*&4&eH|GXHuiJ>Nn{1`8HF@)oKG6yejVgisTP2fmOU={3PoWT;nw1&mQfMF-k5#b#S42#}!n=!n#+XU33 zTH+c}l9E`GYL#4+3Zxi}3=EBR4GnY+EkXI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z;o|Ay7{YPAxA!3D0RtXpeS!W3wMI_z*Z!>z`M5tIk;N)UG9}?Ae@J*UpX02LM-KdY zo|Yc}V&42uZ)0r#e*DALZx&z0_}rg+BHR0B5ukahC9V-ADTyViR>?)FK#IZ0z|dIN z&_LJFBE-PJ%E-dXz*5)1#LB=R^mJ$@iiX_$l+3hB+!|D-y}b(5z~JfX=d#Wzp$Py3 CA!fw@ literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_52.png b/extra_fonts/25px/hdf_52.png new file mode 100644 index 0000000000000000000000000000000000000000..c1beb32473b343b9877be536d2e00fe0a93b384b GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM0#0(_2uT(h#q*&4&eH|GXHuiJ>Nn{1`8H z>QXInjVMV;EJ?LWE=mPb3`Pcq#=3?Ex`q}Z1_o9}7FGt9x&|gz1_q(0Lo-n{Nn{1`8HBtFCt3tP$^P+LWle zCiq72#A=;t{&!QRp1NltZ+}xUm^(0sdEYspX{sfz5hW>!C8<`)MX5lF!N|bSSl7@% z*U%!wz`)AL!pgu>*TBTez##N=XeNq=-29Zxv`X9>RHnVX3e>>h>FVdQ&MBb@0P%Zc AcK`qY literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_54.png b/extra_fonts/25px/hdf_54.png new file mode 100644 index 0000000000000000000000000000000000000000..01ab880e017cfb68ad5b1f27a4fd589051d98234 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+h#0(@Ovi*MnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes4G^$jl=7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z_jGX#;kcg6!OP2=$RNzKhL7ipdI1ANN+YZRk z^mK6y;kcg6k(j`dxL^iHY64H90FX!!;1%FaNZ{oyO-SHi^?Jy}&~3%DnB}hTLZBwq z64!{5l*E!$tK_0oAjM#0U}&ssXrOCo5n^CqWn^JxV5w_hVr5_udO9={MMG|WN@iLm WZVf8a-d+W2VDNPHb6Mw<&;$TCW>Jd( literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_56.png b/extra_fonts/25px/hdf_56.png new file mode 100644 index 0000000000000000000000000000000000000000..afb698d13f73b62e2deba699bc7a8c1d220a4174 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRm#0(_+&P|;Uq*&4&eH|GXHuiJ>Nn{1`8H8XR93QiEBhjN@7W>RdP`(kYX@0Ff`URG|)A)2r)3Q uGP1BTu+%j$u`)0SJsp~fq9HdwB{QuOw+5AIZ?6J1FnGH9xvXB literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_57.png b/extra_fonts/25px/hdf_57.png new file mode 100644 index 0000000000000000000000000000000000000000..98704450e58490adb5b234ca5ad10536c7d85a87 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^qChOc#0(@ep2yt=QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z;pFM!7{YPA^~^?21_d6Mi<=9WH~Z_n5$^cC{!yl|z`^@_-YF}r=u&T5*>r^eXm7|R zkMizbxi&V^7514*$~G{B~b~rm2>=MwFx^mZVxG7o`Fz1|tJQV_ic7 zT|}#<1B1}hp_wQea`RI%(<*UmP?`4jDo_K1r>mdKI;Vst0K*_= ALI3~& literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_58.png b/extra_fonts/25px/hdf_58.png new file mode 100644 index 0000000000000000000000000000000000000000..63d1d0435124e05aa9d4e612fc92be3763ecc1e8 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRm#0(_+&P|;Uq*&4&eH|GXHuiJ>Nn{1`8H5+66UE{9AqGefTMbmX`Bo+((iP*B{(?V~+BpHB&OI#yLQW8s2t&)pUffR$0fuXUk zp@FWUMTmicm63&&fu*j2iIsst=;_c*6b-rgDVb@NxHYIudwUhAfx*+&&t;ucLK6Vo C4r$8( literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_59.png b/extra_fonts/25px/hdf_59.png new file mode 100644 index 0000000000000000000000000000000000000000..38c401e4d6e77ff697deea72056e7e0c27252132 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+h#0(@Ovi*MnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes4G^$jl=7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPu z^>lFz;kcg6k(j`d$iXVOh^L231}0Vp j2BD`zGf_0;=BH$)RpQp5GVSeEpaup{S3j3^P6Nn{1`8HC}rz?yeElh^V96b&lk0+(LPE2ty6R~Dscx1w*(eZZf zaiA{M64!{5l*E!$tK_0oAjM#0U}&ssXrOCo5n^CqWn^JxV5w_hVr5_udO9={MMG|W aN@iLmZVf8a-d+W2VDNPHb6Mw<&;$Tr>{D<6 literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_5b.png b/extra_fonts/25px/hdf_5b.png new file mode 100644 index 0000000000000000000000000000000000000000..d1853fb76933ba0b5ca6f5f8d3ef2d96ea4b90db GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTm#0(_;J?|R>DVB6cUq=Rpjs4tz5zm0Xkxq!^4042^XS z4Rj4HLJSP7j4Z4SEOiY`tPBi7PlslrXvob^$xN%ntwCkl+p9ng44$rjF6*2UngIOQ BO<4c{ literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_5c.png b/extra_fonts/25px/hdf_5c.png new file mode 100644 index 0000000000000000000000000000000000000000..228552606e56cc5a3796a8fda530e3ef2746b5d9 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fICj9R4Y~O#nQ4`{HK=O>O`H literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_5d.png b/extra_fonts/25px/hdf_5d.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca5635401406369a0abddf10dd9a1185d24ac4e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTm#0(_;J?|R>DVB6cUq=Rpjs4tz5!C8<`)MX5lF!N|bSSl7@% z*U%!wz`)AL!pgu>*TBTez##N=XeNq=-29Zxv`X9>RHnVX3e>>h>FVdQ&MBb@0E*g5 AmjD0& literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_5e.png b/extra_fonts/25px/hdf_5e.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9692f0e8f21ffdfb78e789c3033c70159d8b53 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bB#0(?@8{RhnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIs(>K%p!(A)&N1K_Hcf;jw_m5}*>bJIt?tTyTyDGF3}lBT7;d zOH!?pi&B9UgOP!uv96(kuAxPUfq|8gg_VJ&u7Qb_fkEi$&`cB!x%nxXX_dG&s7!l% Q6{vy1)78&qol`;+0BNn{1`8H4>_4qjef24M!?xlHrd9pXv=N~)H)MwFx^mZVxG7o`Fz1|tJQV_ic7 zT|}#<1B1}hp_wQea`RI%(<*UmP?`4jDo_K1r>mdKI;Vst0L>{% Al>h($ literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_60.png b/extra_fonts/25px/hdf_60.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ffb74e6a6a3fd8e028120e9be72d9ca71e1656 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol*#0(^t)TI~zDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI+YZPO z_jGX#;kcg6k(eNmnvhVMkie6$04VObn~_0s-9Z^3Q?2OC7#SEE z>lzy98d`)H7+4uuSQ%LA8kkra7=)e<%|y|Vo1c=IR*74K%Cxsvff^V*UHx3vIVCg! E07NcKPXGV_ literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_61.png b/extra_fonts/25px/hdf_61.png new file mode 100644 index 0000000000000000000000000000000000000000..4340f4e693f552f1206fb5811dfdbfb3416a11c2 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H$;i_gme8lhU^8c~vxSdwa$T$Bo=7>o=IjdcwTbPX*+3=FJ{EUXMH obq!3c3=Bd~hi0N^$jwj5OsmALL1o(8t3VA5p00i_>zopr0JYj*4gdfE literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_62.png b/extra_fonts/25px/hdf_62.png new file mode 100644 index 0000000000000000000000000000000000000000..0aca03901b7f18e8b97fe5c4b69db831f51ab6e9 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8HNn{1`8HAV~g^PIBEL_O5sL$byz$pPHm5qrLWIT91bUpaR7#OnlvD+=z z;n)t;rdr|}QIe8al4_M)lnSI6j0_Bobqx)44J|?p46KYStPCu54NR;I3_?$bW};}w b%}>cptHiBAW!l@TKn)C@u6{1-oD!M<$=g;S literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_65.png b/extra_fonts/25px/hdf_65.png new file mode 100644 index 0000000000000000000000000000000000000000..976d88675c5bef2202646b835c0ea0e871612ea1 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H4;NCrOD2XJ!c(S!W3sNhb+~B^u5d85$Dp3{x96XmD7yFkNM;T*!CB zhlwFaoPAN%+h>|U{i-Fd5hW>!C8<`)MX5lF!N|bSSl7@%*U%!wz`)AL!pgu>*TBTe kz##N=XeNq=-29Zxv`X9>RHnVX3e>>h>FVdQ&MBb@0FD7x+yDRo literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_66.png b/extra_fonts/25px/hdf_66.png new file mode 100644 index 0000000000000000000000000000000000000000..2f8b324a5726a2af2b71edf15808f32e239d0632 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIo{i^PkEjVyk!p!+L`h0wNvc(HQ7VvP zFfuSS)-^QHHM9sZFt9SRurjdJH88ONn{1`8H4;731?Ty2xn(W7um)cic=I>JdzG8SWb|d5H&%LZG}aIdj?0q8AgU^ zptZ)5cV&QjRZCnWN>UO_QmvAUQh^kMk%6JHuAzahp+$&+ft8Vkm4T(Mfr*uYLFnnw fOcV{d`6-!cmAEyiOnZA3sDZ)L)z4*}Q$iB}4`Ede literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_68.png b/extra_fonts/25px/hdf_68.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb28c1b617e56b4f71f2eed866049bf4e608f6f GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bB#0(?@8{RhnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIbZ91uhTQy=%(P0}8dRpey$aO8 N;OXk;vd$@?2>=^;Q0@Q# literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_69.png b/extra_fonts/25px/hdf_69.png new file mode 100644 index 0000000000000000000000000000000000000000..68d1c66afbdbbf51505687b198d15c9451bb0274 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`1R|Zn*Ove(mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z@^o}#<1B1}hp_wQea`RI%(<*UmP?`4jDo_K1r>mdKI;Vst0AZ6% ATmS$7 literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_6a.png b/extra_fonts/25px/hdf_6a.png new file mode 100644 index 0000000000000000000000000000000000000000..ab33190e70ef211714448eb37b0338b128bacd61 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTm#0(_;J?|R>DVB6cUq=Rpjs4tz5Bah-52c1_31cXi<5a1Hw;cd8}P}iZs?83K%ZOJsl7Dbjd z!a%Rs|L2;fc2heEXn<;oYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FOF)*+)vam9+)HN`% lGB5}|9h!-vAvZrIGp!Q029;@VuL3nNc)I$ztaD0e0str$SP=jK literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_6c.png b/extra_fonts/25px/hdf_6c.png new file mode 100644 index 0000000000000000000000000000000000000000..574d7c8d6126fb67df52e175010748679ecbcaa8 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`1R|Zn*Ove(mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z^K@|x;kcg6k*L6Sh>>B-A2wU}lJM_98PyWkh?11Vl2ohYqEsNoU}RuutZQhXYiJQ- wU|?lrVP#;cYhYq!U=VsbG!sQbZhlH;S|x4`D%0Lx1!`dMboFyt=akR{0Qv+I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2%e}7{YNqIpF}elT)O#goINggU6<}4l9Ee1GWu8ZjV?Q?kwib(7UtXKTx%5iEBhj zN@7W>RdP`(kYX@0Ff`URG|)A)2r)3QGP1A&vJFhE3=DXF3aFrH$jwj5OsmALp?1j% Rpx+o6JYD@<);T3K0RVgqQb7O! literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_6e.png b/extra_fonts/25px/hdf_6e.png new file mode 100644 index 0000000000000000000000000000000000000000..3bdd847b451258279af0efaa45a9c8a79c8293c2 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bB#0(?@8{RhnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIzm0Xkx zq!^4042^XS4Rj4HLJSP7j4Z5xYy%T30|TC)0xBpPa`RI%(<*Ums9mxG=qm;WPgg&e IbxsLQ0Qs3r@c;k- literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_6f.png b/extra_fonts/25px/hdf_6f.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4a9ed0c42387b556e10d6b4824e73aa7fa80fe GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H4;NCrOD2XJ!c(S!W3sNhb*f6*acW4yFoQ6>K9I7;MeiX1h+?tOwMh zTH+c}l9E`GYL#4+3Zxi}3=EBR4GnY+EkXNn{1`8H4;7Cns46Cue2}Cs}6+CrPJ<01<7rlZ{syt~PyXY51}ziQ!r|H~ZU7 z!XUF$OI#yLQW8s2t&)pUffR$0fuXUkp@FWUMTmicm63%NkZoXMWnjSbQ$PhpLvDUb ZW?Cg~4Yf;F06odT;OXk;vd$@?2>^wGRn-6h literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_71.png b/extra_fonts/25px/hdf_71.png new file mode 100644 index 0000000000000000000000000000000000000000..8242d0de14e2a65175d5fc2e59ff61ea069d06fb GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H4;731?Ty2xn(W7um)cic=I>JdzG8SWb|d5H&%Ljg5zg!Fv+B-S4Fn z(}B8FOI#yLQW8s2t&)pUffR$0fuXUkp@FWUMTmicm63%NkZoXMWnjSbQ$PhpLvDUb ZW?Cg~4Yf;F0R70o;OXk;vd$@?2>=UDQwjh8 literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_72.png b/extra_fonts/25px/hdf_72.png new file mode 100644 index 0000000000000000000000000000000000000000..aca6dffed81d2c2d96d1ef802101c1b9039894d5 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIk0;j+q+n2q7^p(E#5JNMC9x#cD!C{XNHG{0 z7#iyu8t58YgculD8Ch5X*#;(71_nGo1yoQpzopr E03kO_;{X5v literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_73.png b/extra_fonts/25px/hdf_73.png new file mode 100644 index 0000000000000000000000000000000000000000..290b774ce3958379a2096982f9d4a3a31f8135e7 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bB#0(?@8{RhnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIX$5c%DxOYE~_AjVMV;EJ?LWE=mPb3`Pcq#=3?Ex`q}Z1_o9}7FIyEfr*uY0nbkX f6%-A*`6-!cmAEz3E?EKeDg%S3tDnm{r-UW|Sprf? literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_74.png b/extra_fonts/25px/hdf_74.png new file mode 100644 index 0000000000000000000000000000000000000000..f4bedc7ecb48ec84948b214ba4837574ebeb9e77 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI_2snuyY;uy2aFz&QWcYTM_4s9f^G`s9swJ)wB`Jv|saDBF zsX&Us$iUE8*U&)M&?3aZz{<$N3dlAvu`)2=`6-}+q9HdwB{QuOw}#p!D}df&VDNPH Kb6Mw<&;$UdOiz3O literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_75.png b/extra_fonts/25px/hdf_75.png new file mode 100644 index 0000000000000000000000000000000000000000..37ef4b6350ec3c93656683a8a43d0fc142db6be1 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bB#0(?@8{RhnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIcptHiCLcF78$w-^{a MUHx3vIVCg!0Pq@6egFUf literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_76.png b/extra_fonts/25px/hdf_76.png new file mode 100644 index 0000000000000000000000000000000000000000..451ddd063d0ff0f967d7485518cc2e467ea925b6 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eL#0(@i$9(w-q*&4&eH|GXHuiJ>Nn{1`8H4;7CkdB_5h9((Ur8_=?^(!~a7N%%!vUauhD~fKm49dS0#&P)xJHzu zB$lLFB^RXvDF!10Lt|Y-16@Ol5Ca1%BMU1a+rY%iz<}qcfC`F+-29Zxv`X9>YL~14 Q+Qq=&>FVdQ&MBb@0E3uR?EnA( literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_77.png b/extra_fonts/25px/hdf_77.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd6305dda575c523a947345e520301af6a4beb4 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv+#0(@;f9lNvQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zVd3fG7{YNqIpF}e(}V>a0_+AIMr}riJi^?<-PqZ}!ouAZUcP$u>HvdCL23enSKA?v z4PhZd@<7v6xk~^2*pdV^L$$;;q9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4uuSOM7v mCRPRpJU<0gP&DM`r(~v8;?_{RWChU23=E#GelF{r5}E+;d0Hg^ literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_78.png b/extra_fonts/25px/hdf_78.png new file mode 100644 index 0000000000000000000000000000000000000000..4642b25797fb59a3b79bd9c50811cb67b89993ae GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bB#0(?@8{RhnDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIcptHiCLcF78$R~Z;QUHx3vIVCg!01nGm*Z=?k literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_79.png b/extra_fonts/25px/hdf_79.png new file mode 100644 index 0000000000000000000000000000000000000000..3ade9dc059230d1d6f708e921cd4f9b26f7d5a98 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp@KrF$;3?yUb%|8yLSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#&s z!qdeugyVYYsf~;b3LHlcL>MsrHehOfv%jk$=-1I&;UBrmWfzZ4`E!VQ+I#kg&1P<` z%|;>GzG>{+*x3K)Uvy#vnxR_a8c~vxSdwa$T$Bo=7>o=IjdcwTbPX*+3=FJ{EUbWR n0~0F)1D>A(DkvIq^HVa@DsgM5U9tk`V+ICKS3j3^P6T6SjgBH6&W%C}iVA71oW>3<4__HFGWh;udzO67 z%>k%QwZt`|BqgyV)hf9t6-Y4{85kPt8XD*tT7(!FSQ%MZ0oev7Rt5$I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OF{)5S4_<9c#}#4RB2 z00X0!QgbYjrCQ<|QIe8al4_M)lnSI6j0_Bobqx)44J|?p46KYStPCu44NR;I3_kCP gyNjYBH$NpatrE9}riafGff^V*UHx3vIVCg!0MIl>bpQYW literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_7c.png b/extra_fonts/25px/hdf_7c.png new file mode 100644 index 0000000000000000000000000000000000000000..9f2e7f0ad5a36a449b8a0d22d201c4906ff37f02 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Eb$P6T3neLkfq*&4&eH|GXHuiJ>Nn{1`8H8bTtEmr>mdKI;Vst05bPQ5C8xG literal 0 HcmV?d00001 diff --git a/extra_fonts/25px/hdf_7d.png b/extra_fonts/25px/hdf_7d.png new file mode 100644 index 0000000000000000000000000000000000000000..b31725607da7fe2f610257b3e4147736db4a6d73 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR#0(_8_we%pDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIo=IjdcwTbPX*+3=FJ{EUbWR0~0F)1D>A(DkvIq^HVa@DsgM5U9tk`DFy~lS3j3^ HP6I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OF{)5S4_<9c#}1V}>- z1EWx+u{e;WTH+c}l9E`GYL#4+3Zxi}3=EBR4GnY+EkX>3A literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_22.png b/extra_fonts/34px/hdf_22.png new file mode 100644 index 0000000000000000000000000000000000000000..214363e65d836d9d82091a0aa1f4619c2d851a64 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^+(0bP#0(^TTJKu`DVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIqoXA$70@V`Nh?11Vl2ohYqEsNoU}Ruu ztZQhXYiJQ-U|?lrVP$HeYhYq!V6ZzTU?+-(-29Zxv`X9>PBFd!`Jchl)z4*}Q$iB} DAmmHj literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_23.png b/extra_fonts/34px/hdf_23.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2ae09e9c6c500ed0a65da4c44a934b89f88952 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9f#0(^-+m%WIDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI%tU{9uZz3IN)T|V#LJRCXg~oRE39yFT&#(Lm>Nx zR=yp&$GI6!EfT%9$RZcyCDjtwh?11Vl2ohYqEsNoU}RuutZQhXYiJQ-U|?lrVP$He nYhYq!V6ZzTU?+-(-29Zxv`X9>PBFd!1rmd&tDnm{r-UW|$D3As literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_24.png b/extra_fonts/34px/hdf_24.png new file mode 100644 index 0000000000000000000000000000000000000000..09665b08d74df30c92fe0feac1b9818f0cd4b022 GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8HUO_ zQmvAUQh^kMk%6JHuAzahp+$&+ft8Vkm8pfUfr*uY!S0xVohTY|^HVa@DsgK##rOgg Ob_|}belF{r5}E);vTLpY literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_25.png b/extra_fonts/34px/hdf_25.png new file mode 100644 index 0000000000000000000000000000000000000000..31cd93fb97b8928094c6d1ffda1428275401f1cf GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)v#0(@`UYfoGQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z5$oyV7{YOVYVStg0|p!{_gST9)JilmeT!GM32=GYlp?$7|Gfj{OcR=xICjtK^Ok!a zJhy@We9)Vtrvewd_u6jUdyh$Lg74`iie}5^aK8AYmwe*?Ozmyq)!#kh|ITG+X%%XC ze)WqA&?40m*NBpo#FA92mdKI;Vst007u?f&c&j literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_26.png b/extra_fonts/34px/hdf_26.png new file mode 100644 index 0000000000000000000000000000000000000000..66838ee9f69eb6409e90f457888e5124728327de GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz9#0(^7DX_)@DVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIW1kynFSuZv7E`+X(^UzIFAN=K{@FEpd$~ zNl7e8wMs5Z1yT$~28PDEh6cKZ79j=(Rz?<9rWU#eCRPRpyJG@&qG-s?PsvQH#I4~J S;|oymF?hQAxvXjc?PRtckiqNe;us=vIXOXsbqO;A zqZtFE)YV>bpoD6PYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FOF)*+)vam8W(={-$GB9|Z hto;NI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3h}57{YNqIYA&bfg?46hf(nwgF#V(Kzopr0HGXIegFUf literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_29.png b/extra_fonts/34px/hdf_29.png new file mode 100644 index 0000000000000000000000000000000000000000..2f2f7acc6bdf58ea5628cce3e495bf6307d20a48 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^96&73#0(^tZ%VNSQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq37x17{YNqnIkcQBQ-&wltJ+tgFq6?A^{DilMfww7ILKaFb3>hlThq((921J;d%z= z=RYz#?g4eGmbgZgq$HN4S|t~y0x1R~14Cn7Ljzqyix2|?D eQ8eV{r(~v8;?{7A@dYSg7(8A5T-G@yGywql4OZ#^ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_2a.png b/extra_fonts/34px/hdf_2a.png new file mode 100644 index 0000000000000000000000000000000000000000..36d4b22b76db2f18f45915511354f600fc60d333 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^AhtXcGmu>DzJ(1)v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN*sN zzNd?02*>s01cpWi4l#~`1P)G~1P)%_1OeXCgan?%gaqDHhRv>#vJw#zk}EhFbl0&? z`u4?rGEl2(iEBhjN@7W>RdP`(kYX@0Ff`URG|)A)2r)3QGP1BTwa_&%u`)2&9TTt< dMMG|WN@iLmZVjgxUw}e}!PC{xWt~$(697IyQNsWL literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_2b.png b/extra_fonts/34px/hdf_2b.png new file mode 100644 index 0000000000000000000000000000000000000000..40ec7ce0e11fa8f66b382f3ad0bd46aeb4ae72f8 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8H!C8<`)MX5lF z!N|bSSl7@%*U%!wz`)AL!phV_*TBTez+iVwz)lnmx%nxXX_dG&oMLT literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_2d.png b/extra_fonts/34px/hdf_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..e980a2ddecbbfd029dec4e4e55392f78801319cc GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^oIotk#0(@o3iw%p6id3JuOkD)#(wTUi6A~>age(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5l;8~T z32_C|Ake_D<3V9Jkil3I2OC7#SEE>lzy9 z8d`)H7+4uuSeaVr8kkra80?M-*omScH$NpatrE9}Q;aV_o@elM^>bP0l+XkK>MTjf literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_2e.png b/extra_fonts/34px/hdf_2e.png new file mode 100644 index 0000000000000000000000000000000000000000..46ff3f90b7bbfeff7861adeb52832d10c332e41e GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^tUxT!#0(^ZeBO5hDVB6cUq=Rpjs4tz5I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3r467{YNqIUym{K|xT0D=~qiLCH;_s6lCmQ=rOLgI1u0Cl)jRWRDO00#vSA;u=ws zl30>zm0Xkxq!^4042^XS4Rj4HLJSP7j4Z57Ep!b`tPBix#{}#|(U6;;l9^VCTf-^F R7ogB!@O1TaS?83{1OPl`QEUJJ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_30.png b/extra_fonts/34px/hdf_30.png new file mode 100644 index 0000000000000000000000000000000000000000..93bb7dc75b87918232013143f32456f2d2343f11 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zSbMrShHzX@PGD%hAi&0U>_Pw=+qDY;>}(e=Twq|k$Z(ONEr9)+KuS~NL<^=+=^Gjw z7A8DCDAu_42sgv_-NLeVos~O*#;BIKMwFx^mZVxG7o`Fz1|tJQV_ic7T|}#<1B2Z$0jL^s^HVa@DsgK##rOggN(`Q^elF{r5}E+9o?R>e literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_31.png b/extra_fonts/34px/hdf_31.png new file mode 100644 index 0000000000000000000000000000000000000000..18c7b2e7a3378f79fd68116814caeee0bfc20776 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^AhtXcGmu>DzJ(1)v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN*sN zqNj^v2*>s0ga*cA3~X#+3Szto2|TNn{1`8HNn{1`8HpZXycOFg|pZNd&GaV zY@MrjIIR8l>FeJo9G1W39Xfs9?Kum5{=H&+_*CHJi#beLKvPvqTq8zopr0L3_Jxc~qF literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_34.png b/extra_fonts/34px/hdf_34.png new file mode 100644 index 0000000000000000000000000000000000000000..40456e58e7137840d77fa600919b4e38db1f6a92 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8H)t`Q|Ei6yC4$wjF^iowXh&{)^dK-bVB#K6GH$im9h oLf62=%D`ZEOu$YQ4Y~O#nQ4`{HJoC60SY7rPgg&ebxsLQ0Hokn{r~^~ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_35.png b/extra_fonts/34px/hdf_35.png new file mode 100644 index 0000000000000000000000000000000000000000..6372710d7af30ee2b9c4b6f6ea494118ece9c922 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z*m}A+hHzX@PGDfXcHsg8&ml$)#V)rUZ48|k0@wuv8B}FloE_W_aJp#-ay@e5V86() zgO7c}M+Z>{xjF`hkNg7n*k|kqc~`Z>HKHUXu_VFVdQ&MBb@0DC!DFaQ7m literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_36.png b/extra_fonts/34px/hdf_36.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5aad906649ee5df954a32bc35543a39a21b49b GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zczU`xhHzZ3?cFGNz<`6<^&rQsc0r8`|5mdceOZ()8h@anjeXHQ#?;G*MgnyUpg0!gA$ei9djbs+PD$l%ynNn{1`8HuWE^FL`h0wNvc(HQ7VvPFfuSS)-^QHHM9sZFt9SRurjsKH88OX zs|LYkWd=gLiL8Z+WsRO4oC4DY7#W0xgj;Vs)#e5osaoP1QIe8al4_M)lnSI6j0_Bo zbqx)44J|?p46KYStV}I*4NR;I40gu^>_pL!o1c=IR*74~DaIF|5M%Ik^>bP0l+XkK DZgE{d literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_39.png b/extra_fonts/34px/hdf_39.png new file mode 100644 index 0000000000000000000000000000000000000000..13f016860b4280518dd7e79caa30d7900af89eff GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zcze1yhHzZ3?LEkQz<`J8RdP`( zkYX@0Ff`URG|)A)2r)3QGP1BTwa_&%u`)2&9TTtlwSVH+S?3piNn{1`8Ho=IjdcwTbPX*+3=FJ{EUZi| obq!3c3=Cwoqj^y@mdKI;Vst0QQzvasU7T literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_3d.png b/extra_fonts/34px/hdf_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..48a34ef759c509194dafcfe901161fb8ca6481a5 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zhhHzX@PEg=)X=`g+AUtKoVJ3!WpNn{1`8HCe^z~JfX=d#Wzp$P!h@>H?_ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_3f.png b/extra_fonts/34px/hdf_3f.png new file mode 100644 index 0000000000000000000000000000000000000000..29ab0bbecf5533e5bc6d25644443ccfe311366a0 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8H2OC7#SEE>lzy9 z8d`)H7+4uuSeaVt8kkra7|3cz^P*_T%}>cptHiA#r|j`Ypaup{S3j3^P6?EH%_swOd&6K=#j7eiJ-3r*=uS zuDQ7Q<&|@rxQ?eaG1@$AzQ5$_nSXz$-+lgHPNiw)8zG=0R7+eVN>UO_QmvAUQh^kM zk%6JHuAzahp+$&+ft8Vkm8qq!fr*uYfvk2kFN%iT{FKbJO57T9${ue7YGCkm^>bP0 Hl+XkK3y6Vk literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_41.png b/extra_fonts/34px/hdf_41.png new file mode 100644 index 0000000000000000000000000000000000000000..b909b2c0aced14de58332ec255f2dcc0e77a5b3e GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g<#0(_oUA>wBq*&4&eH|GXHuiJ>Nn{1`8HRdP`( zkYX@0Ff`URG|)A)2r)3QGP1BTwbV5*u`)1_)sE&x(U6;;l9^VCTSHFSZ5SDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI+YZR^ z_H=O!;kZ7v?;!6110JT6iYzZ3_SZ6Yweu#c)Y)|6>8mn638c~vxSdwa$T$Bo= z7>o=IjdcwTbPX*+3=FJ{EUZi|bq!3c3=Cwoqj^y@mdK II;Vst0QUlDJpcdz literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_44.png b/extra_fonts/34px/hdf_44.png new file mode 100644 index 0000000000000000000000000000000000000000..3040791b18e5da948822f1532587cc161af67d64 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^qChOq#0(@$ALS(jDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI+YZQZ z@N{tu;kZ8a+(tnL1rFu|0XxK%BWC;!7i69{&FeGobQTp^hXaQu%UM{sXlvv=zVKar z+fL)vjr?Py*U4Y~O#nQ4`{HRO~%-U!sd;OXk;vd$@?2>{xfVjutj literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_45.png b/extra_fonts/34px/hdf_45.png new file mode 100644 index 0000000000000000000000000000000000000000..8238d84c18ad6609705fe6261239d55e68ba46a6 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9f#0(^-+m%WIDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI}#<0|Qy@XkHWzx%nxXX_dG&FVdQ&MBb@08s@^ApigX literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_46.png b/extra_fonts/34px/hdf_46.png new file mode 100644 index 0000000000000000000000000000000000000000..e651ddbd64879ed158a9933c907b1e3d199b2d30 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8HD7MEH*I*DpW0TjVMV;EJ?LW zE=mPb3`Pcq#=3?Ex`q}Z1_o9}7FMQ~x&|gz1_rX)(Yz=ca`RI%(<*Um$SHfg5vYN| M)78&qol`;+0Ia=D>Hq)$ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_47.png b/extra_fonts/34px/hdf_47.png new file mode 100644 index 0000000000000000000000000000000000000000..f54a4bd559fdfb8e7dc926769bec7ea94bf17725 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g<#0(_oUA>wBq*&4&eH|GXHuiJ>Nn{1`8HZ5SDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIMSYsS4%vAwlk=fxJHzuB$lLFB^RXv zDF!10Lt|Y-16@Ol5Ca1%BMU22OI-sKD+2>r?Py*U4Y~O#nQ4`{HRO~%-U!sd;OXk; Jvd$@?2>@jdO$Gn} literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_49.png b/extra_fonts/34px/hdf_49.png new file mode 100644 index 0000000000000000000000000000000000000000..6867c5a4c6c038bbad1517feb26fb8f7d8da31e3 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^tUxT!#0(^ZeBO5hDVB6cUq=Rpjs4tz5|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zXnMLhhHzX@PDn`LOYwkcspt~ zP?KtjYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FOF)*+)vam9>)HN`%GBA+Uj^;(tkei>9 YnO2EgLr&S_jX(_yp00i_>zopr0L?;D-T(jq literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_4b.png b/extra_fonts/34px/hdf_4b.png new file mode 100644 index 0000000000000000000000000000000000000000..2cb66f6e2907b7e9e38f2762a125cdb1d8c4b368 GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz9#0(^7DX_)@DVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI-Of4-lI1T07m;|;lFI7|#WMEikE4A#v<{}-Sv8pAm5hW>!C8<`)MX5lF z!N|bSSl7@%*U%!wz`)AL!phWA*TBTez(7_znioYwZhlH;S|x4`Ic1MG0yQvry85}S Ib4q9e0JC3PB>(^b literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_4c.png b/extra_fonts/34px/hdf_4c.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7ee9866ceb6c75f5f066045dd55c1e093cdd5a GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8Ho=I zjdcwTbPX*+3=FJ{EUZi|bq!3c3=Cwoqj^y@mdKI;Vst E0O$lwJOBUy literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_4d.png b/extra_fonts/34px/hdf_4d.png new file mode 100644 index 0000000000000000000000000000000000000000..ff86a669eddeeed2d75ad9ff369f01811d85802d GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6V#0(@0#rMSlDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIFMGa!f`#BgEujOAxT2?)PauKMG3BpVq_y?C$3-!^f_hdFh$g*wdK(g87HR$AsS|0 zCJfC=QVb0BUsRrclRe!8G(@$;HKHUXu_VKd3>85qcFNAsd+$jwj5OsmALA*bx|MxX`;Pgg&ebxsLQ0M=bv9smFU literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_4e.png b/extra_fonts/34px/hdf_4e.png new file mode 100644 index 0000000000000000000000000000000000000000..83ed5db9313d27ba14f4611eb7cca1fa3b7d5c6c GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv~#0(@W{>Z5SDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI{gE=CDioA9{qv_fMw1N_Z4Q7YqN=yon|oZY&C&n!C8<`)MX5lF z!N|bSSl7@%*U%!wz`)AL!phWA*TBTez(7_znioYwZhlH;S|x4`Ic1MG0yQvry85}S Ib4q9e0GvT&uK)l5 literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_50.png b/extra_fonts/34px/hdf_50.png new file mode 100644 index 0000000000000000000000000000000000000000..5f69a4a6d4263ed8593a8c5b033ae2914aae911e GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9f#0(^-+m%WIDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIv{91N3rcoa-i zCb%##T>m1m;GWIvEkF}gOI#yLQW8s2t&)pUffR$0fuXUkp@FWUMTmicm63&&sim%g miIstYtadaniiX_$l+3hB+!}Jq9&ZF{VDNPHb6Mw<&;$SvGFH0) literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_51.png b/extra_fonts/34px/hdf_51.png new file mode 100644 index 0000000000000000000000000000000000000000..c24bb6dc1223b00845e986f6d1d6699ceffd51ab GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6V#0(@0#rMSlDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI}%W!g0N~?;z&^10Lqk749GG{(X7xzV*MBt@?%hYz`xFWlyUd!%Xv}-`6%QeCQ|6 zq@gN*M!C8<`)MX5lF!N|bSSl7@%*U%!wz`)AL!phWA*TBTez(7_znioYwZhlH; YS|x4`Ic1MG0yQvry85}Sb4q9e0Be11t^fc4 literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_52.png b/extra_fonts/34px/hdf_52.png new file mode 100644 index 0000000000000000000000000000000000000000..c0df10725f7c5469b36ccd76c3abf0f62cce1779 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv~#0(@W{>Z5SDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI2OC7#SEE>lzy98d`)H7+4uuSeaVt8kkra j7|3cz^P*_T%}>cptHiA#r|j`Ypaup{S3j3^P6Z5SDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI}#<0|Qy@XkHWzx%nxXX_dG&FVdQ&MBb@09yTS4gdfE literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_54.png b/extra_fonts/34px/hdf_54.png new file mode 100644 index 0000000000000000000000000000000000000000..2c55be02921f2d15a24cec443bddea6b591dc9b1 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^!ayv~#0(@W{>Z5SDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIZ5SDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI)HN`%GBA+Uj^;(t ckei>9nO2EgLr&S_jX(_yp00i_>zopr057^zng9R* literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_56.png b/extra_fonts/34px/hdf_56.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3f509ad590fa0cf0603961f2f6225e49579155 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz9#0(^7DX_)@DVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI@eis!T5bmdn0SqH6^~!pAVe2i_n$p?U{T=1!$~liEBhjN@7W>RdP`( zkYX@0Ff`URG|)A)2r)3QGP1BTwbV5*u`)1_)sE&x(U6;;l9^VCTSHFS>5zG|Ut}JW{yJyVE%I7jx3V8-wrYuML`h0w zNvc(HQ7VvPFfuSS)-^QHHM9sZFt9SRurjsOH88Ozm0Xkxq!^4042^XS4Rj4HLJSP7j4Z57 pEp-h{tPBifwWE1aH00)|WTsW(){s;7cq32)gQu&X%Q~loCIDR3RsaA1 literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_5a.png b/extra_fonts/34px/hdf_5a.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5fa4dbfb595daba7f163b02dfad73360eb32aa GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^f|RMhY)0XGdGZNrnw646{@=O}fBP^K0VN2ixWfFffR$ z5_v25^y~_tR@D;Mh?11Vl2ohYqEsNoU}RuutZQhXYiJQ-U|?lrVP$HmYhYq!U?8g< g&5NQTH$NpatrE9}oU+Foff^V*UHx3vIVCg!08brO3jhEB literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_5b.png b/extra_fonts/34px/hdf_5b.png new file mode 100644 index 0000000000000000000000000000000000000000..6328f654e3da138f9897ca3edfc868703ea517aa GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^96&73#0(^tZ%VNSQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>`@e7{YNqnS(dAL5b~^;)G3t`Q|Ei6yC4$wjF^iowXh&{)^d zK-bVB#K6GH$im9hQrE!5%D_NYJDL|oLvDUbW?Cg~4LN0xHv%;~5@ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_5c.png b/extra_fonts/34px/hdf_5c.png new file mode 100644 index 0000000000000000000000000000000000000000..4f956aec130746beb13476daefe7e951fa6b574e GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^oIotk#0(@o3iw%p6id3JuOkD)#(wTUi6A~>age(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5l;8~T z32_C|Ake_D<3V9Jkil3II(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>`@e7{YNqnS(dAL4oa+;*6OL=F@q+JX!AX0%cW8Tq8I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3!A77{YNqIl+M;kX=Dgs=>#gt<8b+T0?-uLj|rN?hszZhDAIJ3!17J7$&~rh+MX! zGZ3gvwZt`|BqgyV)hf9t6-Y4{85kPt8XD*tT7(!FSQ%Mb85rmqm;g!riPb=VAZf_W aPsvQH#H}Ij%wY?l1_n=8KbLh*2~7aL8B@0a literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_5f.png b/extra_fonts/34px/hdf_5f.png new file mode 100644 index 0000000000000000000000000000000000000000..90e1a195253533eb6b28df630463121e33d8f1d8 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9f#0(^-+m%WIDVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fI}+A|Y^#_UijOl!ZoPk40;oo{#5JNMC9x#cD!C{XNHG{0 z7#iyu8t58YgculD8ChBx80Z?907?Cc)j&rhX~@k_$xN%nts(BrVGE!J22WQ%mvv4F FO#sPIOg;br literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_61.png b/extra_fonts/34px/hdf_61.png new file mode 100644 index 0000000000000000000000000000000000000000..0c15292c63908b88f75f62d3a84bfa88a1d6d49d GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zIC#1^hHzX@PEcTKX)`j|(ALIg(9zV%a7~~sfZa`laS9)!CMO7KCAv)GO=Zv)V--@k z8PGAwVM5Y|IG`)`T@aYzYq#qf&@9yw*NBpo#FA92Nn{1`8Ho=IjdcwTbPX*+3=FJ{ sEUgR-bPY^^r2fQepvRCjmdKI;Vst0P{&#b^rhX literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_63.png b/extra_fonts/34px/hdf_63.png new file mode 100644 index 0000000000000000000000000000000000000000..bb52b16d7e6e11affea63273e2fc8560904aa1c7 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zSb4fQhHzX@PEcU#XfrS{Xlt`F*wEI-=D=~0;hF$jAiIL#sRJBJ4Ghf;o)!$89Z4(V z*gFCfoIf%#%>KudXyW}W7-))WiEBhjN@7W>RdP`(kYX@0Ff`URG|)A)2r)3QGP1NX pFwiwH0h0O?tAXA^(vX{Nn{1`8Hb3drHu6Q@Vsnry@F@0LS#wZhqxt3d4eFB5 z!)^;*&01vtoPBS+;8wZKyAA?PQ7v(eC`m~yNwrEYN(E93Mh1q)x`qb2h87_P23AIv rRt5&T1|~pKe_}PzTSyvm^HVa@DsgLwJ9F3qsDZ)L)z4*}Q$iB}F=$=) literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_65.png b/extra_fonts/34px/hdf_65.png new file mode 100644 index 0000000000000000000000000000000000000000..6b61c0f472c7466f52f040c6b1b2fb1c2ec778db GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8Himp literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_66.png b/extra_fonts/34px/hdf_66.png new file mode 100644 index 0000000000000000000000000000000000000000..9492ade47372f5ec90c874e813e1c8f077c35ea8 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^AhtXcGmu>DzJ(1)v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN*sN zvZsq<2*>s01OeWJ1P&l(NoHd^CcwhS+I7%ilf_C2b_Rx26|VQueHP6?<*FsF5hW>! zC8<`)MX5lF!N|bSSl7@%*U%!wz`)AL(#pU<*T4iw>QAf&x*thHZhlH;S|x4`ac2%& Q05vdpy85}Sb4q9e0H1nJvj6}9 literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_67.png b/extra_fonts/34px/hdf_67.png new file mode 100644 index 0000000000000000000000000000000000000000..3b9279afa9c4b87d9f123549cbbacc5cf827d36e GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8Ho=IjdcwTbPX*+ w3=FJ{EUgR-bPY^^r2fQepy!Y@mdKI;Vst0KH^g)&Kwi literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_68.png b/extra_fonts/34px/hdf_68.png new file mode 100644 index 0000000000000000000000000000000000000000..661a220cd847485438a50b23a67139cdc79b0841 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zXnMLhhHzX@=165=Vq!_=m>|Ggn!v%!%iAEtxJHp@AzzO{Q=<-(J_EzPe*(LI>o=IjdcwTbPX*+3=FJ{EUgR-bPY^^r2fQepf8X#mdKI;Vst0B}oC$N&HU literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_69.png b/extra_fonts/34px/hdf_69.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ade54d89382824e561e1de1d57b3b3e4b5ee0b GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&J#0(_&_O)yU38XvvIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN*sN zkf)1d2*>qgj?@MR0S;9zB}N8;XY5NNKZ}B_RxNRjC`m~yNwrEYN(E93Mh1q)x`qb2 zh87_P23AIvRt5&T1|~pKe_}Pzxkwsv^HVa@DsgLwJ9F3qsDZ)L)z4*}Q$iB}nL$fR literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_6a.png b/extra_fonts/34px/hdf_6a.png new file mode 100644 index 0000000000000000000000000000000000000000..29db79c36d00299287022174710d06ae52de927a GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol}#0(^NR)=%|DVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}3dtTpz6=aiY77hwEes65fIVQrpVvwG=Z66^#ZP@HlyPp(^X4cBT7;dOH!?pi&B9UgOP!u zv96(kuAxPUfq|8grImq!u7L@V)Sp-lbTX2L-29Zxv`X9>;?5kl0BT_HboFyt=akR{ E0Cm1hJOBUy literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_6b.png b/extra_fonts/34px/hdf_6b.png new file mode 100644 index 0000000000000000000000000000000000000000..7aba84f05a1957db5be9f9acbea7c7805b14d5d1 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zIC#1^hHzX@=165=a$?Emm>|H*AheK=XJL=S#ef9@&Kdz7iXs{;DohVtIC=_LRx)d| zWhV=iHq2x)<4<7%n$XQ7aJeH-WIxa>)e_f;l9a@fRIB8oR3OD*WMF8lYiOWrXc1yy vU}a=!WniFdU;-rdCsqSJhom7lKP5A*61Rr9GlwmJ8W=oX{an^LB{Ts5w1-wL literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_6c.png b/extra_fonts/34px/hdf_6c.png new file mode 100644 index 0000000000000000000000000000000000000000..95c9fb9cf2ac5d5faf2a31cf74423d2daf595f2a GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&J#0(_&_O)yU38XvvIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN*q% zpQnps2*>qgj#LFvB}NA0JPyCKxgBmm8PyWkh?11Vl2ohYqEsNoU}RuutZQhXYiJQ- wU|?lrX=PxbYhVH-^(R&XorfEpM)UHx3vIVCg!00DtXKmY&$ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_6d.png b/extra_fonts/34px/hdf_6d.png new file mode 100644 index 0000000000000000000000000000000000000000..12b1d3b222bb73d3cc4ac7a68de039856af2c731 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^5I(3)PTxc7#Mzmw7p_zLneWKR-p z;eO5f9;jEf#5JNMC9x#cD!C{XNHG{07#iyu8t58YgculD8ChBx80Z?907?Cc)j-c6 dX~@k_$xN%nts(BrVGE!J22WQ%mvv4FO#p}oRBiwO literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_6e.png b/extra_fonts/34px/hdf_6e.png new file mode 100644 index 0000000000000000000000000000000000000000..e928cbb9f56b0b9b191565af95c778c9d68a7419 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zsC&9NhHzX@PEg=+l5}ot$;e=E&d_M#NaWy6U=`x)acF9+VbW({$h*#G>-5%;1E@u{ z#5JNMC9x#cD!C{XNHG{07#iyu8t58YgculD8ChBx80Z?907?Cc)j&TWX~@k_$xN%n Vts(BrVGE!J22WQ%mvv4FO#roqPm}-v literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_6f.png b/extra_fonts/34px/hdf_6f.png new file mode 100644 index 0000000000000000000000000000000000000000..41ac3ad9ec86df46a354fc64bed26113abe4573e GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^fUftDnm{r-UW|EMHf< literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_70.png b/extra_fonts/34px/hdf_70.png new file mode 100644 index 0000000000000000000000000000000000000000..d7da9f71a56f0999702e0f33b014501d4cc59b9d GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8H9nO2EgL)@9e7C;RQp00i_>zopr0P{6gA^-pY literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_71.png b/extra_fonts/34px/hdf_71.png new file mode 100644 index 0000000000000000000000000000000000000000..13e768377a4fa543805cf60a4b23c66ce0eaab7e GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8H&rl6R7+eVN>UO_QmvAUQh^kMk%6JHuAzahp+$&+ft8V^ rm4Sh-feDb*pI8m_7m|kD{FKbJO57Ua&K$M?YGCkm^>bP0l+XkKDzJ(1)v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN*sN zlBbJf2*>s0gagb@l1vg#k&O`|9nK3a7&P879OXHZD8s;z$-^nH8vN%AP_=4_YeY#( zVo9o1a#1RfVlXl=G}bjV&^5FOF)*+)va~WV&^0gtlKK;?fzC(Lkei>9nO2EgL)@9e Q7C;RQp00i_>zopr01w|!-T(jq literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_73.png b/extra_fonts/34px/hdf_73.png new file mode 100644 index 0000000000000000000000000000000000000000..ff7fa9eb17ed5e9e52e80c91545aea11fe0442b2 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8HqOtr){q9i4;B-JXpC>2OC7#SEE>lzy9 z8d`)H7+4uuS{WGV8khh{{fX5;-yvzp%}>cptHiA#?#y8epaup{S3j3^P6age(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5l;8~T z32_C|Ake_D<3V9Jkil3I! zC8<`)MX5lF!N|bSSl7@%*U%!wz`)AL(#pU<*T4iw>QAf&x*kbGZhlH;S|x4`ac2%& Q05vdpy85}Sb4q9e061Myod5s; literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_75.png b/extra_fonts/34px/hdf_75.png new file mode 100644 index 0000000000000000000000000000000000000000..ac90b92d4ecb1aff8100613760e278ce0c86c3d0 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+v#0(@|^Xi>|6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zsC&9NhHzX@PEg=+l9X^hp(YdI*rG9kgO@i^pjDtzk*8;&L*yO?h6fw?Sfji1gMnI9 zOI#yLQW8s2t&)pUffR$0fuXUkp@FWUMTmicm64^Dfq|}p36RvESPk?8l7`&;l+3hB W+#2G}9JT;zVDNPHb6Mw<&;$S?@lcBZ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_76.png b/extra_fonts/34px/hdf_76.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6540b10b7cb740140fc790eeb4dc3aaf9ed386 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^fMvu|7>&;ZpE*NBpo#FA92I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z;pyq(7{YOV?%9pJ4Guia2bO%`xc6N1MX<&1^-iBW`UOlL9J+op&3-cTs;Hu@V+}Q@ zaxT77^Pe33Qs`TSVQY^a*ZQB!WopZR>azboCbCtQi*+H;P}LIGh?11Vl2ohYqEsNo zU}RuutZQhXYiJQ-U|?lrX=PxbYhVH-^(R&XeTk$YH$NpatrE9}xHE?>fEpM)UHx3v IIVCg!0KX7w?f?J) literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_78.png b/extra_fonts/34px/hdf_78.png new file mode 100644 index 0000000000000000000000000000000000000000..9a04f313e987280b2a9be785b2aa866c1514aad3 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8HQP{%3JaQo=IjdcwT zbPX*+3=FJ{EUgR-bPY^^r2fQep!bk8mdKI;Vst02SG0 AS^xk5 literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_79.png b/extra_fonts/34px/hdf_79.png new file mode 100644 index 0000000000000000000000000000000000000000..9647498206323d3ff0cbcc09339180bba4911965 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0zfR!#0(@SpI)jCq*&4&eH|GXHuiJ>Nn{1`8H*0uoJ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_7a.png b/extra_fonts/34px/hdf_7a.png new file mode 100644 index 0000000000000000000000000000000000000000..f727a04d4588ef44cc0f6f7d7df859d1aa9a0c74 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^d_XME#0(@?tr4jKQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq37x17{YNqIYEKP$=R9t0_TDi%*@Qm8WRq3DY-a1I58?H?y&Ii5LqVDu35prkSWB^ zeR%uaxj>z&C9V-ADTyViR>?)FK#IZ0z|dIN&_LJFBE-PJ%E;2nz);t~#LB>+^H~AV f`A8aa^HVa@DsgN0vHL_1Py>UftDnm{r-UW|2tiZ^ literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_7b.png b/extra_fonts/34px/hdf_7b.png new file mode 100644 index 0000000000000000000000000000000000000000..20c04eed4d50a3ab71975cb71e12559223e3f974 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^Ejc?PRtckiqNe;us=vIXOXsbqO;A zqZtFE)YV>bpoD6PYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FOF)*+)vam9>&^0izGBDU3 g6R;CSLvDUbW?Cg~4W}4ifIP|I>FVdQ&MBb@0M^GtuK)l5 literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_7c.png b/extra_fonts/34px/hdf_7c.png new file mode 100644 index 0000000000000000000000000000000000000000..b4929309251b573777decae5eed7472a9a842a04 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#92qGmuJ(U4cEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPM zC&U#u-6wj08W=oX{an^LB{Ts5;?G6G literal 0 HcmV?d00001 diff --git a/extra_fonts/34px/hdf_7d.png b/extra_fonts/34px/hdf_7d.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb45a22ad180123974ed9a477711a5db40e0f70 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^oIotk#0(@o3iw%p6id3JuOkD)#(wTUi6A~>age(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5l;8~T z32_C|Ake_D<3V9Jkil3IKd3>85ndvD*!qjNkeXa aN@iLmZVf+npXdQI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2}r07{YNqIbi`;LMemLB1IlXo`nnh7{*x)SagNn{1`8Hv0}~)=7~yS> dq9HdwB{QuOw+08+&)q-`44$rjF6*2UngDiyL*f7c literal 0 HcmV?d00001 diff --git a/textures/hdf_21.png b/textures/hdf_21.png new file mode 100644 index 0000000000000000000000000000000000000000..bb60da9872e08ea52b5b9fded883b5a7463f665c GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?)em7{YNqnIpl$f!!d5Ve>%-2HQAhN8e&qAd5k@#5JNMC9x#cD!C{XNHG{07#iyu z8t58YgculD8JSs`TId>>SQ!{BotgmhH9|vfeoAIqC2kE@PTbfA)WG2B>gTe~DWM4f Dipfj# literal 0 HcmV?d00001 diff --git a/textures/hdf_22.png b/textures/hdf_22.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f7fa970b8c15a1ef4206711ef1e845a199734d GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z$kW9!gyVWLM@d410wX({69a?)2__cHpq_6)S=AEPh?11Vl2ohYqEsNoU}RuutZQhX zYiJQ-U|?lrW@T!jYhYq!V6b#*0?5+{4Y~O#nQ4`{HC#DyV;fKdgQu&X%Q~loCIF literal 0 HcmV?d00001 diff --git a/textures/hdf_23.png b/textures/hdf_23.png new file mode 100644 index 0000000000000000000000000000000000000000..09f5fbd9a56ccec753d965e2c7989edf3fab8b4e GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2TG_7{YNqIiVyqp&{{N0J}k&Xd=Vo3jrKroDK;p3=AutvfPY3(|R1JR<*=6q9i4; zB-JXpC>2OC7#SEE>lzy98d`)H7+4vZS(#es8kkra7%ZKd015(xhTQy=%(P0}8m^qU Ru??t!!PC{xWt~$(698ljQbzy) literal 0 HcmV?d00001 diff --git a/textures/hdf_24.png b/textures/hdf_24.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce9de076796b7b125aedad27e27abd97f7493b5 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z=y?)FK#IZ0z|dIN&_LJFBE-PJ%E-*h)I!(5#LB>6>C^;Ja3D0~ b=BH$)RpQog<;0C`Kn)C@u6{1-oD!M<$dpfK literal 0 HcmV?d00001 diff --git a/textures/hdf_25.png b/textures/hdf_25.png new file mode 100644 index 0000000000000000000000000000000000000000..effd5156ed57edc5d71105ffdefdcd62b8e579fe GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm?3?!X=*FFJKEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YhS zC&U#VV&}Xgj7Z$9vvkICj}7?4lAamvW_jx6HcFC znB>67@Z=IJ8&6ebDbNVj64!{5l*E!$tK_0oAjM#0U}&ssXrOCo5n^CqWn^Y$YN2aj nVr5{kbZP=9WDpv1^HVa@DsgMLa^l7|paup{S3j3^P6&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z`kpS1Asp9}6L=F61b7n@1Oyus1m<5=Y;ZI&Xi!wR(x~V#g|WxAF(=G@feI4?!?u&G z^FD3r%>ZguEpd$~Nl7e8wMs5Z1yT$~28PDEh6cKZ79j=(Rz_x4rWU#eCRPRpOQ$A) gLII&6H$NpatrE9}D<^Jj18QLKboFyt=akR{0ACYVhX4Qo literal 0 HcmV?d00001 diff --git a/textures/hdf_27.png b/textures/hdf_27.png new file mode 100644 index 0000000000000000000000000000000000000000..dbad65e88d66cb3d383fce0c2ed1e7a34c0f7910 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^NO>_45U54*zIJt9gxA}>Eal|aXmRy4NR;I41(_p fJVw!wo1c=IR*74KQp1XPpaup{S3j3^P6kK($jwj5OsmAL;mU~{+khGvJYD@<);T3K F0RR-eO&9HpKw`qt1|^4&3=9&1jPnY;&TIlIP%UwdC`m~yNwrEYN(E93Mh1q) zx`qb2h87_P23AI9R;CuZ1}0Vp21}9nO2Eg!<7>^wgELTc)I$ztaD0e F0su4sO=$oC literal 0 HcmV?d00001 diff --git a/textures/hdf_2a.png b/textures/hdf_2a.png new file mode 100644 index 0000000000000000000000000000000000000000..0481e537b671870bd99faf93ebea292636ab6e23 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z+|$J|gyVX0LSjNeVS+#^gCaXS+a3l6?K(!|Juc17Kqaart`Q|Ei6yC4$wjF^iowXh z&{)^dK-bVB#K6GH$jr*rLf62=%D`ah)C7>v5gKyyQ!>*kacj78;>I?h1_n=8KbLh* G2~7Z0yG*(O literal 0 HcmV?d00001 diff --git a/textures/hdf_2b.png b/textures/hdf_2b.png new file mode 100644 index 0000000000000000000000000000000000000000..111cff5fcecda621656a958a9866213e84706cde GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?E4g7{YNqIl+Ochc7@xip!}$kB5Q5I*93ZC!^#vpbFIz*NBpo#FA92I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?WGi7{YNqIpF{kQ$qj)hb#l@Jw`^qPmLgzswJ)wB`Jv|saDBFsX&Us$iUE8*U&)M z&?3aZz{<$X%G5&Fz{JYHVCmEZke?A6a`RI%(<*UmxN_pgHlPLuPgg&ebxsLQ01<^t Ar~m)} literal 0 HcmV?d00001 diff --git a/textures/hdf_2d.png b/textures/hdf_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..e3fa218d5eaa7504504c745d3f96a90234cfc93b GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%> z-_yl0gyVX0f&=41hYl77&Mb!2f}vs{N2`{&MwFx^mZVxG7o`Fz1|tJQV_ic7T|XIT>}#<1B0bg6F@#jXvob^$xN%nt>Mav8{2>y7(8A5T-G@yGywp0;YpML literal 0 HcmV?d00001 diff --git a/textures/hdf_2e.png b/textures/hdf_2e.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7df9b8b68f1356ac347129f8cb7452e93808f8 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!SCtf7{YNqIpF{kQ-c5x1FIav!pF_Nvw%{nC9V-ADTyViR>?)FK#IZ0z|dIN&_LJF zBE-PJ%E-*h)I!(5#LB>6>C^;}j}aPj^HVa@DsgMLa^l7|paup{S3j3^P618w9#&lnQDUfl(#PPN1}q9i4;B-JXpC>2OC z7#SEE>lzy98d`)H7+4vZS(#es8kkra7%ZKd0P;RULvDUbW?Cg~4OdRw*ap?pbO%wnC literal 0 HcmV?d00001 diff --git a/textures/hdf_30.png b/textures/hdf_30.png new file mode 100644 index 0000000000000000000000000000000000000000..66fb225f4ee75c48e8d278e200a9c0efdecb16af GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?xYl7{YNqIe|ApfH#ptFqI?0)!o5yfk*%&4+BHVaTeb@mS^jL3RO#7BT7;dOH!?p zi&B9UgOP!uv96(kuAxPUfq|8gnU$%9u7Qb_fx*(L2_XL?H00)|WTsW()^O#-jcq^; N44$rjF6*2UngBd>PI&+T literal 0 HcmV?d00001 diff --git a/textures/hdf_31.png b/textures/hdf_31.png new file mode 100644 index 0000000000000000000000000000000000000000..3f179f71c1d27729d6ea2ed964e43f230af2cb1f GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z)YHW=gyVX0LP0`8NdgC}vYQMC8$-r^<}FVZey{))sFt`!l%ynkK($jwj5OsmAL;mU~{+khGvJYD@<);T3K F0RR&ROz;2z literal 0 HcmV?d00001 diff --git a/textures/hdf_32.png b/textures/hdf_32.png new file mode 100644 index 0000000000000000000000000000000000000000..bf63f29b4156e1ab1b7a9d7bfe3532759b9c3239 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3-G87{YNqIe|ApfH#ptFqI>LRgo=_txbUK7z0}vyMVEYNJ|0(L(Uu)E3spj!+}~< zOI#yLQW8s2t&)pUffR$0fuXUkp@FWUMTmicm64g1sfDhAiIsuD(y0lckU(h2%}>cp YtHiD0%847>fEpM)UHx3vIVCg!0C&t!d;kCd literal 0 HcmV?d00001 diff --git a/textures/hdf_33.png b/textures/hdf_33.png new file mode 100644 index 0000000000000000000000000000000000000000..bb761cacbb58b5209ae7a5b0c707129b1ce5fa0d GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3Y@47{YNqIe|ApfH#ptFqI=AH9;UXfrn9%%|Kj(V+xa210zG4C-d2q`FxEa4JED- zB`Jv|saDBFsX&Us$iUE8*U&)M&?3aZz{<$X%G5&Fz{JYHVCmEZP&gnozopr0Pz4%4gdfE literal 0 HcmV?d00001 diff --git a/textures/hdf_34.png b/textures/hdf_34.png new file mode 100644 index 0000000000000000000000000000000000000000..235269fd5eb56a392e165f154ad765b7b9bdfe50 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2TG_7{YNqIe{ZFfhRFRlu=R8fJ-2egO^p2O;DnVi6P`Yv%>18Pfzopr0DqQE_W%F@ literal 0 HcmV?d00001 diff --git a/textures/hdf_35.png b/textures/hdf_35.png new file mode 100644 index 0000000000000000000000000000000000000000..22ddf24d0ace83c40c045b4b911bd223dff77850 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3r467{YNqIe|BoL6J>Bh&MriH&H+!wc&%ai(||+1~v%>2Cqv@kBcrJlLRVPEpd$~ zNl7e8wMs5Z1yT$~28PDEh6cKZ79j=(Rz_x4rWU#eCRPRpOQ$A)LII&6H$NpatrE9} UD<^Jj18QLKboFyt=akR{06EoAd;kCd literal 0 HcmV?d00001 diff --git a/textures/hdf_36.png b/textures/hdf_36.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e8e7155a46392eb20796292e5c9bef668d2d38 GIT binary patch literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2lS{7{YNqIe|ApfH#ptFqI=AfrBT3qjf{1BgY8_FGkS=3=AFhEPqbTe7OLqUbVzE zq9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS(#es8kkra7%ZKd015_#hTQy=%(P0} V8m^qUu??t!!PC{xWt~$(696JkQUm}1 literal 0 HcmV?d00001 diff --git a/textures/hdf_37.png b/textures/hdf_37.png new file mode 100644 index 0000000000000000000000000000000000000000..f11b1fe68ab0df301d900588376d56211aaa9fdc GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>--d7{YNqnS(c#L5WS!fQv!Vja?%twLwXOfg!Pj={=k4RFJW%C9V-ADTyViR>?)F zK#IZ0z|dIN&_LJFBE-PJ%E-*h)I!(5#LB>6>C^;}_YoR$^HVa@DsgMLa^l7|paup{ LS3j3^P6I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2TG_7{YNqIe|ApfH#ptFqI=ARX{M&;Te;sg0u$E*+ot)9^bxf+Xz&vTH+c}l9E`G zYL#4+3Zxi}3=EBR4GnY+EkXFVdQ&MBb@06ZN}g8%>k literal 0 HcmV?d00001 diff --git a/textures/hdf_39.png b/textures/hdf_39.png new file mode 100644 index 0000000000000000000000000000000000000000..b353cfb689fbc48dca783616d4151308bb9a73fa GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3Y@47{YNqIe|ApfH#ptFqI>LRZ+p&WJ=@Jsf~<>_!1ek8W>@!QL+F4 literal 0 HcmV?d00001 diff --git a/textures/hdf_3a.png b/textures/hdf_3a.png new file mode 100644 index 0000000000000000000000000000000000000000..d5bff5502ad5b044730d25289c3e603018b152f8 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>ira7{YNqIiaD6LE%UOGlSqfM#rb`bUO_QmvAUQh^kMk%6JHuAzah zp+$&+ft8V&m8pfUfr*uY!P2P-ATJ{{zopr0Cc!a A-T(jq literal 0 HcmV?d00001 diff --git a/textures/hdf_3b.png b/textures/hdf_3b.png new file mode 100644 index 0000000000000000000000000000000000000000..a89efa9fbe161674369a0d53fa4cbb2d56595cb7 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?)em7{YNqIiaD6LBS=Bn_(d{gHRmfLcUTbd!V#xiEBhjN@7W>RdP`(kYX@0Ff`UR zG|)A)2r)3QGBUF=wa_&%u`)1NIyC|0YlMc}{FKbJO57T*oVc+KsDZ)L)z4*}Q$iB} DQL;;E literal 0 HcmV?d00001 diff --git a/textures/hdf_3c.png b/textures/hdf_3c.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c507eef7988b58487099bd31bddb464b80ac7b GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?NAh7{YNqIl+N#4G+&ko;8d-iaZJ|DGWOm95omiw4#{UOJrW>168V)xJHzuB$lLF zB^RXvDF!10Lt|Y-16@Ol5Ca1%BQq;g3ta;fD+7b2QxiY|fY6YepOTqYiCe>!6F0U2 PH86O(`njxgN@xNA{{T&W literal 0 HcmV?d00001 diff --git a/textures/hdf_3d.png b/textures/hdf_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..5532d24f928552f9c5fc0573f2d0ea1c6b8522c9 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>`@e7{YNqIl+N-;X;L$lWfck=3kjsCVaaI(yvo=IjdcwT zbPX*+3=FJ{%&bf;bPY_b3=Eb|O#pcsp&>UvB{QuOw}vYxZfpZ;VDNPHb6Mw<&;$S^ CSWWx@ literal 0 HcmV?d00001 diff --git a/textures/hdf_3e.png b/textures/hdf_3e.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0ce33884600c6f1873464f1603144d443419e9 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?xYl7{YNqIl+O6k%wm?56>D0FOimpo`4MsJPZsvFPP*%Uz=JARH$0w8c~vxSdwa$ zT$Bo=7>o=IjdcwTbPX*+3=FJ{%&bf;bPY_b3=Eb|O#t~Hp&>UvB{QuOw}vYxZfpZ; OVDNPHb6Mw<&;$V3$WOok literal 0 HcmV?d00001 diff --git a/textures/hdf_3f.png b/textures/hdf_3f.png new file mode 100644 index 0000000000000000000000000000000000000000..69b76198643f3c846a389c39c5ceb9ec9ff5cdab GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zD0#X#hHzX@7T`_b;7#NZU{qvN;7Uy3NJuDQP*i9zKES|`!^AvUrgO$Cpla0;*NBpo z#FA92*kacj78 S;>I?h1_n=8KbLh*2~7Y7!cCh1 literal 0 HcmV?d00001 diff --git a/textures/hdf_40.png b/textures/hdf_40.png new file mode 100644 index 0000000000000000000000000000000000000000..838fd10dc2cf26f064cdb4fd6ad0a1fef3d4d4ee GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mm?3?!X=*FFJKEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YhS zC&U#FMGa!f{=-dm$r(0?*;51Iowj-?BS@_^-{gq9c>ZdZD&LhQTwTna&=Xe-<{yw#Rze z%$yy1S}dQvG=NjxeZ~PkpdqRyt`Q|Ei6yC4$wjF^iowXh&{)^dK-bVB#K6GH$jr*r qLf62=%D`ah)C5r2AT;FWr(~v8;?{8G#Eor04Gf;HelF{r5}E)+)mI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zVdUxJ7{YNqIe{ZFfg$l&fI?YnLPBY2LPBaufXIT>}#<1B0bg i6F`B2(2$#-l9^VCTf>zTH?{#aFnGH9xvXI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqnS(bmfrB?Sfg_<5h)WnQE7*k@E{IZLVBpJSFZ`z#`5CBKwZt`|BqgyV z)hf9t6-Y4{85kPt8XD*tT7(!FSQ(jFnOf=^m{=JYFh9!PhoT`jKP5A*61Rq;{g;`5 P8W=oX{an^LB{Ts5Raj3K literal 0 HcmV?d00001 diff --git a/textures/hdf_43.png b/textures/hdf_43.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fafd095aed57b33ea48ef9bfc08fe583df16cf GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zTAnVBAsp9}6L?Y+5_n4!1X6ht1QIzCI1&>WCJFE)H6L*(QZQB63e>b}63bo=UAEak zU8*In5hW>!C8<`)MX5lF!N|bSSl7@%*U%!wz`)AL%*xbK*TBTez<~Kt_C6F1x%nxX YX_dG&6z#vv1k}Lb>FVdQ&MBb@06~^gPXGV_ literal 0 HcmV?d00001 diff --git a/textures/hdf_44.png b/textures/hdf_44.png new file mode 100644 index 0000000000000000000000000000000000000000..81ebbe2a585589d3cf014db1f828bb1d4a328241 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z>Ygr+Asp9}Id~HiICxVNI1);MnB^e@n+3~8$0P^K2~rcHRDizWXV1OP=d}^2MYY5= zq9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS(#eu8kkra7%)G|-iM+gH$NpatrE9} UqWzbdfEpM)UHx3vIVCg!0Kec+cmMzZ literal 0 HcmV?d00001 diff --git a/textures/hdf_45.png b/textures/hdf_45.png new file mode 100644 index 0000000000000000000000000000000000000000..9a6b9019a38db4a5502a3e44544d3be39bb7e5d8 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?fMj7{YNqnS(c#VG#qH1{W`*B8#{VH#5V08P?m6`uBtZ6{(iEMwFx^mZVxG7o`Fz z1|tJQV_ic7T|X|T>}#<0|Vwq+51p5mdK II;Vst0CY7=cmMzZ literal 0 HcmV?d00001 diff --git a/textures/hdf_46.png b/textures/hdf_46.png new file mode 100644 index 0000000000000000000000000000000000000000..68f05c533cef888400064159a254a01f21593a4d GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?fMj7{YNqnS(c#VG#qH1{W`*qJ?-<0t3UeKdkBw&IzA@id0KnBT7;dOH!?pi&B9U zgOP!uv96(kuAxPUfq|8gnU$%fu7Qb_fdTWQ?0qO2a`RI%(<*UmDB6FS38;a=)78&q Iol`;+0H8Qa$p8QV literal 0 HcmV?d00001 diff --git a/textures/hdf_47.png b/textures/hdf_47.png new file mode 100644 index 0000000000000000000000000000000000000000..1c89782128f9081eaab3a760b16496df3e35d9c7 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z2A(dCAsp9}6L?Y+5_n4!1X6ht1QIzCI1&>WCOMqpO4;mm#Gz=-LPnk*MFmL<28JUp ztjD5~a$|scRZCnWN>UO_QmvAUQh^kMk%6JHuAzahp+$&+ft8V&m8qq!fr*uY0rR8m feJC1o^HVa@DsgKl+JBh|sDZ)L)z4*}Q$iB}>YY_i literal 0 HcmV?d00001 diff --git a/textures/hdf_48.png b/textures/hdf_48.png new file mode 100644 index 0000000000000000000000000000000000000000..8e873e25d747550f33d3529628e36d80e55eb101 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z!k#XUAsp9}IT9RN7cLa&;Z|Z~&?@CHI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!RP7X7{YNqnIqu<-$4cj=XuNrmHb6|fikKkt`Q|Ei6yC4$wjF^iowXh&{)^dK-bVB w#K6GH$jr*rQrE!5%D{m6QT9F*4Y~O#nQ4`{H5Bc?3_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT zh!=%O0q=Au*L4OxhxkG>7X`m9-64!{5l*E!$tK_0oAjM#0 zU}&ssXrOCo5n^CqWn^Y$YN=~rVr5{!{3v@LiiX_$l+3hB+!~7ZUuFVoVDNPHb6Mw< G&;$TaB23}{ literal 0 HcmV?d00001 diff --git a/textures/hdf_4b.png b/textures/hdf_4b.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e0e285ae0b4d04282d993d1ebb8190f2c4f2ac GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F#0(_;gYPZ|QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3h}57{YNqnInNGfg_o=IjdcwTbPX*+3=FJ{%&bf;bq!3c3=EhbW$#1L ckei>9nO2EgL(%@rOh63`p00i_>zopr09C9~9RL6T literal 0 HcmV?d00001 diff --git a/textures/hdf_4c.png b/textures/hdf_4c.png new file mode 100644 index 0000000000000000000000000000000000000000..c93b69e9f7fdb2e3e53c0ec539f1fe350ad49794 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>`@e7{YNqnIj?LK(mvxBL^EpelAPt=LdP$fwHP4t`Q|Ei6yC4$wjF^iowXh&{)^d zK-bVB#K6GH$jr*rQrE!5%D{m6QT9F*4Y~O#nQ4`{H5Bc?%mmcH;OXk;vd$@?2>|d_ BOveBK literal 0 HcmV?d00001 diff --git a/textures/hdf_4d.png b/textures/hdf_4d.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f9328c5cb3152f055cc0aff897e65c1d82e310 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F#0(_;gYPZ|QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2%e}7{YNqnIqBRK!6(uUy4W~M@j1g25|+x#w12THWda2kp}k3mW5mwfvQzYTq8i literal 0 HcmV?d00001 diff --git a/textures/hdf_4e.png b/textures/hdf_4e.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f0123a0287de80ae6c0a72c69a0b87ac9c9483 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z3Z5>GAsp9}ITAS%I9eY$uygQnG$aXXq_rj;V_;KZU~rD)cyi=IS1wSkYKdz^NlIc# zs#S7PDv)9@GB7mOH8jvQvI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3P-37{YNqIe{lNA%V9vK_HbUK_HPMfrHVB!<*#{+eU{X1yhBsKt0EqSbMc4C4_*Q zR7+eVN>UO_QmvAUQh^kMk%6JHuAzahp+$&+ft8V&m8qq!fr*uY0rR8meJC1o^HVa@ XDsgKl+JBh|sDZ)L)z4*}Q$iB}rHN1I literal 0 HcmV?d00001 diff --git a/textures/hdf_50.png b/textures/hdf_50.png new file mode 100644 index 0000000000000000000000000000000000000000..359b3eefc652ad196780c4e8f0c7d1501e9238f2 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3r467{YNqnS(bmfrB?Sfg_<5h+C2rq*d4^aVIz&1*-nKg3WkY`SyQ6<*FsF5hW>! zC8<`)MX5lF!N|bSSl7@%*U%!wz`)AL%*xbK*TBTez<~Kt_C6F1x%nxXX_dG&6z#vv Q1k}Lb>FVdQ&MBb@0BEjItpET3 literal 0 HcmV?d00001 diff --git a/textures/hdf_51.png b/textures/hdf_51.png new file mode 100644 index 0000000000000000000000000000000000000000..0033b73b09b58b0248e06aa4d8bfa4a549488a68 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^+(69F#0(_;gYPZ|QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zVeIMR7{YN~w`-#yg968qLvwQ&ej6MT-|%0nD(lh`4zmZrOFA9Cdo=IjdcwTbPX*+3=FJ{%&bf;bq!3c k3=EhbW$#1Lkei>9nO2EgL(%@rOh63`p00i_>zopr09z?v7XSbN literal 0 HcmV?d00001 diff --git a/textures/hdf_52.png b/textures/hdf_52.png new file mode 100644 index 0000000000000000000000000000000000000000..07c019ee57d1c788496d259d414b5286cc0c82e4 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 z%APKcAsp9}Ie1eOICx7FI1*Zt!r0k5B$#LLil_51B&#qmNV2ofzm0Xkxq!^4042^XS4Rj4HLJSP7jLfV|Ep-h{tPBj8A7$@D(U6;;l9^VCTSL+Q R%S=EG44$rjF6*2UngG|#P6z-1 literal 0 HcmV?d00001 diff --git a/textures/hdf_53.png b/textures/hdf_53.png new file mode 100644 index 0000000000000000000000000000000000000000..5c719a6bd3a4b8210530e83cd5ee70ad1f8f21f6 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2=k~7{YNqIe|AZL4Y?kfg`arfg_&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zBAzaeAsp9}Ie2*!7!uhOl(>``7%nbj6O@+?qZwZt`|BqgyV)hf9t6-Y4{85kPt z8XD*tT7(!FSQ(jFnOf=^m{=JYFh9!PhoT`jKP5A*61Rq;{g;`58W=oX{an^LB{Ts5 D2W(5T literal 0 HcmV?d00001 diff --git a/textures/hdf_55.png b/textures/hdf_55.png new file mode 100644 index 0000000000000000000000000000000000000000..85f843e151781ff9d799bc25bbbad5fd6c376a38 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b}Gmu;`aob!V#ggvm>&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zlAbP(Asp9}IT93joF$kgT%2VkBAg{BFfwqLvwJn)zj+C$NVUW@q9i4;B-JXpC>2OC z7#SEE>lzy98d`)H7+4vZS(#eu8kkra7%)G|-iM+gH$NpatrE9}qWzbdfEpM)UHx3v IIVCg!0C0y)&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 za-J@ZAsp9}IT9Ki1l`yz(o$0!l8*^+uxT|WurM%8Y-e8aYi;*xpi0#e*NBpo#FA92 zI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3P-37{YNqnIj>UBf&vHX-y9wkJ6&PfTqv`QyUvi6-2xYtU45gS1>T>tYq_+e#`tD zs7bZNHKHUXu_VKd3>85l4>%HD^fAvZrI ZGp!Q0hNAtKnSdG?JYD@<);T3K0RTArQy%~T literal 0 HcmV?d00001 diff --git a/textures/hdf_58.png b/textures/hdf_58.png new file mode 100644 index 0000000000000000000000000000000000000000..44a11ba4ece7834bf1cb937ffce5b6ab35b53776 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa#0(_8m+{U6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2=k~7{YNqnIoYjfg`arK_D?TAwiV!kpLUpF$NB{jgCnQmJ_5VM5!<^Oe$jGU3vFP z9Z;8QiEBhjN@7W>RdP`(kYX@0Ff`URG|)A)2r)3QGBUF=wbV5*u`)1Vew4irMMG|W aN@iLmZVg5IFEar(FnGH9xvX&U>cv7h@-A}f&3SRCZ; z#IWw1%u66gA=x9ymw};5je((|g@NH0P^jSr14F3+1H-EX1_rAc3=HB0b9M#V03|pB zd_r7-Gzc^>?08Vv4P-Eu1o;IsI6S+N2I3@nySp%@ao3~(Ih+L^k;OpT1B~5HX4?T7 zN}eu`Asp9}ITC;{ktabQu_PfOHI*Uxm;eWxS7H(i1H;q?=9iPEN__*WRxNRjC`m~y zNwrEYN(E93Mh1q)x`qb2h87_P23AI9R;HG^1}0Vp2F#DL_n~OW%}>cptHiCLX#Zs< Ppaup{S3j3^P6I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3Y@47{YNqnS(c#L5VGpjZKiPje+eL16vq7TbO}gTe~DWM4fT1-tb literal 0 HcmV?d00001 diff --git a/textures/hdf_5b.png b/textures/hdf_5b.png new file mode 100644 index 0000000000000000000000000000000000000000..c60f640056c2fa30de5d38d2099aaf580991b68b GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z(9^{+gyVWLM=B5=;A%8taG%9;v~SwG13*dD64!{5l*E!$tK_0oAjM#0U}&ssXrOCo y5n^CqWn^Y$YN=~rVr5{!{3v@LiiX_$l+3hB+!~7ZUuFVoVDNPHb6Mw<&;$TG+e{4r literal 0 HcmV?d00001 diff --git a/textures/hdf_5c.png b/textures/hdf_5c.png new file mode 100644 index 0000000000000000000000000000000000000000..6acbcb58b5f72786afc0d94eec399cf2de3b68e1 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z#?!?ygyVX0K|(bP0l+XkKhOJ6( literal 0 HcmV?d00001 diff --git a/textures/hdf_5e.png b/textures/hdf_5e.png new file mode 100644 index 0000000000000000000000000000000000000000..b60f84bbaf01d33df3db378e8efd6f40e75a208d GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?fMj7{YNqIiVzhLFpO;o1mZoR|2b|3I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!SCtf7{YNqIYB|VrOk?gfk~C&^#f54H=vYiiEBhjN@7W>RdP`(kYX@0Ff`URG|)A) y2r)3QGBUF=wbV5*u`)1Vew4irMMG|WN@iLmZVg5IFEar(FnGH9xvXNS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZR! z^K@|x;kcg6k&uvhfRll97DH&__AEi5jB1H%L`h0wNvc(HQ7VvPFfuSS)-^QHHM9sZ wFt9Q*vof{RH88OI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2lS{7{YNqIiZ2^B178+fi?y~wl)E_ivn!|f&$VSN?KguObiij%;(b#Ozr~JtCqM% zl%yn_Py>UftDnm{r-UW|d1_C8 literal 0 HcmV?d00001 diff --git a/textures/hdf_62.png b/textures/hdf_62.png new file mode 100644 index 0000000000000000000000000000000000000000..62c2335ecca30e6a0efad318acba58817863aa2d GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqnIj>gVZi~0whIDn0)cG|VH!-E8kHOhB^VgG^jX6sLjz9(6|0uGMwFx^ zmZVxG7o`Fz1|tJQV_ic7T|X|T>}#<0|Vwq+51p5mdKI;Vst09gi5K>z>% literal 0 HcmV?d00001 diff --git a/textures/hdf_63.png b/textures/hdf_63.png new file mode 100644 index 0000000000000000000000000000000000000000..deb4e4166e7cf8f9e1d510266be92fe3683d8e31 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA@Awp7{YNqIiZ2^8Ux!!fi{7_HU>5grcI4X4uuj744%Hs_IqARWCN9|mbgZgq$HN4 zS|t~y0x1R~14Cn7Ljzqyix2|?DI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2%e}7{YNqIUymnLE%~e+r@x3fxtF~Fb$?njY@0Q@c`}h4QGyIU;OJBP_=4_YeY#( zVo9o1a#1RfVlXl=G}bjV&^5FOF)*+)GP5$Z)HN`%GB99%l)Vo{LvDUbW?Cg~4MqDe RGXXU)c)I$ztaD0e0su&=QQrUn literal 0 HcmV?d00001 diff --git a/textures/hdf_65.png b/textures/hdf_65.png new file mode 100644 index 0000000000000000000000000000000000000000..71fd1c05a65d5b51fafaa5841e8f95b36de2d891 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2%e}7{YNqIiZ2^8Ux!!fi{M)whI9QTnPyrf~=hkM-v$s!dEii_uRGV8c?-riEBhj zN@7W>RdP`(kYX@0Ff`URG|)A)2r)3QGBUF=wbV5*u`)1Vew4irMMG|WN@iLmZVg5I SFEar(FnGH9xvXgTe~DWM4f DFYZcr literal 0 HcmV?d00001 diff --git a/textures/hdf_67.png b/textures/hdf_67.png new file mode 100644 index 0000000000000000000000000000000000000000..d46ac645e2930cbfcddd3131b8dce0649980b990 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqIiZ0uES&9PK$}2d8$*}|)22oxhe9?EYZeCY3Kqc`ll#Jeid9QoBT7;d zOH!?pi&B9UgOP!uv96(kuAxPUfq|8gnU$%fu7Qb_fdTWQ?0qO2a`RI%(<*UmDB6FS Q38;a=)78&qol`;+0OB!EW&i*H literal 0 HcmV?d00001 diff --git a/textures/hdf_68.png b/textures/hdf_68.png new file mode 100644 index 0000000000000000000000000000000000000000..3aa9ac3a0cd89c1cd45e874ef1ba825c21198882 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?4}f7{YNqnIj>gVZi}`whIAm0%2_oJS@x%4HHzm0Xkx zq!^4042^XS4Rj4HLJSP7jLfV|Ep-h{tPBj8A7$@D(U6;;l9^VCTSL+Q%S=EG44$rj JF6*2UngETmPdxwt literal 0 HcmV?d00001 diff --git a/textures/hdf_69.png b/textures/hdf_69.png new file mode 100644 index 0000000000000000000000000000000000000000..37c9efbd25acf543d72ca7d8d607a029085a863a GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?)em7{YNqnInNCAt8a|KtlopgY`M)!t=Y5m4MQ!C9V-ADTyViR>?)FK#IZ0z|dIN z&_LJFBE-PJ%E-*h)Kb^L#LB>c`BC;h6b-rgDVb@NxHS~*zYGc*22WQ%mvv4FO#mx) BOoIRb literal 0 HcmV?d00001 diff --git a/textures/hdf_6a.png b/textures/hdf_6a.png new file mode 100644 index 0000000000000000000000000000000000000000..2ffa17fcb936daefe80c5572e22a0f334102e46e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y~1R`Tv=7s|)mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8U)v z6XFV_L7;(Q$AiLdAcL_a$S;_|;n|He5GTpo-GwQQyCwz5;VkfoEC$jZVC;4>+YZPO z@^oftZIpCL`h0wNvc(HQ7VvPFfuSS)-^QH zHM9sZFt9Q*vof{RH88OI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq2lS{7{YNqnIj>gK`F4UL7?pbLt6lQ+XaTU2@C?}4lF8s%nUQSS)a9Let8B|uUg_7 zQIe8al4_M)lnSI6j0_Bobqx)44J|?p46KaItV}I+4NR;I445Bf??cg$o1c=IR*73f T(f-R!Kn)C@u6{1-oD!M<<>*p_ literal 0 HcmV?d00001 diff --git a/textures/hdf_6c.png b/textures/hdf_6c.png new file mode 100644 index 0000000000000000000000000000000000000000..66a4e7bc7337d36c602fbca2d5ad2a43bb62de74 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f#0(@iyM4<9QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU z!RP7X7{YNqnIqu<-$4cj=XuNrmHb6|fikKkt`Q|Ei6yC4$wjF^iowXh&{)^dK-bVB w#K6GH$jr*rQrE!5%D{m6QT9F*4Y~O#nQ4`{H5Bc?3Nn{1`8HqoN|u!i5WY6c?@GVN|+dD8#_9#EIo@v}*8KphDFW*NBpo#FA92 zI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>rxb7{YNqIiaEPfI!=YfHr}!HU=IRW`-yQ=H;h8i8=w*sFt`!l%yn_Py>UftDnm{ Hr-UW|tO`yP literal 0 HcmV?d00001 diff --git a/textures/hdf_6f.png b/textures/hdf_6f.png new file mode 100644 index 0000000000000000000000000000000000000000..f53d0c2baf4b1efffe84b4548f7b89465085e474 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA@Awp7{YNqIiZ2^8Ux!!fi{7_Hij?_rcI4X4uuj73|`Zj{n~FX`VCa7TH+c}l9E`G zYL#4+3Zxi}3=EBR4GnY+EkXFVdQ&MBb@0HtwH00000 literal 0 HcmV?d00001 diff --git a/textures/hdf_70.png b/textures/hdf_70.png new file mode 100644 index 0000000000000000000000000000000000000000..02d47df1a34c17ed8dd8d79224de4ec91c90aa37 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqIiaEP07Kgafi{7_Hij?_rcI4X4j&oVIG7kR@>#=7J{>v*RIFO!8c~vx zSdwa$T$Bo=7>o=IjdcwTbPX*+3=FJ{%&iOzbPY^^q+x`&If{nd{FKbJO57S8SU-bY O&*16m=d#Wzp$Pz;eozI(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zq3G%27{YNqIiZ0uES&9PK$}2d8$*}|)22oxheEb64kiXqX=cyZmV?be#i}K)5hW>! zC8<`)MX5lF!N|bSSl7@%*U%!wz`)AL+{(Z}*T4iw8b)}VqiD#@PsvQH#I3=B^)txz N44$rjF6*2UngE*nP7MG6 literal 0 HcmV?d00001 diff --git a/textures/hdf_72.png b/textures/hdf_72.png new file mode 100644 index 0000000000000000000000000000000000000000..7d57396f58e10e66e2ee6607195b45c339bcbe7f GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q#0(?@XT22wQY`6?zK#qG8~eHcB!VOvi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z!qdeugyVX0LPMhids_f|n*duI0}l%`Lr@5FH0vXtWS|<=64!{5l*E!$tK_0oAjM#0 zU}&ssXrOCo5n^CqWn^w;V4!PY0wfJ1yv_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z$a%UrhHzX@PH14f$k28{pp8MWEx=$l;~_rA%?lYAB5pB%e!k+o3Q(nLiEBhjN@7W> zRdP`(kYX@0Ff`URG|)A)2r)3QGBUR^FwiwH0g{Fh-sUJ8a`RI%(<*UmaA5rmayo;j LtDnm{r-UW|6;V%S literal 0 HcmV?d00001 diff --git a/textures/hdf_74.png b/textures/hdf_74.png new file mode 100644 index 0000000000000000000000000000000000000000..079be08ec3dda10f0d55c9f01040eb5f55cb8e6e GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z!qdeugyVX0LV^I}p#TMuM(04bFgBoVl5LEEkySrAfofDsTq8Ero1c=IR*74K1M6pyqZvG1{an^LB{Ts5 D34cmm literal 0 HcmV?d00001 diff --git a/textures/hdf_75.png b/textures/hdf_75.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a674def2c3261f4fba2fd92d2cbd5f89791b3d GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA>rxb7{YNqIiaDEA&f`mlz`MJg;!kROblKe%o)Ax0h~ZJswJ)wB`Jv|saDBFsX&Us z$iUE8*U&)M&?3aZz{<$n%D_O^zywGdMtGZ}Xvob^$xN%nt-*oyGsw{lp00i_>zopr E0D}uk-2eap literal 0 HcmV?d00001 diff --git a/textures/hdf_76.png b/textures/hdf_76.png new file mode 100644 index 0000000000000000000000000000000000000000..df9d81f6bcd731891f268e4df8768d140dddb355 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?@kn7{YNqIiaDEAxuC>uu?)F zK#IZ0z|dIN&_LJFBE-PJ%E;Wxz(Ci)1V|c2c$=eW$jwj5OsmAL!GZNN$lVN{u6{1- HoD!M6E! literal 0 HcmV?d00001 diff --git a/textures/hdf_77.png b/textures/hdf_77.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd6907e0db5b91239f09dc5d507097f94bb20f7 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CP#0(_Y_8+?iq*&4&eH|GXHuiJ>Nn{1`8HV7(8Iz|c!Y(A|EJM;kcJZ1 zh?11Vl2ohYqEsNoU}RuutZQhXYiJQ-U|?lrZe?JgYhVH-4I{kGQ8eV{r(~v8;@056 R`WfT{22WQ%mvv4FO#n2DP}%?h literal 0 HcmV?d00001 diff --git a/textures/hdf_78.png b/textures/hdf_78.png new file mode 100644 index 0000000000000000000000000000000000000000..040d256e8221f448573ee9fb9827c96ad12d3dc1 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z$a=ashHzX@PH1Rk5EKyNOc3BrNGN5P=wRj|z{cP+k2&MZ9`PkWg{md45hW>!C8<`) zMX5lF!N|bSSl7@%*U%!wz`)AL+{(Z}*T4iw8b)}VqiD#@PsvQH#I3=B^)txj44$rj JF6*2UngAB;OSJ$1 literal 0 HcmV?d00001 diff --git a/textures/hdf_79.png b/textures/hdf_79.png new file mode 100644 index 0000000000000000000000000000000000000000..f6bcdac7a147f450694234e0b3f8e3b20053c1c7 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA@Awp7{YNqIiaDEAxuDsQAv<3jDss7fkla3LnxJj!9b5`POFvBCZJN)64!{5l*E!$ ztK_0oAjM#0U}&ssXrOCo5n^CqWn^w;V4!PY0wfJ1yv_E)V#0(@u^KEs36id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g=CK)Uj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C-zl z@Ck7R(jd^lu;W2tH;}vL>2>S4={E+nQaGT z$a}gthHzX@PH1SnARv&$k(j`fkWiA4P?{jn%I(C+5OJCLsfw1yW1v#i64!{5l*E!$ ztK_0oAjM#0U}&ssXrOCo5n^CqWn^w;V4!PY0wfJ1yvO>_45U54*zIJt9gxA}>Eal|aXmRoT7)78&qol`;+02m@e4*&oF literal 0 HcmV?d00001 diff --git a/textures/hdf_7d.png b/textures/hdf_7d.png new file mode 100644 index 0000000000000000000000000000000000000000..863eb9eebf533d89a948403305d7a690141b6483 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c9#0(_&MYQRG1kxRS9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpaf@t zPlzj!27v~K9S;h-feglyAirP+hi5m^K%69RcNeBK?wS-JhqJ&VvKUBvfU(=jY&#%B z)YHW=gyVWLM*>HpK%;Y*N*RYU1A}}dlUU}Qg=IhmswJ)wB`Jv|saDBFsX&Us$iUE8 z*U&)M&?3aZz{<$n%D_O^zywGdMtGZ}Xvob^$xN%nt-*oyGswjZp00i_>zopr01IzP AVgLXD literal 0 HcmV?d00001 diff --git a/textures/hdf_7e.png b/textures/hdf_7e.png new file mode 100644 index 0000000000000000000000000000000000000000..6210ddfda887fdb9e4e06a4f496dd3f5862c6857 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^96-#^#0(^tq@*nXQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!tJ zz$e5NNP|EF!;S}q-9QFoNswPKgTu2MX&_FLx4R2d8h1?!ki%Kv5m^kRJ;2!QWVRiU zA?oSk7{YNqIpF}qq8^^UJ{~^B8Ac3}f{eNuOIXeT6{wcDMwFx^mZVxG7o`Fz1|tJQ zV_ic7T|}#!X&B*cj-nwqKP5A*61N5i*3TdpGkCiCxvX Date: Fri, 18 Oct 2013 04:09:58 -0400 Subject: [PATCH 23/40] Apostrophes got screwed up --- extra_fonts/11px/hdf_27.png | Bin 289 -> 77 bytes extra_fonts/17px/hdf_27.png | Bin 289 -> 77 bytes extra_fonts/25px/hdf_27.png | Bin 289 -> 83 bytes extra_fonts/34px/hdf_27.png | Bin 290 -> 89 bytes textures/hdf_27.png | Bin 289 -> 77 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/extra_fonts/11px/hdf_27.png b/extra_fonts/11px/hdf_27.png index 6bfd9dfc2f8ebeae6c1356ef6c2686a52c4ec63d..02b1d887c47c8dcce914669c92af438ae003e60d 100644 GIT binary patch literal 77 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-V!2%>r-nbtEQX-x%jv*Y^lT&`2KXBj(1M7cD a4rYdsEGDL{S{5omc?M5cKbLh*2~7Z9=n@?O literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEr2qYM0+@4$pq*&4&eH|GXHuiJ>Nn{1`8HOSQx`q9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS{a(@8kkra7|go9 gZXJq--29Zxv`X9>UU!KJ0W~mqy85}Sb4q9e03EeOt^fc4 diff --git a/extra_fonts/17px/hdf_27.png b/extra_fonts/17px/hdf_27.png index dbad65e88d66cb3d383fce0c2ed1e7a34c0f7910..30dcfdd00eb374ef3e3e144e413eaa8f185cfccd 100644 GIT binary patch literal 77 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-f!2%>x6t5KmDG^T>#}JO|$tge1A2@J?f%U(n a1_MLe944lN;=E}O>_45U54*zIJt9gxA}>Eal|aXmRy4NR;I41(_p fJVw!wo1c=IR*74KQp1XPpaup{S3j3^P6zLS{$$WnfRK?)w>gTe~DWM4fOO+UJ literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjV2qYLL6i@a6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OF{)5S4_<9c#}#4RB2 z00X0!QgbYjrCQ<|QIe8al4_M)lnSI6j0_Bobqx)44J|?p46KYStPIR`4NR;I3|PPD fnV@LM%}>cptHiCLWaYFDpaup{S3j3^P6ZO!r>_QVO0fjv*Y^lT&`2KL7+r4m5Zg m8W|Y;Y5%P7!2YlRBZGYtGslB#r!D~1GI+ZBxvXjc?PRtckiqNe;us=vIXOXsbqO;A zqZtFE)YV>bpoD6PYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FOF)*+)vam8W(={-$GB9|Z hto;Nx6t5KmDG^T>#}JO|$tge1A2@J?f%U(n a1_MLe944lN;=E}O>_45U54*zIJt9gxA}>Eal|aXmRy4NR;I41(_p fJVw!wo1c=IR*74KQp1XPpaup{S3j3^P6 Date: Fri, 18 Oct 2013 04:16:05 -0400 Subject: [PATCH 24/40] fonts' left curly braces also got screwed up. --- extra_fonts/11px/hdf_7b.png | Bin 289 -> 92 bytes extra_fonts/17px/hdf_7b.png | Bin 289 -> 101 bytes extra_fonts/25px/hdf_7b.png | Bin 289 -> 107 bytes extra_fonts/34px/hdf_7b.png | Bin 290 -> 124 bytes textures/hdf_7b.png | Bin 289 -> 101 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/extra_fonts/11px/hdf_7b.png b/extra_fonts/11px/hdf_7b.png index 6f135e1cc8447bf1120c254c3e6db05ab972d948..8e2280a1951fdf188a774b2e5d92ed9c69c39478 100644 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~0U|9wnYRKdWltB!5RU7~DG5OE<2=LCf5rv| oh7OE#7^fas&2}!KMUsPI>2(g)-5JYQ1C=v)y85}Sb4q9e0K`fe9{>OV literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEr2qYM0+@4$pq*&4&eH|GXHuiJ>Nn{1`8HOSQx`q9i4;B-JXpC>2OC7#SEE>lzy98d`)H7+4vZS{a(_8kkra7}zXW gDutpUH$NpatrE8e-@mfUfEpM)UHx3vIVCg!0M{Et?f?J) diff --git a/extra_fonts/17px/hdf_7b.png b/extra_fonts/17px/hdf_7b.png index c00c88fcdedc0cbedcd0488099699c5f28f0a298..a2b51ca1f0ca28625008c5fbaf58bc4a696d4765 100644 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c90U|T)mze=69Zwg>5RU7;XBGJv40sM7IQ{Sc zbG{JWIbuS>rx{&;SyV}WU|6;GsC;(x%wMehUK|2ke^0yv>SOS9^>bP0l+XkK)DIns literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^NO>_45U54*zIJt9gxA}>Eal|aXmR_9BR!2%@b+}0NZQbwLGjv*44lT#WR|MLJr&j}ee zH@6f%W@ce#t_8Bw1#gD2u>tvsN130e^(<)SW?*;~%Bi;TLSz9@H-o3EpUXO@geCyP CBpSy6 literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjV2qYLL6i@a6QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OF{)5S4_<9c#}#4RB2 z00X0!QgbYjrCQ<|QIe8al4_M)lnSI6j0_Bobqx)44J|?p46KYStPCu44NR;I3_kCP gyNjYBH$NpatrE9}riafGff^V*UHx3vIVCg!0MIl>bpQYW diff --git a/extra_fonts/34px/hdf_7b.png b/extra_fonts/34px/hdf_7b.png index 20c04eed4d50a3ab71975cb71e12559223e3f974..2714a4633d1f4a1205b857a846a68149eb23c139 100644 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^oIotk!2%@bi|fk*DQ8a?#}JM4S0@?rF(~jb9sKcM z|FP1>wY#*vPqyl9X;GC9OAukWFwu2EXny3L7KU8fa%$y{6|Fz~g@2c3+qRoa Y2CU;WcbUQa7HAxUr>mdKI;Vst06g?4hyVZp literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^Ejc?PRtckiqNe;us=vIXOXsbqO;A zqZtFE)YV>bpoD6PYeY#(Vo9o1a#1RfVlXl=G}bjV&^5FOF)*+)vam9>&^0izGBDU3 g6R;CSLvDUbW?Cg~4W}4ifIP|I>FVdQ&MBb@0M^GtuK)l5 diff --git a/textures/hdf_7b.png b/textures/hdf_7b.png index c00c88fcdedc0cbedcd0488099699c5f28f0a298..a2b51ca1f0ca28625008c5fbaf58bc4a696d4765 100644 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c90U|T)mze=69Zwg>5RU7;XBGJv40sM7IQ{Sc zbG{JWIbuS>rx{&;SyV}WU|6;GsC;(x%wMehUK|2ke^0yv>SOS9^>bP0l+XkK)DIns literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^NO>_45U54*zIJt9gxA}>Eal|aXmR Date: Fri, 18 Oct 2013 06:11:21 -0200 Subject: [PATCH 25/40] Add random checks to see if font changed in the meantime. --- signs_lib.lua | 55 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index b73f96b4..13e8e87f 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -55,6 +55,37 @@ local charwidth = { } -- File to cache the font size to. local CHARDB_FILE = minetest.get_worldpath().."/homedecor_chardb" +local function check_random_chars() + for i = 1, 5 do + local c = math.random(32, 126) + local filename = FONT_FMT:format(TP, c) + local f = io.open(filename) + + -- File does not exist (or cannot be read, or ...). + -- Just assume it's different. + if not f then return true end + + local w, h = read_png_size(f) + f:close() + + -- File is not a PNG... wut? + -- Just assume it's different. + if not (w and h) then return true end + + local ch = string.char(c) + if (not charwidth[ch]) -- Char is not cached. + or (charwidth[ch] ~= w) -- Width differs. + or (LINE_HEIGHT and (LINE_HEIGHT ~= h)) -- Height differs + then + -- In any case, file is different; rebuild cache. + return true + end + end + -- OK, our superficial check passed. If the textures are messed up, + -- it's not our problem. + return false +end + local function build_char_db() LINE_HEIGHT = nil @@ -72,13 +103,14 @@ local function build_char_db() if cdbf then minetest.log("info", "[homedecor] Reading cached character database.") for line in cdbf:lines() do - local ch, w = line:match("(0x[0-9A-Fa-f]+)%s+([0-9][0-9]+)") + local ch, w = line:match("(0x[0-9A-Fa-f]+)%s+([0-9][0-9]*)") if ch and w then - local c = tonumber(ch, 16) + local c = tonumber(ch) w = tonumber(w) + print("*** DEBUG: c="..tostring(c)..", w="..tostring(w)) if c and w then if c == 0 then - LINE_HEIGHT = h + LINE_HEIGHT = w elseif (c >= 32) and (c < 127) then charwidth[string.char(c)] = w total_width = total_width + w @@ -93,8 +125,21 @@ local function build_char_db() -- XXX: Remember to change similar lines below if this changes. SIGN_WIDTH = math.floor((total_width / char_count) * 16) SIGN_PADDING = SIGN_WIDTH / 14 -- Totally arbitrary. - return + + -- Check some random characters to see if the file on disk differs + -- from the cached one. If so, then ditch cached data and rebuild + -- (font probably was changed). + print("*** DEBUG: Randomly checking cache.") + if not check_random_chars() then + print("*** DEBUG: yey all ok.") + return + end + print("*** DEBUG: something's fucked up; rebuild cache.") else + print("[homedecor] Warning:" + .." Could not find font line height in cached DB." + .." Trying brute force." + ) minetest.log("warning", "[homedecor]" .." Could not find font line height in cached DB." .." Trying brute force." @@ -104,6 +149,8 @@ local function build_char_db() -- OK, something went wrong... try brute force loading from texture files. + charwidth = { } + total_width = 0 char_count = 0 LINE_HEIGHT = nil From 40f74beec06c7fd6419ca330133e961a828dbedc Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 18 Oct 2013 06:17:28 -0200 Subject: [PATCH 26/40] Separate lines of sign text a bit. --- signs_lib.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/signs_lib.lua b/signs_lib.lua index 13e8e87f..f21377d8 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -280,7 +280,7 @@ local homedecor_generate_line = function(s, lineno) width = width + w + 1 if width > max_line_w then xpos = start_xpos - ypos = ypos + LINE_HEIGHT + ypos = ypos + (LINE_HEIGHT * 1.05) width = 0 lineno = lineno + 1 end From bcde6ab62b7fc0a1004cc422ef5f58476c50c03d Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 18 Oct 2013 04:48:31 -0400 Subject: [PATCH 27/40] Made spaces much thinner --- extra_fonts/11px/hdf_20.png | Bin 288 -> 69 bytes extra_fonts/17px/hdf_20.png | Bin 289 -> 69 bytes extra_fonts/25px/hdf_20.png | Bin 289 -> 70 bytes extra_fonts/34px/hdf_20.png | Bin 289 -> 72 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/extra_fonts/11px/hdf_20.png b/extra_fonts/11px/hdf_20.png index 9beb9725bcf2271ba399a0947a3cd288a46fd526..942d14c3bc0c1070c814c258eed4f22c861b2fa6 100644 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=!2%?2>*@RfQaqk6jv*Y^lM@!O0eNl=jK^L% Q_yAc9p00i_>zopr0GzT86951J literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#2qYNxmkP}TQY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OGG)5S4_<9c$!0Tu=Z z5eCMmZ5zCR!m1^%5hW>!C8<`)MX5lF!N|bSSl7@%*U%!wz`)AL)XLCO*TBTez#wP- gJ$Dohx%nxXX_dG&$R0}j4b;Hk>FVdQ&MBb@08&InRR910 diff --git a/extra_fonts/17px/hdf_20.png b/extra_fonts/17px/hdf_20.png index 11e46a9b2cbc22526eca61e1a2dc97871fefbb32..ccf056d27cf7b1d1196c2ca16ac79905f383e5f3 100644 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q!2%@P{+{IkQaqk6jv*Y^lM^JEfV`y)jB|vJ RZvnCxJYD@<);T3K0RWsb4gmlF literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa2qYNfHs4qPq*&4&eH|GXHuiJ>Nn{1`8Hv0}~)=7~yS> dq9HdwB{QuOw+08+&)q-`44$rjF6*2UngDiyL*f7c diff --git a/extra_fonts/25px/hdf_20.png b/extra_fonts/25px/hdf_20.png index 3dabea1762ab812afcacc26b19d3f5a96e124686..8c76195eb1901fe004f138ef4973f843a489123e 100644 GIT binary patch literal 70 zcmeAS@N?(olHy`uVBq!ia0vp^>_9BR!2%@b+}0NZOSm|ONL)@%kYN47z`&Tnz<6_; R=oX*^gQu&X%Q~loCIF?X4rc%W literal 289 zcmeAS@N?(olHy`uVBq!ia0vp@KrF!sBp5imy?z2ImUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8W<` zjc?PRtckip~W;uyklJvm_kA6S_2 z|7>MNAWOBxHKHUXu_V$qWphu6{1-oD!M<6^29; diff --git a/extra_fonts/34px/hdf_20.png b/extra_fonts/34px/hdf_20.png index ea4607fd0cc8a95813134ae0a0bd0467076a1e1f..752949f702eec10da632724e16051ac706cfa6f6 100644 GIT binary patch literal 72 zcmeAS@N?(olHy`uVBq!ia0vp^oIotk!2%@bi|fk*DSl5E#}JM4$q5pyiyOQc7?^w+ V82#6+@BvCOc)I$ztaD0e0sx+T4ZHvV literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9f2qYK|X)jO#QY`6?zK#qG8~eHcB(ehejKx9j zP7LeL$-D$|6p}rHd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!uq zB*-tAfuU^jSql&^$=lt9f$?sa@Dd=8v%n*=7)X17vD?XPJ0OF{)5S4_<9c#}1V}>- z1EWx+u{e;WTH+c}l9E`GYL#4+3Zxi}3=EBR4GnY+EkX Date: Fri, 18 Oct 2013 04:49:04 -0400 Subject: [PATCH 28/40] opops, forgot the default one --- textures/hdf_20.png | Bin 289 -> 69 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/textures/hdf_20.png b/textures/hdf_20.png index 11e46a9b2cbc22526eca61e1a2dc97871fefbb32..ccf056d27cf7b1d1196c2ca16ac79905f383e5f3 100644 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1q!2%@P{+{IkQaqk6jv*Y^lM^JEfV`y)jB|vJ RZvnCxJYD@<);T3K0RWsb4gmlF literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRa2qYNfHs4qPq*&4&eH|GXHuiJ>Nn{1`8Hv0}~)=7~yS> dq9HdwB{QuOw+08+&)q-`44$rjF6*2UngDiyL*f7c From a487ffaa160f0713806f5f27c83d9d131a493b83 Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 18 Oct 2013 07:26:16 -0200 Subject: [PATCH 29/40] Some fixes to proportional/HQ font support. --- signs_lib.lua | 84 ++++++++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index f21377d8..afb19189 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -10,8 +10,6 @@ end -- CONSTANTS -local NUMBER_OF_LINES = 6 - local MP = minetest.get_modpath("homedecor") -- Used by `build_char_db' to locate the file. @@ -23,7 +21,7 @@ local FONT_FMT_SIMPLE = "hdf_%02x.png" -- Path to the textures. local TP = MP.."/textures" -local TEXT_SCALE = {x=0.9, y=0.7} +local TEXT_SCALE = {x=0.9, y=0.5} -- Lots of overkill here. KISS advocates, go away, shoo! ;) -- kaeza @@ -48,6 +46,17 @@ local LINE_HEIGHT local SIGN_WIDTH local SIGN_PADDING +-- Size of the canvas, in characters. +-- Please note that CHARS_PER_LINE is multiplied by the average character +-- width to get the total width of the canvas, so for proportional fonts, +-- either more or fewer characters may fit on a line. +local CHARS_PER_LINE = 30 +local NUMBER_OF_LINES = 6 + +-- Separation between lines. 1.0 means no separation (ypos offset by text +-- height), 2.0 is one "line" (ypos offset by two times text height), etc. +local LINE_SEP = 1.2 + -- This holds the individual character widths. -- Indexed by the actual character (e.g. charwidth["A"]) local charwidth = { } @@ -121,18 +130,12 @@ local function build_char_db() end cdbf:close() if LINE_HEIGHT then - -- XXX: Is there a better way to calc this? - -- XXX: Remember to change similar lines below if this changes. - SIGN_WIDTH = math.floor((total_width / char_count) * 16) - SIGN_PADDING = SIGN_WIDTH / 14 -- Totally arbitrary. - -- Check some random characters to see if the file on disk differs -- from the cached one. If so, then ditch cached data and rebuild -- (font probably was changed). print("*** DEBUG: Randomly checking cache.") if not check_random_chars() then print("*** DEBUG: yey all ok.") - return end print("*** DEBUG: something's fucked up; rebuild cache.") else @@ -147,36 +150,41 @@ local function build_char_db() end end - -- OK, something went wrong... try brute force loading from texture files. + if not LINE_HEIGHT then + -- OK, something went wrong... try brute force loading from texture files. - charwidth = { } + charwidth = { } - total_width = 0 - char_count = 0 - LINE_HEIGHT = nil + total_width = 0 + char_count = 0 + LINE_HEIGHT = nil - for c = 32, 126 do - local filename = FONT_FMT:format(TP, c) - local f = io.open(filename) - if f then - local ch = string.char(c) - local w, h = read_png_size(f) - f:close() - if w and h then - charwidth[ch] = w - total_width = total_width + w - char_count = char_count + 1 - if not LINE_HEIGHT then LINE_HEIGHT = h end + for c = 32, 126 do + local filename = FONT_FMT:format(TP, c) + local f = io.open(filename) + if f then + local ch = string.char(c) + local w, h = read_png_size(f) + f:close() + if w and h then + charwidth[ch] = w + total_width = total_width + w + char_count = char_count + 1 + if not LINE_HEIGHT then LINE_HEIGHT = h end + end end end + + if not LINE_HEIGHT then + error("Could not find font line height.") + end + end - if not LINE_HEIGHT then - error("Could not find font line height.") - end - - SIGN_WIDTH = math.floor((total_width / char_count) * 16) - SIGN_PADDING = SIGN_WIDTH / 14 -- Totally arbitrary. + -- XXX: Is there a better way to calc this? + -- XXX: Remember to change similar lines below if this changes. + SIGN_WIDTH = math.floor((total_width / char_count) * CHARS_PER_LINE) + SIGN_PADDING = SIGN_WIDTH / 16 -- Totally arbitrary. -- Try to save cached list back to disk. @@ -206,10 +214,10 @@ local signs = { } local signs_yard = { - {delta = {x = 0, y = 0.05, z = -0.05}, yaw = 0}, - {delta = {x = -0.05, y = 0.05, z = 0}, yaw = math.pi / -2}, - {delta = {x = 0, y = 0.05, z = 0.05}, yaw = math.pi}, - {delta = {x = 0.05, y = 0.05, z = 0}, yaw = math.pi / 2}, + {delta = {x = 0, y = 0.15, z = -0.05}, yaw = 0}, + {delta = {x = -0.05, y = 0.15, z = 0}, yaw = math.pi / -2}, + {delta = {x = 0, y = 0.15, z = 0.05}, yaw = math.pi}, + {delta = {x = 0.05, y = 0.15, z = 0}, yaw = math.pi / 2}, } local signs_post = { @@ -280,7 +288,7 @@ local homedecor_generate_line = function(s, lineno) width = width + w + 1 if width > max_line_w then xpos = start_xpos - ypos = ypos + (LINE_HEIGHT * 1.05) + ypos = ypos + (LINE_HEIGHT * LINE_SEP) width = 0 lineno = lineno + 1 end @@ -303,7 +311,7 @@ local function copy ( t ) end local homedecor_generate_texture = function(lines) - local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, SIGN_WIDTH) } + local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, LINE_HEIGHT * NUMBER_OF_LINES * LINE_SEP) } local lineno = 0 for i = 1, #lines do if lineno >= NUMBER_OF_LINES then break end From d5f5785b13725619d817ef9929bb8e0f8ce1b51a Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 18 Oct 2013 07:29:50 -0200 Subject: [PATCH 30/40] More fixes. Sorry for the separate commits. --- signs_lib.lua | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index afb19189..1b9d7bb0 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -207,24 +207,24 @@ local function build_char_db() end local signs = { - {delta = {x = 0, y = 0, z = 0.399}, yaw = 0}, - {delta = {x = 0.399, y = 0, z = 0 }, yaw = math.pi / -2}, - {delta = {x = 0, y = 0, z = -0.399}, yaw = math.pi}, - {delta = {x = -0.399, y = 0, z = 0 }, yaw = math.pi / 2}, + {delta = {x = 0, y = 0.15, z = 0.399}, yaw = 0}, + {delta = {x = 0.399, y = 0.15, z = 0 }, yaw = math.pi / -2}, + {delta = {x = 0, y = 0.15, z = -0.399}, yaw = math.pi}, + {delta = {x = -0.399, y = 0.15, z = 0 }, yaw = math.pi / 2}, } local signs_yard = { {delta = {x = 0, y = 0.15, z = -0.05}, yaw = 0}, - {delta = {x = -0.05, y = 0.15, z = 0}, yaw = math.pi / -2}, + {delta = {x = -0.05, y = 0.15, z = 0 }, yaw = math.pi / -2}, {delta = {x = 0, y = 0.15, z = 0.05}, yaw = math.pi}, - {delta = {x = 0.05, y = 0.15, z = 0}, yaw = math.pi / 2}, + {delta = {x = 0.05, y = 0.15, z = 0 }, yaw = math.pi / 2}, } local signs_post = { - {delta = {x = 0, y = 0, z = -0.226}, yaw = 0}, - {delta = {x = -0.226, y = 0, z = 0}, yaw = math.pi / -2}, - {delta = {x = 0, y = 0, z = 0.226}, yaw = math.pi}, - {delta = {x = 0.226, y = 0, z = 0}, yaw = math.pi / 2}, + {delta = {x = 0, y = 0.15, z = -0.226}, yaw = 0}, + {delta = {x = -0.226, y = 0.15, z = 0 }, yaw = math.pi / -2}, + {delta = {x = 0, y = 0.15, z = 0.226 }, yaw = math.pi}, + {delta = {x = 0.226, y = 0.15, z = 0 }, yaw = math.pi / 2}, } local sign_groups = {choppy=2, dig_immediate=2} From ebe8adf85521aa22ca0e40083d613cc96966d03a Mon Sep 17 00:00:00 2001 From: kaeza Date: Sat, 19 Oct 2013 22:34:14 -0200 Subject: [PATCH 31/40] Small fixes to signs_lib. --- signs_lib.lua | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 1b9d7bb0..7018e4eb 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -116,7 +116,6 @@ local function build_char_db() if ch and w then local c = tonumber(ch) w = tonumber(w) - print("*** DEBUG: c="..tostring(c)..", w="..tostring(w)) if c and w then if c == 0 then LINE_HEIGHT = w @@ -135,14 +134,13 @@ local function build_char_db() -- (font probably was changed). print("*** DEBUG: Randomly checking cache.") if not check_random_chars() then - print("*** DEBUG: yey all ok.") + LINE_HEIGHT = nil + minetest.log("info", "[homedecor]" + .." Font seems to have changed." + .." Rebuilding cache." + ) end - print("*** DEBUG: something's fucked up; rebuild cache.") else - print("[homedecor] Warning:" - .." Could not find font line height in cached DB." - .." Trying brute force." - ) minetest.log("warning", "[homedecor]" .." Could not find font line height in cached DB." .." Trying brute force." @@ -157,7 +155,6 @@ local function build_char_db() total_width = 0 char_count = 0 - LINE_HEIGHT = nil for c = 32, 126 do local filename = FONT_FMT:format(TP, c) From 10cef3dda1df7e35b4abdc979e7cbf4405092895 Mon Sep 17 00:00:00 2001 From: kaeza Date: Mon, 21 Oct 2013 22:31:54 -0200 Subject: [PATCH 32/40] Use a single `intllib.Getter' for all the texts. Just a minimal code reduction, but big reduction in code duplication. This could help if in the future, support for different "internationalization" mods will be added, or in case Minetest supports I18N/L10N internally in the engine. --- crafts.lua | 9 +-------- door_models.lua | 9 +-------- doors_and_gates.lua | 9 +-------- electronics.lua | 9 +-------- fences.lua | 9 +-------- furnaces.lua | 9 +-------- init.lua | 1 + kitchen_cabinet.lua | 9 +-------- lighting.lua | 9 +-------- locked.lua | 9 +-------- misc_nodes.lua | 9 +-------- nightstands.lua | 9 +-------- ownership.lua | 9 ++------- refrigerator.lua | 9 +-------- shingles.lua | 9 +-------- shutters.lua | 9 +-------- signs_lib.lua | 9 +-------- slopes.lua | 9 +-------- tables.lua | 9 +-------- 19 files changed, 20 insertions(+), 143 deletions(-) diff --git a/crafts.lua b/crafts.lua index 3d5b7cf5..fbc55bfd 100644 --- a/crafts.lua +++ b/crafts.lua @@ -6,14 +6,7 @@ -- License: GPL -- --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext -- misc stuff :D diff --git a/door_models.lua b/door_models.lua index 4578e10c..870a4acf 100644 --- a/door_models.lua +++ b/door_models.lua @@ -1,12 +1,5 @@ --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext homedecor.door_models = { { diff --git a/doors_and_gates.lua b/doors_and_gates.lua index 11d8403e..7bc30d0e 100644 --- a/doors_and_gates.lua +++ b/doors_and_gates.lua @@ -1,13 +1,6 @@ -- Node definitions for Homedecor doors --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext -- doors diff --git a/electronics.lua b/electronics.lua index 018ece45..fefdba38 100644 --- a/electronics.lua +++ b/electronics.lua @@ -1,13 +1,6 @@ -- Various home electronics --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext minetest.register_node('homedecor:speaker', { description = S("Large Stereo Speaker"), diff --git a/fences.lua b/fences.lua index 3953c17e..a7877b93 100644 --- a/fences.lua +++ b/fences.lua @@ -1,13 +1,6 @@ -- This file adds fences of various types --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext minetest.register_node("homedecor:fence_brass", { description = S("Brass Fence/railing"), diff --git a/furnaces.lua b/furnaces.lua index 4150c4eb..9fb0a8b9 100644 --- a/furnaces.lua +++ b/furnaces.lua @@ -1,13 +1,6 @@ -- This code supplies an oven/stove. Basically it's just a copy of the default furnace with different textures. --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext local function hacky_swap_node(pos,name) local node = minetest.get_node(pos) diff --git a/init.lua b/init.lua index d782aba4..f9497d02 100644 --- a/init.lua +++ b/init.lua @@ -27,6 +27,7 @@ if homedecor.intllib_modpath then else S = function ( s ) return s end end +homedecor.gettext = S local dbg = function(s) if homedecor.debug == 1 then diff --git a/kitchen_cabinet.lua b/kitchen_cabinet.lua index 012905c1..084d596d 100644 --- a/kitchen_cabinet.lua +++ b/kitchen_cabinet.lua @@ -1,13 +1,6 @@ -- This file supplies Kitchen cabinets and kitchen sink --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext minetest.register_node('homedecor:kitchen_cabinet', { description = S("Kitchen Cabinet"), diff --git a/lighting.lua b/lighting.lua index 93c0c047..4fbf5d84 100644 --- a/lighting.lua +++ b/lighting.lua @@ -1,14 +1,7 @@ -- This file supplies glowlights --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext local colors = {"yellow","white"} diff --git a/locked.lua b/locked.lua index 506b655f..f05b8426 100644 --- a/locked.lua +++ b/locked.lua @@ -7,14 +7,7 @@ -- License: LGPL -- --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext --[[ | create_locked ( name, infotext ) diff --git a/misc_nodes.lua b/misc_nodes.lua index b3bba7b3..34fce576 100644 --- a/misc_nodes.lua +++ b/misc_nodes.lua @@ -1,13 +1,6 @@ -- Various misc. nodes --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext minetest.register_node('homedecor:ceiling_paint', { description = S("Textured Ceiling Paint"), diff --git a/nightstands.lua b/nightstands.lua index bab2e26b..96fba084 100644 --- a/nightstands.lua +++ b/nightstands.lua @@ -1,13 +1,6 @@ -- This file supplies nightstands --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext minetest.register_node('homedecor:nightstand_oak_one_drawer', { drawtype = "nodebox", diff --git a/ownership.lua b/ownership.lua index 70491d93..a9ca82fa 100644 --- a/ownership.lua +++ b/ownership.lua @@ -1,10 +1,5 @@ -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end + +local S = homedecor.gettext function homedecor:node_is_owned(pos, placer) local ownername = false diff --git a/refrigerator.lua b/refrigerator.lua index 6da80694..a2cffb85 100644 --- a/refrigerator.lua +++ b/refrigerator.lua @@ -1,13 +1,6 @@ -- This file supplies refrigerators --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext minetest.register_node('homedecor:refrigerator', { drawtype = "nodebox", diff --git a/shingles.lua b/shingles.lua index cdce5448..3f1acf7b 100644 --- a/shingles.lua +++ b/shingles.lua @@ -1,13 +1,6 @@ -- Various kidns of shingles --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext minetest.register_node("homedecor:skylight", { description = S("Glass Skylight"), diff --git a/shutters.lua b/shutters.lua index cdabe5e7..ded5a3d5 100644 --- a/shutters.lua +++ b/shutters.lua @@ -1,13 +1,6 @@ -- Various kinds of window shutters --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext local shutters = { {"oak", "Unpainted oak"}, diff --git a/signs_lib.lua b/signs_lib.lua index 7018e4eb..f988a489 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -1,12 +1,5 @@ --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext -- CONSTANTS diff --git a/slopes.lua b/slopes.lua index 60da99b8..1436fab4 100644 --- a/slopes.lua +++ b/slopes.lua @@ -1,13 +1,6 @@ -- Various kinds of shingles --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext -- Corner shingle nodes, courtesy Bas080 diff --git a/tables.lua b/tables.lua index f39b8937..fcdcac86 100644 --- a/tables.lua +++ b/tables.lua @@ -1,13 +1,6 @@ -- Various kinds of tables --- Boilerplate to support localized strings if intllib mod is installed. -local S -if homedecor.intllib_modpath then - dofile(homedecor.intllib_modpath.."/intllib.lua") - S = intllib.Getter(minetest.get_current_modname()) -else - S = function ( s ) return s end -end +local S = homedecor.gettext materials = { {"glass","Glass"}, From 0931923900e9f94391dbbdac7f2a08173a59371a Mon Sep 17 00:00:00 2001 From: kaeza Date: Mon, 21 Oct 2013 22:50:45 -0200 Subject: [PATCH 33/40] Some I18N cleanup. --- furniture_bathroom.lua | 12 +++++++----- furniture_medieval.lua | 10 ++++++---- locale/es.txt | 20 +++++++++++++++++--- locale/template.txt | 20 +++++++++++++++++--- signs_lib.lua | 15 ++++++--------- 5 files changed, 53 insertions(+), 24 deletions(-) diff --git a/furniture_bathroom.lua b/furniture_bathroom.lua index 2c5657f1..80e4138f 100644 --- a/furniture_bathroom.lua +++ b/furniture_bathroom.lua @@ -1,6 +1,8 @@ +local S = homedecor.gettext + minetest.register_node("homedecor:toilet", { - description = "Toilet", + description = S("Toilet"), tiles = { "forniture_marble.png", "forniture_marble.png", "forniture_marble_s1.png", "forniture_marble_s1.png", @@ -69,7 +71,7 @@ minetest.register_node("homedecor:toilet_open", { --Sink minetest.register_node("homedecor:sink", { - description = "Sink", + description = S("Sink"), tiles = { "forniture_marble_top_sink.png", "forniture_marble.png", "forniture_marble_sb1.png", "forniture_marble_sb1.png", @@ -103,7 +105,7 @@ minetest.register_node("homedecor:sink", { --Taps minetest.register_node("homedecor:taps", { - description = "Taps", + description = S("Taps"), tiles = { "forniture_metal.png", "forniture_metal.png", "forniture_metal_s1.png", "forniture_metal_s1.png", @@ -138,7 +140,7 @@ minetest.register_node("homedecor:taps", { --Shower Tray minetest.register_node("homedecor:shower_tray", { - description = "Shower Tray", + description = S("Shower Tray"), tiles = { "forniture_marble_base_ducha_top.png", "forniture_marble_base_ducha_top.png", @@ -172,7 +174,7 @@ minetest.register_node("homedecor:shower_tray", { --Shower Head minetest.register_node("homedecor:shower_head", { - description = "Shower Head", + description = S("Shower Head"), tiles = { "forniture_metal.png", "forniture_metal.png", diff --git a/furniture_medieval.lua b/furniture_medieval.lua index 9eebd8cd..a2c7bc1d 100644 --- a/furniture_medieval.lua +++ b/furniture_medieval.lua @@ -1,6 +1,8 @@ +local S = homedecor.gettext + minetest.register_node("homedecor:bars", { - description = "Bars", + description = S("Bars"), tiles = { "forniture_black_metal.png", "forniture_black_metal.png", @@ -32,7 +34,7 @@ minetest.register_node("homedecor:bars", { --L Binding Bars minetest.register_node("homedecor:L_binding_bars", { - description = "Binding Bars", + description = S("Binding Bars"), tiles = { "forniture_black_metal.png", "forniture_black_metal.png", @@ -61,7 +63,7 @@ minetest.register_node("homedecor:L_binding_bars", { }) minetest.register_node("homedecor:chains", { - description = "Chains", + description = S("Chains"), tiles = { "forniture_black_metal.png", "forniture_black_metal.png", @@ -136,7 +138,7 @@ minetest.register_node("homedecor:chains", { }) minetest.register_node("homedecor:torch_wall", { - description = "Torch Wall", + description = S("Wall Torch"), drawtype = "nodebox", tiles = { "forniture_torch_wall_s.png", diff --git a/locale/es.txt b/locale/es.txt index 49ec8aef..0baac0ba 100644 --- a/locale/es.txt +++ b/locale/es.txt @@ -62,6 +62,19 @@ Wrought Iron Fence/railing = Cerca/Barandilla de Hierro Forjado Wrought Iron Fence/railing with sign = Cerca/Barandilla de Hierro Forjado con Letrero want to simply place the wielded item like usual. = solo se desea colocar el objeto empuñado normalmente. +### furniture_medieval.lua ### +Bars = Barras +Binding Bars = Barras de Unión +Chains = Cadenas +Wall Torch = Antorcha de Pared + +### furniture_bathroom.lua ### +Toilet = Inodoro +Sink = Lavabo +Taps = Grifo +Shower Tray = Piso de Ducha +Shower Head = Ducha + ### init.lua ### Loaded! = ¡Cargado! Asphalt Shingles = Tejas de Asfalto @@ -173,8 +186,9 @@ Not enough vertical space to place a refrigerator! = ¡No hay suficiente espacio Small CRT Television = Pequeña Televisión CRT ### signs_lib.lua ### -E: character map file not found = E: archivo de mapa de caracteres no encontrado -## 1: Full String, 2: pos in string, 3: current char at pos -W: unknown symbol in '%s' at %d (probably %s) = A: símbolo desconocido en '%s' posición %d (probablemente %s) %s wrote "%s" to sign at %s = %s ha escrito "%s" en el letrero en %s +Reading cached character database. = Leyendo base de datos de catacteres. +Font seems to have changed. Rebuilding cache. = La fuente parece haber cambiado. Reconstruyendo información guardada. +Could not find font line height in cached DB. Trying brute force. = No se pudo encontrar la altura de línea en la base de datos. Intentando con fuerza bruta. +Registered %s and %s = Registrados %s y %s signs loaded = letreros cargados diff --git a/locale/template.txt b/locale/template.txt index 7a82f3a3..fd1b64b5 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -68,6 +68,19 @@ Wrought Iron Fence/railing = Wrought Iron Fence/railing with sign = want to simply place the wielded item like usual. = +### furniture_medieval.lua ### +Bars = +Binding Bars = +Chains = +Wall Torch = + +### furniture_bathroom.lua ### +Toilet = +Sink = +Taps = +Shower Tray = +Shower Head = + ### init.lua ### Loaded! = Asphalt Shingles = @@ -177,8 +190,9 @@ Not enough vertical space to place a refrigerator! = Small CRT Television = ### signs_lib.lua ### -E: character map file not found = -## 1: Full String, 2: pos in string, 3: current char at pos -W: unknown symbol in '%s' at %d (probably %s) = %s wrote "%s" to sign at %s = +Reading cached character database. = +Font seems to have changed. Rebuilding cache. = +Could not find font line height in cached DB. Trying brute force. = +Registered %s and %s = signs loaded = diff --git a/signs_lib.lua b/signs_lib.lua index f988a489..8db7abf1 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -103,7 +103,7 @@ local function build_char_db() local cdbf = io.open(CHARDB_FILE, "rt") if cdbf then - minetest.log("info", "[homedecor] Reading cached character database.") + minetest.log("info", "[homedecor] "..S("Reading cached character database.")) for line in cdbf:lines() do local ch, w = line:match("(0x[0-9A-Fa-f]+)%s+([0-9][0-9]*)") if ch and w then @@ -125,18 +125,15 @@ local function build_char_db() -- Check some random characters to see if the file on disk differs -- from the cached one. If so, then ditch cached data and rebuild -- (font probably was changed). - print("*** DEBUG: Randomly checking cache.") if not check_random_chars() then LINE_HEIGHT = nil - minetest.log("info", "[homedecor]" - .." Font seems to have changed." - .." Rebuilding cache." + minetest.log("info", "[homedecor] " + ..S("Font seems to have changed. Rebuilding cache.") ) end else - minetest.log("warning", "[homedecor]" - .." Could not find font line height in cached DB." - .." Trying brute force." + minetest.log("warning", "[homedecor] " + ..S("Could not find font line height in cached DB. Trying brute force.") ) end end @@ -641,7 +638,7 @@ function homedecor.register_fence_with_sign(fencename, fencewithsignname) def_sign.drop = "default:sign_wall" minetest.register_node(":"..fencename, def) minetest.register_node(":"..fencewithsignname, def_sign) - print("Registered "..fencename.." and "..fencewithsignname) + print(S("Registered %s and %s"):format(fencename, fencewithsignname)) end build_char_db() From eb1ccc3caad94eee2a29c4e05787d6d3c2330740 Mon Sep 17 00:00:00 2001 From: kaeza Date: Wed, 23 Oct 2013 08:29:59 -0200 Subject: [PATCH 34/40] We don't need no padding! Why have padding at sides when we can change text scale? Better change just in one place. --- signs_lib.lua | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 8db7abf1..0ac301c9 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -14,7 +14,7 @@ local FONT_FMT_SIMPLE = "hdf_%02x.png" -- Path to the textures. local TP = MP.."/textures" -local TEXT_SCALE = {x=0.9, y=0.5} +local TEXT_SCALE = {x=0.8, y=0.5} -- Lots of overkill here. KISS advocates, go away, shoo! ;) -- kaeza @@ -37,7 +37,6 @@ end -- Set by build_char_db() local LINE_HEIGHT local SIGN_WIDTH -local SIGN_PADDING -- Size of the canvas, in characters. -- Please note that CHARS_PER_LINE is multiplied by the average character @@ -92,7 +91,6 @@ local function build_char_db() LINE_HEIGHT = nil SIGN_WIDTH = nil - SIGN_PADDING = nil -- To calculate average char width. local total_width = 0 @@ -169,9 +167,7 @@ local function build_char_db() end -- XXX: Is there a better way to calc this? - -- XXX: Remember to change similar lines below if this changes. SIGN_WIDTH = math.floor((total_width / char_count) * CHARS_PER_LINE) - SIGN_PADDING = SIGN_WIDTH / 16 -- Totally arbitrary. -- Try to save cached list back to disk. @@ -239,17 +235,16 @@ local homedecor_generate_line = function(s, lineno) local chars = { } - local max_line_w = SIGN_WIDTH - (SIGN_PADDING * 2) - -- We check which chars are available here. for i = 1, #s do local c = s:sub(i, i) local w = charwidth[c] if w then width = width + w + 1 - maxw = math_max(width, maxw) - if width >= max_line_w then + if width >= SIGN_WIDTH then width = 0 + else + maxw = math_max(width, maxw) end table.insert(chars, c) end @@ -259,7 +254,7 @@ local homedecor_generate_line = function(s, lineno) -- Okay, we actually build the "line texture" here. - local start_xpos = math.floor((SIGN_WIDTH - 2 * SIGN_PADDING - maxw) / 2 + SIGN_PADDING) + local start_xpos = math.floor((SIGN_WIDTH - maxw) / 2) local xpos = start_xpos local texture = { } local ypos = (LINE_HEIGHT * (lineno --[[+ 1]])) @@ -273,7 +268,7 @@ local homedecor_generate_line = function(s, lineno) table.insert(texture, (":%d,%d=%s"):format(xpos, ypos, tex)) xpos = xpos + w + 1 width = width + w + 1 - if width > max_line_w then + if width > maxw then xpos = start_xpos ypos = ypos + (LINE_HEIGHT * LINE_SEP) width = 0 From b4a16205f3903c0d4914c7160d6861cb845a210d Mon Sep 17 00:00:00 2001 From: kaeza Date: Thu, 24 Oct 2013 16:49:36 -0200 Subject: [PATCH 35/40] Fix signs_lib on Windows. It seems `io.open' by default opens files as text, which fails on Windows when the file is a binary file. This prevented signs_lib from opening the texture files and get the font size, which resulted in an error. --- signs_lib.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 0ac301c9..1319eb90 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -60,7 +60,7 @@ local function check_random_chars() for i = 1, 5 do local c = math.random(32, 126) local filename = FONT_FMT:format(TP, c) - local f = io.open(filename) + local f = io.open(filename, "rb") -- File does not exist (or cannot be read, or ...). -- Just assume it's different. @@ -146,7 +146,7 @@ local function build_char_db() for c = 32, 126 do local filename = FONT_FMT:format(TP, c) - local f = io.open(filename) + local f = io.open(filename, "rb") if f then local ch = string.char(c) local w, h = read_png_size(f) From 8c2ee97b8fd9d31a0b0ca3e05a762e89225ea88d Mon Sep 17 00:00:00 2001 From: kaeza Date: Thu, 24 Oct 2013 19:52:33 -0200 Subject: [PATCH 36/40] Simplify a bit the code. --- signs_lib.lua | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 1319eb90..8c5f0fce 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -23,14 +23,20 @@ local PNG_HDR = string.char(0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A) -- Read the image size from a PNG file. -- Returns image_w, image_h. -- Only the LSB is read from each field! -local function read_png_size(f) +local function read_char_size(c) + local filename = FONT_FMT:format(TP, c) + local f = io.open(filename, "rb") f:seek("set", 0x0) local hdr = f:read(8) - if hdr ~= PNG_HDR then return end + if hdr ~= PNG_HDR then + f:close() + return + end f:seek("set", 0x13) local ws = f:read(1) f:seek("set", 0x17) local hs = f:read(1) + f:close() return ws:byte(), hs:byte() end @@ -59,18 +65,9 @@ local CHARDB_FILE = minetest.get_worldpath().."/homedecor_chardb" local function check_random_chars() for i = 1, 5 do local c = math.random(32, 126) - local filename = FONT_FMT:format(TP, c) - local f = io.open(filename, "rb") - - -- File does not exist (or cannot be read, or ...). - -- Just assume it's different. - if not f then return true end - - local w, h = read_png_size(f) - f:close() + local w, h = read_char_size(c) -- File is not a PNG... wut? - -- Just assume it's different. if not (w and h) then return true end local ch = string.char(c) @@ -145,18 +142,13 @@ local function build_char_db() char_count = 0 for c = 32, 126 do - local filename = FONT_FMT:format(TP, c) - local f = io.open(filename, "rb") - if f then + local w, h = read_char_size(c) + if w and h then local ch = string.char(c) - local w, h = read_png_size(f) - f:close() - if w and h then - charwidth[ch] = w - total_width = total_width + w - char_count = char_count + 1 - if not LINE_HEIGHT then LINE_HEIGHT = h end - end + charwidth[ch] = w + total_width = total_width + w + char_count = char_count + 1 + if not LINE_HEIGHT then LINE_HEIGHT = h end end end From a963352793e7272090c1d689a2e1b66f97c94a17 Mon Sep 17 00:00:00 2001 From: kaeza Date: Thu, 24 Oct 2013 20:30:26 -0200 Subject: [PATCH 37/40] Fix inverted conditional. Also document function return value. It's kinda misleading, my bad. --- signs_lib.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/signs_lib.lua b/signs_lib.lua index 8c5f0fce..61d81cdc 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -62,6 +62,7 @@ local charwidth = { } -- File to cache the font size to. local CHARDB_FILE = minetest.get_worldpath().."/homedecor_chardb" +-- Returns true if any file differs from cached one. local function check_random_chars() for i = 1, 5 do local c = math.random(32, 126) @@ -120,7 +121,7 @@ local function build_char_db() -- Check some random characters to see if the file on disk differs -- from the cached one. If so, then ditch cached data and rebuild -- (font probably was changed). - if not check_random_chars() then + if check_random_chars() then LINE_HEIGHT = nil minetest.log("info", "[homedecor] " ..S("Font seems to have changed. Rebuilding cache.") From 119f8fe4945f7009b0af2a439bd6451a9eb5ca73 Mon Sep 17 00:00:00 2001 From: kaeza Date: Thu, 24 Oct 2013 23:32:37 -0200 Subject: [PATCH 38/40] Add proper word-wrapping. Also cleaned up a bit code. --- signs_lib.lua | 116 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 46 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index 61d81cdc..10ab338e 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -209,65 +209,80 @@ local fences_with_sign = { } -- some local helper functions -local homedecor_create_lines = function(text) - local tab = {} - for line in text:gmatch("([^|]+)|?") do - line = line:gsub("^%s*(.*)%s*$", "%1") -- Trim whitespace - table.insert(tab, line) - if #tab >= NUMBER_OF_LINES then break end +local function split_lines_and_words(text) + local lines = { } + local line = { } + for word in text:gmatch("%S+") do + if word == "|" then + table.insert(lines, line) + if #lines >= NUMBER_OF_LINES then break end + line = { } + elseif word == "\\|" then + table.insert(line, "|") + else + table.insert(line, word) + end end - return tab + table.insert(lines, line) + return lines end local math_max = math.max -local homedecor_generate_line = function(s, lineno) +local function make_line_texture(line, lineno) local width = 0 local maxw = 0 - local chars = { } + local words = { } -- We check which chars are available here. - for i = 1, #s do - local c = s:sub(i, i) - local w = charwidth[c] - if w then - width = width + w + 1 - if width >= SIGN_WIDTH then - width = 0 - else - maxw = math_max(width, maxw) + for word_i, word in ipairs(line) do + local chars = { } + local ch_offs = 0 + for i = 1, #word do + local c = word:sub(i, i) + local w = charwidth[c] + if w then + width = width + w + 1 + if width >= SIGN_WIDTH then + width = 0 + else + maxw = math_max(width, maxw) + end + table.insert(chars, { + off=ch_offs, + tex=FONT_FMT_SIMPLE:format(c:byte()) + }) + ch_offs = ch_offs + w + 1 end - table.insert(chars, c) end + width = width + charwidth[" "] + 1 + maxw = math_max(width, maxw) + table.insert(words, { chars=chars, w=ch_offs }) end - maxw = maxw - 1 - -- Okay, we actually build the "line texture" here. - local start_xpos = math.floor((SIGN_WIDTH - maxw) / 2) - local xpos = start_xpos local texture = { } - local ypos = (LINE_HEIGHT * (lineno --[[+ 1]])) - width = 0 + local start_xpos = math.floor((SIGN_WIDTH - maxw) / 2) - for i = 1, #s do - local c = s:sub(i, i) - local w = charwidth[c] - local tex = FONT_FMT_SIMPLE:format(c:byte()) - table.insert(texture, (":%d,%d=%s"):format(xpos, ypos, tex)) - xpos = xpos + w + 1 - width = width + w + 1 - if width > maxw then + local xpos = start_xpos + local ypos = (LINE_HEIGHT * lineno) + + for word_i, word in ipairs(words) do + local xoffs = (xpos - start_xpos) + if (xoffs > 0) and ((xoffs + word.w) > maxw) then xpos = start_xpos ypos = ypos + (LINE_HEIGHT * LINE_SEP) - width = 0 lineno = lineno + 1 + if lineno >= NUMBER_OF_LINES then break end end - if lineno >= NUMBER_OF_LINES then break end + for ch_i, ch in ipairs(word.chars) do + table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex)) + end + xpos = xpos + word.w + charwidth[" "] end return table.concat(texture, ""), lineno @@ -285,21 +300,21 @@ local function copy ( t ) return nt end -local homedecor_generate_texture = function(lines) - local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, LINE_HEIGHT * NUMBER_OF_LINES * LINE_SEP) } - local lineno = 0 - for i = 1, #lines do +local function make_sign_texture(lines) + local texture = { ("[combine:%dx%d"):format(SIGN_WIDTH, LINE_HEIGHT * NUMBER_OF_LINES * LINE_SEP) } + local lineno = 0 + for i = 1, #lines do if lineno >= NUMBER_OF_LINES then break end - local linetex, ln = homedecor_generate_line(lines[i], lineno) - table.insert(texture, linetex) - lineno = ln + 1 - end - return table.concat(texture, "") + local linetex, ln = make_line_texture(lines[i], lineno) + table.insert(texture, linetex) + lineno = ln + 1 + end + return table.concat(texture, "") end local function set_obj_text(obj, text) obj:set_properties({ - textures={homedecor_generate_texture(homedecor_create_lines(text))}, + textures={make_sign_texture(split_lines_and_words(text))}, visual_size = TEXT_SCALE, }) end @@ -319,10 +334,19 @@ homedecor.destruct_sign = function(pos) end end +local function make_infotext(text) + local lines = split_lines_and_words(text) + local lines2 = { } + for _, line in ipairs(lines) do + table.insert(lines2, table.concat(line, " ")) + end + return table.concat(lines2, "\n") +end + homedecor.update_sign = function(pos, fields) local meta = minetest.get_meta(pos) if fields then - meta:set_string("infotext", table.concat(homedecor_create_lines(fields.text), "\n")) + meta:set_string("infotext", make_infotext(fields.text)) meta:set_string("text", fields.text) end local text = meta:get_string("text") From 3e6fb4a91178b1313f2f0a10d4cef49819863711 Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 25 Oct 2013 00:10:00 -0200 Subject: [PATCH 39/40] I fux, I fix. --- signs_lib.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/signs_lib.lua b/signs_lib.lua index 10ab338e..dc8149cb 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -245,7 +245,7 @@ local function make_line_texture(line, lineno) local w = charwidth[c] if w then width = width + w + 1 - if width >= SIGN_WIDTH then + if width >= (SIGN_WIDTH - charwidth[" "]) then width = 0 else maxw = math_max(width, maxw) From 39655c4f5d6657a8cc2359683953c2c1ae2e48c7 Mon Sep 17 00:00:00 2001 From: kaeza Date: Fri, 25 Oct 2013 17:22:14 -0200 Subject: [PATCH 40/40] Remove reference to deprecated method `get_entity_name'. --- signs_lib.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/signs_lib.lua b/signs_lib.lua index dc8149cb..9c4b449b 100644 --- a/signs_lib.lua +++ b/signs_lib.lua @@ -328,7 +328,8 @@ end homedecor.destruct_sign = function(pos) local objects = minetest.get_objects_inside_radius(pos, 0.5) for _, v in ipairs(objects) do - if v:get_entity_name() == "signs:text" then + local e = v:get_luaentity() + if e and e.name == "signs:text" then v:remove() end end @@ -352,7 +353,8 @@ homedecor.update_sign = function(pos, fields) local text = meta:get_string("text") local objects = minetest.get_objects_inside_radius(pos, 0.5) for _, v in ipairs(objects) do - if v:get_entity_name() == "signs:text" then + local e = v:get_luaentity() + if e and e.name == "signs:text" then set_obj_text(v, text) return end